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_1_1.png Lesson6で行うこと

環境構築の注意点

今回作成する環境はあくまで検証目的での構築になります。実際に本番環境で利用する際には、セキュリティなどの考慮が必要になります。

このchapterではEC2インスタンスを作成し、起動するまでの方法を学習します。

アカウントにサインイン

AWSマネジメントコンソールにサインインして下さい。アカウントがない方は作成をお願いします。

以下では、AWSアカウント作成直後と仮定して環境の構築を行います。

リージョンの設定

ログイン後画面のトップメニューからリージョンを選択できます。

lesson6_1_2.png

①をクリックして、リージョンをアジアパシフィック(東京)に設定して下さい。

ネットワークの構築

EC2の作成の前にネットワークの準備が必要になります。

具体的には以下の5つを作成します。

  • VPC
  • サブネット
  • ルートテーブル
  • インターネットゲートウェイ
  • セキュリティグループ

VPCの作成

VPC(Amazon VPC: Amazon Virtual Private Could)という仕組みを用いることで、仮想ネットワークの作成を行います。

まずは、VPCダッシュボードに移動しましょう。

lesson6_1_3.png

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

lesson6_1_4.png

③「VPCを作成」をクリックすると、作成ページに移動します。

VPC作成時には、VPCのみを作成か、VPC以外のものも同時に作成するか、いずれかの方法を選択します。今回はVPC以外のリソースも同時に作成します。

lesson6_1_5.png

それぞれを以下のように設定して下さい。

  • 作成するリソース: VPCなど
  • 名前タグの自動生成: (チェックを入れて)docker-lesson6を入力
  • IPv4 CIDR ブロック: 10.0.0.0/16
  • IPv6 CIDR ブロック: IPv6 CIDR ブロックなし
  • テナンシー: デフォルト
  • アベイラビリティゾーン(AZ)の数: 1
lesson6_1_6.png

続いて、以下のように設定します。

  • パブリックサブネットの数: 1
  • プライベートサブネットの数: 0
  • NATゲートウェイ: なし
  • VPCエンドポイント: なし
  • DNSホスト名を有効化: チェック
  • DNS解決を有効化: チェック

設定は以上となるので、④「VPCを作成」をクリックして下さい。

今回はVPC作成時に他のリソースも同時に作成を行なっています。ここまでで、VPC・サブネット・ルートテーブル・インターネットゲートウェイの準備ができました。

セキュリティグループの作成

次にセキュリティグループを作成します。

現在のVPCダッシュボードのサイドメニューから⑤セキュリティグループをクリックして下さい。

lesson6_1_7.png

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

lesson6_1_8.png

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

基本的な詳細

lesson6_1_9.png

セキュリティグループ名と説明は任意の名前になりますが、ここでは以下のように入力しています。

  • セキュリティーグループ名: docker-lesson6
  • 説明: docker-lesson6

VPCは先ほど作成したものを選択します。

インバウンドルール

次にインバウンドルールの設定をします。ここの設定を間違うと起動したEC2に接続できないので、注意して下さい。

lesson6_1_10.png

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

lesson6_1_11.png

以下のように、設定します。

  • タイプ: SSH
  • ソース: マイIP

さらに、もう1つルールを追加します。

lesson6_1_12.png
  • タイプ: カスタムTCP
  • ポート範囲: 4000
  • ソース: Anywhere-IPv4

アウトバウンドルール・タグ

次のアウトバウンドルールとタグについては、デフォルトのままで大丈夫です。

lesson6_1_13.png

⑧「セキュリティグループを作成」をクリックして下さい。

セキュリティグループが作成でき、以上でネットワークの準備は完了になります。

EC2インスタンスの起動

次はEC2インスタンスを作成していきます。

EC2ダッシュボードへ移動しましょう。

lesson6_1_14.png

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

lesson6_1_15.png

⑩「インスタンスを起動」をクリックして下さい。

名前とタグ

名前は任意のものを入力して下さい。ここでは、docker-lesson6と設定します。

lesson6_1_16.png

アプリケーションおよびOSイメージ(Amazon マシンイメージ)

クイックスタートからAmazon Linux 2 AMIを選択します。今回は無料対象枠のものを使用します。

lesson6_1_17.png

インスタンスタイプ

t2.microを選択します。

lesson6_1_18.png

キーペア(ログイン)

⑪「新しいキーペアの作成」をクリックして下さい。

lesson6_1_19.png

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

lesson6_1_20.png
  • キーペア名: dockerl6
  • キーペアのタイプ: RSA
  • プライベートキーファイル形式: .pem

⑫「キーペアを作成」をクリックすると、入力した名前のpem形式のファイルがダウンロードされますが、後にEC2との接続を行うときに使用します。

ネットワーク設定

次にネットワークの設定を行います。⑬「編集」をクリックして下さい。

lesson6_1_21.png

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

lesson6_1_22.png

