🐡

AWS SAM templateファイル記述方法

2022/02/22に公開約2,900字

この記事で使用するSAMでサーバーレスアプリケーションを作成するときに記述するtemplate.yamlファイルの記述方法についてまとめる。

これでわかる人はこれを見てくれ

そもそもSAMとは

SAMはseverless application modelの略でAWS上でサーバーレスアプリケーションを作成するときに使用するオープンソースフレームワークでこれを使用することで簡単にLambda, API Gateway, DynamoDBを定義できる。

実はこのSAMはCloudformationというAWSのリソースをコードで定義することのできるサービスの拡張機能である。

template.yamlファイルとは

template.yamlはSAMでリソースを定義するときに使用するファイルで、このファイル内にリソースを定義する。
※cloudformationでもtemplate.yamlファイル内で記述することでリソースを定義する。
※サーバーレスアプリケーションを定義するためにはtemplate.yaml内に

Transform: AWS::Serverless-2016-10-31

を記述する必要がある。

template.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals: 
	#サーバーレスのリソースが共通して持つ設定をここに記述する。
	Function:
		#ここで定義されるLambda関数全てに共通する設定。
	Api:
		#ここで定義されるAPIgateway全てに共通する設定。
	.  :
		#
Resources:
	ここの中にそれぞれのリソースを定義していく。

Resources:の中身

Resources:
	MyFunction: #リソース名
		type: AWS::Serverless::Function #この場合はlambda関数。
		Properties:
			#ここに詳しい設定を記述していく
			Handler: app.handler #ファイル名.関数 ←実行されるメソッド
			Runtime: python3.9 
			CodeUri: 関数の入ったファイルのパスを指定(initial_handler)
			FunctionName:Lambda関数の命名.指定しない場合勝手に命名される
			Description: 関数の説明を記述(別にいらない)
			Timeout: 関数の実行時間の制限時間を指定
			Role: IAMのARNロールを指定
			Events: 関数のトリガーを指定
			

Deep dive into Properties.

Events: 関数のトリガーとなるものを記述する。
記述方法として、そのトリガーの名前をはじめに記述。そこにtypeとそこにまたpropertiesを指定する。

Events:
	hoge(NameYouCanFreelyDefine):
		Type: SQS or CloudWatchEvent or Api, EventBridgeRule ・・・・
		Properties:
			**Typeによって指定するプロパティーが異なる。↓**

Type詳細

Role: ロール指定
このロール自体もtemplate.yaml内で記述していく。
ex) template.yaml

Resources:
	MyFunction:
		type: AWS::Serverless::Function
		Properties:
			Handler: app.handler
			Runtime: python3.9 
			CodeUri: initial_handler/
			Timeout: 関数の実行時間の制限時間を指定
			Role: !GetAtt BillingNotiferIamRole.Arn

!GetAtt は 引数にあるリソースの値を取得する。
BillingNotiferIamRole.Arn
    ↓ ↓
logicalNameOfResource.attributeName

ここで定義されているBillingNotiferIamRoleはこれから定義する。

Resources:
	MyFunction:
		type: AWS::Serverless::Function
		Properties:
			Handler: app.handler
			Runtime: python3.9 
			CodeUri: initial_handler/
			Timeout: 関数の実行時間の制限時間を指定
			Role: !GetAtt BillingNotiferIamRole.Arn
			
	BillingNotiferIamRole:
		Type: AWS::IAM::Role #TypeはIAM::Roleを指定
		Properties:
		   AssumeRolePolicyDocument:
			Version: "2012-10-17"
			Statement:
			  - Effect: Allow
			      Principal:
				  Service: lambda.amazonaws.com
			      Action: "sts:AssumeRole"
		   Policies:
		       -
			 PolicyName: "billig_notifer_lambda"
			 PolicyDocument:
				  Version: "2012-10-17"
				  Statement:
				      -
					Effect: "Allow"
					Action: "logs:*"
					Resource: "*"

Discussion

ログインするとコメントできます