Skip to content

Commit 4e4b8b3

Browse files
committed
feat: Fix RDS multitenant S3 locations and table structure
- Update Athena tables to match actual S3 data partitioning structure - Add payer_id and region partition keys to support multi-account data - Configure Parquet SerDe for proper data format handling - Remove predefined Glue tables, let crawlers auto-discover schema - Add hourly_ prefix to separate crawler table creation - Update pi_data_view to reference hourly_rds_multitenant table - Update deployment templates to support RDS multitenant module
1 parent 9afe7cb commit 4e4b8b3

File tree

5 files changed

+524
-176
lines changed

5 files changed

+524
-176
lines changed

data-collection/deploy/deploy-data-collection.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ Conditions:
347347
- !Condition DeployServiceQuotasModule
348348
- !Condition DeployEUCUtilizationModule
349349
- !Condition DeployComputeOptimizerModule
350+
- !Condition DeployRdsMultitenantModule
350351
RegionsInScopeIsEmpty: !Equals
351352
- !Join [ '', !Split [ ' ', !Ref RegionsInScope ] ] # remove spaces
352353
- ""
@@ -1540,7 +1541,7 @@ Resources:
15401541
Type: AWS::CloudFormation::Stack
15411542
Condition: DeployRdsMultitenantModule
15421543
Properties:
1543-
TemplateURL: !Sub "https://${CFNSourceBucket}.s3.${AWS::URLSuffix}/cfn/data-collection/v3.12.0/module-rds-multitenant.yaml"
1544+
TemplateURL: "https://dcoccia-test-static-website.s3.eu-central-1.amazonaws.com/module-rds-multitenant.yaml"
15441545
Parameters:
15451546
DatabaseName: !Ref DatabaseName
15461547
DataBucketsKmsKeysArns: !Ref DataBucketsKmsKeysArns
@@ -1550,8 +1551,10 @@ Resources:
15501551
GlueRoleARN: !GetAtt GlueRole.Arn
15511552
ResourcePrefix: !Ref ResourcePrefix
15521553
LambdaAnalyticsARN: !GetAtt LambdaAnalytics.Arn
1554+
MultiAccountRoleName: !Sub "${ResourcePrefix}${MultiAccountRoleName}"
1555+
AccountCollectorLambdaARN: !Sub "${AccountCollector.Outputs.LambdaFunctionARN}"
15531556
CodeBucket: !If [ ProdCFNTemplateUsed, !FindInMap [RegionMap, !Ref "AWS::Region", CodeBucket], !Ref CFNSourceBucket ]
1554-
StepFunctionTemplate: !FindInMap [StepFunctionCode, standalone-state-machine, TemplatePath]
1557+
StepFunctionTemplate: !FindInMap [StepFunctionCode, main-state-machine, TemplatePath]
15551558
StepFunctionExecutionRoleARN: !GetAtt StepFunctionExecutionRole.Arn
15561559
SchedulerExecutionRoleARN: !GetAtt SchedulerExecutionRole.Arn
15571560
RegionsInScope:

data-collection/deploy/deploy-data-read-permissions.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Metadata:
3333
- IncludeLicenseManagerModule
3434
- IncludeServiceQuotasModule
3535
- IncludeResilienceHubModule
36+
- IncludeRdsMultitenantModule
3637
ParameterLabels:
3738
ManagementAccountRole:
3839
default: "Management account role"
@@ -191,6 +192,11 @@ Parameters:
191192
Description: Collects Resilience Hub information
192193
AllowedValues: ['yes', 'no']
193194
Default: 'no'
195+
IncludeRdsMultitenantModule:
196+
Type: String
197+
Description: Collects RDS Performance Insights data for multi-tenant cost allocation
198+
AllowedValues: ['yes', 'no']
199+
Default: 'no'
194200
Conditions:
195201
DeployModuleReadInMgmt: !Equals [!Ref AllowModuleReadInMgmt, "yes"]
196202

