

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

# Step Functions を使用して AWS Lambda関数を呼び出す
<a name="connect-lambda"></a>

Step Functions を使用して、イベント駆動型サーバーレスアプリケーションの一部として同期的にまたは非同期的に Lambda 関数を呼び出す方法について説明します。

Step Functions での AWSサービスとの統合については、[ サービスとの統合](integrate-services.md)「」および「」を参照してください[Step Functions でサービス API にパラメータを渡す](connect-parameters.md)。

**最適化された Lambda 統合の主な機能**  
レスポンスの `Payload` フィールドは、エスケープされた Json から Json に解析されます。
Lambda 関数内で例外がスローされた場合、タスクは失敗します。実用的な例については、「[Step Functions ステートマシンでのエラー条件の処理](tutorial-handling-error-conditions.md)」を参照してください。

## 最適化された Lambda API
<a name="connect-lambda-api"></a>
+ [https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html)

## ワークフローの例
<a name="connect-lambda-api-examples"></a>

以下には、Lambda 関数を呼び出す `Task` 状態が含まれます。

```
{  
   "StartAt":"CallLambda",
   "States":{  
      "CallLambda":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke",
         "Arguments":{  
            "FunctionName":"arn:aws:lambda:region:account-id:function:MyFunction"
         },
         "End":true
      }
   }
}
```

以下には、[コールバック](connect-to-resource.md#connect-wait-token)サービス統合パターンを実行する `Task` の状態が含まれます。

```
{  
   "StartAt":"GetManualReview",
   "States":{  
      "GetManualReview":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
         "Arguments":{  
            "FunctionName":"arn:aws:lambda:region:account-id:function:get-model-review-decision",
            "Payload":{  
               "model":"{% $states.input.my-model %}",
               "TaskToken": "{% $states.context.Task.Token %}"
            },
            "Qualifier":"prod-v1"
         },
         "End":true
      }
   }
}
```

Lambda 関数を呼び出すと、実行は関数の完了を待ちます。コールバックタスクで Lambda 関数を呼び出す場合、Lambda 関数の実行が完了して結果を返すまで、ハートビートタイムアウトのカウントは開始されません。Lambda 関数が実行されている限り、ハートビートタイムアウトは適用されません。

ただし、次の例に示されているとおり、`InvocationType` パラメータを使って非同期で Lambda を呼び出すこともできます。

```
{

  "Comment": "A Hello World example of the Amazon States Language using Pass states",
  "StartAt": "Hello",
  "States": {
    "Hello": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Arguments": {
        "FunctionName": "arn:aws:lambda:region:account-id:function:echo",
        "InvocationType": "Event"
      },
      "End": true
    }
  }
}
```

**注記**  
Lambda 関数の非同期呼び出しでは、ハートビートタイムアウト期間がすぐに開始されます。

 ときに `Task` の結果が返されると、関数の出力はメタデータのディクショナリ内にネストされます。例えば、次のようになります。

```
{

   "ExecutedVersion":"$LATEST",
   "Payload":"FUNCTION OUTPUT",
   "SdkHttpMetadata":{
      "HttpHeaders":{
         "Connection":"keep-alive",
         "Content-Length":"4",
         "Content-Type":"application/json",
         "Date":"Fri, 26 Mar 2021 07:42:02 GMT",
         "X-Amz-Executed-Version":"$LATEST",
         "x-amzn-Remapped-Content-Length":"0",
         "x-amzn-RequestId":"0101aa0101-1111-111a-aa55-1010aaa1010",
         "X-Amzn-Trace-Id":"root=1-1a1a000a2a2-fe0101aa10ab;sampled=0"
      },
      "HttpStatusCode":200
   },
   "SdkResponseMetadata":{
      "RequestId":"6b3bebdb-9251-453a-ae45-512d9e2bf4d3"
   },
   "StatusCode":200
}
```

## 直接指定された関数リソース
<a name="w2aac33c40c13"></a>

または、「リソース」フィールドに関数 ARN を直接指定して Lambda 関数を呼び出せます。この方法で Lambda 関数を呼び出す場合、`.waitForTaskToken` を指定することはできず、タスク結果には関数の出力のみが含まれます。

```
{  
   "StartAt":"CallFunction",
   "States":{  
      "CallFunction": {  
         "Type":"Task",
         "Resource":"arn:aws:lambda:region:account-id:function:HelloFunction",
         "End": true
      }
   }
}
```

この形式の統合では、関数は成功しても、`FunctionError` フィールドを含むレスポンスを返すことがあります。このシナリオでは、ワークフロータスクは失敗します。

Lambda 関数の特定バージョンまたはエイリアスを呼び出すには、`Resource` フィールドの ARN でそれらのオプションを指定します。Lambda ドキュメントで以下を参照してください。
+ [AWS Lambda バージョニング](https://docs.aws.amazon.com/lambda/latest/dg/versioning-intro.html)
+ [AWS Lambdaエイリアス](https://docs.aws.amazon.com/lambda/latest/dg/aliases-intro.html)

## を呼び出すための IAM ポリシーAWS Lambda
<a name="lambda-iam"></a>

次のサンプルテンプレートは、 がステートマシン定義のリソースに基づいて IAM ポリシーAWS Step Functionsを生成する方法を示しています。詳細については、「[Step Functions が統合サービスの IAM ポリシーを生成する方法](service-integration-iam-templates.md)」および「[Step Functions でサービス統合パターンを検出する](connect-to-resource.md)」を参照してください。

次の例では、2 つのAWS Lambdaタスクを持つステートマシンが `function1`と を呼び出すと`function2`、自動生成されたポリシーには両方の関数に対する`lambda:Invoke`アクセス許可が含まれます。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:us-east-1:123456789012:function:myFn1",
                "arn:aws:lambda:us-east-1:123456789012:function:myFn2"
            ]
        }
    ]
}
```