Les deux classes différentes concernent des niveaux d'abstraction différents.
-
Client sont des enveloppes de bas niveau autour de chaque action de l'API, par exemple AuthorizeSecurityGroupIngress.
-
Ressources Les classes sont orientées objet, vous instanciez un objet pour représenter le groupe et interagir avec lui de cette manière. Elles fournissent un niveau d'abstraction plus élevé qui vous découple des appels API individuels et fournit une certaine persistance.
Pour montrer la différence, créons un groupe de sécurité et ouvrons le port 80 à l'Internet.
avec le client
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)
avec ressource :
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)
La principale différence ici est que l'objet ressource élimine le besoin d'une variable "réponse" et se charge de mémoriser le groupe de sécurité pour une utilisation ultérieure. Cela ne semble pas être une grande différence mais cela rend votre code plus propre et plus orienté objet.
voir les docs boto : https://boto3.readthedocs.org/en/latest/guide/resources.html pour plus de détails à leur sujet.