AWS CLI を使用して IPv4 対応 VPC とサブネットを作成する
次の例では、AWS CLI コマンドを使用して、IPv4 CIDR ブロックを含むデフォルトではない VPC と、VPC 内にパブリックサブネット、プライベートサブネットを作成しています。VPC およびサブネットを作成したら、パブリックサブネット内にインスタンスを起動して、接続できるようになります。開始するには、最初に AWS CLI をインストールして設定する必要があります。詳細については、「AWS CLI のインストール」を参照してください。
次の AWS リソースを作成します。
-
VPC
-
2 つのサブネット
-
インターネットゲートウェイ
-
ルートテーブル
-
EC2 インスタンス
ステップ 1: VPC とサブネットを作成する
最初のステップは、VPC、2 つのサブネットを作成することです。この例では、VPC の CIDR ブロック 10.0.0.0/16
を使用しますが、別の CIDR ブロックを選択できます。詳細については、「VPC のサイジング」を参照してください。
AWS CLI を使用して VPC およびサブネットを作成するには
-
次の create-vpc コマンドを使用して、
10.0.0.0/16
CIDR ブロックで VPC を作成します。aws ec2 create-vpc --cidr-block
10.0.0.0/16
--query Vpc.VpcId --output textこのコマンドは、新しい VPC の ID を返します。次に例を示します。
vpc-2f09a348
-
前述の手順の VPC ID を使用して、次の create-subnet コマンドを使用して、
10.0.1.0/24
CIDR ブロックでサブネットを作成します。aws ec2 create-subnet --vpc-id
vpc-2f09a348
--cidr-block10.0.1.0/24
-
VPC で、
10.0.0.0/24
CIDR ブロックを持つ 2 番目のサブネットを作成します。aws ec2 create-subnet --vpc-id
vpc-2f09a348
--cidr-block10.0.0.0/24
ステップ 2: サブネットをパブリックにする
VPC およびサブネットを作成した後、VPC にインターネットゲートウェイをアタッチして、カスタムルートテーブルを作成し、インターネットゲートウェイへのサブネットのルーティングを構成すると、サブネットをパブリックサブネットにすることができます。
サブネットをパブリックサブネットにするには
-
以下の create-internet-gateway コマンドを使用して、インターネットゲートウェイを作成します。
aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text
このコマンドは、新しいインターネットゲートウェイの ID を返します。次に例を示します。
igw-1ff7a07b
-
前述の手順 の ID を使用して、次の attach-internet-gateway コマンドを使用してインターネットゲートウェイをVPCに接続します。
aws ec2 attach-internet-gateway --vpc-id
vpc-2f09a348
--internet-gateway-idigw-1ff7a07b
次の create-route-table コマンドを使用して、VPC のカスタムルートテーブルを作成します。
aws ec2 create-route-table --vpc-id
vpc-2f09a348
--query RouteTable.RouteTableId --output textこのコマンドは、新しいルートテーブルの ID を返します。次に例を示します。
rtb-c1c8faa6
-
次の create-route コマンドを使用して、すべてのトラフィック(
0.0.0.0/0
)がインターネットゲートウェイを指すルートをルートテーブルに作成します。aws ec2 create-route --route-table-id
rtb-c1c8faa6
--destination-cidr-block0.0.0.0/0
--gateway-idigw-1ff7a07b
-
(オプション)ルートが作成され有効になっていることを確認するには、以下の describe-route-tables コマンドを実行します。
aws ec2 describe-route-tables --route-table-id
rtb-c1c8faa6
{ "RouteTables": [ { "Associations": [], "RouteTableId": "rtb-c1c8faa6", "VpcId": "vpc-2f09a348", "PropagatingVgws": [], "Tags": [], "Routes": [ { "GatewayId": "local", "DestinationCidrBlock": "10.0.0.0/16", "State": "active", "Origin": "CreateRouteTable" }, { "GatewayId": "igw-1ff7a07b", "DestinationCidrBlock": "0.0.0.0/0", "State": "active", "Origin": "CreateRoute" } ] } ] }
ルートテーブルは現在、サブネットには関連付けられていません。サブネットからのトラフィックがインターネットゲートウェイにルーティングされるよう、ルートテーブルを VPC のサブネットに関連付ける必要があります。次の describe-subnets コマンドを使用して、サブネット ID を取得します。
--filter
オプションは、サブネットを新しい VPC のみに制限し、--query
オプションは、サブネットID とその CIDR ブロックのみを返します。aws ec2 describe-subnets --filters "Name=vpc-id,Values=
vpc-2f09a348
" --query "Subnets[*].{ID:SubnetId,CIDR:CidrBlock}"[ { "CIDR": "10.0.1.0/24", "ID": "subnet-b46032ec" }, { "CIDR": "10.0.0.0/24", "ID": "subnet-a46032fc" } ]
例えば
subnet-b46032ec
などのカスタムルートテーブルに関連付けるサブネットを選択し、associate-route-table コマンドを使用して関連付けることができます。このサブネットはパブリックサブネットです。aws ec2 associate-route-table --subnet-id
subnet-b46032ec
--route-table-idrtb-c1c8faa6
-
(オプション)次の modify-subnet-attribute コマンドを使用して、サブネットに起動されたインスタンスが自動的にパブリック IP アドレスを受け取るように、サブネットのパブリック IP アドレス指定の動作を変更できます。 これを行わない場合は、起動後に Elastic IP アドレスをインスタンスに関連付けて、インスタンスがインターネットからアクセスできるようにします。
aws ec2 modify-subnet-attribute --subnet-id
subnet-b46032ec
--map-public-ip-on-launch
ステップ 3: サブネット内にインスタンスを起動する
サブネットがパブリックであること、および、サブネット内のインスタンスにインターネット経由でアクセスできることをテストするには、パブリックサブネット内でインスタンスを起動して接続します。最初に、インスタンスに関連付けるセキュリティグループと、インスタンスに接続するキーペアを作成する必要があります。セキュリティグループの詳細については、セキュリティグループを使用してリソースへのトラフィックを制御する を参照してください。キーペアの詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EC2 キーペア」を参照してください。
パブリックサブネット内のインスタンスを起動して接続するには
キーペアを作成して、
--query
オプションと--output
テキストオプションを使用し、.pem
拡張機能でプライベートキーをファイルに直接パイプします。aws ec2 create-key-pair --key-name
MyKeyPair
--query "KeyMaterial" --output text >MyKeyPair.pem
この例では、Amazon Linux インスタンスを起動します。Linux または Mac OS X オペレーティングシステムの SSH クライアントを使用して Linux インスタンスに接続する場合は、次のコマンドを使用してプライベートキーファイルの権限を設定すると、お客様以外のユーザーはそれを読み取ることができないようになります。
chmod 400
MyKeyPair.pem
create-security-group コマンドを使用して、VPC にセキュリティグループを作成します。
aws ec2 create-security-group --group-name
SSHAccess
--description "Security group for SSH access
" --vpc-idvpc-2f09a348
{ "GroupId": "sg-e1fb8c9a" }
authorize-security-group-ingress コマンドを使用して、あらゆる場所からの SSH アクセスを許可するルールを追加します。
aws ec2 authorize-security-group-ingress --group-id
sg-e1fb8c9a
--protocoltcp
--port22
--cidr0.0.0.0/0
注記 0.0.0.0/0
を使用すると、すべての IPv4 アドレスから SSH 経由でインスタンスにアクセスすることが許可されます。これは、この短期間の実習では許容されますが、本稼働環境では、特定の IP アドレスまたはアドレス範囲のみ許可してください。作成したセキュリティグループとキーペアを使用して、パブリックサブネット内でインスタンスを起動します。出力内のインスタンスのインスタンス ID をメモしておきます。
aws ec2 run-instances --image-id
ami-a4827dc9
--count 1 --instance-typet2.micro
--key-nameMyKeyPair
--security-group-idssg-e1fb8c9a
--subnet-idsubnet-b46032ec
注記 この例で、AMI は米国東部 (バージニア北部) リージョンの Amazon Linux AMI です。別のリージョンの場合、リージョン内の適した AMI の AMI ID が必要になります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Linux AMI の検索」を参照してください。
-
インスタンスに接続するには、そのインスタンスが
running
状態になっている必要があります。インスタンスの状態と IP アドレスを記述するには、次のコマンドを使用します。aws ec2 describe-instances --instance-id
i-0146854b7443af453
--query "Reservations[*].Instances[*].{State:State.Name,Address:PublicIpAddress}"以下は出力例です。
[ [ { "State": "running", "Address": "52.87.168.235" } ] ]
インスタンスが実行状態にあるときは、次のコマンドで、Linux または Mac OS X コンピュータの SSH クライアントを使用してそのインスタンスに接続できます。
ssh -i "
MyKeyPair.pem
"ec2-user@52.87.168.235
Windows コンピュータから接続する場合は、「PuTTY を使用した Windows から Linux インスタンスへの接続」の手順を使用します。
ステップ 4: クリーンアップする
インスタンスに接続できることを確認したあと、そのインスタンスが不要であれば終了できます。これを行うには、terminate-instances コマンドを使用します。この例で作成したそのほかのリソースを削除するには、 の順にコマンドを実行します。
-
セキュリティグループを削除する:
aws ec2 delete-security-group --group-id
sg-e1fb8c9a
-
サブネットを削除する:
aws ec2 delete-subnet --subnet-id
subnet-b46032ec
aws ec2 delete-subnet --subnet-id
subnet-a46032fc
-
カスタムルートテーブルを削除する:
aws ec2 delete-route-table --route-table-id
rtb-c1c8faa6
-
VPC からのインターネットゲートウェイのデタッチ:
aws ec2 detach-internet-gateway --internet-gateway-id
igw-1ff7a07b
--vpc-idvpc-2f09a348
-
インターネットゲートウェイの削除:
aws ec2 delete-internet-gateway --internet-gateway-id
igw-1ff7a07b
-
VPC の削除:
aws ec2 delete-vpc --vpc-id
vpc-2f09a348