gpt4 book ai didi

amazon-web-services - 是否可以在 Cloudformation 模板中使用循环和映射来使用不同的 CostFilter 服务制定多个 AWS 预算?

转载 作者:行者123 更新时间:2023-12-03 07:41:55 25 4
gpt4 key购买 nike

我创建了一个 Nested Cloudformation YAML 模板集。它由主 YAML 和嵌套 YAML 组成。

它使用我当前使用的各种常见 AWS 服务聚合创建 22 个 AWS 预算。

主文件很长,这样做“感觉不对”。我想知道,我是否可以使用映射和循环来完成同样的事情?

注意:有些预算只有 1 项服务,而其他预算则有 4 或 5 项服务。

我的 2 个文件如下。它们被设计为托管在 S3 存储桶中(至少需要嵌套文件),然后 BUDGETS.YAML 文件将用于创建新的堆栈。

现在执行脚本时控制台看起来像这样:

Screenshot of the AWS Budget Screen

以下是“CreateBudget.yaml”文件的代码,该文件是需要托管在 S3 上并由主堆栈“调用”的嵌套堆栈:

Description: Create-New-Monthly-Budget
Parameters:
NamingPrefix:
Type: String
BudgetAmount:
Type: Number
ServiceFilters:
Type: CommaDelimitedList
AlertEmail:
Type: String
Resources:
NewBudget:
Type: AWS::Budgets::Budget
Properties:
Budget:
BudgetName: !Sub ${NamingPrefix}-Monthly-Budget
BudgetLimit:
Amount: !Ref BudgetAmount
Unit: USD
TimeUnit: MONTHLY
TimePeriod:
Start: 1225864800
End: 1926864800
BudgetType: COST
CostFilters:
Service:
!Ref ServiceFilters
CostTypes:
IncludeCredit: true
IncludeDiscount: true
IncludeOtherSubscription: true
IncludeRecurring: true
IncludeRefund: true
IncludeSubscription: true
IncludeSupport: true
IncludeTax: true
IncludeUpfront: true
UseAmortized: false
UseBlended: false
NotificationsWithSubscribers:
- Notification:
NotificationType: FORECASTED
ComparisonOperator: GREATER_THAN
Threshold: 100
Subscribers:
- SubscriptionType: EMAIL
Address: !Ref AlertEmail
- Notification:
NotificationType: ACTUAL
ComparisonOperator: GREATER_THAN
Threshold: 75
Subscribers:
- SubscriptionType: EMAIL
Address: !Ref AlertEmail
- Notification:
NotificationType: ACTUAL
ComparisonOperator: GREATER_THAN
Threshold: 50
Subscribers:
- SubscriptionType: EMAIL
Address: !Ref AlertEmail
- Notification:
NotificationType: ACTUAL
ComparisonOperator: GREATER_THAN
Threshold: 25
Subscribers:
- SubscriptionType: EMAIL
Address: !Ref AlertEmail
Outputs:
NewBudgetName:
Value: !Ref NewBudget

这是主堆栈文件,您可以使用 S3 托管该文件,也可以在创建堆栈时上传它。我将此称为 Budgets.yaml,但它可以被称为任何名称,因为它没有被其他文件引用。

Description: Create-Multiple-Budgets
Parameters:
AlertEmail:
Type: String
Default: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bad7c3e5dfd7dbd3d6e5dbdedec8dfc9c9faddd7dbd3d694d9d5d7" rel="noreferrer noopener nofollow">[email protected]</a>"
s3TemplateURL:
Type: String
Default: "https://my-s3-bucket-name.s3.ca-central-1.amazonaws.com/budgets/CreateBudget.yaml"
Resources:

# 01
NestedCallEC2:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "EC2"
BudgetAmount: 170
ServiceFilters: !Join
- ','
- - Amazon Elastic Block Store
- Savings Plans for AWS Compute usage
- Amazon Elastic Load Balancing
- Amazon Elastic Compute Cloud - Compute
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 02
NestedCallRDS:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "RDS"
BudgetAmount: 80
ServiceFilters: !Join
- ','
- - Amazon Relational Database Service
- Amazon DynamoDB
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 03
NestedCallCloudWatch:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "CloudWatch"
BudgetAmount: 20
ServiceFilters: !Join
- ','
- - AmazonCloudWatch
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 04
NestedCallSecurity:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Security"
BudgetAmount: 10
ServiceFilters: !Join
- ','
- - AWS WAF
- AWS Secrets Manager
- AWS Security Hub
- AWS Key Management Service
- Amazon Cognito
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 05
NestedCallRoute53:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Route53"
BudgetAmount: 5
ServiceFilters: !Join
- ','
- - Amazon Route 53
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 06
NestedCallSNS:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "SNS"
BudgetAmount: 5
ServiceFilters: !Join
- ','
- - Amazon Simple Notification Service
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 07
NestedCallPipeline:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Pipeline"
BudgetAmount: 1
ServiceFilters: !Join
- ','
- - AWS Data Pipeline
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 08
NestedCallGlacier:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Glacier"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Amazon Glacier
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 09
NestedCallMisc:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Misc"
BudgetAmount: 1
ServiceFilters: !Join
- ','
- - AWS Cost Explorer
- AWS Systems Manager
- AWS Budgets
- AWS Elemental MediaStore
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 10
NestedCallStorage:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Storage"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Amazon Simple Storage Service
- Amazon Elastic File System
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 11
NestedCallCloudFront:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "CloudFront"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Amazon CloudFront
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 12
NestedCallKinesis:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Kinesis"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Amazon Kinesis
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 13
NestedCallAthena:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Athena"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Amazon Athena
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 14
NestedCallAPIGateway:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "APIGateway"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Amazon API Gateway
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 15
NestedCallAmplify:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Amplify"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - AWS Amplify
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 16
NestedCallLambda:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Lambda"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - AWS Lambda
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 17
NestedCallSES:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "SES"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Amazon Simple Email Service
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 18
NestedCallDevSupport:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "DevSupport"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - AWS Support (Developer)
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 19
NestedCallAnalytics:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "Analytics"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - AWS Glue
- Amazon QuickSight
- AWS X-Ray
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 20
NestedCallSQS:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "SQS"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Amazon Simple Queue Service
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 21
NestedCallDataTransfer:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "DataTransfer"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - AWS Data Transfer
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL

