【AWS】CloudFormationサンプル(StepFunctions)

この記事を読んでわかること!
  • 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
タイトルとURLをコピーしました