

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

# AWS Lambda Amazon SWF のタスク
<a name="lambda-task"></a>

**Topics**
+ [について AWS Lambda](#about-aws-lambda)
+ [Lambda タスクを使用する利点と制限](#benefits-limitations-lambda-tasks)
+ [ワークフローでの Lambda タスクの使用](#using-lambda-tasks-in-workflows)

## について AWS Lambda
<a name="about-aws-lambda"></a>

AWS Lambda は、カスタムコードまたは Amazon S3、DynamoDB DynamoDB 、Amazon Kinesis、Amazon SNS、Amazon Cognito などのさまざまな AWS サービスによって生成されたイベントに応答してコードを実行するフルマネージド型のコンピューティングサービスです。Lambda の詳細については、[ デベロッパーガイドAWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/) を参照してください。

Amazon Simple Workflow Service は Lambda タスクを提供し、従来の Amazon SWF アクティビティの代わりに、またはそれと一緒に Lambda 関数を実行できるようにします。

**重要**  
 AWS アカウントは、Amazon SWF がユーザーに代わって実行した Lambda 実行 (リクエスト) に対して課金されます。Lambda の料金の詳細については、[https://aws.amazon.com/lambda/pricing/](https://aws.amazon.com/lambda/pricing/) を参照してください。

## Lambda タスクを使用する利点と制限
<a name="benefits-limitations-lambda-tasks"></a>

従来の Amazon SWF アクティビティの代わりに Lambda タスクを使用することには、多くの利点があります。
+ Lambda タスクは、Amazon SWF アクティビティタイプのように登録またはバージョン管理する必要はありません。
+ 既にワークフローで定義している既存の Lambda 関数を使用することができます。
+ Lambda 関数は Amazon SWF によって直接呼び出されます。従来のアクティビティのように実行するためのワーカープログラムを実装する必要はありません。
+ Lambda では、関数の実行を追跡し分析するためのメトリクスとログが用意されています。

Lambda タスクには注意すべきいくつかの制限があります。
+ Lambda タスクは、Lambda をサポートする AWS リージョンでのみ実行できます。Lambda で現在サポートされているリージョンの詳細については、「*Amazon Web Services General Reference*」(Amazon Web Services 全般リファレンス) の「[Lambda Regions and Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#lambda_region)」(Lambda リージョンとエンドポイント) を参照してください。
+ Lambda タスクは現在、ベース SWF HTTP API と AWS Flow Framework for Java でのみサポートされています。現在、 AWS Flow Framework for Ruby では Lambda タスクはサポートされていません。

## ワークフローでの Lambda タスクの使用
<a name="using-lambda-tasks-in-workflows"></a>

Amazon SWF ワークフローで Lambda タスクを使用するには、以下の操作が必要です。

1. Lambda 関数を呼び出すアクセス許可を Amazon SWF に付与するように IAM ロールをセットアップします。

1. IAM ロールをワークフローにアタッチします。

1. ワークフロー実行に Lambda 関数を呼び出します。

### IAM ロールのセットアップ
<a name="set-up-lambda-role"></a>

Amazon SWF から Lambda 関数を呼び出す前に、Amazon SWF から Lambda へのアクセス権を付与する IAM ロールを準備する必要があります。次のいずれかを行うことができます。
+ あらかじめ定義されたロール、*AWSLambdaRole* を選択して、ワークフローにアカウントに関連する Lambda 関数を呼び出すアクセス許可を付与します。
+ 独自のポリシーと関連付けられたロールを定義して、Amazon リソースネーム (ARN) で指定された特定の Lambda 関数を呼び出すためのワークフローのアクセス許可を付与します。

#### IAM ロールのアクセス許可を制限する
<a name="limit-iam-role-permissions"></a>

Amazon SWF に提供する IAM ロールに対するアクセス許可を制限するには、リソースの信頼ポリシーの `SourceArn` および `SourceAccount` コンテキストキーを使用します。これらのキーは、指定されたドメイン ARN に属する Amazon Simple Workflow Service の実行からのみ使用されるように、IAM ポリシーの使用を制限します。これらのグローバル条件コンテキストキーの両方を、同じポリシーステートメントで使用する場合、`aws:SourceAccount` 値と `aws:SourceArn` 値の中の参照されるアカウントには、同じアカウント ID を使用する必要があります。

次の例では、`SourceArn`コンテキストキーは、アカウント `someDomain`の に属する Amazon Simple Workflow Service の実行でのみ IAM サービスロールを使用するように制限します`123456789012`。


+ **ステートメント 1**

  **プリンシパル** : `"Service": "swf.amazonaws.com"` 

  **アクション: ** `sts:AssumeRole` 

```
"Condition": {
   "ArnLike": {
     "aws:SourceArn": "arn:aws:swf:*:123456789012:/domain/someDomain"
   }
}
```

次の例では、`SourceAccount`コンテキストキーは、アカウント の Amazon Simple Workflow Service の実行でのみ IAM サービスロールを使用するように制限します`123456789012`。

```
"Condition": {
   "StringLike": {
     "aws:SourceAccount": "123456789012"
   }
}
```

#### Amazon SWF に Lambda ロールを呼び出すためのアクセスを提供する
<a name="providing-swf-access-invoke-any-lambda-role"></a>

あらかじめ定義されたロール、*AWSLambdaRole* を使用して、Amazon SWF ワークフローがアカウントに関連する Lambda 関数を呼び出せるようにできます。

**AWSLambdaRole を使用して、Lambda 関数を呼び出すアクセス権を Amazon SWF に付与するには**

1. [Amazon IAM コンソール](https://console.aws.amazon.com/iam/)を開きます。

1. [**Roles**] (ロール) を選択してから [**Create New Role**] (ロールの新規作成) を選びます。

1. ロールに `swf-lambda` などの名前を付け、[**Next Step**] (次のステップ) を選択します。

1. [**AWS サービスロール**] で、[**Amazon SWF**]、[**次のステップ**] の順に選択します。

1. [**ポリシーのアタッチ**] 画面で、リストから [**AWSLambdaRole**] を選択します。

1. ロールを確認したら、[**Next Step**] (次のステップ) を選択してから、[**Create Role**] (ロールの作成) を選択します。

#### 特定の Lambda 関数を呼び出すためのアクセス権を付与する IAM ロールの定義
<a name="defining-iam-role-provide-access-invoke-specific-lambda-function"></a>

ワークフローから特定の Lambda 関数を呼び出すためのアクセスを提供する場合は、独自の IAM ポリシーを定義する必要があります。

**特定の Lambda 関数へのアクセスを提供する IAM ポリシーを作成するには**

1. [Amazon IAM コンソール](https://console.aws.amazon.com/iam/)を開きます。

1. [**Policies**] (ポリシー) を選択して、[**Create Policy**] (ポリシーの作成) を選択します。

1. ** AWS 管理ポリシーのコピー**を選択し、リストから **AWSLambdaRole** を選択します。ポリシーが生成されます。必要に応じて名前と説明を編集することもできます。

1. [**Policy Document**] (ポリシードキュメント) の [*Resource*] (リソース) フィールドに、Lambda 関数の ARN を追加します。例:
   + **リソース**: `arn:aws:lambda:us-east-1:111122223333:function:hello_lambda_function` 
**注記**  
IAM ロールでリソースを指定する方法の詳細については、「*Using IAM*」(IAM の使用) の「[Overview of IAM Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_overview.html)」(IAM ポリシーの概要) を参照してください。

1. [**Create Policy**] (ポリシーの作成) を選択してポリシーの作成を完了します。

新しい IAM ロールを作成するときにこのポリシーを選択し、そのロールを使用して Amazon SWF ワークフローへのアクセスを呼び出すことができます。この手順は、*AWSLambdaRole* ポリシーを使用してロールを作成する場合と非常によく似ています。代わりに、ロールを作成するときに独自のポリシーを選択します。

**Lambda ポリシーを使用して Amazon SWF ロールを作成するには**

1. [Amazon IAM コンソール](https://console.aws.amazon.com/iam/)を開きます。

1. [**Roles**] (ロール) を選択してから [**Create New Role**] (ロールの新規作成) を選びます。

1. ロールに `swf-lambda-function` などの名前を付け、[**Next Step**] (次のステップ) を選択します。

1. [**AWS サービスロール**] で、[**Amazon SWF**]、[**次のステップ**] の順に選択します。

1. [**ポリシーのアタッチ**] 画面で、リストから Lambda 関数固有のポリシーを選択します。

1. ロールを確認したら、[**Next Step**] (次のステップ) を選択してから、[**Create Role**] (ロールの作成) を選択します。

### IAM ロールをワークフローにアタッチします。
<a name="attach-iam-role-to-workflow"></a>

IAM ロールを定義したら、それを使用して Amazon SWF にアクセス許可を付与した Lambda 関数を呼び出すワークフローにそのロールをアタッチする必要があります。

ワークフローにロールをアタッチできる場所は 2 つあります。
+ ワークフロータイプの登録中。次に、このロールは、そのワークフロータイプのすべての実行のデフォルトの Lambda ロールとして使用できます。
+ ワークフロー実行の開始時。このロールは、このワークフローの実行中 (および実行全体を通じて) のみ使用されます。

**ワークフロータイプのデフォルトの Lambda ロールを提供するには**
+ RegisterWorkflowType を呼び出す場合は、defaultLambdaRole フィールドを、定義したロールの ARN に設定します。

**ワークフロー実行中に Lambda ロールを提供するには**
+ StartWorkflowExecution を呼び出す場合は、lambdaRole フィールドを、定義したロールの ARN に設定します。

**注記**  
RegisterWorkflowType または StartWorkflowExecution を呼び出すアカウントに、特定のロールを使用するアクセス権限がない場合、呼び出しは OperationNotPermittedFault で失敗します。

### Amazon SWF ワークフローからの Lambda 関数の呼び出し
<a name="call-lambda-function-from-swf-workflow"></a>

ScheduleLambdaFunctionDecisionAttributes データ型を使用して、ワークフロー実行中に呼び出す Lambda 関数を指定できます。

RespondDecisionTaskCompleted の呼び出し中に、ScheduleLambdaFunctionDecisionAttributes を決定リストで指定します。例:

```
{
  "decisions": [{
    "ScheduleLambdaFunctionDecisionAttributes": {
      "id": "lambdaTaskId",
      "name": "myLambdaFunctionName",
      "input": "inputToLambdaFunction",
      "startToCloseTimeout": "30"
    },
  }],
}
```

以下のパラメータを設定します。
+ Lambda タスクの識別子を示す *id*。これは 1～256 文字の文字列である必要があり、: (コロン)、/ (スラッシュ)、\$1 (垂直棒)、またはその他の制御文字 (\$1u0000～\$1u001f、\$1u007f～\$1u009f)、リテラル文字列 `arn` を含めることはできません。
+ Lambda 関数名の名前を示す *name*。Amazon SWF ワークフローは、Lambda 関数を呼び出すアクセス権を付与する IAM ロールで提供する必要があります。提供される名前は、Lambda Invoke アクションなど、FunctionName パラメータの制約に従う必要があります。
+ 関数のオプションの入力データを示す *input*。設定された場合、Lambda Invoke アクションなど、ClientContext パラメータの制約に従う必要があります。
+ オプションでタスクがタイムアウトの例外により失敗するまでに関数で許可される最大期間 (秒数) を示す *startToCloseTimeout*。値 NONE を使用して、無制限の期間を指定することができます。

詳細については、[AWS Lambda 「タスクの実装](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/lambda-task.html)」を参照してください。