こんにちわ、まつしん(@matsushin11)です。
前回の記事では、サンプル用のGoアプリの実装とDocker化まで行いました。
この記事では前回の続きとしてECS環境を構築してアプリが動くようになるところまで行いたいと思います。
本記事でやること
ECR(Amazon Elastic Container Registry)を利用してECS(Amazon Elastic Container Service)環境の構築を行います。
次の記事で最後の仕上げとしてCircleCIからECSにデプロイするようにしていきます。
ECRにリポジトリ作成
ECRとはDockerのイメージを管理することができるサービスになります。
それでは早速ECR上にリポジトリを作成していきましょう。
AWSマネジメントコンソールにログインしてサービスでECRを選択。リージョンは東京(ap-northeast-1)を選択しておきましょう。
ECRのトップ画面にアクセスできたらリポジトリを作成します。今回はgo-ecs-deploy-appとしました。
リポジトリが作成できたらDockerのイメージをプッシュしていきます。
ECRに初回プッシュ
以下は、すべてリポジトリの画面にて「プッシュコマンドの表示」した際に表示されるコマンド通りです。
まずはECRにログインします。
1 2 |
$ $(aws ecr get-login --no-include-email --region ap-northeast-1) Login Succeeded |
次にプッシュしたいDockerイメージを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ docker build -t go-ecs-deploy-app . Sending build context to Docker daemon 158.2kB Step 1/7 : FROM golang:1.11.2-alpine3.8 ---> 57915f96905a Step 2/7 : ENV GOPATH /go ---> Using cache ---> b25ca1a51ae8 ... Successfully built 6c0e3929ddd1 Successfully tagged go-ecs-deploy-app:latest |
ECRにプッシュするために作成したDockerイメージにタグ付けをします。
1 |
$ docker tag go-ecs-deploy-app:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/go-ecs-deploy-app:latest |
最後に作成したECRリポジトリにイメージをプッシュします。
1 2 3 4 5 6 7 8 9 10 11 |
$ docker push 123456789012.ecr.ap-northeast-1.amazonaws.com/go-ecs-deploy-app:latest The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/go-ecs-deploy-app] 92d38efed0c0: Pushed 2092f64ed378: Pushed 31d5368aacaf: Pushed 93391cb9fd4b: Layer already exists cb9d0f9550f6: Layer already exists 93448d8c2605: Layer already exists c54f8a17910a: Layer already exists df64d3292fd6: Layer already exists latest: digest: sha256:28bd238a44f836d5d4ef9a64109dcb7284c2dc976813a7f6bcbd167ebd821e90 size: 1993 |
ECRの画面側でプッシュされたことを確認できればOK!
ECSの起動
次にECSの設定を行います。
タスクやクラスター、サービスの概念や詳細を知りたければこちらがとても参考になるかと思います。
タスクの作成
タスクの登録ではどのDockerイメージを使うのかやメモリやCPUなどのハードウェア要件などを定義できます。
それではタスクの作成をするためにAWSマネジメントコンソールのサービスでECSを選択してECSの画面へ。
次にサイドメニューのタスク定義を選択してから新しいタスク定義の作成へ。
起動タイプの互換性は今回はEC2を選択。(FARGATEの利用方法はただいま学習中)
タスク定義名を入力。
コンテナの追加から、コンテナ名、イメージ(ECRのImage URI)、メモリ制限、ポートマッピング(8080)を入力していきます。
コンテナが追加されたらタスクの作成を実行してください。
クラスターの作成
次にクラスターの作成です。
クラスターではタスクを実行するためのEC2のインスタンスやネットワークの環境の定義を行います。
まずはテンプレートとしてEC2 Linux + ネットワーキングを選択。
次にクラスター名とEC2インスタンスタイプを選択します。
次に、利用できるVPCとサブネットを1つ選択してポート範囲を8080としておきます。
そのまま進んで作成へ。
しばらく待って以上のようにすべて緑になればクラスタの作成は完了です。
サービスの作成
次にサービスを作成します。
サービスでは利用するタスクの定義やネットワーク構成、Auto Scalingの定義などができます。
それではまずはクラスターの画面からサービス作成画面へ。
起動タイプはEC2を選択、サービス名を入力して、サービスタイプはDAEMONを選択します。
そのまま進んでいき作成実行へ。
しばらく待って以上のようにすべて緑になればサービスの作成は完了です。
動作確認
最後に動作確認を行います。
まずはサービスの画面からタスクのステータスがRUNNINGとなっていることを確認します。サービス作成後はRUNNINGとなるのに少し時間がかかります。
次に稼働しているEC2のエンドポイントを確認します。
EC2のダッシュボードから稼働しているインスタンスのパブリックDNSを確認。
エンドポイントを用いてコマンドを実行して下記のようになればOK。
1 2 |
$ curl http://ec2-13-230-159-143.ap-northeast-1.compute.amazonaws.com:8080 Hello, World!! |
これでECSを利用してアプリが動くところまではできました!
記事ではここまでで次が最後です。いよいよ次回CircleCIからecs-deployを利用してECSにデプロイできるようにしていきたいと思います!
コメントを残す