如何在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,但是,当我尝试在InstanceProfile1中以其名称-Ref: EC2RoleForSSM引用该角色而不创建IAMRole时,它会出现一个错误,称为模板格式错误:模板的Resources块中的Unsolved resource dependencies[EC2RoleForSSM]

如何在脚本中使用预先存在的角色EC2RoleForSSM,而不必再次创建它?

您不应该包含Ref函数,因为它用于从参数或资源中检索值。

相反,只需使用字符串EC2RoleForSSM,如下所示。

InstanceProfile1:
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- EC2RoleForSSM

然而,我看不到在脚本中使用现有角色的任何方法。我需要在脚本中重新创建角色

如何在脚本中使用预先存在的角色EC2RoleForSSM,而不必再次创建它?

如果角色存在,则不能在CloudFormation中创建相同的角色。相反,您应该导入它

  • 将现有资源纳入CloudFormation管理

AWS::IAM::Role是可以导入CloudFormation的资源之一。

如果你只是想在模板中引用它,@ChrisWilliams已经解释了如何做到这一点。

相关内容

  • 没有找到相关文章

最新更新