@@ -230,6 +236,7 @@ Resources:
230236
IncludeTransitGatewayModule: !Ref IncludeTransitGatewayModule
231237
IncludeServiceQuotasModule: !Ref IncludeServiceQuotasModule
232238
IncludeResilienceHubModule: !Ref IncludeResilienceHubModule
239+
233240

234241
DataCollectorOrgAccountModulesReadStackSet:
235242
Type: AWS::CloudFormation::StackSet
@@ -272,6 +279,8 @@ Resources:
272279
ParameterValue: !Ref IncludeServiceQuotasModule
273280
- ParameterKey: IncludeResilienceHubModule
274281
ParameterValue: !Ref IncludeResilienceHubModule
282+
- ParameterKey: IncludeRdsMultitenantModule
283+
ParameterValue: !Ref IncludeRdsMultitenantModule
275284
StackInstancesGroup:
276285
- DeploymentTargets:
277286
OrganizationalUnitIds: !Split [",", !Ref OrganizationalUnitIds]

data-collection/deploy/deploy-in-linked-account.yaml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Metadata:
2222
- IncludeTransitGatewayModule
2323
- IncludeServiceQuotasModule
2424
- IncludeResilienceHubModule
25+
- IncludeRdsMultitenantModule
2526
ParameterLabels:
2627
DataCollectionAccountID:
2728
default: 'Data Collection Account ID'
@@ -49,6 +50,8 @@ Metadata:
4950
default: 'Include Service Quotas Module'
5051
IncludeResilienceHubModule:
5152
default: 'Include Resilience Hub Module'
53+
IncludeRdsMultitenantModule:
54+
default: 'Include RDS Multitenant Module'
5255

5356
Parameters:
5457
DataCollectionAccountID:
@@ -112,6 +115,11 @@ Parameters:
112115
Description: Collects Resilience Hub data from your accounts
113116
AllowedValues: ['yes', 'no']
114117
Default: 'no'
118+
IncludeRdsMultitenantModule:
119+
Type: String
120+
Description: Collects RDS Performance Insights data for multi-tenant cost allocation
121+
AllowedValues: ['yes', 'no']
122+
Default: 'no'
115123

116124
Conditions:
117125
IncludeTAModulePolicy: !Equals [!Ref IncludeTAModule, "yes"]
@@ -124,6 +132,7 @@ Conditions:
124132
IncludeTransitGatewayModulePolicy: !Equals [!Ref IncludeTransitGatewayModule, "yes"]
125133
IncludeServiceQuotasModulePolicy: !Equals [!Ref IncludeServiceQuotasModule, "yes"]
126134
IncludeResilienceHubModulePolicy: !Equals [!Ref IncludeResilienceHubModule, "yes"]
135+
IncludeRdsMultitenantModulePolicy: !Equals [!Ref IncludeRdsMultitenantModule, "yes"]
127136

128137
Outputs:
129138
LambdaRole:
@@ -155,6 +164,7 @@ Resources:
155164
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}support-cases-LambdaRole"
156165
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}service-quotas-LambdaRole"
157166
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}resilience-hub-LambdaRole"
167+
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}RDSMultitenant-Lambda-Role"
158168
Path: /
159169
Metadata:
160170
cfn_nag:
@@ -460,6 +470,31 @@ Resources:
460470
Resource: "*" # Wildcard required as actions do not support resource-level permissions
461471
Roles:
462472
- Ref: LambdaRole
473+
Metadata:
474+
cfn_nag:
475+
rules_to_suppress:
476+
- id: W12
477+
reason: "Policy is used for scanning of a wide range of resources"
478+
# RDS Multitenant policy
479+
RdsMultitenantPolicy:
480+
Type: 'AWS::IAM::Policy'
481+
Condition: IncludeRdsMultitenantModulePolicy
482+
Properties:
483+
PolicyName: RdsMultitenantPolicy
484+
PolicyDocument:
485+
Version: "2012-10-17"
486+
Statement:
487+
- Effect: "Allow"
488+
Action:
489+
- "rds:DescribeDBInstances"
490+
Resource: !Sub "arn:${AWS::Partition}:rds:*:${AWS::AccountId}:db:*"
491+
- Effect: "Allow"
492+
Action:
493+
- "pi:GetResourceMetrics"
494+
- "ec2:DescribeRegions"
495+
Resource: "*"
496+
Roles:
497+
- Ref: LambdaRole
463498
Metadata:
464499
cfn_nag:
465500
rules_to_suppress:

