À mesure qu'AWS se développe et ajoute de nouvelles régions, j'aimerais que mon code le détecte automatiquement. Actuellement, le "Sélectionnez votre région" est codé en dur, mais je voudrais analyser les éléments suivants uniquement pour RegionName.
import boto3
ec2 = boto3.client('ec2')
regions = ec2.describe_regions()
print(regions)
Ma sortie est JSON comme ceci:
{'Regions': [{'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'}, {'Endpoint': 'ec2.eu-west- 1.amazonaws.com ',' RegionName ':' eu-west-1 '}, {' Endpoint ':' ec2.ap-southeast-1.amazonaws.com ',' RegionName ':' ap-sud-est-1 ' }]}
J'ai coupé les données répétitives et les ResponseMetadata pour des raisons d'espace.
Comment analyser le RegionName dans une liste?
Ce qui suit vous renverra le RegionName et Endpoint pour chaque région.
# List all regions
client = boto3.client('ec2')
regions = [region['RegionName'] for region in client.describe_regions()['Regions']]
En plus de la réponse de Frédéric, vous pouvez également obtenir des régions connues pour chaque service sans effectuer d'appels de service. Je vous avertirai cependant que, puisque cela tire des modèles locaux de botocore plutôt que d'atteindre un point de terminaison, il ne sera pas toujours exhaustif car vous devez mettre à jour botocore pour mettre à jour la liste.
from boto3.session import Session
s = Session()
dynamodb_regions = s.get_available_regions('dynamodb')
De plus, vous n'êtes pas limité aux régions de cette liste. Si vous utilisez une ancienne version de botocore, vous pouvez toujours utiliser de nouvelles régions en les spécifiant. Ils n'apparaîtront tout simplement pas dans cette liste.