问题描述
我有以下 CF 模板来部署 EB 环境:
Resources:
EBEC2Role:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Principal:
Service:
- 'ec2.amazonaws.com'
Action:
- 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier'
- 'arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier'
- 'arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker'
RoleName: 'aws-elasticbeanstalk-ec2-role'
EBServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Principal:
Service:
- 'elasticbeanstalk.amazonaws.com'
Action:
- 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth'
- 'arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkService'
RoleName: 'aws-elasticbeanstalk-service-role'
EBApplication:
Type: AWS::ElasticBeanstalk::Application
Properties:
ApplicationName: 'Freyja'
Description: 'Freyja EB Application'
EBAppVersion:
Type: AWS::ElasticBeanstalk::ApplicationVersion
Properties:
ApplicationName:
Ref: EBApplication
Description: 'App version'
SourceBundle:
S3Bucket:
Fn::ImportValue:
Fn::Sub: 'S3MainBucket'
S3Key: 'python.zip'
EBEnv:
Type: AWS::ElasticBeanstalk::Environment
Properties:
ApplicationName:
Ref: EBApplication
Description: 'Freyja main environment'
EnvironmentName: 'Freyja'
SolutionStackName: '64bit Amazon Linux 2 v3.1.4 running Python 3.7'
OptionSettings:
- Namespace: 'aws:autoscaling:launchconfiguration'
OptionName: 'InstanceType'
Value: 't2.nano'
- Namespace: 'aws:autoscaling:launchconfiguration'
OptionName: 'IamInstanceProfile'
Value: !Ref EBEC2Role
- Namespace: 'aws:elasticbeanstalk:environment'
OptionName: 'ServiceRole'
Value: !Ref EBServiceRole
VersionLabel:
Ref: EBAppVersion
但是,我在 CF 中创建它时不断收到错误:
环境无法启动,因为它进入终止状态
我查阅了大量文档,但似乎无法找到造成这种情况的原因。请记住,这个想法是在一个全新的帐户中部署它,这就是我在模板中创建角色的原因,除了一个单独的 CF 模板来创建 S3 存储桶之外,它没有任何内容。
谢谢!
解决方法
这可能是因为 IamInstanceProfile
应该是实例配置文件,而不是角色。所以你可以添加如下:
EBInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Roles:
- !Ref EBEC2Role
那么:
- Namespace: 'aws:autoscaling:launchconfiguration'
OptionName: 'IamInstanceProfile'
Value: !Ref EBInstanceProfile