【问题标题】:Cloudformation template properties documentation discrepancyCloudformation 模板属性文档差异
【发布时间】:2022-01-09 11:07:19
【问题描述】:

我正在使用来自 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。如果命名空间具有相同的父级(即AWS::ElasticBeanstalk),这是可以嵌套命名空间的“速记”吗?它是否记录在某处?

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

【问题讨论】:

  • 部署的时候能用吗?
  • TIAS,好点。我还没有尝试部署,因为我正在根据我的需要对其进行修改。但我想我可以在完成后部署以查看和删除堆栈。

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

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"
                    }
                ]
            }
        }
    }
}

【讨论】:

  • 能否请您指出一个提供如何操作信息的文档?
  • 伟大的洞察力,谢谢。我仍然很好奇您是如何理解 ApplicationVersions 和 ConfigurationTemplates 是“应用程序的一部分”而 Environment 不是。它是记录在案的,还是来自您对 Elastic Beanstalk 的熟悉以及您对知识的隐含理解?即你是如何把这一切放在一起的?
猜你喜欢
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 2020-04-19
  • 2017-12-23
相关资源
最近更新 更多