#きっかけ
最近Selenium WebDriverのテスト実行環境をDocker Composeで組んで、ECSに上げてみようかなーと思っていたところにAWS Copilotなるサービスが登場したので触ってみました。
今回はSeleniumを走らせるのではなく、チュートリアル的にシンプルなnginxのwebサーバを立てて動作を確認したいと思います。
#AWS Copilotって何が出来るの?
AWS Copilotを使うことで、対話形式のセットアップで簡単にDockerfileからAmazon ECSでコンテナ起動ができます。
テスト環境や本番環境など環境毎のコンテナデプロイも簡単に行えます。
#インストール
Homebrewか直接バイナリダウンロードでインストールを行います。
# Homebrew
$ brew install aws/tap/copilot-cli
# 直接ダウンロード
$ curl -Lo /usr/local/bin/copilot https://github.com/aws/copilot-cli/releases/download/v0.1.0/copilot-darwin-v0.1.0 && chmod +x /usr/local/bin/copilot && copilot --help
# インストール確認
$ copilot --version
copilot version: v0.1.0
#必要なファイルの準備
Dockerfileと今回はnginxを動かすのでWebサーバ用のindex.htmlファイルを用意しておきます。
# ファイル置き場
.
├── Dockerfile
└── index.html
Dockerfileの中身はシンプルに以下の内容です。
FROM nginx
EXPOSE 80
COPY index.html /usr/share/nginx/html
アプリケーションのセットアップおよびテスト環境へのデプロイ
インストールが終わったら以下のコマンドで対話形式のセットアップを行います。
今回はnginxを立ち上げるのでservice type
はLoad Balanced Web Service
を選択します。
# 任意のフォルダで
$ copilot init
What would you like to name your application? [? for help] # アプリケーション名を指定
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 nginx-test? [Use arrows to move, type to filter, ? for more help]
# 自動検出されるDockerfileを選択します。copilot init実行配下のフォルダの中のDockerfileも見つけてくれます。
これだけで必要なものは自動的にセットアップされます。(処理が終わるまで少し時間がかかります)
しばらく待ってセットアップが完了すると
All right, you're all set for local development.
と表示され、テスト環境にデプロイをするかどうか聞かれます。(テスト環境だけ自動で作成され、他の環境は後述のコマンドで作ります。)
ここではテスト環境にデプロイをします。
Would you like to deploy a test environment? [? for help] (y/N)
するとデプロイが開始され、またしばらく待ちます。(10分くらい?)
git管理しているフォルダで$ copilot init
を行った場合、Copilotのセットアップで自動作成されたAmazonECRのImageタグにはcommit番号?(7桁の英数字)が入ります。
git管理していない場合は以下のメッセージが表示され、Imageタグを入力するように求められます。
Input an image tag value:
すべてが完了すると最後にデプロイしたテスト環境へのアクセスURLが表示されます。
ブラウザでアクセス出来るか確認してみましょう。
もしアクセス先のURLが分からなくなった場合は、以下のコマンド結果のRoutes
に載っています。
$ copilot svc show
#デプロイ先環境の作成
テスト環境は自動で作られていましたが、それ以外にSTG環境や本番環境など任意の環境を作りたい場合は以下のコマンドで作成します。
$ copilot env init
What is your environment's name? [? for help] # 作成する環境名
Which named profile should we use to create 『指定した環境名』? [Use arrows to move, type to filter, ? for more help] # AWS CLIで複数profileを設定している場合に選択する
作成まで少し時間がかかります。
作成した環境一覧は以下のコマンドで確認できます。
$ copilot env ls
#作成したデプロイ先環境にデプロイ
環境を作成したらデプロイを行います。
テスト環境のデプロイと同じように、git管理していない場合はAmazon ECRのイメージタグを入力するように求められます。
$ copilot svc deploy --env 『作成したデプロイ環境』
Input an image tag value:
デプロイが完了したらURLが表示されます。
複数の環境を作成した場合、./copilot/『サービス名』/manifest.yml
に以下の記述を追記することで環境毎にスペックを変更することも可能です。
詳しくはAWS Copilot のご紹介 | Amazon Web Services ブログを確認してください。
environments:
『デプロイ環境名』:
count: 2 # アプリケーションを複製して動かす数
cpu: 1024 # CPUの割当量
memory: 2048 # メモリの割当量
#その他のCopilotのコマンド
####アプリケーションの一覧を表示
$ copilot app ls
####アプリケーションに含まれるサービスや環境の一覧を表示
$ copilot app show
####アプリケーションの削除
ここまでで作成したアプリを丸ごと削除します。
$ copilot app delete
####サービスの一覧を表示
$ copilot svc ls
####サービスのログを表示
デプロイした環境が複数ある場合はログ出力する環境を聞かれます。
色々フラグがあるので詳しくはsvc logs command · aws/copilot-cli Wikiを確認してください。
$ copilot svc logs
###サービスのステータスの表示
デプロイした環境が複数ある場合はログ出力する環境を聞かれます。
$ copilot svc status
#まとめ
copilot pipeline init
まで手が出せなかった(というかやったけど上手くいかなかった)ので、pipelineも理解したら続きを書いたいと思います。
出来たのでCopilot Pipeline記事を書きました。
#We're hiring!
AIチャットボットを開発しています。
ご興味ある方は Wantedlyページ からお気軽にご連絡ください!
参考
ECSのオペレーションを劇的に簡略化するAWS Copilotが発表されました! | Developers.IO
AWS Copilot のご紹介 | Amazon Web Services ブログ
Home · aws/copilot-cli Wiki