Я разрабатываю простой сценарий python для добавления правил в группы безопасности, и мне интересно, в чем разница между двумя методами, доступными в boto3: authorize_security_group_ingress (** kwargs) и authorize_ingress (** kwargs)?
Описания те же: «Добавляет одно или несколько правил входа в группу безопасности».
Два разных класса относятся к разным уровням абстракции.
Чтобы показать разницу, давайте создадим группу безопасности и откроем порт 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)
Ключевое отличие здесь в том, что объект ресурса устраняет необходимость в переменной «ответа» и заботится о запоминании группы безопасности для последующего использования. Это не кажется большой разницей, но делает ваш код более чистым и объектно-ориентированным.
см. документацию по ботам: https://boto3.readthedocs.org/en/latest/guide/resources.html для более подробной информации о них.
Единственное различие, которое я вижу между двумя функциями, заключается в том, что они принадлежат разным классам. Функция authorize_security_group_ingress
проживает в EC2.Client
и authorize_ingress
проживает в EC2.SecurityGroup
. Они делают то же самое.