質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

7607閲覧

fargateのタスクのステータスがRUNNINGにならないままSTOPPEDになる

hitoyasablue

総合スコア8

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/04/18 13:41

編集2021/04/23 14:01

前提・実現したいこと

docker-composeによるコンテナをfargateにデプロイしようとしています。
以下の記事を参考にサービス・機能の設定を進めました。

Dockerコンテナで作ったアプリをECS+RDSでデプロイする

したことはざっくり以下です。

  • VPC作成
  • パブリックサブネット・プライベートサブネット作成
  • クラスター作成
  • RDS用のサブネットグループ作成
  • RDSインスタンス作成
  • セキュリティグループ作成
  • ECRにイメージのプッシュ
  • application load balancer作成
  • タスク定義
  • サービス作成・タスク実行

発生している問題・エラーメッセージ

サービス作成・タスク実行を行ったのち、生成されたタスクのステータスを確認したところ、
PROVISIONING→PENDING→ACTIVATINGと遷移したのちSTOPPEDになり、RUNNINGとなりませんでした。

STOPPEDとなったタスクの詳細画面から停止理由を確認したところ以下のように記載されていました。

Essential container in task exited

原因について考えたこと・試したこと

調べたところこの停止理由は「タスク定義でessentialとマークしていたコンテナが終了もしくは停止した際に出る」もののようでした。
今回タスク内にコンテナは1つしかないため、要はその1つのコンテナが何かの理由で起動しなかったのだと認識しています。

理由を調べるためにコンテナのログをCloudWatchで確認しました。
しかしログイベントの項目には「現時点では古いイベントはありません」「現時点では新しいイベントはありません」とだけ表示されており他に情報はありませんでした。

※今回タスク実行ロールはecsTaskExecutionRoleを使用しております。このロールはデフォルトでCloudwatchLogsへのアクセス権限を与えられていないという情報を見たため、CloudWatchAgentServerPolicyのポリシーを付与してみましたが、CloudWatchに表示される内容に変化はありませんでした。

同じようなシチュエーションについて書いてある記事を探したところ、上記の事象は何らかの理由でECRからイメージをpullできていないために発生することが多い、みたいな情報を見つけましたが、どうすればよいか分からずそれで終わっています。

以下この事象の解消に関係ありそうだと思って読んでいた記事です。

この「fargateのタスクのステータスがRUNNINGにならない」事象の原因および対応策について、何かご意見をいただけますと幸いです。よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

MAC OS

追記

Dockerfile

FROM ruby:2.7.1 # 必要なパッケージのインストール RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs # yarnパッケージ管理ツールをインストール RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update && apt-get install -y yarn # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \ apt-get install nodejs # chromeのインストール RUN apt-get update && apt-get install -y unzip && \ CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \ wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \ unzip ~/chromedriver_linux64.zip -d ~/ && \ rm ~/chromedriver_linux64.zip && \ chown root:root ~/chromedriver && \ chmod 755 ~/chromedriver && \ mv ~/chromedriver /usr/bin/chromedriver && \ sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \ sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \ apt-get update && apt-get install -y google-chrome-stable # 作業ディレクトリの作成、設定 RUN mkdir /myapp ##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照 ENV APP_ROOT /myapp WORKDIR $APP_ROOT # ホスト側(ローカル)のGemfileを追加する(ローカルのGemfileは【3】で作成) ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock # Gemfileのbundle install RUN bundle install ADD . $APP_ROOT EXPOSE 3000 # RUN chmod +x /entrypoint.sh CMD ["/entrypoint.sh"]

entrypoint.sh

yarn install rm /app/tmp/pids/server.pid bin/rails s -p 3000 -b '0.0.0.0'

docker-compose.yml

version: '3' services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 本来は直書きしています MYSQL_DATABASE: 本来は直書きしています ports: - "3306:3306" # volumes: # - /var/lib/mysql  今回ECRにpushしたのはこのwebというコンテナのもとのイメージです web: build: . command: rails s -p 3000 -b '0.0.0.0' # volumes: # - .:/myapp # - /app/tmp ports: - "3000:3000" depends_on: - db stdin_open: true tty: true

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2021/04/18 15:00

タスクを実行しようとした際に何らかのエラーが発生している可能性が高いと思うのですが、まずどのようなタスクを実行しようとしたのでしょうか。 ECRからイメージが取得できていない可能性については、ロール周りを見直してみてください。 https://dev.classmethod.jp/articles/ecs_fargate_iamrole/
hitoyasablue

2021/04/18 15:30

コメントいただきありがとうございます。 > まずどのようなタスクを実行しようとしたのでしょうか。 →タスクの設定情報を下記に記載いたします。 起動タイプ:fargate タスクロール:なし タスク実行ロール:ecsTaskExecutionRole ネットワークモード:awsvpc パブリック IP の自動割り当て:enabled タスクメモリ:512MiB タスクCPU:256 > ECRからイメージが取得できていない可能性については、ロール周りを見直してみてください。 →上記記事を読んだ限りではロール周りの設定は問題なさそうでした(タスク実行ロールは現在使用しているecsTaskExecutionRolefargateでイメージのpullなどできるため問題なく、タスクロールはfargateのため必要ないため)
yu_1985

2021/04/18 18:45

肝心の起動しているコンテナについてはどんなものでしょうか。
hitoyasablue

2021/04/19 08:52 編集

追記にあるDockerfileとdocker-compose.ymlをもとに作成したコンテナになります(回答になっていない場合はすみません・・・)
yu_1985

2021/04/19 13:22

