エキサイト株式会社エンジニアの佐々木です。IaCといえば、Terraformがデファクトスタンダードですが、AWSのECSを利用しているのであれば、 AWS Copilotコマンドが便利だと思いますので紹介します。
前準備
AWS クレデンシャルの設定
AWS Copilotの実行には、AWS クレデンシャルが必要です。aws configure sso
でも、IAM
でのアプリケーションキーの発行でもどちらでも動作します。
AWS Copilotの環境構築
AWS Copilotの環境構築は下記の手順になります。
コマンド | できること |
---|---|
copilot app init | AWS Copilotの管理用の名前空間を構築します。Application と呼ばれます。 |
copilot env init | copilotで指定する環境を作成します。ECSコンテナとかが作成されます。(環境数分作成します。dev/test/stage/prod なら4回行います。) |
copilot env deploy | copilotで作成した環境をAWSにデプロイします。 |
copilot svc init | ECSコンテナ内のサービス作成に必要な設定ファイル等を生成します。 |
copilot svc deploy | ECSコンテナ内のサービス作成・ALB作成・ターゲットグループ作成を行います。 |
copilot app init
下記のコマンドでsample-app
を構築します。
copilot app init sample-app
このコマンドでaws copilotのApplication
を作成します。Application
は、AWS Copilotの管理用のネームスペースになります。基本的にApplication
の中にECSだったりALBだったりが設定されていくイメージです。(実際は異なります)
copilot env init
Application
内を環境ごとに区分けするコマンドです。
# 下記コマンドでtest envを作成します。 copilot env init test --import-vpc-id vpc-xxxxxxxxx, --import-public-subnets subnet-aaaa,subnet-bbbb --import-private-subnets subnet-cccc,subnet-dddd # 下記コマンドでprod envを作成します。 copilot env init prod --import-vpc-id vpc-zzzzzzzzz, --import-public-subnets subnet-kkkk,subnet-lllll --import-private-subnets subnet-mmmmm,subnet-nnnnn
アプリケーション開発をしていると、環境ごとにわけることはあるかなと思いますので、その数だけ環境を作成します。(必要になったら作る感じでいいと思います。)イメージとしては、ECSのクラスターの設定ファイルが作成されます。 オプションで--importコマンドで既存のVPCやサブネットを指定できます。(Terraformと組み合わせるときに便利です)
copilot env deploy
上記で作成した設定ファイルをAWSにデプロイします。
copilot env deploy --name test copilot env deploy --name prod
デプロイすると、こんな下記のイメージになります。
copilot svc init
ECSのサービスやALBの定義を作成するコマンドになります。
下記のようなコマンドを実行します。
copilot svc init --name ${サービス名} --svc-type ${サービスタイプ} --image ${コンテナイメージ}
--svc-type
は下記を設定できます。
--svc type | できること |
---|---|
Request-Driven Web Service | AWS App Runnerを設定をするモード |
Load Balanced Web Service | ECS Fargete x Load Balancerを設定をするモード |
Backend Service | Load BalancerなしのECS Fargateを設定するモード。外部からアクセスはできない。 |
Worker Service | SQS/SNSを利用したECS Fargateを設定するモード |
Static Site | 静的ファイルをS3に配置し、CrowdFrontと連携を設定するモード |
以上となります。よく使うのは、Load Balanced Web Service
と Backend Service
になります。今回は下記のコマンドを実行します。
copilot svc init --name sample-service --svc-type "Load Balanced Web Service" --image public.ecr.aws/nginx/nginx:stable-perl --port 80
サンプルなので、コンテナイメージはNginxとします。これを実行するとmanifest.yml
が出力されます。
copilot/ sample-service/ - manifest.yml
copilot svc deploy
下記のコマンドを実行して、manifest.ymlを元にデプロイを行います。
cd sample-service copilot svc deploy --name sample-service --env test
ECS Fargateのサービスとタスク、ALBの作成が完了します。イメージとしては下記になります。
このときに、ドメイン等を紐づけていない場合は、ランダムな文字列のURLを発行して、リクエストができるようになります。
このURLにアクセスすると、Nginxのデフォルト画面がでてきます。
まとめ
AWS Copilotで簡単にAWS ECS Fargate / Application LoadBalancer まわりの設定ができました。生成されるmanifest.yml
もかなりわかりやすく書かれているので、運用もしやすいかと思います。メディア事業部ではサービスの立ち上げ等を頻繁に行うので、30分程度で環境構築できるのは魅力的です。今後使っていこうと思います。また、別記事にはなりますが細かい設定を行いたい場合は、YAMLでパッチをあてることも可能でかなり広範囲でAWS Copilotは活躍してくれそうです。
さいごに
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com