エキサイト株式会社エンジニアの佐々木です。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へのPutObject
とGetObject
を設定しています。
- 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 CLI の Yaml Patchですが、割と簡単にあてることが可能です。ほとんどの設定がAWS Copilot CLI
とYaml Patch
を組み合わせることで実現が可能です。
最後に
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com