Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] Amazon Kinesis Firehose 入門 (4) Kinesis Agent環境の構築(VPC、EC2)

More than 3 years have passed since last update.

この記事について

JAWS-UG CLI専門支部 #73 Kinesis Firehose入門で実施するハンズオン用の手順書です。

前提条件

必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

  • Kinesis Firehoseのフルコントロール権限
  • S3のフルコントロール権限
  • STSの関するフルコントロール権限
  • IAMの関するフルコントロール権限
  • CloudWatchの関するフルコントロール権限
  • CloudWatch Logsの関するフルコントロール権限

0. 準備

0.1. リージョンを指定

オレゴンリージョンで実施します。(東京マダー?)

コマンド
export AWS_DEFAULT_REGION="us-west-2"

0.2. 資格情報を確認

コマンド
aws configure list

インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。

結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************QSAA         iam-role
secret_key     ****************c1xY         iam-role
    region                us-west-2              env    AWS_DEFAULT_REGION

0.3. バージョン確認

コマンド
aws --version
結果
aws-cli/1.11.24 Python/2.7.12 Linux/4.4.30-32.54.amzn1.x86_64 botocore/1.4.81

0.4. バージョンアップ(必要に応じて)

コマンド
sudo pip install -U awscli

1. VPCの作成

Kinesis Agentを導入するサーバを作成します。
併せて、データソースのApache Web Serverのログとします。

VPCのCIDRを指定

コマンド
CIDR_BLOCK='10.0.0.0/16'

パラメータを確認

コマンド
cat << ETX

   VPC_CIDR_BLOCK: "${CIDR_BLOCK}"

ETX
結果
   VPC_CIDR_BLOCK: "10.0.0.0/16"

VPCを作成

コマンド
aws ec2 create-vpc \
    --cidr-block ${CIDR_BLOCK}
結果
{
    "Vpc": {
        "VpcId": "vpc-********",
        "InstanceTenancy": "default",
        "Tags": [],
        "State": "pending",
        "DhcpOptionsId": "dopt-********",
        "CidrBlock": "10.0.0.0/16",
        "IsDefault": false
    }
}
コマンド
VPC_ID=$(aws ec2 describe-vpcs \
    --query "Vpcs[?CidrBlock==\`${CIDR_BLOCK}\`].VpcId" \
    --output text) \
    && echo ${VPC_ID}
結果
vpc-********

作成したVPCの確認

コマンド
aws ec2 describe-vpcs --vpc-ids ${VPC_ID}
結果
{
    "Vpcs": [
        {
            "VpcId": "vpc-********",
            "InstanceTenancy": "default",
            "State": "available",
            "DhcpOptionsId": "dopt-********",
            "CidrBlock": "10.0.0.0/16",
            "IsDefault": false
        }
    ]
}

2. Internet Gatewayの作成、アタッチ

インターネットゲートウェイの作成

コマンド
IGW_ID=$(aws ec2 create-internet-gateway \
    --query InternetGateway.InternetGatewayId \
    --output text) \
    && echo ${IGW_ID}
結果
igw-********

作成したInternet Gatewayを確認

コマンド
aws ec2 describe-internet-gateways \
    --internet-gateway-ids ${IGW_ID}
結果
{
    "InternetGateways": [
        {
            "Tags": [],
            "InternetGatewayId": "igw-********",
            "Attachments": []
        }
    ]
}

パラメータを確認

コマンド
cat << ETX

   VPC_ID: "${VPC_ID}"
   IGW_ID: "${IGW_ID}"

ETX
結果
   VPC_ID: "vpc-********"
   IGW_ID: "igw-********"

VPCにインターネットゲートウェイをアタッチ

コマンド
aws ec2 attach-internet-gateway \
    --internet-gateway-id ${IGW_ID} \
    --vpc-id ${VPC_ID}
結果
(返値なし)

アタッチした結果を確認

コマンド
aws ec2 describe-internet-gateways \
    --internet-gateway-ids ${IGW_ID}
