Lesson 6
EC2にデプロイする
Lesson 6
Chapter 1
EC2を起動する
このLessonでは、Lesson5のchapter5で作成したTODOアプリをAWSのEC2にデプロイします。
Amazon EC2(Amazon Elastic Compute Cloud)とは、Amazonが提供する仮想サーバー構築サービスです。
ここでは、そのEC2にDocker(およびDocker Compoose)をインストールし、docker compose up
でコンテナを立ち上げ、サービスを公開するまでの方法を学習します。
Lesson6で行うこと
環境構築の注意点
今回作成する環境はあくまで検証目的での構築になります。実際に本番環境で利用する際には、セキュリティなどの考慮が必要になります。
このchapterではEC2インスタンスを作成し、起動するまでの方法を学習します。
アカウントにサインイン
AWSマネジメントコンソールにサインインして下さい。アカウントがない方は作成をお願いします。
以下では、AWSアカウント作成直後と仮定して環境の構築を行います。
リージョンの設定
ログイン後画面のトップメニューからリージョンを選択できます。

①をクリックして、リージョンをアジアパシフィック(東京)に設定して下さい。
ネットワークの構築
EC2の作成の前にネットワークの準備が必要になります。
具体的には以下の5つを作成します。
- VPC
- サブネット
- ルートテーブル
- インターネットゲートウェイ
- セキュリティグループ
VPCの作成
VPC(Amazon VPC: Amazon Virtual Private Could)という仕組みを用いることで、仮想ネットワークの作成を行います。
まずは、VPCダッシュボードに移動しましょう。

トップメニューの検索バーにVPCと入力し、②をクリックして下さい。

③「VPCを作成」をクリックすると、作成ページに移動します。
VPC作成時には、VPCのみを作成か、VPC以外のものも同時に作成するか、いずれかの方法を選択します。今回はVPC以外のリソースも同時に作成します。

それぞれを以下のように設定して下さい。
作成するリソース
: VPCなど名前タグの自動生成
: (チェックを入れて)docker-lesson6を入力IPv4 CIDR ブロック
: 10.0.0.0/16IPv6 CIDR ブロック
: IPv6 CIDR ブロックなしテナンシー
: デフォルトアベイラビリティゾーン(AZ)の数
: 1

続いて、以下のように設定します。
パブリックサブネットの数
: 1プライベートサブネットの数
: 0NATゲートウェイ
: なしVPCエンドポイント
: なしDNSホスト名を有効化
: チェックDNS解決を有効化
: チェック
設定は以上となるので、④「VPCを作成」をクリックして下さい。
今回はVPC作成時に他のリソースも同時に作成を行なっています。ここまでで、VPC・サブネット・ルートテーブル・インターネットゲートウェイの準備ができました。
セキュリティグループの作成
次にセキュリティグループを作成します。
現在のVPCダッシュボードのサイドメニューから⑤セキュリティグループをクリックして下さい。

セキュリティグループの管理画面に移動します。

⑥「セキュリティグループを作成」をクリックして下さい。
基本的な詳細

セキュリティグループ名と説明は任意の名前になりますが、ここでは以下のように入力しています。
セキュリティーグループ名
: docker-lesson6説明
: docker-lesson6
VPC
は先ほど作成したものを選択します。
インバウンドルール
次にインバウンドルールの設定をします。ここの設定を間違うと起動したEC2に接続できないので、注意して下さい。

⑦「ルールを追加」クリックして下さい。

以下のように、設定します。
タイプ
: SSHソース
: マイIP
さらに、もう1つルールを追加します。

タイプ
: カスタムTCPポート範囲
: 4000ソース
: Anywhere-IPv4
アウトバウンドルール・タグ
次のアウトバウンドルールとタグについては、デフォルトのままで大丈夫です。

⑧「セキュリティグループを作成」をクリックして下さい。
セキュリティグループが作成でき、以上でネットワークの準備は完了になります。
EC2インスタンスの起動
次はEC2インスタンスを作成していきます。
EC2ダッシュボードへ移動しましょう。

トップメニューの検索バーにEC2と入力し、⑨をクリックして下さい。

⑩「インスタンスを起動」をクリックして下さい。
名前とタグ
名前は任意のものを入力して下さい。ここでは、docker-lesson6
と設定します。

アプリケーションおよびOSイメージ(Amazon マシンイメージ)
クイックスタートからAmazon Linux 2 AMI
を選択します。今回は無料対象枠のものを使用します。

インスタンスタイプ
t2.micro
を選択します。

キーペア(ログイン)
⑪「新しいキーペアの作成」をクリックして下さい。

キーペア名は任意の名前になりますが、それぞれ以下のように設定します。

キーペア名
: dockerl6キーペアのタイプ
: RSAプライベートキーファイル形式
: .pem
⑫「キーペアを作成」をクリックすると、入力した名前のpem形式のファイルがダウンロードされますが、後にEC2との接続を行うときに使用します。
ネットワーク設定
次にネットワークの設定を行います。⑬「編集」をクリックして下さい。

ここも設定を間違えると、EC2との接続ができなくなるので注意して下さい。

それぞれ、以下のように設定します。
VPC
: 先ほど作成したもの(つけた名前を確認して下さい)サブネット
: 先ほど作成したもの(つけた名前を確認して下さい)パブリックIPの自動割り当て
: 有効化ファイアウォール(セキュリティグループ)
: 既存のセキュリティグループを選択する => 先ほど作成したセキュリティグループ
ストレージを設定
ストレージの設定に関しては、デフォルトのままで大丈夫です。

インスタンスを起動
最後に設定を確認して、⑭「インスタンスを起動」をクリックして下さい。