data-collection/deploy/deploy-in-management-account.yaml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Metadata:
1818
- IncludeHealthEventsModule
1919
- IncludeRightsizingModule
2020
- IncludeLicenseManagerModule
21+
- IncludeRdsMultitenantModule
2122
- IncludeServiceQuotasModule
2223
ParameterLabels:
2324
ManagementAccountRole:
@@ -38,6 +39,8 @@ Metadata:
3839
default: "Include Health Events Module"
3940
IncludeLicenseManagerModule:
4041
default: "Include Marketplace Licensing Module"
42+
IncludeRdsMultitenantModule:
43+
default: "Include RDS Multi-tenant Module"
4144
IncludeServiceQuotasModule:
4245
default: "Include Service Quotas Module"
4346
Parameters:
@@ -82,6 +85,11 @@ Parameters:
8285
Description: Collects Marketplace Licensing Information from your accounts
8386
AllowedValues: ['yes', 'no']
8487
Default: 'no'
88+
IncludeRdsMultitenantModule:
89+
Type: String
90+
Description: Collects RDS Multi-tenant Performance Insights data from your accounts
91+
AllowedValues: ['yes', 'no']
92+
Default: 'no'
8593
IncludeServiceQuotasModule:
8694
Type: String
8795
Description: Collects Service Quotas Information from your accounts
@@ -95,6 +103,7 @@ Conditions:
95103
EnableBackupModule: !Equals [!Ref IncludeBackupModule, "yes"]
96104
EnableHealthEventsModule: !Equals [!Ref IncludeHealthEventsModule, "yes"]
97105
EnableLicenseManagerModule: !Equals [!Ref IncludeLicenseManagerModule, "yes"]
106+
EnableRdsMultitenantModule: !Equals [!Ref IncludeRdsMultitenantModule, "yes"]
98107
EnableServiceQuotasModule: !Equals [!Ref IncludeServiceQuotasModule, "yes"]
99108

100109
Outputs:
@@ -128,6 +137,7 @@ Resources:
128137
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}backup-LambdaRole"
129138
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}health-events-LambdaRole"
130139
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}license-manager-LambdaRole"
140+
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}rds-multitenant-LambdaRole"
131141
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}RLS-LambdaRole"
132142
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}service-quotas-LambdaRole"
133143
Path: /
@@ -339,6 +349,29 @@ Resources:
339349
rules_to_suppress:
340350
- id: W12
341351
reason: "Policy is used for scanning of a wide range of resources"
352+
RdsMultitenantPolicy:
353+
Type: "AWS::IAM::Policy"
354+
Condition: EnableRdsMultitenantModule
355+
Properties:
356+
PolicyName: RdsMultitenantPolicy
357+
PolicyDocument:
358+
Version: "2012-10-17"
359+
Statement:
360+
- Effect: "Allow"
361+
Action:
362+
- "pi:GetResourceMetrics"
363+
- "pi:DescribeDimensionKeys"
364+
- "pi:GetDimensionKeyDetails"
365+
- "rds:DescribeDBInstances"
366+
- "rds:DescribeDBClusters"
367+
Resource: "*"
368+
Roles:
369+
- Ref: LambdaRole
370+
Metadata:
371+
cfn_nag:
372+
rules_to_suppress:
373+
- id: W12
374+
reason: "Policy is used for scanning of a wide range of resources"
342375
ServiceQuotasPolicy:
343376
Type: "AWS::IAM::Policy"
344377
Condition: EnableServiceQuotasModule

0 commit comments

Comments
 (0)