【发布时间】:2018-02-20 05:12:57
【问题描述】:
我是 cloudformation 的新手,我正在为我的项目的基础架构编写一些 cfn 代码。但是在我写代码的时候,有个问题一直困扰着我。假设我有以下资源要创建:
Resources:
MyEC2Instance:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-79fd7eee"
KeyName: "testkey"
BlockDeviceMappings:
- DeviceName: "/dev/sdm"
Ebs:
VolumeType: "io1"
Iops: "200"
DeleteOnTermination: "false"
VolumeSize: "20"
- DeviceName: "/dev/sdk"
NoDevice: {}
如您所见,我正在创建一个名为 MyEC2Instance 的资源。现在假设我有另一个名为 stg 的环境,它与上面完全相同,因此一种简单的方法是使用具有不同堆栈名称的上述代码,但我被告知我需要重命名我的资源名称,如下所示:
Resources:
MyEC2InstanceStg1:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-79fd7eee"
KeyName: "testkey"
BlockDeviceMappings:
- DeviceName: "/dev/sdm"
Ebs:
VolumeType: "io1"
Iops: "200"
DeleteOnTermination: "false"
VolumeSize: "20"
- DeviceName: "/dev/sdk"
NoDevice: {}
但对我来说,这看起来并不专业,因为如果我有 10 个环境,这是否意味着我需要复制我的代码 10 次并重命名资源。有没有更好的办法?
【问题讨论】:
-
@Kannaiyan 谢谢,但我认为这不会完全涵盖这个问题,因为它没有提到我们是否使用 name 属性,那么如果我们使用相同的逻辑资源名称更新资源会发生什么?映射是否仍然正确进行?
-
不同环境是否拥有相同的资源集,只是名称不同?
-
@JamieStarke 我的担忧在于这部分:MyEC2InstanceStg1 如果我不更改此设置,映射 btw 资源和逻辑 ID 是否正确发生?专门针对更新的情况
-
在我的团队中,我们有一个 Dev、Staging 和 Production 设置,以及一个由所有三个共享的 CloudFormation 模板,并为每个模板创建单独的堆栈。所有逻辑 ID 都相同,但生成的物理 ID 不同。
标签: amazon-web-services amazon-cloudformation aws-opsworks