0
0

More than 1 year has passed since last update.

[CDK/python]FargateのTaskDefinition.add_container()でDockerのCMDを上書きし、複数のコマンドを実行する記法

Last updated at Posted at 2023-08-17

やりたかったこと

  • DjangoアプリをFargateサービスで起動するために、以下のようなDockerfileでbuildしたimageをECRにpushしてある。
Dockerfile
~ 略 ~
CMD python manage.py runserver--noreload 0.0.0.0:8000
  • 本番用のDB(RDS/postgres)に対して、makemigrations/migrate/createsuperuserを実行したい。
  • DBセットアップのために、CMDだけ書き換えたimageを用意するのは何となく納得いかない。
こんな風にしたい
~ 略 ~
CMD python manage.py makemigrations && \
    python manage.py migrate && \
    python createsuperuser --noinput

createsuperuser--noinputオプションを利用して宣言的に行う。
※また、2回目以降は重複ユーザでタスクがエラーになるが、特に問題はない。

  • ECSのタスク定義のコンテナ追加オプションで、ENTRYPOINTとCMDを上書きできるらしいのでやってみよう・・・とするが、コマンドを複数実行(makemigrations/migrate/createsuperuser)しようとするとうまくいかない。(migrateだけ等、単一のコマンドなら成功するが、&&で繋いで複数コマンドを実行すると失敗する)

解決方法

  • 以下の記法で、コンテナのCMDを上書きし、複数コマンドを実行できるようになった。(CDK/python)
cdk_stack.py
task_definition.add_container(
    ~ 中略 ~
    entry_point=[
        "sh",
        "-c",
    ],
    command=[
        '/bin/sh -c "python manage.py makemigrations && python manage.py migrate && python manage.py createsuperuser --noinput"',
    ],
)
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