簡體   English   中英

AWS CLI 或 boto3:嘗試獲取可用性區域 ID?

[英]AWS CLI or boto3: Trying to get the availability-zone id?

我正在嘗試從 AWS CLI 或 boto3 中獲取可用區 ID。 但是,盡管文檔顯示了它,但該命令僅返回 AZ,而不是 AZ 的 ID。 我錯過了一個步驟還是這只是糟糕的文檔等?

aws ec2 describe-subnets --region us-east-1

{
        "VpcId": "vpc-054c741523f481755",
        "CidrBlock": "10.150.3.32/27",
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "Ipv6CidrBlockAssociationSet": [],
        "AssignIpv6AddressOnCreation": false,
        "SubnetId": "subnet-0a36ed4643fb511d1",
        "AvailabilityZone": "us-east-1a",
        "DefaultForAz": false,
        "AvailableIpAddressCount": 27,
        "Tags": [
            {
                "Key": "aws:cloudformation:stack-id",
                "Value": "arn:aws:cloudformation:us-east-1:186940489315:stack/dantooine-a-elastic-subnets/dc3f7500-7b39-11ea-a67d-0e763951b664"
            },
            {
                "Key": "aws:cloudformation:stack-name",
                "Value": "dantooine-a-elastic-subnets"
            },
            {
                "Key": "Name",
                "Value": "dantooine-a-elastic-subnets-endpointSubnet"
            },
            {
                "Key": "aws:cloudformation:logical-id",
                "Value": "endpointSubnet"
            }
        ]
    }

文檔顯示:

{
"Subnets": [
    {
        "AvailabilityZone": "us-east-2c",
        "AvailabilityZoneId": "use2-az3",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.2.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-0bb1c79de3EXAMPLE",
        "VpcId": "vpc-0ee975135dEXAMPLE",
        "OwnerId": "111122223333",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "SubnetArn": "arn:aws:ec2:us-east-2:111122223333:subnet/subnet-0bb1c79de3EXAMPLE"
    },

這對我來說適用於 awscli 和 boto3。 例如:

import boto3

client = boto3.client('ec2')

subnets = client.describe_subnets()

for subnet in subnets['Subnets']:
    print(subnet['AvailabilityZone'], subnet['AvailabilityZoneId'])

Output 是:

us-east-1b use1-az2
us-east-1e use1-az3
us-east-1d use1-az6
...

我認為您安裝的 awscli 和 boto3 可能已經過時了。

如果您希望查看可用區 ID,請使用:

aws ec2 describe-availability-zones --region us-east-1

它將 output:

{
    "AvailabilityZones": [
        {
            "State": "available",
            "OptInStatus": "opt-in-not-required",
            "Messages": [],
            "RegionName": "us-east-1",
            "ZoneName": "us-east-1a",
            "ZoneId": "use1-az1",
            "GroupName": "us-east-1",
            "NetworkBorderGroup": "us-east-1"
        },
...

然后,您可以將此信息 map 到您創建的任何子網。

這是 Python 中 boto3 的示例:

import json
import boto3

def lambda_handler(event, context):

    ec2 = boto3.client('ec2', region_name="us-east-1")

    azs = ec2.describe_availability_zones()["AvailabilityZones"]
    for az in azs:
        print (az['ZoneName'], az['ZoneId'])

這是 output:

us-east-1a use1-az4
us-east-1b use1-az6
us-east-1c use1-az1
us-east-1d use1-az2
us-east-1e use1-az3
us-east-1f use1-az5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM