AWS 使ってみようVPC
はじめに
VPC(Virtual Private Cloud)とは、AWS上に仮想ネットワークを作成する事ができるサービスです。
このVPCを使うと、インターネットに接続するパブリックサブネットや、データベースなどインターネットに接続させないプライベートサブネットなど、役割に応じてネットワークを分けて作成したり、インターネットVPNなど、セキュアなネットワークを構築する事が出来るようになっています。
仮想ネットワークの設定となると、敷居が高くなったような感じで、不安になったりしますが案外、要点さえ掴んでしまえば大した事はありません。
本稿では、重要な用語や設定方法などVPCの基本を理解する為の最初の一歩を解説します。
また、作成したサブネットにEC2インスタンスを作成する手順も解説しますので、
ぜひ最後までご覧下さい。
VPCを理解する為の重要キーワード
リージョンとアベイラビリティゾーン
リージョンは世界中に存在するAWSのデータセンターを、各地域ごとに纏めたようなものです。
各データセンターは、AZ(アベイラビリティゾーン)と呼ばれております。各AZの具体的な場所は公表されていないそうです。リージョンは複数のAZにまたがって構成されているので、万が一の災害やテロなどで、1つのAZがダウンしても、その他のAZで稼働できるようになっているため、AWSが障害に強い理由の1つとなっています。
サブネット
VPCの中に作成する事ができるネットワークです。
各用途ごとに、VPC内に複数作成する事ができます。
例えば、インターネットからのアクセスを許可するWebサーバーを配置する為のパブリックサブネットや、データベースなど、VPC内部の通信のみ許可して、インターネットには直接繋がないようにするプライベートサブネットを作成する事ができます。
また、サブネットは各AZに複数個作成する事ができます。
インターネットゲートウェイとルートテーブル
インターネットゲートウェイは、VPCとインターネットをつなぐ仮想的なルータです。
そのためVPC内部のパブリックサブネットに配置された、EC2インスタンスをインターネットに接続するには、インターネットゲートウェイを作成して、VPCにアタッチする必要があります。
ルートテーブル
ルートテーブルはVPC内部のサブネットごとに、通信の通り道を設定するためのものです。
後ほど、設定手順をご紹介します。
新規でVPCを作成してみる
実際に東京リージョンにVPCを作成してみます。
AWSにログイン後、サービスでVPCと検索してVPCのページを表示します。リージョンは東京が選択されている事を確認し、次にVPCの作成ボタンをクリックします。
以下の通り入力し、作成ボタンをクリックします。
- 名前タグ:vpc−tokyo-test01
- IPv4 CIRDブロック:10.0.0.0/16
- IPv6 CIDRブロック:IPv6 CIDRブロック なし
以上でVPCの作成は完了です。
サブネットの作成
VPCを作成したら、そのVPCの中にサブネットを作成します。これも実際にやってみました。
VPCのページで左側のメニューからサブネットを選択します。
すでにデフォルトのサブネットが作成されていますが、今回は使いません。サブネットの作成ボタンをクリックし、以下のように入力して作成ボタンをクリックします。
- 名前タグ:subnet-public-az1a
- VPC:ここは、先程作成したVPCを選択します
- アベイラビリティゾーン:ap-northeast-1a
- IPv4 CIDR ブロック:10.0.20.0/24
以上でサブネットの作成は完了です。
インターネットゲートウェイの作成
VPCのページで左側のメニューからインターネットゲートウェイを選択します。
インターネットゲートウェイの作成ボタンをクリックし、名前タグを入力して作成ボタンをクリックします。
- 名前タグ:igw-mygw
次に、作成したゲートウェイを選択し、アクションから、VPCにアタッチを選択します。
先程作成したVPCを選択し、アタッチボタンをクリックします。
以上で、インターネットゲートウェイの作成は完了です。
ルートテーブルの作成
VPCのページで左側のメニューからルートテーブルを選択します。
以下のように入力し作成ボタンをクリックします。
- 名前タグ:rt-public-01
- VPC:先程作成したVPCを選択します
デフォルトで、送信先に10.0.0.0/16が指定されたエントリーがあるのですが、これはVPC内部の通信用途ですので、外部に接続する設定を追加します。
先程作成した rt-public-01を選択し、ルートタブ > ルートの編集の順にクリックします。
ルートの編集ページで、ルートの追加ボタンをクリックし、以下のように入力してルートの保存ボタンをクリックします。
- 送信先:0.0.0.0/0
- ターゲット:先程作成したインターネットゲートウェイ
作成したルートテーブルを選択し、サブネットの関連付け > サブネットの関連付けの編集の順でクリックします。
今回関連付けを行うのは、パブリックサブネットなので、subnet-public-az1a を選択し保存ボタンをクリックします。
以上で、ルートテーブルの作成は完了です。
パブリックサブネットにEC2インスタンスを作成してみる
上記で作成したVPCとパブリックサブネットを指定してEC2インスタンスを作成してみます。
- AMIの選択:AmazonLinux2
- インスタンスタイプ:t2.micro
- ネットワーク:vpc−tokyo-test01
- サブネット:subnet-public-az1a
- 自動割り当てパブリックIP:有効化
また、後ほどpingによる接続確認を行うため、EC2のセキュリティグループ に下記設定を追加します。
- タイプ:すべてのICMP IPv4
- プロトコル:すべて
- ポート範囲:該当なし
- ソース:ご自身のグローバルIPアドレス
EC2インスタンスにpingで疎通確認してみる
EC2のページからIPv4パブリックIPを確認します。
Windowsならコマンドプロンプト、macならターミナルを立ち上げて、先程作成したEC2インスタンスにpingを飛ばして結果が返ってくるか確認します。
上記の設定がすべて正しく設定できていれば、EC2インスタンスから応答が返ってくるはずです。
AWS CLIで作成してみる
上記手順に慣れてくると、いちいちマネジメントコンソールから実行するのも面倒くさいと感じるかもしれません。
AWS CLIを使うと、手元でご利用されているパソコンから間接的にAWSのAPIを使って、様々な操作を実行出来るようになります。
上記で記載した、VPC、サブネット、インターネットゲートウェイ、ルートテーブル、EC2インスタンスの作成や設定もコマンドで実行できるので、作業スピードは格段に速くなります。
実は、EC2インスタンスには、既にAWS CLIがインストールされていますので、簡単なセットアップだけで使えるようになります。
しかし、いちいちEC2にログインするのも手間ですし、手元でご利用のパソコンからコマンドで直接AWSを操作してみたいと思われる方も多いと思います
そこで、AWS CLIのインストールとセットアップから、本稿で紹介した手順をAWC CLIで実行してみたいと思います。
AWS CLIのインストール
インストールに関しては、AWS公式サイトをご覧頂いたほうが、分かりやすいと思います。
今回は、AWS CLI バージョン2 を選択します。
インストールが完了したら、コマンドラインで aws と入力します。
usage などが表示されたら無事インストール出来ている事になります。
AWS CLIセットアップ
続いて、セットアップを行います。
セットアップには、IAMユーザーのアクセスキーが必要になります。
AWSのマネジメントコンソールから、IAMの画面を開いて、対象のIAMユーザーを選択し、認証情報タブから、アクセスキーの作成ボタンをクリックします。
アクセスキーIDとシークレットアクセスキーが表示されます。また、2つのキー情報が記載されたcsvファイルもダウンロード出来ます。画面を閉じてしまうと、シークレットアクセスキーが確認出来なくなりますので、csvファイルは必ずダウンロードして大切に保管するようにしましょう。
コマンドラインでaws configure と入力後、以下の様に入力していきます。
- AWS Access Key ID [None] : [IAMユーザーのアクセスキー]
- AWS Secret Access Key [None] : [IAMユーザーのシークレットアクセスキー]
- Default region name [None] : [ap-northeast-1] //※東京リージョンの場合
- Default output format [None] : json
以上でセットアップは完了です。
AWS CLIでVPCの作成
VPCを作成するには、以下のコマンドを実行します。
- aws ec2 create-vpc –cidr-block 10.0.0.0/16
作成されたvpcの情報がjson形式で表示されたらOKです。また、作成済みのvpcを確認するコマンドは以下の通りです。
- aws ec2 describe-vpcs
このままでも良いのですが、管理しやすいようにVPCにNameタグをつけましょう。
- aws ec2 create-tags –resources [VPCのID] –tags “Key=Name, Value=[任意の名称]”
AWS CLIでサブネット作成
サブネットを作成するには、以下のコマンドを実行します。
- aws ec2 create-subnet –vpc-id [VPCのID] –cidr-block [サブネットのCIDRブロック] –availability-zone [サブネットを作成するAZ]
管理上、パブリックサブネットなのかプライベートサブネットなのか判別しやすいようにNameタグを付けましょう。 コマンドは先程と同様です。
- aws ec2 create-tags –resources [サブネットのID] –tags “Key=Name, Value=[任意の名称]”
作成済みのサブネットを確認するコマンドは以下の通りです。
- aws ec2 describe-subnets
AWS CLIでインターネットゲートウェイを作成する
作成したサブネットをパブリックサブネットにするために、まずインターネットゲートウェイを作成します。
作成、タグ付け、確認のコマンドは以下の通りです。
- aws ec2 create-internet-gateway
- aws ec2 create-tags –resources [IGWのID] –tags “Key=Name, Value=[任意の名称]”
- aws ec2 describe-internet-gateways
作成後、パブリックサブネットが属するVPCにアタッチが必要です。
デフォルトVPCがアタッチされてしまっている場合は、まずデタッチしてからアタッチします。
- aws ec2 detach-internet-gateway –internet-gateway-id [IGWのID] –vpc-id [デタッチするVPCのID]
- aws ec2 attach-internet-gateway –internet-gateway-id [IGWのID] –vpc-id [アタッチするVPCのID]
AWS CLIでルートテーブルを作成する
作成、タグ付け、確認のコマンドは以下の通りです。
- aws ec2 create-route-table –vpc-id [VPCのID]
- aws ec2 create-tags –resources [ルートテーブルのID] –tags “Key=Name, Value=[任意の名称]”
- aws ec2 describe-route-tables
作成したルートテーブルをパブリックサブネットに関連付けます。
- aws ec2 associate-route-table –subnet-id [サブネットのID] –route-table-id [ルートテーブルのID]
AWS CLIでセキュリティグループを作成する
EC2インスタンスを作成する前にセキュリティグループを作成しておきます。
- aws ec2 create-security-group –group-name [任意のセキュリティグループ名] –description [グループについての説明]
作成後にICMPとsshを許可するインバウンドルールを追加します。
- aws ec2 authorize-security-group –group-id [セキュリティグループID] –protocol icmp — -1 –cidr [CIDR ブロック]
- aws ec2 authorize-security-group –group-id [セキュリティグループID] –protocol tcp — 22 –cidr [CIDR ブロック]
AWS CLIでEC2インスタンスを作成する
AMIはAmazon Linux2 AMI(ami-0f310fced6141e627)、インスタンスタイプは t2.microを選択します。
- aws ec2 run-instances –image-id [AMIのID] –instance-type t2.micro –key-name [キーペア名] –security-group-ids [セキュリティグループID] –subnet-id [サブネットID] –associate-public-ip-address
作成したEC2インスタンスにNameタグを付けます。
- aws ec2 create-tags –resources [EC2インスタンスのID] –tags “Key=Name, Value=[任意の名称]”
まとめ
VPCを作成から、プライベートサブネットの構築手順を紹介しました。
まずは、AWSの様々なサービスをマネジメントコンソールから実際に使ってみて、慣れてきたら、AWS CLIで同じ操作をコマンドで実行してみて下さい。
最後までご覧頂き、ありがとうございました。