AWS SAM でパラメータを扱う方法

記事タイトルとURLをコピーする

こんにちは、アプリケーションサービス部ディベロップメントサービス 1 課の滝澤です。

本記事をご覧いただきありがとうございます。

本記事は AWS Serverless Application Model(以下、SAM) でパラメータを扱う方法について説明します。

SAM の概要についてはこちらの記事をご覧ください。

blog.serverworks.co.jp

前提(SAM プロジェクトの初期化)

SAM CLI は執筆時点で最新のversion 1.108.0を使用しています。

今回は AWS が用意しているテンプレートのHello World Exampleを使用することにしました。

以下のコマンドを使用することで対話形式で新しいサーバーレスアプリケーションを初期化することができます。 本質ではないので詳しい説明は割愛します。

sam init
$ sam init

Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Data processing
        3 - Hello World Example with Powertools for AWS Lambda
        4 - Multi-step workflow
        5 - Scheduled task
        6 - Standalone function
        7 - Serverless API
        8 - Infrastructure event management
        9 - Lambda Response Streaming
        10 - Serverless Connector Hello World Example
        11 - Multi-step workflow with Connectors
        12 - GraphQLApi Hello World Example
        13 - Full Stack
        14 - Lambda EFS example
        15 - Hello World Example With Powertools for AWS Lambda
        16 - DynamoDB Example
        17 - Machine Learning
Template: 1

(以下略)

SAM でパラメータを使用する方法

template.yaml にParameters セクションを追加する

template.yaml に以下の Parameters セクションを追加し、そのパラメータを使用したい箇所で Ref 関数を呼び出します。

...
Parameters:
  SampleParam01:
    Type: String
    Description: A sample parameter
...
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Ref SampleParam01
...

これで template.yaml ファイルでパラメータを受け取る準備が完了しました。

template.yaml にパラメータを渡す方法

デプロイ時に --parameter-overrides を使用する

sam deploy --parameter-overrides ParameterKey=ParameterValue

deploy 時に --parameter-overrides オプションを使用することで template.yaml ファイルにパラメータを渡すことができます。

template.yaml に Parameters セクションを追加する で提示した例だと

sam deploy --parameter-overrides SampleParam01=hoge

といった形で渡すことができます。

お手軽ではありますが、毎回指定する手間やパラメータ数が多くなった時の管理の煩雑さがネックです。

sam deploy --guided を使用する

デプロイ時に使用できる --guided オプションというものがあります。

詳しくはこちらの記事をご覧ください。

blog.serverworks.co.jp

このオプションを使用することでプロンプトを用いたガイドを使用することが可能で、

その中でパラメータに関しても、1 つずつ指定することが可能です。

また、プロンプト内のSave arguments to configuration fileの項目に yesと回答した場合には samconfig.toml ファイルにパラメータの設定を保存して次回からのデプロイに使用することができます。

samconfig.toml ファイルに記述する

前章で samconfig.toml ファイルにパラメータ内容を保存することができると述べましたが、

このファイルを直接変更することで template.yaml に渡すパラメータの内容を変更することももちろん可能です。

parameter_overrides = "SampleParam01=hoge",

パラメータが増えても

parameter_overrides = [
    "Param01=hoge",
    "Param02=fuga",
    "Param03= piyo",
    ...
]

といった形で渡せるので、デプロイ時の手間も少なく済みます。

3種類の方法をご紹介しましたが、基本的には samconfig.toml ファイルに記述する方法が管理がしやすいのでおすすめです。

デプロイしてみた

samconfig.toml ファイルに記述するの方法で実際にデプロイを実行してみます。

samconfig.toml 内

parameter_overrides = "SampleParam01=hoge",

以下のコマンドを実行します。

sam deploy

AWS マネジメントコンソールを覗くと実際にパラメータで指定した値が Lambda(HelloWorldFunction)の関数名に使用されているのが確認できました。

終わりに

最後までお読み頂きありがとうございました。

本記事では SAM でのパラメータの扱い方について説明しました。 次回、ネストされたスタックでのパラメータの受け渡しについての記事も執筆予定ですのでぜひそちらもご覧いただければと思います。

本記事が少しでもお役に立てれば幸いです。

滝澤 稜(執筆記事の一覧)

アプリケーションサービス部ディベロップメントサービス1課

2022年に新卒で入社しました。 うどんが大好物です。