LoginSignup
0
0

More than 1 year has passed since last update.

DockerでビルドしたPJをECS上にデプロイするまで【イメージをECS上で動かす】

Last updated at Posted at 2021-06-25
  1. 導入
  2. PJのDocker化
  3. イメージをECS上で動かす <=イマココ
  4. CodePipelineを使った自動デプロイ

さて、いよいよECS上にイメージをアップして動かすところです。
大きな手順は下記

  1. ECRにリポジトリを作成し、イメージをそこにプッシュ
  2. プッシュされたイメージをもとにECS上で動作するクラスターを作成
  3. URLからそこにアクセスできるようにする

構成としては、タスクをFARGATEで起動させALBを介してアクセスする形です
クライアント=>ELB=>タスク(コンテナ)
みたいな

ECRにリポジトリを作成

基本公式ドキュメント通りにすれば行けるのですが、実はいけないところがあったりします。

Dockerfileの指定が必要

ドキュメントには「リポジトリを作成し、プッシュコマンドを表示してその通りに打てばプッシュできます」とありますが、このコマンドにはDockerfileを指定しているところがありません。
AWSで指示されるコマンドは

  1. AWSへのログイン
  2. イメージにタグをつけてビルド
  3. ビルドしたイメージのタグにリポジトリURLを加える
  4. そのタグを指定してpush

の手順ですが、この「2. イメージにタグをつけてビルド」の時点でDockerfileを指定する必要があります。

指示されるコマンドは下記

$ docker build -t {ECRのリポジトリ名} .

このまま打つとデフォルトのDockerfileが使用され、場合によっては失敗します。
(私の環境が悪い可能性もありますが未検証。確実なのは明示的にDockerfileを指定することかと。。)
Dockerfileを指定するためには、

$ docker build -t {ECRのリポジトリ名} -f {Dockerfileへのパス} .

の形式で打つ必要があります。

ELB作成

実はECSのクラスターを作る際にELBを指定するところがあります。
なので使う場合はあらかじめ作っておくと楽。
普通の手順で作ればいいですが、タスクへの接続はIPで行われるため、ターゲットグループの「Target Type」に「IP」を指定する必要があります。

ECS上に動作環境を作成

ECSは登場人物が多い。。
下記の順に作ります。

  1. クラスターを作成
  2. タスク定義を作成
  3. 1で作ったクラスターの中に、2で作ったタスク定義を使用するサービスを作成

ざっくりコンテナ=タスクみたいなもので、それを立ち上げるのが「サービス」、そのサービスをまとめるのが「クラスター」という関係になってます。
「サービスの作成」はクラスター内でないとできない仕様なので一番初めにクラスターを作る必要があります。

クラスターを作成

難しい設定はないのでさくっと行って大丈夫です。
迷うのはクラスターテンプレートの指定くらい?

タスク定義の作成

ここで
・起動元のイメージをECRリポジトリで指定
・コンテナメモリの割り当て
・.envに指定する変数の指定
を行います。
これも決まっていればぽちぽち打ち込むだけ。

サービスの作成

ここでは
・使用するタスク定義の指定
・クラスターの指定
・オートスケールの指定
・ヘルスチェックの猶予時間
・タスクを配置するサブネットの指定
を行います。
さらにロードバランサーを使用するなら、ロードバランサーの指定も必要。
一応あらかじめサブネットを複数作成したので、それらを指定してマルチAZにしました。

タスクが立ち上がるか確認

ここまでできたら自動でタスクが立ち上がるはず。
いけるかどうか見守りましょう。

立ち上がらない時

起動時に何かしらのエラーがあると自動停止し、ステータスがRUNNING=>STOPPEDに変わります。
今回多かった原因は

・ヘルスチェックの失敗
・nginxの設定周りのエラー

STOPPEDになったタスクのIDをクリックすると落ちた原因がみれるのでそれをみて対処します。
必要に応じて「Logs」タブからログも確認します。

ヘルスチェックの失敗

まず真っ先に確認するのはセキュリティグループの設定。
ELBが弾かれていると落ち続けます。

許可しており、たまに成功するくらいならUnHealthyになる条件が厳しすぎる可能性があるので少し緩めてみます。

nginxの設定周りのエラー

今回一番ハマった原因。
イメージ指定を間違っていたために変なconfファイルが使われたようでひたすらエラーが出てました。

インターネットでのアクセス確認

ここまで来たらあとはRoute53か何かのDNSで、ECSに紐づけたELBを指定します。
これでECSにアクセスできるはず。

まとめ

コンソールでの設定事項が非常に多い。。
これが一番疲れました。
下記注意点です。

  • コンソールでの設定事項が非常に多いのでよくセッション切れになります。
    • 予め作成できるものは作っとくこと。
  • タスクが立ち上がらない時は先に原因を切り分けること。関係する要素が多すぎて全部見ると終わりません。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0