我正在尝试执行以下代码
def createSecurityGroup(self, securitygroupname):
conn = boto3.resource('ec2')
response = conn.create_security_group(GroupName=securitygroupname, Description = 'test')
VPC_NAT_SecurityObject = createSecurityGroup("mysecurity_group")
response_egress_all = VPC_NAT_SecurityObject.authorize_egress(
IpPermissions=[{'IpProtocol': '-1'}])
并获得以下异常
例外: 调用AuthorizeSecurityGroupEgress操作时发生错误(InvalidParameterValue):仅Amazon VPC安全性 组可以与此操作一起使用。
我尝试了几种不同的组合,但无法将协议设置为全部。我使用了'-1',如boto3文档中所述。有人可以建议如何完成这项工作。
答案 0 :(得分:0)
(更新)
1.boto3.resource(“ec2”)类实际上是一个围绕客户端类的高级类。您必须使用boto3.resource(“ec2”)。Vpc创建一个提取类实例化,以便附加到特定的VPC ID,例如。
import boto3
ec2_resource = boto3.resource("ec2")
myvpc = ec2_resource.Vpc("vpc-xxxxxxxx")
response = myvpc.create_security_group(
GroupName = securitygroupname,
Description = 'test')
2.有时可以直接使用boto3.client(“ec2”)如果你检查boto3 EC2客户端create_security_group,你会看到:
response = client.create_security_group(
DryRun=True|False,
GroupName='string',
Description='string',
VpcId='string'
)
如果您使用自动化脚本/模板来重建VPC,例如salt-cloud,你需要给VPC一个标签名称,以便从boto3脚本中自动获取它。当AWS将所有AWS资源ID从8个字母数字迁移到12或15个字符时,这将节省所有麻烦。
另一种选择是使用cloudformation,它允许您放置所有内容并在模板中指定变量来重新创建VPC堆栈。