Cloudformation 模板属性文档差异

Cloudformation template properties documentation discrepancy

我正在使用来自 AWS 博客的存档 Github 项目创建我的第一个 Cloudformation 模板:

模板 amm-elasticbeanstalk.cfn.json 声明了一个 Elastic Beanstalk 资源,概述如下:

  "Resources": {
    "Application": {
      "Type": "AWS::ElasticBeanstalk::Application",
      "Properties": {
        "ConfigurationTemplates": [{...}],
        "ApplicationVersions": [{...}]
      }
    }
  }

From the documentation 我的印象是 AWS::ElasticBeanstalk::ApplicationVersionAWS::ElasticBeanstalk::ConfigurationTemplate 必须定义为单独的资源,但我正在使用的示例使用相同的 AWSTemplateFormatVersion 作为文档。这是一个“shorthand”,如果名称空间具有相同的父级(即 AWS::ElasticBeanstalk),则名称空间可以嵌套吗?它在某处记录了吗?

在同一个文件中AWS::ElasticBeanstalk::Environment被定义为一个单独的资源-这只是一种文体选择,也许是因为环境配置太长了?

Elastic Beanstalk 由 ApplicationsEnvironments 组件组成。基本上每个环境 运行 一次只有一个应用程序版本,但是,您可以同时在多个环境中 运行 相同的应用程序版本。 Application versionsSaved configurationsApplication 资源的一部分,这就是为什么可以在 AWS::ElasticBeanstalk::Application 资源属性中定义它的原因。然而,Environment 是 Elastic Beanstalk 的独立逻辑组件,因此无法从 Application 资源中声明它。

为了更好的可读性,我建议按照 example 单独声明所有资源。此外,使用此方法时,您可以直接引用 AWS::ElasticBeanstalk::Environment 资源中的 TemplateNameVersionLabel

或者,如果您想坚持使用 github 示例,您可以将上面的示例调整为如下所示:

    {
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "sampleApplication": {
            "Type": "AWS::ElasticBeanstalk::Application",
            "Properties": {
                "Description": "AWS Elastic Beanstalk Sample Application",
                "ApplicationVersions": [{
                    "VersionLabel": "Initial Version",
                    "Description": "Initial Version",
                    "SourceBundle": {
                        "S3Bucket": {
                            "Fn::Sub": "elasticbeanstalk-samples-${AWS::Region}"
                        },
                        "S3Key": "php-newsample-app.zip"
                    }
                }],
                "ConfigurationTemplates": [{
                    "TemplateName": "DefaultConfiguration",
                    "Description": "AWS ElasticBeanstalk Sample Configuration Template",
                    "OptionSettings": [
                        {
                            "Namespace": "aws:autoscaling:asg",
                            "OptionName": "MinSize",
                            "Value": "2"
                        },
                        {
                            "Namespace": "aws:autoscaling:asg",
                            "OptionName": "MaxSize",
                            "Value": "6"
                        },
                        {
                            "Namespace": "aws:elasticbeanstalk:environment",
                            "OptionName": "EnvironmentType",
                            "Value": "LoadBalanced"
                        },
                        {
                            "Namespace": "aws:autoscaling:launchconfiguration",
                            "OptionName": "IamInstanceProfile",
                            "Value": {
                                "Ref": "MyInstanceProfile"
                            }
                        }
                    ],
                    "SolutionStackName": "64bit Amazon Linux 2018.03 v2.9.11 running PHP 5.5"
                }]
            }
        },
        "sampleEnvironment": {
            "Type": "AWS::ElasticBeanstalk::Environment",
            "Properties": {
                "ApplicationName": {
                    "Ref": "sampleApplication"
                },
                "Description": "AWS ElasticBeanstalk Sample Environment",
                "TemplateName": "DefaultConfiguration",
                "VersionLabel": "Initial Version"
            }
        },
        "MyInstanceRole": {
            "Type": "AWS::IAM::Role",
            "Properties": {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": {
                                "Service": [
                                    "ec2.amazonaws.com"
                                ]
                            },
                            "Action": [
                                "sts:AssumeRole"
                            ]
                        }
                    ]
                },
                "Description": "Beanstalk EC2 role",
                "ManagedPolicyArns": [
                    "arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier",
                    "arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker",
                    "arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier"
                ]
            }
        },
        "MyInstanceProfile": {
            "Type": "AWS::IAM::InstanceProfile",
            "Properties": {
                "Roles": [
                    {
                        "Ref": "MyInstanceRole"
                    }
                ]
            }
        }
    }
}