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

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

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

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

Docker

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

AWS(Amazon Web Services)

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

解決済

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

hitoyasablue
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というインフラから提供する商用サービスです。

1回答

0評価

0クリップ

3940閲覧

投稿2021/04/18 13:41

編集2021/04/23 14:00

前提・実現したいこと

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Amazon RDS

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

Docker

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

AWS(Amazon Web Services)

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