結果
{
    "InternetGateways": [
        {
            "Tags": [],
            "InternetGatewayId": "igw-********",
            "Attachments": [
                {
                    "State": "available",
                    "VpcId": "vpc-********"
                }
            ]
        }
    ]
}

3. Subnetの作成

サブネットを指定

コマンド
CIDR_BLOCK_SUBNET_A='10.0.0.0/24'

パラメータを確認

コマンド
cat << ETX

   VPC_ID: "${VPC_ID}"
   Subnet_CIDR_BLOCK_on_${AWS_DEFAULT_REGION}a: "${CIDR_BLOCK_SUBNET_A}"

ETX
結果
   VPC_ID: "vpc-********"
   Subnet_CIDR_BLOCK_on_ap-northeast-1a: "10.0.0.0/24"

サブネットを作成

コマンド
aws ec2 create-subnet --vpc-id ${VPC_ID} \
    --cidr-block ${CIDR_BLOCK_SUBNET_A} \
    --availability-zone ${AWS_DEFAULT_REGION}a
結果
{
    "Subnet": {
        "VpcId": "vpc-********",
        "AvailableIpAddressCount": 251,
        "MapPublicIpOnLaunch": false,
        "DefaultForAz": false,
        "Ipv6CidrBlockAssociationSet": [],
        "State": "pending",
        "AvailabilityZone": "us-west-2a",
        "SubnetId": "subnet-********",
        "CidrBlock": "10.0.0.0/24",
        "AssignIpv6AddressOnCreation": false
    }
}
コマンド
SUBNET_A_ID=$(aws ec2 describe-subnets \
    --query "Subnets[?CidrBlock==\`${CIDR_BLOCK_SUBNET_A}\`].SubnetId" \
    --output text) \
    && echo ${SUBNET_A_ID}
結果
subnet-********

作成したサブネットを確認

コマンド
aws ec2 describe-subnets \
    --subnet-ids ${SUBNET_A_ID}
結果
{
    "Subnets": [
        {
            "VpcId": "vpc-********",
            "CidrBlock": "10.0.0.0/24",
            "MapPublicIpOnLaunch": false,
            "DefaultForAz": false,
            "State": "available",
            "AvailabilityZone": "ap-northeast-1a",
            "SubnetId": "subnet-********",
            "AvailableIpAddressCount": 251
        }
    ]
}

4. Route Tableの編集

パブリックサブネットを作成するために、デフォルトのルートテーブルを編集します。

作成したVPCのデフォルトのルートテーブルIDを確認

