🚀

全リージョンのAMI IDの一覧取得

2024/01/23に公開

やりたいこと

特定の AMI でサポートされるすべのてリージョンの AMI ID 一覧を取得する

なんで欲しかった?

CloudFormation などの Mappings ですべてのリージョンで対応するテンプレートとするために一覧でほしかったです。
全部のリージョンで調べるのはめんどくさかったのでコードにしました。

いきなり結論

調べたい AMI の ProductCode を調べて以下のコードを実行する

import boto3

product_code = < 調べたい AMI の ProductCode >
def lambda_handler(event, context):
    regions = boto3.session.Session().get_available_regions('ec2')
    print(regions)
    for region in regions:
        try:
            client = boto3.client("ec2", region_name=region)    
            response = client.describe_images(
                Filters=[
                    {
                        'Name': 'product-code',
                        'Values': [
                            product_code,
                        ]
                    }
                ],
            )
            print(region)
            print(response['Images'][0]['ImageId'])
        except:
            print(region)
            print("Pass")

ProductCode の調べ方

調べたい AMI の ID を調べて以下のコードを実行する

import boto3

ami_id = < 調べたい AMI の ID >
def lambda_handler(event, context):
    client = boto3.client("ec2")
    response = client.describe_images(
        ImageIds=[
            ami_id,
        ],
    )
    print("ProductCode")
    print(response['Images'][0]['ProductCodes'][0]['ProductCodeId'])

はまったポイント

try/except を使わずに"boto3.session.Session().get_available_regions('ec2')"で取得したリージョンに対してAMIを調べると以下のエラーが出力されます。

An error occurred (AuthFailure) when calling the DescribeImages operation: AWS was not able to validate the provided access credentials

このエラーを調べると原因は以下のようなものが出てきます
https://repost.aws/ja/knowledge-center/iam-validate-access-credentials
https://repost.aws/ja/knowledge-center/troubleshoot-aws-cli-commands-ec2

今回のエラー原因についてはアカウントで有効化されていないリージョンに対してAMIを取得するAPIを実行したために発生したものとなります。

API を実行したリージョン
  • af-south-1
  • ap-east-1
  • ap-northeast-1
  • ap-northeast-2
  • ap-northeast-3
  • ap-south-1
  • ap-south-2
  • ap-southeast-1
  • ap-southeast-2
  • ap-southeast-3
  • ap-southeast-4
  • ca-central-1
  • eu-central-1
  • eu-central-2
  • eu-north-1
  • eu-south-1
  • eu-south-2
  • eu-west-1
  • eu-west-2
  • eu-west-3
  • me-central-1
  • me-south-1
  • sa-east-1
  • us-east-1
  • us-east-2
  • us-west-1
  • us-west-2
アカウントで有効化されていないリージョン
  • ap-south-2
  • ap-southeast-4
  • ca-west-1
  • eu-south-2
  • eu-central-2
  • me-central-1
  • il-central-1

Discussion