Closed3

sam templateの分割について考える

るんしょーるんしょー

sam template.yaml を分割したい

プロジェクトで利用しているLambdaをsamで開発するようにしたい。
が、数が多いのでtemplate.yamlを分割して管理したい。

でもtemplate.yamlは分割するとスタックやAPI Gatewayも別になったり、ネストしたスタックの管理が大変になったりする(のかな?)

るんしょーるんしょー

yqを利用する

https://dev.classmethod.jp/articles/sam-split-template-with-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日前にクローズされました