コマンド
ROUTE_TABLE_ID=$(aws ec2 describe-route-tables \
    --query RouteTables[?VpcId==\'${VPC_ID}\'].RouteTableId \
    --output text) \
    && echo ${ROUTE_TABLE_ID}
結果
rtb-********

ルートテーブルを確認

コマンド
aws ec2 describe-route-tables \
    --query RouteTables[?VpcId==\'${VPC_ID}\']
結果
[
    {
        "Associations": [
            {
                "RouteTableAssociationId": "rtbassoc-********",
                "Main": true,
                "RouteTableId": "rtb-********"
            }
        ],
        "RouteTableId": "rtb-********",
        "VpcId": "vpc-********",
        "PropagatingVgws": [],
        "Tags": [],
        "Routes": [
            {
                "GatewayId": "local",
                "DestinationCidrBlock": "10.0.0.0/16",
                "State": "active",
                "Origin": "CreateRouteTable"
            }
        ]
    }
]

パラメータを確認

コマンド
cat << ETX

   RouteTable_ID: "${ROUTE_TABLE_ID}"
   InternetGateat_ID: "${IGW_ID}"

ETX
結果
   RouteTable_ID: "rtb-********"
   InternetGateat_ID: "igw-********"

デフォルトのルートテーブルにデフォルトルートを追加

コマンド
aws ec2 create-route \
    --route-table-id ${ROUTE_TABLE_ID} \
    --destination-cidr-block '0.0.0.0/0' \
    --gateway-id ${IGW_ID}
結果
{
    "Return": true
}

ルートテーブルに追加したルートを確認

コマンド
aws ec2 describe-route-tables \
    --query RouteTables[?VpcId==\'${VPC_ID}\']
結果
[
    {
        "Associations": [
            {
                "RouteTableAssociationId": "rtbassoc-********",
                "Main": true,
                "RouteTableId": "rtb-********"
            }
        ],
        "RouteTableId": "rtb-********",
        "VpcId": "vpc-********",
        "PropagatingVgws": [],
        "Tags": [],
        "Routes": [
            {
                "GatewayId": "local",
                "DestinationCidrBlock": "10.0.0.0/16",
                "State": "active",
                "Origin": "CreateRouteTable"
            },
            {
                "GatewayId": "igw-********",
                "DestinationCidrBlock": "0.0.0.0/0",
                "State": "active",
                "Origin": "CreateRoute"
            }
        ]
    }
]

5. Sucurity Groupの作成、設定

作業用EC2インスタンス用のSecurity Groupを作成します。
今回、Web Serverのアクセスログをデータソースとするため、80番ポートへのアクセスを許可します。

Security Groupの名前を設定(Amazon Linux用)

コマンド
SG_GROUP_NAME='SSH-HTTP'
SG_DESCRIPTION='JAWS-UG CLI at Co-Edo'

パラメータの確認

コマンド
cat << ETX

   SG_GROUP_NAME: ${SG_GROUP_NAME}
   SG_DESCRIPTION: ${SG_DESCRIPTION}
   VPC_ID: ${VPC_ID}

ETX
結果
   SG_GROUP_NAME: SSH-HTTP
   SG_DESCRIPTION: JAWS-UG CLI at Co-Edo
   VPC_ID: vpc-********

ユーザ作成用のEC2インスタンスに設定するSecurity Groupを作成

コマンド
aws ec2 create-security-group \
    --group-name ${SG_GROUP_NAME} \
    --description "${SG_DESCRIPTION}" \
    --vpc-id ${VPC_ID}
結果
{
    "GroupId": "sg-********"
}
コマンド
SG_ID=$(aws ec2 describe-security-groups \
    --query SecurityGroups[?GroupName==\'${SG_GROUP_NAME}\'].GroupId \
    --output text) \
    && echo ${SG_ID}
結果
sg-********

作成したSecurity Groupを確認

(アウトバウンドの通信のみ全て許可する設定のみ、がデフォルト)

コマンド
aws ec2 describe-security-groups \
    --group-ids ${SG_ID}
結果
{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "UserIdGroupPairs": [],
                    "PrefixListIds": []
                }
            ],
            "Description": "JAWS-UG CLI at Co-Edo",
            "IpPermissions": [],
            "GroupName": "SSH-HTTP",
            "VpcId": "vpc-********",
            "OwnerId": "************",
            "GroupId": "sg-********"
        }
    ]
}

インバウンドのルールを追加

sshおよびHTTP接続を許可します。

接続元のIPアドレスを制限したい場合には、確認君などでIPアドレスを確認してください。
http://www.ugtop.com/spill.shtml

コマンド
aws ec2 authorize-security-group-ingress \
    --group-id ${SG_ID} \
    --protocol 'tcp' \
    --port 22 \
    --cidr 0.0.0.0/0
結果
(返値無し)
コマンド
aws ec2 authorize-security-group-ingress \
    --group-id ${SG_ID} \
    --protocol 'tcp' \
    --port 80 \
    --cidr 0.0.0.0/0
結果
(返値無し)

追加されたルールを確認

コマンド
aws ec2 describe-security-groups \
    --group-ids ${SG_ID}
結果
{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "PrefixListIds": [],
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "UserIdGroupPairs": [],
                    "Ipv6Ranges": []
                }
            ],
            "Description": "JAWS-UG CLI at Co-Edo",
            "IpPermissions": [
                {
                    "PrefixListIds": [],
                    "FromPort": 80,
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "ToPort": 80,
                    "IpProtocol": "tcp",
                    "UserIdGroupPairs": [],
                    "Ipv6Ranges": []
                },
                {
                    "PrefixListIds": [],
                    "FromPort": 22,
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "ToPort": 22,
                    "IpProtocol": "tcp",
                    "UserIdGroupPairs": [],
                    "Ipv6Ranges": []
                }
            ],
            "GroupName": "SSH-HTTP",
            "VpcId": "vpc-********",
            "OwnerId": "************",
            "GroupId": "sg-********"
        }
    ]
}

