AWS ChaliceでEFSマウントを実施する(merge-template機能)

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

目次

背景

Chalice(+CI/CDパイプライン)を利用したAPI開発において、APIGatewayやLambdaに対する追加設定で chalice の configファイルが対応していない点があります。
個人的に遭遇した物で例えば、EFSマウント や APIGatewayのログ出力設定、カスタムレスポンス等です。

デプロイする度にEFSマウントが外れてしまう等悲しい思いをしないようにするため、スマートに対処できる、Chalice の CloudFormation Support (Template Merge) 機能について記載します。

AWS Chalice の AWS CloudFormation Support
https://aws.github.io/chalice/topics/cfn.html

参考: Chaliceに対する EFS Supportのリクエスト新機能チケット(進捗無し)
https://aws.github.io/chalice/topics/configfile.html

実装

上記、AWS Chalice の AWS CloudFormation Supportの先の例では下記のようにDynamoDB Tableの作成やLambda環境変数追加がサンプルとして取り上げられています。
DynamoDB Tableの作成はそもそもCDK側で実施した方が…等の話もあると思いますので設計はさておきChalice Prjだけで完結できるという事は、ありがたい場合もあると思います。

Chaliceドキュメント上のサンプル

chalice packageコマンドに merge-template オプションを指定

$ chalice package --merge-template extras.json out

マージするテンプレート内で、DynamoDB Table作成、作成したTable名をLambda環境変数に追加するサンプル
https://aws.github.io/chalice/topics/cfn.html

extras.json

EFSマウントの実現

本題のEFSマウントですが、下記のような形で extras.json を用意し chalice package時に引き渡し、chaliceが生成したテンプレートにマージします。
(一度Localなりで、生成されるテンプレートを確認し、リソース名をしっかり合わせてからマージしましょう!)

extras.json

APIGatewayのログ吐き出し設定と共にバージョン

CodeBuild内でchalice package、生成されたSAM Template生成をするケースも多いと思いますので、その場合にはソースコードとは同一で、CodeBuild環境変数に ENVIRONMENT_NAME を定義し、環境別でファイルを分ける等で対応します。

CodeBuild Config

chalice package --stage ${ENVIRONMENT_NAME} --merge-template .chalice/extras-${ENVIRONMENT_NAME}.json ./package

まとめ

非常に便利な AWS Chalice で通常は .chalice/config.json で事足りますが、痒い所に手が届かない場合はmerge-template機能を利用しつつ、 config内での対応を期待しましょう!

投稿者プロフィール

takashi
Japan AWS Ambassadors 2023-
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。

ABOUTこの記事をかいた人

Japan AWS Ambassadors 2023- 開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。