AWS CLI を使用して IPv4 対応 VPC とサブネットを作成する - Amazon Virtual Private Cloud

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 およびサブネットを作成するには

  1. 次の 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
  2. 前述の手順の VPC ID を使用して、次の create-subnet コマンドを使用して、10.0.1.0/24 CIDR ブロックでサブネットを作成します。

    aws ec2 create-subnet --vpc-id vpc-2f09a348 --cidr-block 10.0.1.0/24
  3. VPC で、10.0.0.0/24 CIDR ブロックを持つ 2 番目のサブネットを作成します。

    aws ec2 create-subnet --vpc-id vpc-2f09a348 --cidr-block 10.0.0.0/24

ステップ 2: サブネットをパブリックにする

VPC およびサブネットを作成した後、VPC にインターネットゲートウェイをアタッチして、カスタムルートテーブルを作成し、インターネットゲートウェイへのサブネットのルーティングを構成すると、サブネットをパブリックサブネットにすることができます。

サブネットをパブリックサブネットにするには

  1. 以下の create-internet-gateway コマンドを使用して、インターネットゲートウェイを作成します。

    aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text

    このコマンドは、新しいインターネットゲートウェイの ID を返します。次に例を示します。

    igw-1ff7a07b
  2. 前述の手順 の ID を使用して、次の attach-internet-gateway コマンドを使用してインターネットゲートウェイをVPCに接続します。

    aws ec2 attach-internet-gateway --vpc-id vpc-2f09a348 --internet-gateway-id igw-1ff7a07b
  3. 次の create-route-table コマンドを使用して、VPC のカスタムルートテーブルを作成します。

    aws ec2 create-route-table --vpc-id vpc-2f09a348 --query RouteTable.RouteTableId --output text

    このコマンドは、新しいルートテーブルの ID を返します。次に例を示します。

    rtb-c1c8faa6
  4. 次の create-route コマンドを使用して、すべてのトラフィック(0.0.0.0/0)がインターネットゲートウェイを指すルートをルートテーブルに作成します。

    aws ec2 create-route --route-table-id rtb-c1c8faa6 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-1ff7a07b
  5. (オプション)ルートが作成され有効になっていることを確認するには、以下の 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" } ] } ] }
  6. ルートテーブルは現在、サブネットには関連付けられていません。サブネットからのトラフィックがインターネットゲートウェイにルーティングされるよう、ルートテーブルを 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" } ]
  7. 例えば subnet-b46032ec などのカスタムルートテーブルに関連付けるサブネットを選択し、associate-route-table コマンドを使用して関連付けることができます。このサブネットはパブリックサブネットです。

    aws ec2 associate-route-table --subnet-id subnet-b46032ec --route-table-id rtb-c1c8faa6
  8. (オプション)次の 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 キーペア」を参照してください。

パブリックサブネット内のインスタンスを起動して接続するには

  1. キーペアを作成して、--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
  2. create-security-group コマンドを使用して、VPC にセキュリティグループを作成します。

    aws ec2 create-security-group --group-name SSHAccess --description "Security group for SSH access" --vpc-id vpc-2f09a348
    { "GroupId": "sg-e1fb8c9a" }

    authorize-security-group-ingress コマンドを使用して、あらゆる場所からの SSH アクセスを許可するルールを追加します。

    aws ec2 authorize-security-group-ingress --group-id sg-e1fb8c9a --protocol tcp --port 22 --cidr 0.0.0.0/0
    注記

    0.0.0.0/0 を使用すると、すべての IPv4 アドレスから SSH 経由でインスタンスにアクセスすることが許可されます。これは、この短期間の実習では許容されますが、本稼働環境では、特定の IP アドレスまたはアドレス範囲のみ許可してください。

  3. 作成したセキュリティグループとキーペアを使用して、パブリックサブネット内でインスタンスを起動します。出力内のインスタンスのインスタンス ID をメモしておきます。

    aws ec2 run-instances --image-id ami-a4827dc9 --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-e1fb8c9a --subnet-id subnet-b46032ec
    注記

    この例で、AMI は米国東部 (バージニア北部) リージョンの Amazon Linux AMI です。別のリージョンの場合、リージョン内の適した AMI の AMI ID が必要になります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Linux AMI の検索」を参照してください。

  4. インスタンスに接続するには、そのインスタンスが 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" } ] ]
  5. インスタンスが実行状態にあるときは、次のコマンドで、Linux または Mac OS X コンピュータの SSH クライアントを使用してそのインスタンスに接続できます。

    ssh -i "MyKeyPair.pem" ec2-user@52.87.168.235

    Windows コンピュータから接続する場合は、「PuTTY を使用した Windows から Linux インスタンスへの接続」の手順を使用します。

ステップ 4: クリーンアップする

インスタンスに接続できることを確認したあと、そのインスタンスが不要であれば終了できます。これを行うには、terminate-instances コマンドを使用します。この例で作成したそのほかのリソースを削除するには、 の順にコマンドを実行します。

  1. セキュリティグループを削除する:

    aws ec2 delete-security-group --group-id sg-e1fb8c9a
  2. サブネットを削除する:

    aws ec2 delete-subnet --subnet-id subnet-b46032ec
    aws ec2 delete-subnet --subnet-id subnet-a46032fc
  3. カスタムルートテーブルを削除する:

    aws ec2 delete-route-table --route-table-id rtb-c1c8faa6
  4. VPC からのインターネットゲートウェイのデタッチ:

    aws ec2 detach-internet-gateway --internet-gateway-id igw-1ff7a07b --vpc-id vpc-2f09a348
  5. インターネットゲートウェイの削除:

    aws ec2 delete-internet-gateway --internet-gateway-id igw-1ff7a07b
  6. VPC の削除:

    aws ec2 delete-vpc --vpc-id vpc-2f09a348