# 22
NestedCallIQ:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
AlertEmail: !Ref AlertEmail
NamingPrefix: "IQ"
BudgetAmount: 2
ServiceFilters: !Join
- ','
- - Professional services provided by AWS IQ Expert
TimeoutInMinutes: 60
TemplateURL: !Ref s3TemplateURL


Outputs:
BudgetName01:
Value: !Ref NestedCallEC2
BudgetARN01:
Value: !GetAtt NestedCallEC2.Outputs.NewBudgetName
BudgetName02:
Value: !Ref NestedCallRDS
BudgetARN02:
Value: !GetAtt NestedCallRDS.Outputs.NewBudgetName
BudgetName03:
Value: !Ref NestedCallCloudWatch
BudgetArn03:
Value: !GetAtt NestedCallCloudWatch.Outputs.NewBudgetName
BudgetName04:
Value: !Ref NestedCallSecurity
BudgetArn04:
Value: !GetAtt NestedCallSecurity.Outputs.NewBudgetName
BudgetName05:
Value: !Ref NestedCallRoute53
BudgetArn05:
Value: !GetAtt NestedCallRoute53.Outputs.NewBudgetName
BudgetName06:
Value: !Ref NestedCallSNS
BudgetArn06:
Value: !GetAtt NestedCallSNS.Outputs.NewBudgetName
BudgetName07:
Value: !Ref NestedCallPipeline
BudgetArn07:
Value: !GetAtt NestedCallPipeline.Outputs.NewBudgetName
BudgetName08:
Value: !Ref NestedCallGlacier
BudgetArn08:
Value: !GetAtt NestedCallGlacier.Outputs.NewBudgetName
BudgetName09:
Value: !Ref NestedCallMisc
BudgetArn09:
Value: !GetAtt NestedCallMisc.Outputs.NewBudgetName
BudgetName10:
Value: !Ref NestedCallStorage
BudgetArn10:
Value: !GetAtt NestedCallStorage.Outputs.NewBudgetName
BudgetName11:
Value: !Ref NestedCallCloudFront
BudgetArn11:
Value: !GetAtt NestedCallCloudFront.Outputs.NewBudgetName
BudgetName12:
Value: !Ref NestedCallKinesis
BudgetArn12:
Value: !GetAtt NestedCallKinesis.Outputs.NewBudgetName
BudgetName13:
Value: !Ref NestedCallAthena
BudgetArn13:
Value: !GetAtt NestedCallAthena.Outputs.NewBudgetName
BudgetName14:
Value: !Ref NestedCallAPIGateway
BudgetArn14:
Value: !GetAtt NestedCallAPIGateway.Outputs.NewBudgetName
BudgetName15:
Value: !Ref NestedCallAmplify
BudgetArn15:
Value: !GetAtt NestedCallAmplify.Outputs.NewBudgetName
BudgetName16:
Value: !Ref NestedCallLambda
BudgetArn16:
Value: !GetAtt NestedCallLambda.Outputs.NewBudgetName
BudgetName17:
Value: !Ref NestedCallSES
BudgetArn17:
Value: !GetAtt NestedCallSES.Outputs.NewBudgetName
BudgetName18:
Value: !Ref NestedCallDevSupport
BudgetArn18:
Value: !GetAtt NestedCallDevSupport.Outputs.NewBudgetName
BudgetName19:
Value: !Ref NestedCallAnalytics
BudgetArn19:
Value: !GetAtt NestedCallAnalytics.Outputs.NewBudgetName
BudgetName20:
Value: !Ref NestedCallSQS
BudgetArn20:
Value: !GetAtt NestedCallSQS.Outputs.NewBudgetName
BudgetName21:
Value: !Ref NestedCallDataTransfer
BudgetArn21:
Value: !GetAtt NestedCallDataTransfer.Outputs.NewBudgetName
BudgetName22:
Value: !Ref NestedCallIQ
BudgetArn22:
Value: !GetAtt NestedCallIQ.Outputs.NewBudgetName

非常感谢!

最佳答案

CloudFormation 没有像循环这样的概念

但是您可以使用所谓的来解决这个问题。这是一个example这可能对你有帮助。

关于amazon-web-services - 是否可以在 Cloudformation 模板中使用循环和映射来使用不同的 CostFilter 服务制定多个 AWS 预算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65070024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com