

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 附录 A – 获取可用区 ID
<a name="appendix-a-getting-the-availability-zone-id"></a>

 如果您使用 AWS .NET 开发工具包（以及其他开发工具包，例如 JavaScript）或在 EC2 实例（包括 Amazon ECS 和 Amazon EKS）上运行系统，则可以直接获取可用区 ID。
+  **AWS .NET 开发工具包** 

  ```
  Amazon.Util.EC2InstanceMetadata.GetData(“/placement/availability-zone-id”)
  ```
+  **EC2 实例元数据服务** 

  ```
  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](https://stedolan.github.io/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** – 可用区不直接向函数开放。要找到它，您需要完成几步操作。为此，您需要构建一个私有 API Gateway REST 端点，用于返回请求者的 IP 地址。这将识别分配给该函数正在使用的弹性网络接口的私有 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’)
    ```