それ、できます。
そう、copilotならね。
AWS-copilotとは
ECS上でアプリケーションを作成する際の環境作成や連携をコマンドを叩けば自動でやってくれるとのこと。
2020年6月にリリースされてから12月現在に至るまでほぼ毎月アップデートされ、新機能が追加されている。
※旧ECS-CLI
こちらの記事で紹介されてます。
AWS Copilot のご紹介
目標
- アプリケーションの作成
- 環境の作成
- サービスの作成およびデプロイ
実際にやってみる
ここからの作業は作業者様の環境等に合わせて適宜読み替えていただければと思います。
準備
###インストール
- AWS-copilot
$ curl -Lo /usr/local/bin/copilot https://github.com/aws/copilot-cli/releases/latest/download/copilot-darwin && chmod +x /usr/local/bin/copilot && copilot --help
もしくは
$ brew install aws/tap/copilot-cli
- AWS-cli
$ brew install awscli
$ aws --version
aws-cli/2.0.54 Python/3.8.5 Darwin/19.6.0 source/x86_64
aws configureで必要情報の設定。下記参照願います。
設定の基本 - AWS Command Line Interface
- Docker
$ brew cask install docker
##copilotの実行
自分で作成したDockerfile等がない場合、
サンプルが用意されているのでそちらをクローンしてテストしてみてください。
https://github.com/aws-samples/aws-copilot-sample-service
また、私の環境だとエラーが出て進まなかったため個別に実行していますが、
$ copilot init
でまとめて実行も可能です。
- アプリケーションの作成
#Dockerfileがある作業ディレクトリに移動
$ cd workspace
$ copilot app init
What would you like to name your application? [? for help] #任意のアプリケーション名
- 環境の作成
$ copilot env init
What is your environment's name? [? for help] #任意の環境名
上記の場合、VPC等が諸々新規で作成されます。
既存環境を使用する場合は下記のオプションでVPC及びサブネット指定が可能。
$ copilot env init --import-vpc-id vpc-****** --import-public-subnets subnet-******,subnet-****** --import-private-subnets subnet-******
- サービスの作成/デプロイ
$ copilot svc init
Which service type best represents your service's architecture? [Use arrows to move, type to filter, ? for more help]
> Load Balanced Web Service
Backend Service
What do you want to name this Load Balanced Web Service? [? for help] #任意のサービス名
Which Dockerfile would you like to use for [サービス名] ? [Use arrows to move, type to filter, ? for more help]
> ./Dockerfile
Enter custom path for your Dockerfile
Use an existing image instead
$ copilot svc deploy --name [サービス名]
これで一通りの構築が完了してしまいました。
うまくいけばターミナル上ですべて完結。
AWS-CLIと組み合わせればもっと色々できそうです。(私はよくわかっていない。)
おまけ
マルチサイト化したかったため、私が追加実施した内容は大まかに以下の通り。
なにかの参考になれば幸いです。
- 追加するサイトの設定をDockerfileに記述
- copilot svc init/deploy
- AWSコンソール上でECS>クラスター>タスク定義にボリューム追加
- コンテナ定義のソースに上記ボリュームを設定、コンテナパス追記
- Route53にホストゾーン作成、copilotで作成したALBを選択
- ALBリスナーにルールを追加。転送先に作成したサービスのターゲットグループを指定
- 追加したいサイトの数だけ繰り返し
最後に
便利です。
なにかしらのエラーで上手く進まない場合はCloudFormationのログが助けになりました。
現在はタスク定義の変更を手動でやっているので、
今後JSONファイルを読ませて自動で設定してくれないかなと思っています。
既にその機能があって見逃してるだけだったらすみません。
また、今回書いた内容に不備があればご指摘いただけると幸いです。
ここまで読んでくださりありがとうございました。
少し早いですが良いお年をお過ごしください。