amazon-web-services - 如何在 CloudFormation 脚本中将 AmazonEC2RoleforSSM 附加到 ec2 实例
问题描述
我正在尝试调出多个 ec2 实例 cloudformation 脚本。我正在使用 shell 脚本循环aws cloudformation create-stack
命令并成功启动多个实例。
现在我需要在附加了 SSM 角色的情况下启动这些实例。但是,我看不到在脚本中使用现有角色的任何方式。我需要在脚本中重新创建角色,因此:
AWSTemplateFormatVersion: 2010-09-09
Description: Compact template for creating an ec2 instance for SPT
Resources:
IAMRole:
Type: AWS::IAM::Role
Properties:
RoleName: SPTvacmRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: ec2.amazonaws.com
Action: sts:AssumeRole
Path: "/"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM
InstanceProfile1:
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- Ref: IAMRole
ec2instance1:
Type: AWS::EC2::Instance
Properties:
SubnetId: subnet-0da86f65478f3d30a
KeyName: spt-lab
ImageId: ami-00344ae218e7aae62
InstanceType: t2.nano
IamInstanceProfile: !Ref InstanceProfile1
SecurityGroupIds:
- sg-0d3fae6860ce71c91
这只能执行一次,因为当循环第二次执行命令时,角色 SPTvacmRole 已经存在并且堆栈失败。
我已经从控制台手动创建了一个角色,使用 AmazonEC2RoleForSSM 策略并将其命名为 EC2RoleForSSM,但是当我尝试 -Ref: EC2RoleForSSM
在 InstanceProfile1 中通过其名称引用该角色而不创建 IAMRole 时,它给出了一个错误,提示模板格式错误:未解决的资源依赖项模板资源块中的 [EC2RoleForSSM]
如何在脚本中使用预先存在的角色 EC2RoleForSSM 而无需再次创建它?
解决方案
您不应包含Ref
函数,因为它用于从参数或资源中检索值。
相反,只需使用下面的字符串EC2RoleForSSM
。
InstanceProfile1:
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- EC2RoleForSSM
推荐阅读
- ruby-on-rails - 使用 Capistrano 部署后无法运行 Puma
- linux - Bash shell 脚本文件存在
- sql-server - 如何在 SQL Server 中查找当前值以外的值?
- c++ - 在 C++ 中乘以并显示数组的值
- macos - GAS 32 位程序集中的未定义符号错误
- python - 如何在 PyFPDF 中导出立陶宛字母 (ąčęėįšųūž)?
- c++ - GCC 8 交叉编译器输出 ARMv7 可执行文件而不是 ARMv6
- r - 如何在具有最大范围的两个连续的 4 列中进行选择,并将其划分为在 4 列中的任何一个之间找到的最大范围
- php - Docker PHP/MySQL/Apache 容器
- javascript - 如何使 args 不区分大小写?