Po utworzeniu VPC, w jaki sposób mogę grepować tylko 1 identyfikator VPC z określonego VPC przez aws ec2 opis-vpcs, aby identyfikator VPC można było przekazać w skrypcie do następnego kroku, wiem, że widzę go ręcznie z tego polecenia lub z konsoli AWS,

Na przykład:

aws ec2 describe-vpcs --vpc-ids |grep VpcId
            "VpcId": "vpc-00a0338c2f671a77c",
            "VpcId": "vpc-0b3697513d5987516",
            "VpcId": "vpc-061e25f5f78877798",

Daje mi je wszystkie lub:

aws ec2 describe-vpcs --vpc-ids |grep -i ansible
                    "Value": "ANSIBLE_VPC",

Ale potrzebuję tylko uzyskać identyfikator VPC dla tego konkretnego VPC z polecenia.

3
emp0001 16 grudzień 2019, 00:23
Przepraszamy, ale Twoje pytanie jest niejasne. Co masz na myśli przez „pobranie identyfikatora VPC dla tego konkretnego VPC z polecenia”? Czy mówisz, że tuż przed tym wydałeś polecenie aws ec2 create-vpc? A może szukasz konkretnego VPC na podstawie wartości tagu?
 – 
John Rotenstein
16 grudzień 2019, 00:47
I to samo dla podsieci, IGW, routera, grupy bezpieczeństwa i NACL
 – 
emp0001
16 grudzień 2019, 01:09
Nie jestem pewien, co rozumiesz przez „i to samo...”. Czy poniższa odpowiedź spełnia Twoje pytanie? Jeśli nie, edytuj swoje pytanie, aby wyjaśnić, czego szukasz.
 – 
John Rotenstein
16 grudzień 2019, 02:50
Pamiętaj, że używanie grep do znajdowania identyfikatorów zasobów jest kruche i należy tego unikać. Powinieneś użyć opcji --query, która jest natywna dla awscli, lub możesz przekazać wyjście awscli do narzędzia innej firmy o nazwie jq, które może przeanalizować JSON.
 – 
jarmod
16 grudzień 2019, 03:09

2 odpowiedzi

Jeśli właśnie wydałeś polecenie create-vpc, identyfikator VPC tego VPC zostałby zwrócony w odpowiedzi na to polecenie:

Wynik:

{
    "Vpc": {
        "CidrBlock": "10.0.0.0/16",
        "DhcpOptionsId": "dopt-5EXAMPLE",
        "State": "pending",
        "VpcId": "vpc-0a60eb65b4EXAMPLE",    <-- This is the VPC ID
        "OwnerId": "123456789012",
        "InstanceTenancy": "default",
        "Ipv6CidrBlockAssociationSet": [],
        "CidrBlockAssociationSet": [
            {
                "AssociationId": "vpc-cidr-assoc-07501b79ecEXAMPLE",
                "CidrBlock": "10.0.0.0/16",
                "CidrBlockState": {
                    "State": "associated"
                }
            }
        ],
        "IsDefault": false,
        "Tags": []
    }
}

W ten sposób możesz utworzyć VPC i zapisać jego identyfikator w następujący sposób:

$ ID=`aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query Vpc.VpcId --output text`

$ echo $ID
vpc-0fb4d08f9d6501e94

Jeśli zamiast tego szukasz identyfikatora VPC dla VPC na podstawie jego tagu nazwy, możesz użyć:

$ ID=`aws ec2 describe-vpcs --filter Name=tag:Name,Values=ANSIBLE_VPC --query Vpcs[].VpcId --output text`

$ echo $ID
vpc-0fb4d08f9d6501e94
5
John Rotenstein 16 grudzień 2019, 00:55

Możesz do tego użyć tylko aws cli, z filtrami i zapytaniem:

aws ec2 describe-vpcs --filters Name=tag:Name,Values=ANSIBLE_VPC --query "Vpcs[].VpcId" --output text"

Możesz też użyć kombinacji polecenia --filters i polecenia grep, aby wykonać swoje zadanie:

aws ec2 describe-vpcs --filters Name=tag:Name,Values=ANSIBLE_VPC | grep VpcId | grep -oh "vpc-\w*"
3
DanielC 16 grudzień 2019, 08:58