この記事を読んでわかること!
- CloudFormationを利用したインフラ構築
- StepFunctionsのステートメント作成サンプル
- おまけでIAM RoleとLogGroupの作り方も
実行環境
・Region…ap-northeast-1
・Cli…OS間の実行環境統一のため、AWS CloudShellで実行
・Files…HOMEディレクトリにUPLOADして実行
CloudShell>Actions>Files>Upload file>Select file>Upload
【サンプル】StepFunctionsを作成するテンプレート
・テンプレートファイル
Stackを作成
【概要】
CloudWatchLogsのLogGroup作成
IAM Role作成
Lambda呼び出しのStepFunctionsを実施
AWSTemplateFormatVersion: "2010-09-09"
Description: "nmg-stepfunctions-stack"
#======================
# パラメーター
#======================
Parameters:
Environment:
Type: String
#======================
# リソース
#======================
Resources:
# IAM Role
InvokeLambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: StepFunctionsAssumeRolePolicy
Effect: Allow
Principal:
Service:
Fn::Join: [ ".", [ states, Ref: "AWS::Region", amazonaws, com ] ]
Action: sts:AssumeRole
- Sid: CloudWatchLogsAssumeRolePolicy
Effect: Allow
Principal:
Service:
Fn::Join: [ ".", [ logs, Ref: "AWS::Region", amazonaws, com ] ]
Action: sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaRole
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
RoleName: !Sub nmg-${Environment}-role-stepfunctions-execute-lambda
# Logs LogGroup
LogGroupStepFunctions:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub cws-${Environment}-loggroup-stepfunctions
RetentionInDays: 30
# StepFucntions StateMachine
StateMachine:
Type: AWS::StepFunctions::StateMachine
Properties:
StateMachineName: !Sub nmg-${Environment}-stepfunctions-statemachine
StateMachineType: STANDARD
LoggingConfiguration:
Destinations:
- CloudWatchLogsLogGroup:
LogGroupArn:LogGroupStepFunctions.Arn
IncludeExecutionData: true
Level: ALL
RoleArn: !GetAtt InvokeLambdaRole.Arn
DefinitionString: !Sub '{
"StartAt": "ExecuteLambda",
"TimeoutSeconds": 82800,
"States": {
"ExecuteLambda": {
"Type": "Task",
"Resource": "arn:aws:lambda:ap-northeast-1:${AWS::AccountId}:function:nmg-${Environment}-lambda-xxx",
"Parameters": {
"input.$": "$.input"
},
"ResultPath": "$.result",
"Next": "CheckLambda"
},
"CheckLambda": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.result.status",
"StringEquals": "COMPLETED",
"Next": "Succeed"
},
{
"Or": [
{
"Variable": "$.result.status",
"StringEquals": "PENDING"
},
{
"Variable": "$.result.status",
"StringEquals": "RUNNING"
}
],
"Next": "WaitSeconds"
}
],
"Default": "Fail"
},
"WaitSeconds": {
"Type": "Wait",
"Seconds": 1,
"Next": "StatusExport"
},
"Succeed": {
"Type": "Succeed"
},
"Fail": {
"Type": "Fail"
}
}
}'
・Configファイル
テンプレートファイルに代入する値をまとめた設定ファイルのこと
Environment=dev
【サンプル】スタック作成コマンド
・実行(dry-run)
nmg-stepfunctions-stackの作成--no-execute-changeset
…リソース作成はされないため、変更内容を確認したい場合に使用する
aws cloudformation deploy --template-file stepfunctions.yml --stack-name nmg-stepfunctions-stack --parameter-overrides $(cat config.cfg) --no-execute-changeset
・実行(run)
stack(nmg-stepfunctions-stack)の作成
ステートマシン(nmg-dev-stepfunctions-statemachine)の作成
aws cloudformation deploy --template-file stepfunctions.yml --stack-name nmg-stepfunctions-stack --parameter-overrides $(cat config.cfg)
・削除
stack(nmg-stepfunctions-stack)の削除
stackに紐づくリソース(nmg-dev-stepfunctions-statemachineステートマシン)の削除
aws cloudformation delete-stack --stack-name nmg-stepfunctions-stack