見出し画像

Github ActionsでLambda関数をデプロイするときに気をつけること。 Requires capabilities :[CAPABILITY_AUTO_EXPAND]

まとめ
- AWSCLIでできること結構Github Actionのリポジトリーに相当のものあるよ。 
- 以下のコードにどハマりしたが、ちゃんとソースコードを読めば回避オプションがあった。
- これはタイトルのエラー回避のみで、ハマりポイントは他にもあるよ。

Requires capabilities : [CAPABILITY_AUTO_EXPAND]


きっかけ

今までGithubでソースコードを管理しつつデプロイはローカルのInteliJ+AWSプラグインに頼り切りだったため、自動デプロイというものに興味があった。いずれコードをPushしたら自動テスト→自動デプロイができるようになればいいなと思いひとまず自動デプロイを試してみることにした。

「それ、別にコマンドをRunしなくてもできますよ?」

最初に書いたのは次のようなコードである。

      - name: Deploy Cloudformation Stack
       env:
         STACK_NAME: createvpc-dev
         TEMPLATE_NAME: template.yaml
       run: |
         aws cloudformation deploy \
         --stack-name ${STACK_NAME} \
         -- template-file ${TEMPLATE_NAME} \
         --parameter-overrides Environment=development \
         --no-fail-on-empty-changeset

これは何が煩雑かというと、コマンドを長々しくワンライナーで書いているためエラーが出てもどこの切り分けかもしずらい、AWSCLIへの強い知識が求められるとハードルも高かった。ついでにTemplateがS3のアドレスでないとうまく動かない(InteliJはローカルのアドレスをデプロイしてS3のアドレスをもらって変換したものをCloudformationに渡すみたいな部分をよしなにやってくれててありがたみを感じた)という部分でなかなか動かなかった。

そこで調べたのがGithubActionsのaws-actions/aws-cloudformation-github-deployである。これのStack通りかつaws-actions/configure-aws-credentials@v1の環境設定を引き継いでくれて便利である。本当に。

ちなみに、aws-actions/aws-cloudformation-github-deployをしりたいときは、action.yamlを見ると知りたいことが大体書いてある気がする。
だいたいはまったエラー名をググって変更するべきパラメーター名に言及されている箇所(今回はCapabilities)をaction.yaml上から探しだし、パラメーターを指定すればOK。結論から言うと以下のコードである。

      - name: DeployCloudformation Stack
       uses: aws-actions/aws-cloudformation-github-deploy@v1.0.3
       with:
         name: hogehoge
         template: template.yaml
         no-fail-on-empty-changeset: "1"
         capabilities: CAPABILITY_AUTO_EXPAND 

AWSにデプロイできた(Cloudformationに認知された)はいいもののtemplate.yaml上のS3アドレスに変換しなければいけないものが変換されてないっぽいので、それについてはまた後日。

参考になりそうな資料

Deploy AWS CloudFormation stacks with GitHub Actions
AWS CodePipelineのCapabilityでCAPABILITY_AUTO_EXPANDがなくてハマった

この記事が気に入ったらサポートをしてみませんか?