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

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

ただいまの
回答率

88.58%

CircleCI + Ruby on Rails + ECS の自動デプロイがうまくいかず困っています

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,119

kaoru6strings

score 11

概要

この度Ruby on Railsで作成されたアプリをCircleCIを用いてECSへ自動デプロイしようと挑戦しています。下記2点がどうしてものりこえられず困っています。ご助言、ご指摘いただけると助かります。

環境

  • CircleCI 2.0
  • ECS on Fargate

困っていること

1. Ruby on RailsをECSへデプロイする際db:migrateをかけたいのですが以下のコードでうまくいきません

.circleci/config.ymlの該当箇所のコード

      - run:
          name: "DB Migrate"
          command: |
            aws ecs run-task \
              --region REGION \
              --cluster my-rails-cluster \
              --task-definition my-rails-task \
              --overrides file://docker/run_task_db_migrate.json
          working_directory: web

file://docker/run_task_db_migrate.jsonの中身

{
  "containerOverrides": [
    {
      "name": "web",
      "command": ["bundle", "exec", "rails", "db:migrate"]
    }
  ]
}

CircleCIが出力したエラー文

An error occurred (InvalidParameterException) when calling the RunTask operation: 
Network Configuration must be provided when networkMode 'awsvpc' is specified.
Exited with code 255

2. ecs-deployを用いたECSへの更新がうまくいきません

.circleci/config.ymlの該当箇所のコード

      - run:
          name: "Service deploy"
          command: |
            ecs-deploy -c my-rails-cluster -n my-rails-service -i my-rails-ecr-repo

CircleCIが出力したエラー文

Using image name: my-rails-ecr-repo
Current task definition: arn:aws:ecs:REGION:MYID:task-definition/my-rails-ecr-task:3
New task definition: arn:aws:ecs:REGION:MYID:task-definition/my-rails-ecr-task:4
ERROR: New task definition not running within 90 seconds
Exited with code 1

足りない情報などもしありましたら教えていただけると助かります。
よろしくお願いします!m(_ _)m

原因と解決方法(2019/04/05)

おかげさまでひとまず解決することができましたので原因と解決方法を記しておきます 

1. Ruby on RailsをECSへデプロイする際db:migrateをかけたいのですが以下のコードでうまくいきません

  1. Railsアプリで使用するRDSのセキュリティグループの設定が間違っていた
  2. aws ecs run-taskを実行する際に--network-configuration--launch-type FARGATEオプションが足りなかった(Fargate使用時は必須みたいです)正しいコマンドは下記です。
      - run:
          name: "DB Migrate"
          command: |
            aws ecs run-task \
              --region REGION \
              --cluster my-rails-cluster \
              --task-definition my-rails-task \
              --overrides file://docker/run_task_db_migrate.json
              --network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxxx,subnet-xxxxxx],securityGroups=[sg-xxxxxxx],assignPublicIp=DISABLED}"
          working_directory: web

2. ecs-deployを用いたECSへの更新がうまくいきません

こちらに関してはデプロイはうまくできているが、タスクが正常に動作しているかどうかのチェックの部分でecs-deploy側でタイムアウトしているのが原因でした。今回は取り急ぎデプロイ時のコマンドに--skip-deployments-checkを足したところ正常に動作しました

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

1 について、 Task Definition の Network Mode は awsvpc かと思います。であれば、 aws ecs run-task 実行の際に --network-configuration Option を指定する必要があります。
私の環境でも、 --network-configuration Option を指定せずに、同様のエラーが発生することを確認しました。

$ aws ecs run-task --cluster enokawa --task-definition nginx

An error occurred (InvalidParameterException) when calling the RunTask operation: Network Configuration must be provided when networkMode 'awsvpc' is specified.

--network-configuration Option を追加して aws ecs run-task を実行した結果が下記です。問題なく成功しています。

$ aws ecs run-task --cluster enokawa --task-definition nginx \
--network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxxx,subnet-xxxxxx],securityGroups=[sg-xxxxxxx],assignPublicIp=DISABLED}"
{
    "tasks": [
        {
            "taskArn": "arn:aws:ecs:ap-northeast-1:XXXXXXXXXXXXXX:task/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
.
.
.

AWS CLI のリファレンスにも記載されているので確認してみましょう。
https://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/03 23:30

    2点回答ありがとうございました!1番目に関しては、今回Fargateを利用していたため、ご回答いただいた内容に、 `--launch-type FARGATE` を加えたら実行できました!ありがとうございます!

    キャンセル

+1

2 については、単純に Task Definition の設定が誤っている可能性が高いです。
発生しているエラー内容のコードは下記行です。run-task 実行時にコケているかもしれません。
https://github.com/silinternational/ecs-deploy/blob/develop/ecs-deploy#L426

Task Definition の設定内容が分からないのでなんとも言えませんが、実際に AWS マネージメントコンソールもしくは、AWS CLI にて Task を実行してみてください。その際に詳細なエラー内容が出力されます。
デバッグ時に有効です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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