Skip to content

Commit 4f2ab77

Browse files
authored
Additional functionality to Capture WorkSpaces Cloudwatch Metrics (#305)
1 parent 25034cb commit 4f2ab77

File tree

6 files changed

+772
-0
lines changed

6 files changed

+772
-0
lines changed

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

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,22 @@ Metadata:
3030
- IncludeInventoryCollectorModule
3131
- IncludeOrgDataModule
3232
- IncludeRDSUtilizationModule
33+
- IncludeEUCUtilizationModule
3334
- IncludeRightsizingModule
3435
- IncludeTAModule
3536
- IncludeTransitGatewayModule
3637
- IncludeAWSFeedsModule
3738
- IncludeLicenseManagerModule
3839
- IncludeQuickSightModule
3940
- IncludeServiceQuotasModule
41+
- Label:
42+
default: 'EUC Module Configuration'
43+
Parameters:
44+
- IncludeEUCUtilizationModule
45+
- Label:
46+
default: 'EUC Module Settings'
47+
Parameters:
48+
- EUCAccountIDs
4049
ParameterLabels:
4150
DestinationBucket:
4251
default: 'Destination S3 bucket prefix'
@@ -76,6 +85,10 @@ Metadata:
7685
default: 'Include ECS Chargeback Data Collection Module'
7786
IncludeRDSUtilizationModule:
7887
default: 'Include RDS Utilization Data Collection Module'
88+
IncludeEUCUtilizationModule:
89+
default: 'Include WorkSpaces Utilization Data Collection Module'
90+
EUCAccountIDs:
91+
default: 'WorkSpaces Account IDs (optional)'
7992
IncludeOrgDataModule:
8093
default: 'Include AWS Organization Data Collection Module'
8194
IncludeBudgetsModule:
@@ -207,6 +220,15 @@ Parameters:
207220
Description: Collects RDS CloudWatch metrics from your accounts
208221
AllowedValues: ['yes', 'no']
209222
Default: 'no'
223+
IncludeEUCUtilizationModule:
224+
Type: String
225+
Description: Collects WorkSpaces CloudWatch metrics from your accounts
226+
AllowedValues: ['yes', 'no']
227+
Default: 'no'
228+
EUCAccountIDs:
229+
Type: String
230+
Description: "Optional, If you enable EUC Utilization or Inventory module and you use Amazon WorkSpaces, please provide a comma-separated list of account IDs where WorkSpaces are deployed. If left blank, metrics will be collected from all linked accounts in the Organization."
231+
Default: ""
210232
IncludeOrgDataModule:
211233
Type: String
212234
Description: Collects AWS Organizations data such as account Id, account name, organization parent and specified tags
@@ -262,6 +284,7 @@ Conditions:
262284
DeployComputeOptimizerModule: !Equals [ !Ref IncludeComputeOptimizerModule, "yes"]
263285
DeployEcsChargebackModule: !Equals [ !Ref IncludeECSChargebackModule, "yes"]
264286
DeployRDSUtilizationModule: !Equals [ !Ref IncludeRDSUtilizationModule, "yes"]
287+
DeployEUCUtilizationModule: !Equals [ !Ref IncludeEUCUtilizationModule, "yes"]
265288
DeployOrgDataModule: !Equals [ !Ref IncludeOrgDataModule, "yes"]
266289
DeployBudgetsModule: !Equals [ !Ref IncludeBudgetsModule, "yes"]
267290
DeployTransitGatewayModule: !Equals [ !Ref IncludeTransitGatewayModule, "yes"]
@@ -274,6 +297,7 @@ Conditions:
274297
DeployPricingModule: !Or
275298
- !Condition DeployInventoryCollectorModule
276299
- !Condition DeployRDSUtilizationModule
300+
- !Condition DeployEUCUtilizationModule
277301
DeployAccountCollector: !Or
278302
- Fn::Or:
279303
- !Condition DeployTAModule
@@ -293,6 +317,7 @@ Conditions:
293317
- !Condition DeployLicenseManagerModule
294318
- !Condition DeployQuickSightModule
295319
- !Condition DeployServiceQuotasModule
320+
- !Condition DeployEUCUtilizationModule
296321
RegionsInScopeIsEmpty: !Equals
297322
- !Join [ '', !Split [ ' ', !Ref RegionsInScope ] ] # remove spaces
298323
- ""
@@ -1158,6 +1183,33 @@ Resources:
11581183
- !Sub "${AWS::Region}"
11591184
- !Join [ '', !Split [ ' ', !Ref RegionsInScope ] ] # remove spaces
11601185

1186+
EUCUsageModule:
1187+
Type: AWS::CloudFormation::Stack
1188+
Condition: DeployEUCUtilizationModule
1189+
Properties:
1190+
TemplateURL: !Sub "https://${CFNSourceBucket}.s3.${AWS::URLSuffix}/cfn/data-collection/module-workspaces-metrics.yaml"
1191+
Parameters:
1192+
DatabaseName: !Ref DatabaseName
1193+
DataBucketsKmsKeysArns: !Ref DataBucketsKmsKeysArns
1194+
DestinationBucket: !Ref S3Bucket
1195+
DestinationBucketARN: !GetAtt S3Bucket.Arn
1196+
GlueRoleARN: !GetAtt GlueRole.Arn
1197+
MultiAccountRoleName: !Sub "${ResourcePrefix}${MultiAccountRoleName}"
1198+
Schedule: !Ref Schedule
1199+
ResourcePrefix: !Ref ResourcePrefix
1200+
LambdaAnalyticsARN: !GetAtt LambdaAnalytics.Arn
1201+
AccountCollectorLambdaARN: !Sub "${AccountCollector.Outputs.LambdaFunctionARN}"
1202+
CodeBucket: !If [ ProdCFNTemplateUsed, !FindInMap [RegionMap, !Ref "AWS::Region", CodeBucket], !Ref CFNSourceBucket ]
1203+
StepFunctionTemplate: !FindInMap [StepFunctionCode, main-v3, TemplatePath]
1204+
StepFunctionExecutionRoleARN: !GetAtt StepFunctionExecutionRole.Arn
1205+
SchedulerExecutionRoleARN: !GetAtt SchedulerExecutionRole.Arn
1206+
EUCAccountIDs: !Ref EUCAccountIDs
1207+
RegionsInScope:
1208+
Fn::If:
1209+
- RegionsInScopeIsEmpty
1210+
- !Sub "${AWS::Region}"
1211+
- !Join [ '', !Split [ ' ', !Ref RegionsInScope ] ] # remove spaces
1212+
11611213
OrgDataModule:
11621214
Type: AWS::CloudFormation::Stack
11631215
Condition: DeployOrgDataModule

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Metadata:
2525
- IncludeHealthEventsModule
2626
- IncludeInventoryCollectorModule
2727
- IncludeRDSUtilizationModule
28+
- IncludeEUCUtilizationModule
2829
- IncludeRightsizingModule
2930
- IncludeTAModule
3031
- IncludeTransitGatewayModule
@@ -59,6 +60,8 @@ Metadata:
5960
default: "Include Inventory Collector Module"
6061
IncludeRDSUtilizationModule:
6162
default: "Include RDS Utilization Data Collection Module"
63+
IncludeEUCUtilizationModule:
64+
default: "Include WorkSpaces Utilization Data Collection Module"
6265
IncludeRightsizingModule:
6366
default: "Include Rightsizing Recommendations Data Collection Module"
6467
IncludeTAModule:
@@ -138,6 +141,11 @@ Parameters:
138141
Description: Collects RDS CloudWatch metrics from your accounts
139142
AllowedValues: ['yes', 'no']
140143
Default: 'no'
144+
IncludeEUCUtilizationModule:
145+
Type: String
146+
Description: Collects WorkSpaces CloudWatch metrics from your accounts
147+
AllowedValues: ['yes', 'no']
148+
Default: 'no'
141149
IncludeRightsizingModule:
142150
Type: String
143151
Description: "Collects AWS Cost Explorer Rightsizing Recommendations"
@@ -208,6 +216,7 @@ Resources:
208216
IncludeInventoryCollectorModule: !Ref IncludeInventoryCollectorModule
209217
IncludeECSChargebackModule: !Ref IncludeECSChargebackModule
210218
IncludeRDSUtilizationModule: !Ref IncludeRDSUtilizationModule
219+
IncludeEUCUtilizationModule: !Ref IncludeEUCUtilizationModule
211220
IncludeBudgetsModule: !Ref IncludeBudgetsModule
212221
IncludeTransitGatewayModule: !Ref IncludeTransitGatewayModule
213222
IncludeServiceQuotasModule: !Ref IncludeServiceQuotasModule
@@ -242,6 +251,8 @@ Resources:
242251
ParameterValue: !Ref IncludeECSChargebackModule
243252
- ParameterKey: IncludeRDSUtilizationModule
244253
ParameterValue: !Ref IncludeRDSUtilizationModule
254+
- ParameterKey: IncludeEUCUtilizationModule
255+
ParameterValue: !Ref IncludeEUCUtilizationModule
245256
- ParameterKey: IncludeBudgetsModule
246257
ParameterValue: !Ref IncludeBudgetsModule
247258
- ParameterKey: IncludeTransitGatewayModule

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Metadata:
1616
- IncludeECSChargebackModule
1717
- IncludeInventoryCollectorModule
1818
- IncludeRDSUtilizationModule
19+
- IncludeEUCUtilizationModule
1920
- IncludeTAModule
2021
- IncludeSupportCasesModule
2122
- IncludeTransitGatewayModule
@@ -37,6 +38,8 @@ Metadata:
3738
default: 'Include ECS Chargeback Data Collection Module'
3839
IncludeRDSUtilizationModule:
3940
default: 'Include RDS Utilization Data Collection Module'
41+
IncludeEUCUtilizationModule:
42+
default: 'Include WorkSpaces Utilization Data Collection Module'
4043
IncludeBudgetsModule:
4144
default: 'Include Budgets Collection Module'
4245
IncludeTransitGatewayModule:
@@ -81,6 +84,11 @@ Parameters:
8184
Description: Collects RDS CloudWatch metrics from your accounts
8285
AllowedValues: ['yes', 'no']
8386
Default: 'no'
87+
IncludeEUCUtilizationModule:
88+
Type: String
89+
Description: Collects WorkSpaces CloudWatch metrics from your accounts
90+
AllowedValues: ['yes', 'no']
91+
Default: 'no'
8492
IncludeBudgetsModule:
8593
Type: String
8694
Description: Collects budgets from your accounts
@@ -113,6 +121,9 @@ Conditions:
113121
IncludeRDSUtilizationModulePolicy: !Equals
114122
- !Ref IncludeRDSUtilizationModule
115123
- "yes"
124+
IncludeEUCUtilizationModulePolicy: !Equals
125+
- !Ref IncludeEUCUtilizationModule
126+
- "yes"
116127
IncludeBudgetsModulePolicy: !Equals
117128
- !Ref IncludeBudgetsModule
118129
- "yes"
@@ -146,6 +157,7 @@ Resources:
146157
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}budgets-LambdaRole"
147158
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}ecs-chargeback-LambdaRole"
148159
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}inventory-LambdaRole"
160+
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}workspaces-metrics-LambdaRole"
149161
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}rds-usage-LambdaRole"
150162
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}transit-gateway-LambdaRole"
151163
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}trusted-advisor-LambdaRole"
@@ -298,6 +310,32 @@ Resources:
298310
rules_to_suppress:
299311
- id: W12
300312
reason: "Policy is used for scanning of a wide range of resources"
313+
EUCUtilizationPolicy:
314+
Type: 'AWS::IAM::Policy'
315+
Condition: IncludeEUCUtilizationModulePolicy
316+
Properties:
317+
PolicyName: EUCUtilizationPolicy
318+
PolicyDocument:
319+
Version: "2012-10-17"
320+
Statement:
321+
- Effect: "Allow"
322+
Action:
323+
- "workspaces:DescribeWorkspaces"
324+
Resource: "*" ## Policy is used for scanning of a wide range of resources
325+
- Effect: "Allow"
326+
Action:
327+
- "ec2:DescribeRegions"
328+
- "cloudwatch:GetMetricStatistics"
329+
- "cloudwatch:ListMetrics"
330+
Resource: "*" ## Policy is used for scanning of a wide range of resources
331+
Roles:
332+
- Ref: LambdaRole
333+
Metadata:
334+
cfn_nag:
335+
rules_to_suppress:
336+
- id: W12
337+
reason: "Policy is used for scanning of a wide range of resources"
338+
301339
TransitGatewayPolicy:
302340
Type: 'AWS::IAM::Policy'
303341
Condition: IncludeTransitGatewayModulePolicy

0 commit comments

Comments
 (0)