gpt4 book ai didi

amazon-web-services - CloudFormation - 安全组 VPC 问题

转载 作者:行者123 更新时间:2023-12-04 12:51:43 27 4
gpt4 key购买 nike

我有一个模板,用于创建 ELB 并附加 VPC 内的现有子网。这创建得很好,但是当我更新堆栈并添加一个具有 VpcId 属性的安全组(其值等于我附加的子网所属的现有 VPC ID)时,堆栈失败并出现以下错误:

"You have specified two resources that belong to different networks"

如果我从安全组中删除 VpcId 属性,它会在我的默认 VPC 中创建该属性,并且堆栈创建工作正常。我无法理解为什么会出现这种情况,因为安全组与指定入口规则中的 ELB 存在关系 -

"IpProtocol": "tcp",
"FromPort": "8000",
"ToPort": "8010",
"SourceSecurityGroupOwnerId": {
"Fn::GetAtt": [
"ElasticLoadBalancer",
"SourceSecurityGroup.OwnerAlias"
]
},

我无法明确声明 ELB 上的 VPC ID,因为它没有此类属性,只有子网或可用区。

最佳答案

谢谢你们的帮助。我发现了问题并解决了问题。

问题是我试图在安全组定义中的安全组入口定义中引用另一个安全组。正如文档所述:

If you want to cross-reference two security groups in the ingress and egress rules of those security groups, use the AWS::EC2::SecurityGroupEgress and AWS::EC2::SecurityGroupIngress resources to define your rules. Do not use the embedded ingress and egress rules in the AWS::EC2::SecurityGroup. If you do, it causes a circular dependency, which AWS CloudFormation doesn't allow.

因此,我指定了两个安全组,然后在单独的资源中指定了 SecurityGroupIngress。必须手动将其输入到模板中,因为左侧菜单中没有该资源的 CloudFormation 图标。我花了一段时间才弄清楚,因为我创建堆栈时生成的错误消息并不明显。

"InstanceIngress": {
"Type": "AWS::EC2::SecurityGroupIngress",
"Properties": {
"GroupId": {
"Fn::GetAtt": [
"InstanceSecurityGroup",
"GroupId"
]
},
"IpProtocol": "tcp",
"FromPort": "7997",
"ToPort": "8100",
"SourceSecurityGroupId": {
"Fn::GetAtt": [
"ELBSecurityGroup",
"GroupId"
]
}
},

关于amazon-web-services - CloudFormation - 安全组 VPC 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35182720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com