Cloudformation 模板属性文档差异
Cloudformation template properties documentation discrepancy
我正在使用来自 AWS 博客的存档 Github 项目创建我的第一个 Cloudformation 模板:
- https://aws.amazon.com/blogs/devops/part-1-develop-deploy-and-manage-for-scale-with-elastic-beanstalk-and-cloudformation-series/
- https://github.com/amazon-archives/amediamanager
模板 amm-elasticbeanstalk.cfn.json 声明了一个 Elastic Beanstalk 资源,概述如下:
"Resources": {
"Application": {
"Type": "AWS::ElasticBeanstalk::Application",
"Properties": {
"ConfigurationTemplates": [{...}],
"ApplicationVersions": [{...}]
}
}
}
From the documentation 我的印象是 AWS::ElasticBeanstalk::ApplicationVersion
和 AWS::ElasticBeanstalk::ConfigurationTemplate
必须定义为单独的资源,但我正在使用的示例使用相同的 AWSTemplateFormatVersion
作为文档。这是一个“shorthand”,如果名称空间具有相同的父级(即 AWS::ElasticBeanstalk
),则名称空间可以嵌套吗?它在某处记录了吗?
在同一个文件中AWS::ElasticBeanstalk::Environment
被定义为一个单独的资源-这只是一种文体选择,也许是因为环境配置太长了?
Elastic Beanstalk 由 Applications
和 Environments
组件组成。基本上每个环境 运行 一次只有一个应用程序版本,但是,您可以同时在多个环境中 运行 相同的应用程序版本。 Application versions
和 Saved configurations
是 Application
资源的一部分,这就是为什么可以在 AWS::ElasticBeanstalk::Application
资源属性中定义它的原因。然而,Environment
是 Elastic Beanstalk 的独立逻辑组件,因此无法从 Application
资源中声明它。
为了更好的可读性,我建议按照 example 单独声明所有资源。此外,使用此方法时,您可以直接引用 AWS::ElasticBeanstalk::Environment
资源中的 TemplateName
和 VersionLabel
。
或者,如果您想坚持使用 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"
}
]
}
}
}
}
我正在使用来自 AWS 博客的存档 Github 项目创建我的第一个 Cloudformation 模板:
- https://aws.amazon.com/blogs/devops/part-1-develop-deploy-and-manage-for-scale-with-elastic-beanstalk-and-cloudformation-series/
- https://github.com/amazon-archives/amediamanager
模板 amm-elasticbeanstalk.cfn.json 声明了一个 Elastic Beanstalk 资源,概述如下:
"Resources": {
"Application": {
"Type": "AWS::ElasticBeanstalk::Application",
"Properties": {
"ConfigurationTemplates": [{...}],
"ApplicationVersions": [{...}]
}
}
}
From the documentation 我的印象是 AWS::ElasticBeanstalk::ApplicationVersion
和 AWS::ElasticBeanstalk::ConfigurationTemplate
必须定义为单独的资源,但我正在使用的示例使用相同的 AWSTemplateFormatVersion
作为文档。这是一个“shorthand”,如果名称空间具有相同的父级(即 AWS::ElasticBeanstalk
),则名称空间可以嵌套吗?它在某处记录了吗?
在同一个文件中AWS::ElasticBeanstalk::Environment
被定义为一个单独的资源-这只是一种文体选择,也许是因为环境配置太长了?
Elastic Beanstalk 由 Applications
和 Environments
组件组成。基本上每个环境 运行 一次只有一个应用程序版本,但是,您可以同时在多个环境中 运行 相同的应用程序版本。 Application versions
和 Saved configurations
是 Application
资源的一部分,这就是为什么可以在 AWS::ElasticBeanstalk::Application
资源属性中定义它的原因。然而,Environment
是 Elastic Beanstalk 的独立逻辑组件,因此无法从 Application
资源中声明它。
为了更好的可读性,我建议按照 example 单独声明所有资源。此外,使用此方法时,您可以直接引用 AWS::ElasticBeanstalk::Environment
资源中的 TemplateName
和 VersionLabel
。
或者,如果您想坚持使用 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"
}
]
}
}
}
}