Closed3
sam templateの分割について考える
sam template.yaml を分割したい
プロジェクトで利用しているLambdaをsamで開発するようにしたい。
が、数が多いのでtemplate.yamlを分割して管理したい。
でもtemplate.yamlは分割するとスタックやAPI Gatewayも別になったり、ネストしたスタックの管理が大変になったりする(のかな?)
yqを利用する
こちらを参考に、分割したyamlをデプロイ時にまとめてしまおう。
yqは使ったことがないのでよくわからないが、以下のような書き方でtemplate.yamlが書けるみたい。
template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: "Test SAM Application"
Globals:
Function:
Timeout: 180 # 180 seconds
MemorySize: 128
Resources:
- $file: resources/iam_role.yaml
- $file: resources/etl_job_1.yaml
- $file: resources/etl_job_2.yaml
デプロイスクリプト
deploy.sh
#!/bin/bash
set -eu
TMP_FILE='temp.yaml'
yq '(.. | select(has("$file"))) |= load(.$file) | .Resources = (.Resources[] as $item ireduce ({}; . * $item))' template.yaml > ${TMP_FILE}
sam deploy --template ${TMP_FILE}
rm ${TMP_FILE}
yqコマンドで一時的ファイルtemp.yamlを作成して、それでsam deployを行う。
これならtemplate.yamlを分割するデメリットを回避できそうだ。
じゃあどう分割するのがいいのか
ここの分割が参考になりそう
サービスごとにフォルダを分けると可読性、保守性も上がって良さげ
このスクラップは2日前にクローズされました