1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Copilot でデプロイ時にマイグレーションを実行する

Posted at

AWS Copilot は copilot task run コマンドで単発のタスクを実行することができますが、環境変数やVPCなどの設定を毎回指定する必要があり面倒です。そこで --generate-cmd オプションを利用してコマンドの雛形を生成してから一部を書き替えてデプロイ時に実行します。

CodeBuild に組み込む

buildspec.ymlpost_build フェーズにマイグレーション用のコマンドを追加します。

Laravel の php artisan app:release コマンドを実行する例

# {APP_NAME} {SVC_NAME} は書き替えてください
- cmd="$(./copilot-linux task run --generate-cmd {APP_NAME}/${env}/{SVC_NAME} 2>&1 | \
  sed -E \
    -e 's/--entrypoint ""/--entrypoint php/' \
    -e 's/--command ""/--command \"artisan app:release\"/' \
    -e 's/copilot /.\/copilot-linux /' \
  ) --follow --task-group-name app-release-${env}"
- eval "$cmd"

copilot task run コマンドは --generate-cmd application/env/service オプションを指定するとコマンドの雛形が出力されます。
この出力は環境変数やVPCなどの設定が含まれていますが entrypoint command オプションだけは空欄になっているので sed などで置換しましょう。出力先がなぜか標準エラー出力なので 2>&1 で標準出力に結合してからパイプで処理します。

CodeBuild で実行するときは copilot コマンドが copilot-linux コマンドになっているのでそれも合わせて sed で置換します。

変数 $cmd に入れてから eval で実行すると空白のエスケープ処理などを気にしなくて良いので簡単です。

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?