##はじめに
この記事はハンズラボ Advent Calendar 2020 9日目の記事となります。
今回のテーマは現在開催中のAWS re:Inventからではないですが、
ECSの構築を簡単にしてくれるCopilotが一般公開されたのでこちらを見てみます。
この記事の対象者
- 右も左もわからないけど、Dockerやってみたい!ECS気になる!な方
- ECSでインフラ構築しなくちゃどうしよう。。な方
当時闇雲にインフラ構築をして疲弊していた知識不足な自分に向けて
Copilotとは
概要についてはAWSブログより引用。
ECS CLIの後継にあたるものみたいです。
AWS Copilot は、低レイヤなインフラの手動管理から脱却し、自身のアプリケーションとそのライフサイクルにフォーカスしたい ECS ユーザのためにデザインされました。Copilot は、ECS チームのエンジニアや ECS のお客様が作り上げてきたベストプラクティスに基づき、デフォルトでモダンかつプロダクションレディなインフラを構築します。
AWSだとCloudFormation or CDK(Cloud Development Kit) が良いのかなと考えますが、やっぱり大変ですよね。。
CloudFormationと聞きますと、こちらの記事を思い出します。
CloudFormationの全てを味わいつくせ!「AWSの全てをコードで管理する方法〜その理想と現実〜」
最初の一歩を踏み出すには、中々が勇気がいりそう。。
そんな感じでスルーしてしまうのは非常に勿体ないので、是非Copilotから自動化の素晴らしさを体験してみましょう!!
Copilot動かしてみる
前提
- macOS
- aws cliインストール&設定済み
(aws configure
でデフォルトプロファイルを設定。)
Copilot インストール
$ brew install aws/tap/copilot-cli
copilot --help
を実行すると以下のように表示されます。
DevlopとReleaseとあって、CI/CDパイプラインもすぐ組めそう。
ドキュメントはこちらから。copilot docs
でもいけます。↓
https://aws.github.io/copilot-cli/
アプリを用意
(こちらを拝借)
https://github.com/Daviey/nyan-cat
Dockerfileは以下のようにします。
FROM nginx:alpine
EXPOSE 80
COPY . /usr/share/nginx/html
さっそく実行
copilot init
いくつかのやりとりを経てデプロイが実行されます。
ひとまずテスト環境として、アプリケーションがデプロイされるイメージです。
途中でCloudFormationのコンソールをみてみると、
こんな感じでスタックが作成されていきます。
ECRへimageのpushが終わりました。
デプロイが完了したようです。
一応、デプロイ完了後のCloudFormationコンソールも。。。
アクセスしてみる
コンソールをみると、URLあるのでそこからアクセスしてみます。
うごいたーー
猫が飛んでいます。
ここまで15分くらいあれば速攻でECSデプロイいけます。
本番環境へデプロイしたい
本番環境としてデプロイしたい場合には
copilot env init
を実行すると、環境ごとのインフラを構築してくれます。
(nameはproductionとします)
設定ファイル(manifest.yaml)の値を書き換えて、
以下コマンドを実行するだけでデプロイができます。
copilot svc deploy --env production
以下のようにenviromentsを上書きするだけで、
複数のAZに対してコンテナを配置して、可用性の高いアプリケーションとすることが出来ます。(す、凄い)
environments:
production:
count: 2
cpu: 1024
memory: 2048
Copilotはどれだけ楽にしてくれるか
ECSでアプリケーションを実行するには最低でも以下AWSサービスを利用します。
- ECS
- ECR
- EC2( or Fargate)
- ELB
- VPC(サブネットも色々気にしないといけない)
etc...
多いです。
手で作る or Cfnで構築といった場合は上記すべてを網羅しておく必要があります。
先程のcopilot init
を絵に表すとこんな感じ。。
(これも細かい所は省いています。間違っていたらすみません。)
コンテナの恩恵を被るには、結構準備が必要です。
デプロイしたいアプリケーションさえあれば、すぐにリリースできる。
そんなことがCopilotだと可能です。素敵ですね。
考察
所属チームでは、システムのマイグレーションは中長期的な課題ではあるので、
コンテナ化する際の選択肢の一つとしてCopilotはアリかなと考えています。
現状、マイグレーションの一環としてECS化は結構進んでいるので。。
弊社のようにのっぴきならない事情がない限りは、
こういったツールをドンドン活用していった方が良いかなと思われます。。
マイグレーションの歩みはこちらから見れます。
ハンズラボエンジニアブログ
最後に
最後まで読んでいただきありがとうございました。
消し忘れると課金されてしまうので、不要であれば消しましょう。
copilot app delete --env-profiles test=default
以下でCopilotでの自動デプロイが紹介されているみたいなので、今度試してみたいと思います。
https://aws.amazon.com/jp/blogs/news/automatically-deploying-your-container-application-with-aws-copilot/