AWS Copilot CLI の manifest.yml で定義できない設定をYaml Patchを使用して設定する

エキサイト株式会社エンジニアの佐々木です。AWS Copilot CLIはECS Fargateを使うにはかなり便利なツールですが、その分設定ファイルでできないことも結構あります。AWS Copilot CLIのチームもそれがわかっているのか、YamlでPatchを当てる機能をリリースしています。

実現したいこと

AWS Copilot CLI で作成したECS Fargateの環境のログ送信をAWS CloudWatch LogsからFirelensに変更する になります。CloudWatch Logsは料金が高いのでエラーログ以外はFirelensからS3に転送して節約したいと思います。

manifest.ymlではできないこと

AWS Copilot CLIは標準的な設定やポリシーなどは生成されますが、それ以外のことはmanifest.ymlではできません。

copilot svc override コマンド

manifest.ymlでは設定できないことをcopilot svc override コマンドで設定ファイル出力します。

copilot svc override --name sample-app --tool yamlpatch

※ --tool cdk もできます

下記ファイルが出力されます。

overrides/
  - cfn.patches.yml
  - README.md

cfn.patches.yml に定義を追加していきます。

cfn.patches.yml に定義を追加

書き方は独特ですが、下記のように書くことが可能です。あくまでパッチですので、既存の設定を書き換えたり、追加したりがメインになります。 下記の設定は、S3へのPutObjectGetObjectを設定しています。

 - op: add
   path: /Resources/TaskRole/Properties/Policies/-
   value:
     PolicyName: 'S3AccessPolicy'
     PolicyDocument:
       Version: '2012-10-17'
       Statement:
         - Effect: Allow
           Action:
             - 's3:GetObject'
             - 's3:PutObject'
           Resource: '*'
  • op: add/remove/replace から選べます。
  • path: 適用したいCloudFormationのpathを記述します。
  • value: 適用したい値を書きます。

copilot svc package コマンド

上記のようにファイルを作成したら、下記コマンドで差分を確認することが可能です。

copilot svc package --name sample-app --diff

差分を確認して期待どおりならデプロイするだけとなります。

またcolilot svc packageコマンドの別の使い方で、下記コマンドのように現在設定されているCloudFormationの設定をみることも可能です。

copilot svc package --name sample-app

まとめ

AWS Copilot CLIYaml Patchですが、割と簡単にあてることが可能です。ほとんどの設定がAWS Copilot CLIYaml Patchを組み合わせることで実現が可能です。

最後に

エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。

募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com