amazon-web-services - 有没有办法在 AWS CloudFormation 模板中进行继承或代码重用?

标签 amazon-web-services aws-cloudformation aws-code-deploy

我正在构建一个 CloudFormation 模板,其中包含 AWS::AutoScaling::LaunchConfiguration 和使用该 LaunchConfiguration 的 AWS::AutoScaling::AutoScalingGroup。对于我的堆栈,我需要多个 AutoScalingGroup,但我希望它们位于单独的安全组中。

我还将使用 CodeDeploy,因此我的 LaunchConfiguration 包含用于安装和运行 CodeDeploy 代理的 Metadata 和 UserData 属性(如 http://s3.amazonaws.com/aws-codedeploy-us-east-1/templates/latest/CodeDeploy_SampleCF_Template.json 的第 262 行所示)。因为我必须在 LaunchConfiguration 中而不是在 AutoScalingGroup 中指定安全组,所以我必须在模板中拥有 LaunchConfiguration 的多个副本,并且只有单行差异。

有没有办法减少冗长的元数据和用户数据部分出现在我的模板中的次数?我尝试创建映射,但它们只允许字母数字字符。

最佳答案

编写代码来创建模板 JSON,而不是手动编写 - 然后您可以使用您选择的语言中可用的任何抽象来创建不同的 LaunchConfiguration 资源。

允许您将 map 和向量表示为文字的语言比那些不这样做的语言更适合于此。

例如,Clojure 文字

{"Type" "AWS::AutoScaling::LaunchConfiguration"
 "Properties" {"KeyName" {"Ref" "KeyName"}
               "ImageId" {"Ref" "AMI"}}}

可以自动翻译成JSON字符串

{"Type":"AWS::AutoScaling::LaunchConfiguration",
 "Properties":{"ImageId":{"Ref":"AMI"},
               "KeyName":{"Ref":"KeyName"}}}

(尽管实际上您只会为完整模板而不是单个资源创建 JSON。)

然后你可以做类似的事情

(defn launch-configuration
  [ami]
  {"Type" "AWS::AutoScaling::LaunchConfiguration"
   "Properties" {"KeyName" {"Ref" "KeyName"}
                 "ImageId" ami}})

(map launch-configuration ["ami1" "ami2" "ami3"])

创建多个类似的资源。

手工制作模板 JSON 实际上只对非常小的模板很方便。

关于amazon-web-services - 有没有办法在 AWS CloudFormation 模板中进行继承或代码重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28724929/

相关文章:

amazon-web-services - 当托管区域是父帐户的一部分时,CDK DnsValidatedCertificate : Can create a certificate in a linked AWS account,?

amazon-web-services - AWS CodeDeploy 重复权限

amazon-web-services - AWS API 网关行为不一致。正在运行的 API 收到 403 错误

python - 如何使用 CDK 部署 aws EventBridge - Python 示例

ssh - 如何更改 EC2 公钥?

php - 使用PHP从EC2通过VPC连接到RDS实例

amazon-web-services - 从 Lambda 函数内部访问 AWS CloudFormation ARN

amazon-web-services - 使用 AWS CloudFormation 更新 SNS 订阅的替代方案

aws-code-deploy - 亚马逊代码部署。部署失败

amazon-web-services - 即使成功,如何获取 CodeDeploy 事件日志?