付録 A — アベイラビリティーゾーン ID の取得 - マルチ AZ の高度なレジリエンスパターン

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

付録 A — アベイラビリティーゾーン ID の取得

AWS .NET SDK (および JavaScript などの他の SDK) を使用しているか、Amazon EC2 インスタンスでシステム (Amazon ECS や EKS を含む) を実行している場合は、アベイラビリティーゾーン ID を直接取得できます。

  • AWS .NET SDK

    Amazon.Util.EC2InstanceMetadata.GetData(“/placement/availability-zone-id”)
  • EC インスタンスメタデータサービス

    curl http://169.254.169.254/latest/meta-data/placement/availability-zone-id

    Lambda や Fargate などの他のプラットフォームでは、アベイラビリティーゾーン名を取得して、アベイラビリティーゾーン ID へのマッピングを見つける必要があります。アベイラビリティーゾーン名を使用すると、次のようなアベイラビリティーゾーン ID を見つけることができます。

    aws ec2 describe-availability-zones --zone-names $AZ --output json --query ‘AvailabilityZones[0].ZoneId’

    上の例で使用するアベイラビリティーゾーン名を検索する以下の例は、AWS CLI とパッケージ jq を使用して bash で記述しています。これらは、ワークロードで使用するプログラミング言語に変換する必要があります。

    • Amazon ECS — インスタンスメタデータサービス (IMDS) がホストによってブロックされている場合は、代わりにコンテナメタデータファイルを使用できます。

      AZ=$(cat $ECS_CONTAINER_METADATA_FILE | jq –-raw-output .AvailabilityZone)
    • Fargate (プラットフォームバージョン 1.4 以降)

      AZ=$(curl $ECS_CONTAINER_METADATA_URI_V4/task | jq --raw-output .AvailabilityZone)
    • Lambda — アベイラビリティーゾーンは関数に直接公開されません。これを見つけるには、いくつかのステップを完了する必要があります。そのために、リクエスタの IP アドレスを返すプライベート API ゲートウェイ REST エンドポイントを構築する必要があります。これにより、関数が使用している Elastic Network Interface に割り当てられたプライベート IP が識別されます。

      • Lambda GetFunction API を呼び出して、関数の VPC ID を見つけます。

      • API Gateway サービスを呼び出して、関数の IP を取得します。

      • IP と VPC ID を使用して、関連するネットワークインターフェイスを見つけ、アベイラビリティーゾーンを抽出します。

      VPC_ID=$(aws lambda get-function --function-name $ AWS_LAMBDA_FUNCTION_NAME --region $AWS_REGION --output json --query ‘Configuration.VpcConfig.VpcId’) MY_IP=$(curl http://whats-my-private-ip.internal) AZ=$(aws ec2 describe-network-interfaces --filters Name=private-ip-address,Values=$MY_IP Name=vpc-id,Values=$VPC_ID --region $AWS_REGION --output json –query ‘NetworkInterfaces[0].AvailabilityZone’)