- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 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/
请看一下我的代码。 int main () { Program* allcommand = new Program; allcommand->addCommand("add", new
因此,当我遇到调试断言时,我正在编写代码。现在我很想知道为什么这段代码不起作用: for(Model::MeshMap::iterator it = obj1->GetMeshes().begin()
这是我上一个问题的延续 Group, Sum byType then get diff using Java streams . 按照建议,我应该作为单独的线程发布,而不是更新原始线程。 因此,通过我
我正在实现一些非常适合 map 的代码。但是,我要迭代的列表中有大量对象,所以我的问题是哪种方法是解决此问题的最佳方法: var stuff = $.map(listOfMyObjects, some
我正在尝试创建一个包含不同类的成员函数指针的映射。成员函数都具有相同的签名。为了做到这一点,我所有的类都继承了一个 Object 类,它只有默认构造函数、虚拟析构函数和一个虚拟 ToString()
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: how do you make a heterogeneous boost::map? 有可能在 C++ 中
我有一个 Mysql 查询,请检查以下内容: SELECT `tbl_classSubjects`.`classID` , `tbl_classSubjects`.`sectionID` , `tbl
抱歉,这可能是一个基本问题。 JNA直接映射和接口(interface)映射有什么区别? 我的解释是否正确: 直接映射 : 直接使用库对象(如 Java 中的静态 main) 接口(interface
在 Twitter's Scala school collections section ,它们显示了一个带有偏函数作为值的 Map: // timesTwo() was defined earlie
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
据我了解,从 scala stdlib 声明一个映射并没有将其专门用于原始类型。我要的不是付出装箱/拆箱的代价,而是同时拥有scala map 的接口(interface)。一个明显的选择是使用 tr
如何为这样的 JSON 响应创建对象映射,它只是一个整数数组: [ 565195, 565309, 565261, 565515, 565292, 565281, 566346, 5
是否可以为 DTO 对象创建映射然后查询它们 而不是域?如果不解释为什么? 如果我需要几个 dtos 怎么办? DTos 是只读的 ID 由 NH 自动生成 将来这些 dtos 将设置映射到链接的 d
我有一个返回的函数(常规代码) [words: "one two", row: 23, col: 45] 在 Scala 中,我将上面更改为 Scala Map,但随后我被迫将其声明为 Map[Str
我有一组与 Vanilla 磅蛋糕烘焙相关的数据(200 行),具有 27 个特征,如下所示。标签caketaste是衡量烤蛋糕的好坏程度,由 bad(0) 定义, neutral(1) , good
我有试图映射到新代码的遗留代码。 OLD_PERSON pid sid name age NEW_PERSON pid sid fid age RESOLVE_PERSON pid fid statu
我有一个表,其中一个字段可以指向其他 3 个表之一中的外键,具体取决于鉴别器值是什么(Project、TimeKeep 或 CostCenter。通常这是用子类实现的,我想知道我有什么 注意子类名称与
我有一个类型 [ST s (Int, [Int])] 的绑定(bind)我正在尝试申请runST使用映射到每个元素,如下所示: name :: [ST s (Int, [Int])] --Of Cou
在我正在进行的项目中,我有以下实体:分析师、客户 和承包商。每个都继承自基类 User。 public abstract class User { public virtual int Id
我想知道是否可以在 Vim 中创建一个映射(对于普通模式),允许用户在映射执行之前输入。 我想为我最常用的 grep 命令创建一个快捷方式的映射。我希望命令允许输入我正在搜索的内容,然后在输入时执行。
我是一名优秀的程序员,十分优秀!