それぞれ、以下のように設定します。

  • VPC: 先ほど作成したもの(つけた名前を確認して下さい)
  • サブネット: 先ほど作成したもの(つけた名前を確認して下さい)
  • パブリックIPの自動割り当て: 有効化
  • ファイアウォール(セキュリティグループ): 既存のセキュリティグループを選択する => 先ほど作成したセキュリティグループ

ストレージを設定

ストレージの設定に関しては、デフォルトのままで大丈夫です。

lesson6_1_23.png

インスタンスを起動

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

lesson6_1_24.png

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

Lesson 6 Chapter 2
ssh接続

このchapterでは、先ほど起動したEC2インスタンスにssh接続を行います。

ssh接続を行うことで、EC2内でコマンドを実行できるようになります。

EC2にssh接続を行う

まずは、接続先のアドレスの確認を行います。

接続先アドレスの確認

lesson6_2_1.png

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

lesson6_2_1.png

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

lesson6_2_1.png

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

lesson6_2_1.png

④SSHクライアントを選択します。

ここの⑤の部分が今回利用する接続先アドレスになっています。

sshコマンドでEC2に接続する

接続先のアドレスが確認できたので、sshコマンドで接続しましょう。

キーペアの作成時に、C:\Users\ユーザ名\Downloads\dockerl6.pemがダウンロードされていますので、それを使用します。

lesson6_2_5.png

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

lesson6_2_6.png

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

lesson6_2_7.png

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を実行して下さい。

lesson6_2_1.png

dockerの起動

sudo service docker startでdockerを開始します。

lesson6_2_2.png

dockerが起動されたか確認してみましょう。

sudo systemctl status dockerを実行します。

lesson6_2_3.png

Active: active (running)と表示されていれば起動できています。

ユーザーの追加

次にsudoなしでdockerコマンドが実行できるように設定しておきましょう。

sudo usermod -a -G docker ec2-userを実行します。

lesson6_2_4.png

EC2に再接続

それでは、一度EC2からログアウトして下さい。

exitを実行します。

lesson6_2_5.png

再度、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を実行して下さい。

lesson6_2_6.png

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

lesson6_2_7.png

インストールが完了しているか、確認してみましょう。

docker-compse --versionを実行します。

lesson6_2_8.png

バージョンが表示され、インストールされていることが確認できました。

docker-composeコマンド

これまでのlessonではdocker composeコマンドを実行しましたが、/usr/local/binに配置されたバイナリファイルを実行するために、ここではdocker-composeを実行しています。

ソースコードのアップロード

ソフトウェアの準備ができたので、次にソースコードをEC2内にアップロードします。

exitを実行して、一度EC2からログアウトして下さい。

lesson6_2_5.png

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

lesson6_2_9.png

Lesson通りにフォルダの作成を進めていれば、アップロード対象のフォルダのパスはC:\Users\ユーザ名\Desktop\lesson5_5になっていると思いますが、異なるフォルダを作成した方はそれを指定して下さい。

これで、ソースコードをアップロードすることができました。

サービスを起動する

ソースコードの準備ができたので、サービスを起動しましょう。

再び、EC2にssh接続を行い、先ほどアップロードしたフォルダ内に移動します。

lesson6_2_10.png

cd lesson5_5を実行して下さい。

lesson6_2_11.png

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

lesson6_2_12.png

正常にサービスが起動されました。

公開したサービスにリクエストを送信

それでは、公開したサービスにリクエストを送信してみましょう。

パブリックアドレスを確認する

まずは、先ほどと同じように、EC2ダッシュボードから実行中のインスタンス一覧を表示し、起動したEC2の概要のページに移動します。

lesson6_2_13.png

①パブリックIPv4アドレスに表示されているIPアドレスを使用します。

curlでリクエスト送信

curlでリクエストを送信してみましょう。

curl.exe "http://[パブリックIPアドレス]:4000"を実行します。

lesson6_2_14.png

Lesson5のchapter3でローカルでコンテナを起動したときと同じように、レスポンスが返ってきています。

同じように、試しにPOSTリクエストも行なってみます。

curl.exe -X POST -H “Content-type: application/json” -d ‘{¥”title¥”: ¥"Learn AWS¥”}’ “http://[パブリックIPアドレス]:4000/todos”を実行して下さい。

無事、リクエストが送信され、TODOが追加されています。

lesson6_2_15.png

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

lesson6_2_16.png

TODOの一覧を取得します。

curl.exe ”http://[パブリックIPアドレス]:4000/todos”を実行して下さい。

lesson6_2_17.png

先ほど、追加したTODOの一覧が取得できました。

EC2を停止する

このように、検証目的ではありましたが、無事サービスを公開できていることが確認できました。

最後にEC2を起動したままにしておくと、料金が追加で発生してしまうため停止させます。

EC2ダッシュボードから実行中のインスタンス一覧ページに移動し、今回作成したインスタンスにチェックを入れます。

lesson6_2_18.png

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

lesson6_2_19.png

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

本Lessonは以上となります。