6. Key Pairの作成

KeyPairの名前および秘密鍵のファイル名を設定

コマンド
KEY_PAIR_NAME='Firehose'
KEY_MATERIAL_FILE='firehose.pem'

同名のKey Pairが存在しないことを確認

コマンド
aws ec2 describe-key-pairs \
    --key-names ${KEY_PAIR_NAME}
結果
An error occurred (InvalidKeyPair.NotFound) when calling the DescribeKeyPairs operation: The key pair 'Firehose' does not exist

同名の秘密鍵ファイルが存在しないことを確認

コマンド
ls -al ~/.ssh | grep ${KEY_MATERIAL_FILE}
結果
(返値無し)

パラメータの確認

コマンド
cat << ETX

   KEY_PAIR_NAME: ${KEY_PAIR_NAME}
   KEY_MATERIAL_FILE: ${KEY_MATERIAL_FILE}

ETX
結果
   KEY_PAIR_NAME: Firehose
   KEY_MATERIAL_FILE: firehose.pem

KeyPairの作成

コマンド
aws ec2 create-key-pair \
    --key-name ${KEY_PAIR_NAME} \
    --query KeyMaterial \
    --output text \
    > ~/.ssh/${KEY_MATERIAL_FILE} \
    && chmod 600 ~/.ssh/${KEY_MATERIAL_FILE}
結果
(返値無し)

Key Pairが作成されたことを確認

コマンド
aws ec2 describe-key-pairs \
    --key-names ${KEY_PAIR_NAME}
結果
{
    "KeyPairs": [
        {
            "KeyName": "Firehose",
            "KeyFingerprint": "**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**"
        }
    ]
}

秘密鍵ファイルを確認

コマンド
cat ~/.ssh/${KEY_MATERIAL_FILE}
結果
-----BEGIN RSA PRIVATE KEY-----
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
****************************************************************************
-----END RSA PRIVATE KEY-----

権限の確認

コマンド
ls -al ~/.ssh/${KEY_MATERIAL_FILE}
結果
-rw------- 1 ec2-user ec2-user 1675 Dec 19 07:08 /home/ec2-user/.ssh/firehose.pem

7. インスタンスプロファイルの作成

このハンズオンでは、EC2インスタンス上でKinesis Firehoseに関する操作を行います。
そのための権限をEC2インスタンスに付与します。

これにより、インスタンスメタデータからアクセスキーやトークンを取得できるため、aws-cliを利用する際にアクセスキーを直接扱う必要がなくなります。

IAM Role名を指定

コマンド
ROLE_NAME='firehose-agent-role'

同名のロールがないことを確認

コマンド
aws iam get-role --role-name ${ROLE_NAME}
結果
An error occurred (NoSuchEntity) when calling the GetRole operation: Unknown

信頼関係の定義

コマンド
TRUST_POLICY_FILE='Trust-Policy.json'
コマンド
cat << EOF > ${TRUST_POLICY_FILE}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
結果
(返値無し)

JSONファイルを検証

コマンド
jsonlint -q ${TRUST_POLICY_FILE}
結果
(返値無し)

IAMロールの作成

コマンド
aws iam create-role \
    --role-name ${ROLE_NAME} \
    --assume-role-policy-document file://${TRUST_POLICY_FILE}
