我正在开发一个简单的 python 脚本来向安全组添加规则,我想知道 boto3 中可用的两种方法有什么区别:授权安全组入口(**kwargs)和授权入口(**kwargs)?
描述是相同的:“向安全组添加一个或多个入口规则”
答案1
这两个不同的类别涉及不同的抽象层次。
- 客户类是每个 API 操作的低级包装器。例如 AuthorizeSecurityGroupIngress
- 资源类是面向对象的,你可以实例化一个对象来表示组并以此方式与其交互。它提供了更高级别的抽象,将你与单个 API 调用分离开来,并提供了一些持久性
为了显示差异,让我们创建一个安全组并向互联网开放端口 80。
与客户
ec2 = boto3.client('ec2')
response = ec2.create_security_group(GroupName='testgroup2',Description='testme')
ec2.authorize_security_group_ingress(GroupId=response['GroupId'],IpProtocol="tcp",CidrIp="0.0.0.0/0",FromPort=80,ToPort=80)
资源:
ec2 = boto3.resource('ec2')
mysg = ec2.create_security_group(GroupName="testgroup",Description='testme')
mysg.authorize_ingress(IpProtocol="tcp",CidrIp="0.0.0.0/0",FromPort=80,ToPort=80)
这里的关键区别在于,资源对象消除了对“响应”变量的需求,并负责记住安全组以供以后使用。这似乎不是一个很大的区别,但它使你的代码更简洁、更面向对象,
请参阅 boto 文档:https://boto3.readthedocs.org/en/latest/guide/resources.html了解更多详细信息。
答案2
我能看到的两个函数之间的唯一区别是它们属于不同的类。函数authorize_security_group_ingress
位于 中,EC2.Client
而authorize_ingress
位于 中EC2.SecurityGroup
。它们执行相同的操作。