乱雑な作業記録です。
はじめに
いま、私の手元には Dockerfile があります。
動作確認が終わりました。
このままデプロイしたいです。
します。
ディレクトリ構成 (必要な部分のみ)
$ tree -a
.
├── README.md
├── api
│ └── Dockerfile
└── docker-compose.yml
準備
これによると、AWS Copilot CLI と AWS CLI と Docker が必要らしいです。
基本的には AWS Copilot CLI だけで済みそうですね。
$ brew install aws/tap/copilot-cli
あと、こちらが AWS Copilot CLI 公式ドキュメント です。
AWS Copilot のコンセプトを少し理解する
こちら を読むと、AWS Copilot は以下のような構成をしているようです。
-
Application : 以下の 2 個を包括する概念
-
Environment : いわゆるデプロイステージ (
dev,stg,prodなど ) -
Service : 他の AWS サービス ( DynamoDB, S3 など )
-
したがって、この順番に作成していこうと思います。
Application を作成する
まずは Application を作成します。名前はプロジェクト名と同名にしました。
$ copilot app init ${アプリケーション名}
なお、このときに Route 53 に登録済みの既存ドメイン名を利用することができ、これなら HTTPS が使えるようです。(まだ試していません)
$ copilot app init ${アプリケーション名} --domain example.com
少し待つと、copilot ディレクトリが作成されました。
$ tree -a
.
├── README.md
├── api
│ └── Dockerfile
├── copilot
│ └── .workspace
└── docker-compose.yml
Environment を作成する
次に dev という名前の Environment を作成します。
$ copilot env init \
--name "dev" \
--profile "default" \
--default-config
上記の --profile ではどの AWS Credentials を使用するかを指定しているので、使用したいプロファイル名を指定してください。
なお、パラメーターなしで copilot env init を実行すれば、対話でいろいろ聞いてくれます。
これで AWS 上に色々必要なリソースが作成されるようです。
作成されたリソースのプレフィックスは、だいたい {App}-{Env}- でした。
Service を作成する
次に app という名前の Service を作成します。
$ copilot svc init \
--svc-type "Load Balanced Web Service" \
--name "app" \
--dockerfile "./api/Dockerfile" \
--port "80"
なお、パラメーターなしで copilot svc init を実行すれば、対話でいろいろ聞いてくれます。
少し待つと、copilot ディレクトリの下に app/manifest.yml が作成されました。
$ tree -a
.
├── README.md
├── api
│ └── Dockerfile
├── copilot
│ ├── .workspace
│ └── app
│ └── manifest.yml
└── docker-compose.yml
ちなみに、ポート番号に 80 以外を設定していると、うまくいきませんでした。
よく調べていないので原因不明ですが、そのうちちゃんと調べようと思います。
その他の AWS サービスを作成する
他に必要な AWS サービスがある場合、まずは copilot storage init をしてみてください。
すると、DynamoDB・S3・Aurora のいずれかのリソースを作成するための対話が始まります。
この時点では AWS リソースは作成されないので、適当に db という名前で作成してみます。
すると、copilot/app ディレクトリの下に addons/db.yml が作成されました。
$ tree -a
.
├── README.md
├── api
│ └── Dockerfile
├── copilot
│ ├── .workspace
│ └── app
│ ├── addons
│ │ └── db.yml
│ └── manifest.yml
└── docker-compose.yml
この YAML ファイルは AWS CloudFormation の記法で書かれており、公式ドキュメントの ここ を参考にして、欲しい AWS リソースを定義すれば良さそうです。
私は、Aurora (PostgreSQL) と Cognito User Pool を作成しました。
デプロイする
最後に、デプロイします。
Environment は dev で、Service は app です。
$ copilot svc deploy \
--env "dev" \
--name "app"
初回のデプロイは、かなり時間が掛かると思います。
また、次回以降のデプロイも同じコマンドでできますが、リソースに変更がないと判断されるとデプロイしてくれません。
そのときは、--force のオプションをつけるとデプロイできます。
追加の AWS リソースでエラーが発生したら
追加の AWS リソースのデプロイでエラーが発生すると、CloudFormation のいつもの悪癖で、ロクに理由を教えてくれません。
と思ったのですが、自分の探し方が悪かったようで、スタックが別に分けてありました。
メインのスタック名が {App}-{Env}-{Service} の形式ですが、追加の AWS リソースは {App}-{Env}-{Service}-AddonsStack-XXXXXXXXXXXX というスタック名です。
そこのイベントに、エラーの詳細が多少は書かれています。
メモ
似たようなことができるヤツで、Docker Compose for Amazon ECS というものがありました。
今回はうまくいかなかったので断念しましたが、選択肢の一つとして頭の片隅に留めておきたいと思いました。
どうせ忘れるのでメモしときました。
0 件のコメント:
コメントを投稿