結果
{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Principal": {
                        "Service": "ec2.amazonaws.com"
                    },
                    "Effect": "Allow",
                    "Sid": ""
                }
            ]
        },
        "RoleId": "A********************",
        "CreateDate": "2016-04-02T12:33:09.681Z",
        "RoleName": "firehose-agent-role",
        "Path": "/",
        "Arn": "arn:aws:iam::************:role/firehose-agent-role"
    }
}

IAMロールにManaged Policyをアタッチ

デリバリーストリームへのデータを投稿する権限を付与します。(ポリシーの作成手順を省略するため、既存のポリシーを利用しています。)

コマンド
KFH_POLICY_ARN='arn:aws:iam::aws:policy/AmazonKinesisFirehoseFullAccess'
コマンド
aws iam attach-role-policy \
    --role-name ${ROLE_NAME} \
    --policy-arn ${KFH_POLICY_ARN}
結果
(返値無し)

IAM Roleにポリシーがアタッチされたことを確認

コマンド
aws iam list-attached-role-policies --role-name ${ROLE_NAME}
結果
{
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonKinesisFirehoseFullAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AmazonKinesisFirehoseFullAccess"
        }
    ]
}

同名のインスタンスプロファイルが存在しないことを確認

コマンド
aws iam get-instance-profile --instance-profile-name ${ROLE_NAME}
結果
An error occurred (NoSuchEntity) when calling the GetInstanceProfile operation: Instance Profile firehose-agent-role cannot be found.

インスタンスプロファイルを作成

コマンド
aws iam create-instance-profile \
    --instance-profile-name ${ROLE_NAME}
結果
{
    "InstanceProfile": {
        "InstanceProfileId": "A********************",
        "Roles": [],
        "CreateDate": "2016-04-02T12:35:07.689Z",
        "InstanceProfileName": "firehose-agent-role",
        "Path": "/",
        "Arn": "arn:aws:iam::************:instance-profile/firehose-agent-role"
    }
}

インスタンスプロファイルが作成されたことを確認

コマンド
aws iam get-instance-profile \
    --instance-profile-name ${ROLE_NAME}
結果
{
    "InstanceProfile": {
        "InstanceProfileId": "A********************",
        "Roles": [],
        "CreateDate": "2016-04-02T12:35:07Z",
        "InstanceProfileName": "firehose-agent-role",
        "Path": "/",
        "Arn": "arn:aws:iam::************:instance-profile/firehose-agent-role"
    }
}

インスタンスプロファイルにIAM Roleを追加

コマンド
aws iam add-role-to-instance-profile \
    --instance-profile-name ${ROLE_NAME} \
    --role-name ${ROLE_NAME}
結果
(返値無し)

インスタンスプロファイルにIAM Roleが追加されたことを確認

コマンド
aws iam get-instance-profile \
    --instance-profile-name ${ROLE_NAME}
結果
{
    "InstanceProfile": {
        "InstanceProfileId": "A********************",
        "Roles": [
            {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Action": "sts:AssumeRole",
                            "Principal": {
                                "Service": "ec2.amazonaws.com"
                            },
                            "Effect": "Allow",
                            "Sid": ""
                        }
                    ]
                },
                "RoleId": "A********************",
                "CreateDate": "2016-04-02T12:33:09Z",
                "RoleName": "firehose-agent-role",
                "Path": "/",
                "Arn": "arn:aws:iam::************:role/firehose-agent-role"
            }
        ],
        "CreateDate": "2016-04-02T12:35:07Z",
        "InstanceProfileName": "firehose-agent-role",
        "Path": "/",
        "Arn": "arn:aws:iam::************:instance-profile/firehose-agent-role"
    }
}

8. EC2インスタンスの作成

Amazon Linuxの最新AMIのImage IDを確認

Amazon LinuxのAMIのうち、最新のAMIを利用します。
(2016年12月3日現在)

コマンド
AMI_ID=ami-5ec1673e

AWSアカウントのIDを取得

コマンド
AWS_ID=$(aws sts get-caller-identity \
    --query Account \
    --output text) \
    && echo ${AWS_ID}
結果
************

プライベートIPアドレスを指定

コマンド
PRIVATE_IP_ADDRESS="10.0.0.10"