タスク定義の内容ももっと詳細を貼ってください。 コマンドやエントリポイントの設定はなにもないですか? そこに何も設定してなければ、Dockerfileにコンテナ実行時に実行するコマンドが何も設定してないので単に実行するだけでは何も行われないと思います。
hitoyasablue

2021/04/19 14:03

タスク定義で設定した内容は上記でほとんどになります。 コマンドやエントリポイントの設定はおそらくしておりません・・・ コンテナを起動するためdocker-compose upなどのコマンドをDockerfileに書く必要がある、ということでしょうか?
yu_1985

2021/04/19 15:17

docker-composeはdockerでコンテナを動かすためのツールなので、もんだいはそれぞれの項目でどのコマンドを動かしているかです。 ご自分のdocker-compose.ymlをもう一度よく見直してみてください。実行させるコマンドを記載している箇所がありますよね。 そして、今回動かしたいのは恐らくRailsをサービスとして、なので単にタスク実行するだけではなくサービスとして実行する必要がありますね。 今回の問題に直接関係してるかはわかりませんが。 ググるとRailsのアプリをFargateで動かしてみた的なやつが出てくるはずなのでまずはそのとおりにやってみてください。
hitoyasablue

2021/04/21 12:34

Rails Fargateで調べましたが参考にしていた記事と大体同じ感じのことが書いてあるように見受けられ、さらにする必要のあることが何かが分かりません・・・ (以下はヒットした記事の1つです https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2/viewer/dc751838fa3715f814dd) docker-compose.ymlの「command: rails s -p 3000 -b '0.0.0.0'」はコンテナ起動の箇所と思いますが、これはローカルで起動するためのものであり、ECS側で起動するためにはこのコマンドをDockerfileにも書く必要があるということでしょうか。
yu_1985

2021/04/21 18:46

その記事ではDockerfile内で CMD ["/app/entrypoint.sh"] を指定することによって、コンテナ実行時に起動する処理を定義しています。 コンテナ起動時に実行するコマンドはこのようにDockerfileに書くこともできますし、docker-compose.ymlで指定することも可能です。 そしてECSのタスク定義の方で起動時に実行するコマンドを指定することも可能です。 貼っていただいたものを見る限り、おそらくそのいずれもしていないので何もコマンドが実行されていないのではないかなと思います。
hitoyasablue

2021/04/23 14:03 編集

ありがとうございます。 entrypoint.shを作成してDockerfileでそこのコマンドがコンテナ起動時に実行されるようにしてecrにイメージをpushしました。 ですがタスクはRUNNINGにならなかったためログを確認したところ以下が表示されていました。 container_linux.go:370: starting container process caused: exec: "/entrypoint.sh": stat /entrypoint.sh: no such file or directory 調べるとentrypoint.shにその他ユーザかからの実行の権限を与えていない場合に起きるエラーのようだったのでローカルでchmod +x entrypoint.shを叩いて再度イメージをpushしましたが同様のエラーが表示されたままでした。 ローカルで設定したファイルの権限はタスク側でもそのまま有効と認識しているのですが、これは正しいでしょうか(そもそも解決の方向性が権限まわりではないのかもというのも感じておりますが・・・) entrypoint.shと修正したDockerfilehは上記に追記しております・・・
inductor

2021/04/27 07:29

タスク定義のJSONに書いているイメージ名はどのように書かれていますか?
hitoyasablue

2021/04/30 01:53

コメントいただきありがとうございます。 875184864877.dkr.ecr.ap-northeast-1.amazonaws.com/komarigoto-hiroba-web:latest です。 ただ今はこのスレッドの1つ上のコメントで記載したエラーではなく、ERBのヘルスチェックに失敗してタスクが停止する事象で止まっております・・・。タスク停止理由は以下です。 Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:ap-northeast-1:875184864877:targetgroup/tg-komarigoto-hiroba/476f4611f39c23e6)
inductor

2021/04/30 05:16

latestだとどのイメージがpullされるか不定(勘違いの要因になりがち)になるので、確実に新しいイメージであるというタグを付けてそれをpullするようにしたほうが良いと思います
hitoyasablue

2021/04/30 05:40

なるほど、ありがとうございます!
guest

回答1

0

ベストアンサー

などを先にチェックするのが良いかと思います。

投稿2021/04/18 14:43

lirlia

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hitoyasablue

2021/04/18 14:58

コメントいただきありがとうございます。 Fargateのタスク実行ロールについてはAWSで元から作成されているecsTaskExecutionRoleを使っており、これはECRからpullする機能を含んでいると思っております。 イメージの起動については一度ローカルにpullしてアプリ表示できるか確かめてみる、という感じでしょうか?
lirlia

2021/04/18 15:18

> ECRからpullする機能を含んでいると思っております IAMの管理画面をみて対象のRoleにAmazonECSTaskExecutionRolePolicyまたは以下のpolicyが付与されていることを確認してください。 ``` "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", ``` > イメージの起動については一度ローカルにpullしてアプリ表示できるか確かめてみる、という感じでしょうか? はいそうです。コンテナ自体がそもそも正常に起動できず異常終了してしまっていることも考えられますので。
hitoyasablue

2021/04/19 08:31

> AMの管理画面をみて対象のRoleにAmazonECSTaskExecutionRolePolicyまたは以下のpolicyが付与されていることを確認してください。 →ロールにAmazonECSTaskExecutionRolePolicyが付与されていることを確認しました。 > はいそうです。コンテナ自体がそもそも正常に起動できず異常終了してしまっていることも考えられますので。 →ありがとうございます。pullしてコンテナ起動したところアプリは表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問