Step Functions 状態の作成MachineLambda を使用する - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Step Functions 状態の作成MachineLambda を使用する

このチュートリアルでは、AWS Lambda 関数を使用して Task 状態を実装する AWS Step Functions ステートマシンを作成します。Task ステートは 1 単位の作業を実行します。

Lambda 実装するのに適していますTask状態です。なぜなら、Lambda 関数がステートレス(入力と出力の関係が予測可能) であり、作成が簡単でサーバーインスタンスにコードをデプロイする必要がないためです。AWS Management Console や使い慣れたエディタでコードを作成できます。関数用のコンピューティング環境を提供して実行する細かい部分は AWS が処理します。

ステップ 1: Lambda 用の IAM ロールを作成する

AWS Lambda と AWS Step Functions はどちらもコードを実行して AWS リソース (Amazon S3 バケットに保存されているデータなど) にアクセスできます。セキュリティを維持するために、Lambda 関数とStep Functions にこれらのリソースへのアクセスを付与する必要があります。

Lambda では、AWS Identity and Access Management(IAM) ロールは Lambda 関数を作成する際に Lambda に IAM ロールを割り当てる必要があります。これは、ステートマシンを作成する際に IAM ロールを割り当てる必要があるのと同じ方法です。

IAM コンソールを使用して、サービスにリンクされたロールを作成します。

ロールを作成するには (コンソール)

  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. IAM コンソールのナビゲーションペインで [ロール] を選択します。続いて、[Create role] を選択します。

  3. [AWSサービスロールタイプを選択し、[Lambda

  4. [Lambdaユースケース。ユースケースは、サービスに必要な信頼ポリシーを含めるように定義されています。続いて、[次へ] を選択します。アクセス許可.

  5. ロールにアタッチするアクセス許可ポリシーを 1 つ以上選択します (例: AWSLambdaBasicExecutionRole)。「AWS Lambda アクセス許可モデル」を参照してください。

    ロールに許可するアクセス許可を割り当てるポリシーの横にあるボックスを選択し、[次へ: 確認.

  6. [Role name] に入力します。

  7. (オプション) [Role description] で、サービスにリンクされた新しいロールの説明を編集します。

  8. ロールを確認し、[ロールの作成] を選択します。

ステップ 2: Lambda 関数を作成します

Lambda 関数は入力 (名前) を受信し、入力値を含む挨拶を返します。

重要

あなたのLambda 関数が同じAWSアカウントとAWSステートマシンとしてのリージョン。

  1. を開くLambda コンソールを選択し、関数の作成

  2. [Create function (関数の作成)] セクションで、[一から作成] を選択します。

  3. 基本的な情報セクションで、Lambda 関数を設定します。

    1. [関数名] に「HelloFunction」と入力します。

    2. [ランタイム] で [Node.js 12.x] を選択します。

    3. [Role (ロール)] で、[既存のロールを選択] を選択します。

    4. を使用する場合既存のロールで、先ほど作成した Lambda ロール

      注記

      作成した IAM ロールがリストに表示されない場合は、そのロールが Lambda に伝達されるまであと数分かかる場合があります。

    5. [関数の作成] を選択します。

      Lambda 関数が作成されたら、例に示すように、ページの右上隅に表示されているその Amazon リソースネーム (ARN) を記録します。

      arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
  4. Lambda 関数の以下のコードを関数コードの セクションHelloFunctionページで.

    exports.handler = (event, context, callback) => { callback(null, "Hello, " + event.who + "!"); };

    このコードは、関数に渡された event オブジェクトから提供された入力データの who フィールドを使用して、挨拶をアセンブルします。後で新しい実行を開始するときに、この関数の入力データを追加します。callback メソッドによって、関数からアセンブルされた挨拶が返されます。

  5. [Save] を選択します。

ステップ 3: Lambda 関数をテストする

Lambda 関数をテストしてオペレーションを確認します。

  1. [Select a test events (テストイベントの選択)] で [Configure test event (テストイベントの設定)] を選択します。[イベント名] で、「HelloFunction」と入力します。

  2. データ例を以下に置き換えます。

    { "who": "AWS Step Functions" }

    -"who"エントリはに対応します。event.whoフィールドを使用して Lambda 関数に挨拶を完了させます。関数を Step Functions タスクとして実行するときも同じ入力データを使用します。

  3. [作成] を選択します。

  4. リポジトリの []HelloFunctionページでTest新しいデータを使用して Lambda 関数を使用します。

    テストの結果がページの上部に表示されます。[詳細] を展開して出力を表示します。

ステップ 4: ステートマシンの作成

の使用Step Functions コンソールを使用して、ステートマシンを作成します。Task状態。Lambda 関数への参照をTask状態。Lambda 関数は、ステートマシンの実行がTask状態。

  1. を開くStep Functions コンソールを選択し、ステートマシンの作成

  2. [Define state machine (ステートマシンの定義)] ページで、[Author with code snippets (コードスニペットで作成)] を選択します。[タイプ] で、[標準] を選択します。[Name for your state machine (ステートマシンの名前)] に、たとえば「LambdaStateMachine」と入力します。

    注記

    ステートマシン、実行、アクティビティの名前は 1 ~ 80 文字で、アカウントで一意である必要があります。AWSリージョン。以下を含めることはできません。

    • 空白

    • ワイルドカード文字 (? *)

    • 角かっこ文字 (< > { } [ ])

    • 特殊文字 (: ; , \ | ^ ~ $ # % & ` ")

    • 制御文字 (\\u0000-\\u001fまたは\\u007f-\\u009f).

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

  3. ステートマシン定義ペインで、以下のステートマシン定義を追加します。前に作成した Lambda 関数次の例に示すように、。

    { "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } } }

    これは、Amazon States Language を使用したステートマシンの説明です。HelloWorld という名前の単一の Task 状態を定義します。詳細については、「State Machine Structure」を参照してください。

    注記

    Task 状態の Retry を設定することもできます。ベストプラクティスとして、本番稼働用コードが Lambda サービス例外 (Lambda.ServiceExceptionおよびLambda.SdkClientException). 詳細については、以下を参照してください。

    [Next] を選択します。

  4. IAM ロールを作成または入力します。

    • Step Functions の IAM ロールを作成するには、自分用の IAM ロールを作成するを選択し、名前ロールに。

    • 持っている場合以前の IAM ロールを作成したステートマシンに適切なアクセス許可を割り当てるには、既存の IAM ロールを選択する。リストからロールを選択するか、そのロールの ARN を指定します。

    注記

    Step Functions によって作成された IAM ロールを削除すると、Step Functions で後で再作成することはできません。同様に、ロールを変更すると (たとえば、IAM ポリシーのプリンシパルから Step Functions を削除するなど)、後で Step Functions で元の設定に復元することはできません。

  5. [Next] を選択します。

ステップ 5: 新しい実行の開始

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

  1. [LambdaStateMachine] ページで、[Start execution] (実行の開始) を選択します。

    [New execution (新しい実行)] ページが表示されます。

  2. (省略可能) 実行を識別しやすくするために、実行名を入力ボックスに移動するとそのように表示されます。ID を入力しない場合、Step Functions は自動的に一意の ID を生成します。

    注記

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

  3. 実行入力領域で、サンプルデータを以下で置き換えます。

    { "who" : "AWS Step Functions" }

    "who"は Lambda 関数が挨拶する相手の名前を取得するために使用するキー名です。

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

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

  5. 実行結果を表示するには、[実行の詳細] の [出力] セクションを展開します。