パラメータを確認

コマンド
cat << ETX

   AWS_ID: ${AWS_ID}
   AMI_ID: "${AMI_ID}"
   KEY_PAIR_NAME: ${KEY_PAIR_NAME}
   SecurityGroup_ID: "${SG_ID}"
   Subnet_ID: "${SUBNET_A_ID}"
   PRIVATE_IP_ADDRESS: ${PRIVATE_IP_ADDRESS}
   Instance Profile ARN: arn:aws:iam::${AWS_ID}:instance-profile/${ROLE_NAME}

ETX
結果
   AWS_ID: ************
   AMI_ID: "ami-5ec1673e"
   KEY_PAIR_NAME: Firehose
   SecurityGroup_ID: "sg-********"
   Subnet_ID: "subnet-********"
   PRIVATE_IP_ADDRESS: 10.0.0.10
   Instance Profile ARN: arn:aws:iam::************:instance-profile/firehose-agent-role

EC2インスタンスを作成

コマンド
aws ec2 run-instances \
    --image-id ${AMI_ID} \
    --key-name ${KEY_PAIR_NAME} \
    --security-group-ids ${SG_ID} \
    --instance-type 't2.micro' \
    --subnet-id ${SUBNET_A_ID} \
    --associate-public-ip-address \
    --private-ip-address ${PRIVATE_IP_ADDRESS} \
    --iam-instance-profile Arn=arn:aws:iam::${AWS_ID}:instance-profile/${ROLE_NAME}
結果
{
    "OwnerId": "************",
    "ReservationId": "r-0b28c************",
    "Groups": [],
    "Instances": [
        {
            "Monitoring": {
                "State": "disabled"
            },
            "PublicDnsName": "",
            "RootDeviceType": "ebs",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "EbsOptimized": false,
            "LaunchTime": "2016-12-19T07:20:08.000Z",
            "PrivateIpAddress": "10.0.0.10",
            "ProductCodes": [],
            "VpcId": "vpc-********",
            "StateTransitionReason": "",
            "InstanceId": "i-0****************",
            "ImageId": "ami-5ec1673e",
            "PrivateDnsName": "ip-10-0-0-10.us-west-2.compute.internal",
            "KeyName": "Firehose",
            "SecurityGroups": [
                {
                    "GroupName": "SSH-HTTP",
                    "GroupId": "sg-********"
                }
            ],
            "ClientToken": "",
            "SubnetId": "subnet-********",
            "InstanceType": "t2.micro",
            "NetworkInterfaces": [
                {
                    "Status": "in-use",
                    "MacAddress": "02:5d:2f:3b:65:9f",
                    "SourceDestCheck": true,
                    "VpcId": "vpc-********",
                    "Description": "",
                    "NetworkInterfaceId": "eni-********",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "10.0.0.10"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "Attachment": {
                        "Status": "attaching",
                        "DeviceIndex": 0,
                        "DeleteOnTermination": true,
                        "AttachmentId": "eni-attach-********",
                        "AttachTime": "2016-12-19T07:20:08.000Z"
                    },
                    "Groups": [
                        {
                            "GroupName": "SSH-HTTP",
                            "GroupId": "sg-********"
                        }
                    ],
                    "SubnetId": "subnet-********",
                    "OwnerId": "************",
                    "PrivateIpAddress": "10.0.0.10"
                }
            ],
            "SourceDestCheck": true,
            "Placement": {
                "Tenancy": "default",
                "GroupName": "",
                "AvailabilityZone": "us-west-2a"
            },
            "Hypervisor": "xen",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "StateReason": {
                "Message": "pending",
                "Code": "pending"
            },
            "IamInstanceProfile": {
                "Id": "A********************",
                "Arn": "arn:aws:iam::************:instance-profile/firehose-agent-role"
            },
            "RootDeviceName": "/dev/xvda",
            "VirtualizationType": "hvm",
            "AmiLaunchIndex": 0
        }
    ]
}
コマンド
INSTANCE_ID=$(aws ec2 describe-instances \
    --query "Reservations[].Instances[?PrivateIpAddress==\`${PRIVATE_IP_ADDRESS}\`].InstanceId" \
    --output text) \
    && echo ${INSTANCE_ID}
