我使用 cloudformation 创建了 ec2 实例。当我尝试在同一个模板中更新实例的安全组时,cloudformation 会重新创建实例,而不是修改实例(就像在 terraform 中一样)。如何在不重新创建实例的情况下更新实例的安全组?
例如以下模板 -
Resources:
Ec2Instance:
Type: 'AWS::EC2::Instance'
Properties:
InstanceType: t2.micro
ImageId: ami-0ed9277fb7eb570c9
SecurityGroupIds:
- sg-09d68774a93ec40df
现在,如果我尝试添加另一个 SecurityGroupIds,它会重新创建 ec2 -
Resources:
Ec2Instance:
Type: 'AWS::EC2::Instance'
Properties:
InstanceType: t2.micro
ImageId: ami-0ed9277fb7eb570c9
SecurityGroupIds:
- sg-09d68774a93ec40df
- sg-05555951931eeaca7
答案1
我使用您的堆栈副本对此进行了测试,并看到了相同的行为。但是,当我创建一个新的 VPC(这是推荐的安全做法,应避免使用默认 VPC)时,安全组会干净地更新而无需替换。
我怀疑这与默认 VPC 上的行为有关,并且是预期的(但奇怪的)行为!
我建议您创建一个带有子网的新 VPC - VPC 向导在这里做得很好。转到服务 -> VPC 开始。
我的测试文件:
Resources:
Ec2Instance:
Type: 'AWS::EC2::Instance'
Properties:
InstanceType: t2.micro
# default Amazon Linux AMI
ImageId: ami-0d37e07bd4ff37148
SecurityGroupIds:
# first security group I created in default:
- sg-0d16f8e62054c9ed0
# second security group I created in default:
- sg-0ffc2a7a986ab0e8c
OtherEc2Instance:
Type: 'AWS::EC2::Instance'
Properties:
InstanceType: t2.micro
ImageId: ami-0d37e07bd4ff37148
# Private subnet (no internet) in a new VPC:
SubnetId: subnet-08dc2104d169a815e
SecurityGroupIds:
# First SG in that VPC:
- sg-0ebec69e461a555b8
# Second SG in that VPC:
- sg-00b18a57193a12f5c