これで、全ての設定が完了し、EC2インスタンスが作成できました。

Lesson 6
Chapter 2
ssh接続
このchapterでは、先ほど起動したEC2インスタンスにssh接続を行います。
ssh接続を行うことで、EC2内でコマンドを実行できるようになります。
EC2にssh接続を行う
まずは、接続先のアドレスの確認を行います。
接続先アドレスの確認

EC2ダッシュボードから①インスタンス(実行中)をクリックします。

EC2インスタンス一覧画面が表示されるので、先ほど作成したインスタンスが実行中になっていることを確認して、②インスタンスIDをクリックして下さい。

選択したインスタンスの概要が表示されます。③接続をクリックして下さい。

④SSHクライアントを選択します。
ここの⑤の部分が今回利用する接続先アドレスになっています。
sshコマンドでEC2に接続する
接続先のアドレスが確認できたので、sshコマンドで接続しましょう。
キーペアの作成時に、C:\Users\ユーザ名\Downloads\dockerl6.pem
がダウンロードされていますので、それを使用します。

Powershellを起動して、cd Downloads
を実行し、C:\Users\ユーザ名\Downloads
に移動して下さい。

ssh -i ".¥dockerl6.pem" [⑤接続先アドレス]
を実行して下さい。

ssh接続が完了しました。
[ec2-user@ip~]$
にターミナルが切り替わっており、EC2内でコマンドが実行できるようになりました。

Lesson 6
Chapter 3
サービスの実行
ここまでで、作成したEC2インスタンスにssh接続するまでが完了しています。
このchpaterでは、接続したEC2インスタンス内でdocker compose up
を実行し、サービスを外部に公開する方法を学習します。
ソフトウェアのインストール
最初に、ssh接続したEC2に必要なソフトウェアのインストールや設定を行います。
dockerのインストール
まずは、dockerをインストールします。
sudo amazon-linux-extras install docker
を実行して下さい。
dockerの起動
sudo service docker start
でdockerを開始します。

dockerが起動されたか確認してみましょう。
sudo systemctl status docker
を実行します。

Active: active (running)
と表示されていれば起動できています。
ユーザーの追加
次にsudo
なしでdockerコマンドが実行できるように設定しておきましょう。
sudo usermod -a -G docker ec2-user
を実行します。

EC2に再接続
それでは、一度EC2からログアウトして下さい。
exit
を実行します。

再度、ssh -i ".¥dockerl6.pem" [接続先アドレス]
を実行して、接続し直します。
Docker Composeのインストール
次に、Docker Composeをインストールします。
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
を実行して下さい。

ダウンロードが完了したら、sudo chmod +x /usr/local/bin/docker-compose
を実行して、ダウンロードしたバイナリファイルに実行権限を与えます。

インストールが完了しているか、確認してみましょう。
docker-compse --version
を実行します。

バージョンが表示され、インストールされていることが確認できました。
docker-composeコマンド
これまでのlessonではdocker compose
コマンドを実行しましたが、/usr/local/bin
に配置されたバイナリファイルを実行するために、ここではdocker-compose
を実行しています。
ソースコードのアップロード
ソフトウェアの準備ができたので、次にソースコードをEC2内にアップロードします。
exit
を実行して、一度EC2からログアウトして下さい。

scp -i .¥dockerl6.pem -r [アップロード対象のフォルダのパス] [接続先アドレス]:/home/ec2-user/
を実行して下さい。

Lesson通りにフォルダの作成を進めていれば、アップロード対象のフォルダのパスはC:\Users\ユーザ名\Desktop\lesson5_5
になっていると思いますが、異なるフォルダを作成した方はそれを指定して下さい。
これで、ソースコードをアップロードすることができました。
サービスを起動する
ソースコードの準備ができたので、サービスを起動しましょう。
再び、EC2にssh接続を行い、先ほどアップロードしたフォルダ内に移動します。

cd lesson5_5
を実行して下さい。

docker compose up
でコンテナを起動します。

正常にサービスが起動されました。
公開したサービスにリクエストを送信
それでは、公開したサービスにリクエストを送信してみましょう。
パブリックアドレスを確認する
まずは、先ほどと同じように、EC2ダッシュボードから実行中のインスタンス一覧を表示し、起動したEC2の概要のページに移動します。

①パブリックIPv4アドレスに表示されているIPアドレスを使用します。
curlでリクエスト送信
curlでリクエストを送信してみましょう。
curl.exe "http://[パブリックIPアドレス]:4000"
を実行します。

Lesson5のchapter3でローカルでコンテナを起動したときと同じように、レスポンスが返ってきています。
同じように、試しにPOSTリクエストも行なってみます。
curl.exe -X POST -H “Content-type: application/json” -d ‘{¥”title¥”: ¥"Learn AWS¥”}’ “http://[パブリックIPアドレス]:4000/todos”
を実行して下さい。
無事、リクエストが送信され、TODOが追加されています。

さらに、いくつかデータを追加してみましょう。

TODOの一覧を取得します。
curl.exe ”http://[パブリックIPアドレス]:4000/todos”
を実行して下さい。

先ほど、追加したTODOの一覧が取得できました。
EC2を停止する
このように、検証目的ではありましたが、無事サービスを公開できていることが確認できました。
最後にEC2を起動したままにしておくと、料金が追加で発生してしまうため停止させます。
EC2ダッシュボードから実行中のインスタンス一覧ページに移動し、今回作成したインスタンスにチェックを入れます。

②インスタンスの状態をクリックして、インスタンスを終了を選択し、インスタンスを終了させます。

これでインスタンスの終了(=削除)が完了したので、追加料金が発生することはありません。
本Lessonは以上となります。