結果
i-********

EC2インスタンスが作成されたことを確認

コマンド
aws ec2 describe-instances \
    --instance-ids ${INSTANCE_ID}
結果(例)
{
    "Reservations": [
        {
            "OwnerId": "************",
            "ReservationId": "r-0****************",
            "Groups": [],
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
                    },
                    "PublicDnsName": "",
                    "State": {
                        "Code": 16,
                        "Name": "running"
                    },
                    "EbsOptimized": false,
                    "LaunchTime": "2016-04-02T13:07:20.000Z",
                    "PublicIpAddress": "**.**.**.**",
                    "PrivateIpAddress": "10.0.0.10",
                    "ProductCodes": [],
                    "VpcId": "vpc-********",
                    "StateTransitionReason": "",
                    "InstanceId": "i-0****************",
                    "ImageId": "ami-f80e0596",
                    "PrivateDnsName": "ip-10-0-0-10.ap-northeast-1.compute.internal",
                    "KeyName": "Redshift",
                    "SecurityGroups": [
                        {
                            "GroupName": "SSH",
                            "GroupId": "sg-********"
                        }
                    ],
                    "ClientToken": "",
                    "SubnetId": "subnet-********",
                    "InstanceType": "t2.micro",
                    "NetworkInterfaces": [
                        {
                            "Status": "in-use",
                            "MacAddress": "**:**:**:**:**:**",
                            "SourceDestCheck": true,
                            "VpcId": "vpc-********",
                            "Description": "",
                            "Association": {
                                "PublicIp": "**.**.**.**",
                                "PublicDnsName": "",
                                "IpOwnerId": "amazon"
                            },
                            "NetworkInterfaceId": "eni-********",
                            "PrivateIpAddresses": [
                                {
                                    "Association": {
                                        "PublicIp": "**.**.**.**",
                                        "PublicDnsName": "",
                                        "IpOwnerId": "amazon"
                                    },
                                    "Primary": true,
                                    "PrivateIpAddress": "10.0.0.10"
                                }
                            ],
                            "Attachment": {
                                "Status": "attached",
                                "DeviceIndex": 0,
                                "DeleteOnTermination": true,
                                "AttachmentId": "eni-attach-********",
                                "AttachTime": "2016-04-02T13:07:20.000Z"
                            },
                            "Groups": [
                                {
                                    "GroupName": "SSH",
                                    "GroupId": "sg-********"
                                }
                            ],
                            "SubnetId": "subnet-********",
                            "OwnerId": "************",
                            "PrivateIpAddress": "10.0.0.10"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Placement": {
                        "Tenancy": "default",
                        "GroupName": "",
                        "AvailabilityZone": "ap-northeast-1a"
                    },
                    "Hypervisor": "xen",
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/xvda",
                            "Ebs": {
                                "Status": "attached",
                                "DeleteOnTermination": true,
                                "VolumeId": "vol-********",
                                "AttachTime": "2016-04-02T13:07:20.000Z"
                            }
                        }
                    ],
                    "Architecture": "x86_64",
                    "RootDeviceType": "ebs",
                    "IamInstanceProfile": {
                        "Id": "A********************",
                        "Arn": "arn:aws:iam::************:instance-profile/redshift-role"
                    },
                    "RootDeviceName": "/dev/xvda",
                    "VirtualizationType": "hvm",
                    "AmiLaunchIndex": 0
                }
            ]
        }
    ]
}

パブリックIPを確認

コマンド
PUBLIC_IP_ADDRESS=$(aws ec2 describe-instances \
    --instance-ids ${INSTANCE_ID} \
    --query Reservations[0].Instances[0].PublicIpAddress \
    --output text) \
    && echo ${PUBLIC_IP_ADDRESS}
結果
**.**.**.**

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away