メニュー
AWS Step Functions
開発者ガイド

AWS CloudFormation を使用して Lambda ステートマシンを作成する

このチュートリアルでは、基本的な AWS Lambda 関数を作成する方法、およびステートマシンの実行を自動的に開始する方法を説明します。スタック (IAM ロール、Lambda 関数、およびステートマシン) の作成には AWS CloudFormation コンソールおよび YAML テンプレートを使用します。その後、AWS Step Functions コンソールを使用してステートマシンの実行を開始します。詳細については、AWS CloudFormation ユーザーガイドの「CloudFormation テンプレートの使用」および「AWS::StepFunctions::StateMachine リソース」を参照してください。

ステップ 1: AWS CloudFormation テンプレートのセットアップ

YAML テンプレート例を使用する前に、独立した部分を理解しておく必要があります。

Lambda 用に IAM ロールを作成するには

Lambda 関数の IAM ロールに関連付けられた信頼ポリシーを定義します。

LambdaExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:AssumeRole"

Lambda 関数を作成するには

Hello World というメッセージを出力する Lambda 関数の以下のプロパティを定義します。

重要

Lambda 関数が、ステートマシンと同じ AWS アカウントとリージョンにあることを確認します。

MyLambdaFunction: Type: "AWS::Lambda::Function" Properties: Handler: "index.handler" Role: !GetAtt [ LambdaExecutionRole, Arn ] Code: ZipFile: | exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; Runtime: "nodejs4.3" Timeout: "25"

ステートマシンの実行用の IAM ロールを作成するには

ステートマシンの実行の IAM ロールに関連付けられた信頼ポリシーを定義します。

StatesExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - !Sub states.${AWS::Region}.amazonaws.com Action: "sts:AssumeRole" Path: "/" Policies: - PolicyName: StatesExecutionPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - "lambda:InvokeFunction" Resource: "*"

Lambda ステートマシンを作成するには

Lambda ステートマシンを定義します。

MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString: !Sub - |- { "Comment": "A Hello World AWL example using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "${lambdaArn}", "End": true } } } - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]} RoleArn: !GetAtt [ StatesExecutionRole, Arn ]

ステップ 2: AWS CloudFormation テンプレートを使用して Lambda ステートマシンを作成する

AWS CloudFormation テンプレートのさまざまな部分を理解した後、それらをひとつにまとめてテンプレートを使用し AWS CloudFormation スタックを作成できます。

Lambda ステートマシンを作成するには

  1. 次のサンプル YAML データを MyStateMachine.yaml という名前のファイルにコピーします。

    AWSTemplateFormatVersion: "2010-09-09" Description: "An example template with an IAM role for a Lambda state machine." Resources: LambdaExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:AssumeRole" MyLambdaFunction: Type: "AWS::Lambda::Function" Properties: Handler: "index.handler" Role: !GetAtt [ LambdaExecutionRole, Arn ] Code: ZipFile: | exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; Runtime: "nodejs4.3" Timeout: "25" StatesExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - !Sub states.${AWS::Region}.amazonaws.com Action: "sts:AssumeRole" Path: "/" Policies: - PolicyName: StatesExecutionPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - "lambda:InvokeFunction" Resource: "*" MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString: !Sub - |- { "Comment": "A Hello World AWL example using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "${lambdaArn}", "End": true } } } - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]} RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
  2. AWS CloudFormation コンソールにログインして、[Create Stack] を選択します。

  3. [Select Template] ページで、[Upload a template to Amazon S3] を選択します。MyStateMachine.yaml ファイルを選択し、[Next] を選択します。

  4. [Specify Details] ページで、[Stack name] に MyStateMachine を入力してから、[Next] を選択します。

  5. [Options] ページで、[Next] を選択します。

  6. [Review] ページで、[I acknowledge that AWS CloudFormation might create IAM resources.] を選択し、[Create] を選択します。

    AWS CloudFormation は MyStateMachine スタックの作成を開始し、[CREATE_IN_PROGRESS] のステータスが表示されます。プロセスが完了すると、AWS CloudFormation に [CREATE_COMPLETE] ステータスが表示されます。

  7. (省略可能) スタックのリソースを表示するには、スタックを選択して [Resources] タブを選択します。

    リソースの表示

ステップ 3: ステートマシンの実行を開始する

Lambda ステートマシンを作成した後、実行を開始できます。

ステートマシンの実行を開始するには

  1. Step Functions コンソールにログインして、AWS CloudFormation を使用して作成したステートマシンの名前を選択します。

  2. [MyStateMachine-ABCDEFGHIJ1K] ページで、[New execution] を選択します。

    [New execution] ページが表示されます。

  3. (オプション) 実行を特定できるように、[Enter an execution name] (実行名を入力) ボックスでその ID を指定できます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

    注記

    Step Functions では、ASCII 以外の文字を含むステートマシン、実行、およびアクティビティの名前を作成することができます。これらの ASCII 以外の文字は Amazon CloudWatch では使用できません。CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択します。

  4. [Start Execution] を選択します。

    ステートマシンの新しい実行が開始され、実行中の実行が表示されている新しいページが表示されます。

  5. (省略可能) [Execution Details] セクションで、[Info] タブを選択して [Execution Status] および [Started] と [Closed] のタイムスタンプを確認します。

  6. 実行結果を表示するには、[Output] タブを選択します。

    実行出力