🫣
[AWS SAM]Hello World Example template.yamlの内容を見てみよう
はじめに
AWS SAMを使ってみた!感動した!
で作成した環境のHello World Example template.yamlの内容を1つ1つ見てみます。
動作環境
macOS Monterey 12.6.5
template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
todo-app
Sample SAM Template for todo-app
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 3
MemorySize: 128
Tracing: Active
Api:
TracingEnabled: true
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.9
Architectures:
- x86_64
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: get
ApplicationResourceGroup:
Type: AWS::ResourceGroups::Group
Properties:
Name:
Fn::Sub: ApplicationInsights-SAM-${AWS::StackName}
ResourceQuery:
Type: CLOUDFORMATION_STACK_1_0
ApplicationInsightsMonitoring:
Type: AWS::ApplicationInsights::Application
Properties:
ResourceGroupName:
Ref: ApplicationResourceGroup
AutoConfigurationEnabled: 'true'
Outputs:
# ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
# Find out more about other implicit resources you can reference within SAM
# https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
HelloWorldApi:
Description: API Gateway endpoint URL for Prod stage for Hello World function
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
HelloWorldFunction:
Description: Hello World Lambda Function ARN
Value: !GetAtt HelloWorldFunction.Arn
HelloWorldFunctionIamRole:
Description: Implicit IAM Role created for Hello World function
Value: !GetAtt HelloWorldFunctionRole.Arn
セクション
- Transform宣言は飛ばして、まず、セクション
-
Globals
:AWS SAMに固有の(共通となる)セクションで、すべてのサーバーレス関数とAPI に共通するプロパティを定義する。
Globals
セクションで定義されているプロパティを継承するリソース- AWS::Serverless::Function
- AWS::Serverless::Api
- AWS::Serverless::SimpleTable
-
Resources
:AWS CloudFormation リソースと AWS SAM リソースの組み合わせを含めることができる。- AWS SAMリソース
- AWS::Serverless::Api
- AWS::Serverless::Application
- AWS::Serverless::Connector
- AWS::Serverless::Function
- AWS::Serverless::HttpApi
- AWS::Serverless::LayerVersion
- AWS::Serverless::SimpleTable
- AWS::Serverless::StateMachine
- AWS CloudFormationリソース
- 多いので、こちら参照とさせてくださいAWS resource and property types reference
Outputs
スタックのプロパティを確認すると返される値。AWS CloudFormation テンプレートの Outputs セクションに直接対応する。テンプレートファイルを分けた時に、別ファイルのリソースIDなどを参照するために使われるようです。テンプレートファイル1つであれば不要ってことですね。
- 多いので、こちら参照とさせてくださいAWS resource and property types reference
- AWS SAMリソース
-
Outputs:
Logical ID: # 論理ID ex)HelloWorldFunction
Description: Information about the value # 出力値の説明 ex)Hello World Lambda Function ARN
Value: Value to return # 出力値(リテラル、パラメタ参照、擬似パラメタ、マッピング値、組み込み関数を含めることができる) ex)HelloWorldFunction.Arn
Export: # クリススタック参照にエクスポートされるリソースの名前
Name: Name of resource to export
Globalsセクション
- リソースとプロパティ
- Function
-
Timeout: 3
:タイムアウト時間 -
MemorySize: 128
:使用するメモリサイズ -
Tracing: Active
:X-Rayトレースの有効化/無効化
-
- Api
-
TracingEnabled: true
:X-Rayトレースの有効化/無効化
詳細は、AWS SAM テンプレートの Globals セクション参照してください。
-
- Function
Resourcesセクション
- リソースとプロパティ
- HelloWorldFunction(関数名)
-
Type: AWS::Serverless::Function
:Lambda関数、IAM実行ロール、及び、この関数をトリガーするイベントソースマッピングを作成 -
Properties:
:プロパティ-
CodeUri: hello_world/
:関数コードのS3 URI、ローカルフォルダへのパス、またはFunctionCodeオブジェクト ※PackageType プロパティが Zip に設定されている場合のみ適用 -
Handler: app.lambda_handler
:実行を開始するために呼び出されるコード内の関数 ※PackageType プロパティが Zip に設定されている場合のみ適用 -
Runtime: python3.9
:関数のランタイムの識別子です。 ※PackageType プロパティが Zip に設定されている場合のみ適用 -
Architectures:- x86_64
:関数の命令セットアーキテクチャ。 ※デフォルト「x86_64」 -
Events:
:この関数をトリガーするイベントを指定 ※詳細は、>>-
HelloWorld:
: -
Type: Api
:イベントタイプ -
Properties:
:このイベントマッピングのプロパティ ※詳細は、>>-
Path: /hello
:この関数が呼び出される URI パス ※/で始まる必要がある -
Method: get
:この関数が呼び出される HTTP メソッド
-
-
-
-
- ApplicationResourceGroup
-
Type: AWS::ResourceGroups::Group
:指定された名前と説明を使用してリソース グループを作成 -
Properties:
:プロパティ-
Name
:リソースグループの名前
+Fn::Sub: ApplicationInsights-SAM-${AWS::StackName}
:
組み込み関数 Fn::Sub は、入力文字列の変数を、指定した値に置き換える。スタック名が入ったこの文字列の指定となる -
ResourceQuery
:どのAWSリソースが関連するリソースグループのメンバーであるかを動的に判断するために使用されるリソースクエリ構造
+Type: CLOUDFORMATION_STACK_1_0
:AWS CloudFormation スタックベースのリソース グループを作成するには、"CLOUDFORMATION_STACK_1_0"を指定 ※詳細は、>>
-
-
- ApplicationInsightsMonitoring
-
ApplicationInsightsMonitoring
:リソース グループから作成されたアプリケーションを追加する -
Properties:
:プロパティ-
ResourceGroupName
:リソースグループの名前-
Ref: ApplicationResourceGroup
:指定したリソース「ApplicationResourceGroup」の値を組み込み関数Refが返す ※Ref関数の詳細は、>>
-
-
-
AutoConfigurationEnabled
:trueの場合、アプリケーションコンポーネントは、Application Insights によって推奨される監視構成で構成される
-
- HelloWorldFunction(関数名)
まとめ
ひとまず、Hello World Example template.yamlの内容を1つ1つ見てみました。大体は理解できました。最後の方のリソースグループらへんは、理解が足りていないのでまた別の機会に詳細を調べて理解しようと思います。
Discussion