翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Lambda タスク
AWS Lambda について
AWS Lambda は、カスタムコードによって生成されるイベント、またはさまざまな AWS のサービス (Amazon S3、DynamoDB、Amazon Kinesis、Amazon SNS、Amazon Cognito) から生成されるイベントに応答してコードを実行する、完全管理型のコンピューティングサービスです。Lambda の詳細については、「AWS Lambda デベロッパーガイドhttps://docs.aws.amazon.com/lambda/latest/dg/」を参照してください。
Amazon Simple Workflow Service は Lambda タスクを提供し、従来の Amazon SWF アクティビティの代わりに、またはそれと一緒に Lambda 関数を実行できるようにします。
重要
Amazon SWF が代わって実施した Lambda 実行 (リクエスト) の料金は、お使いの AWS アカウントに課金されます。Lambda 料金の詳細については、https://aws.amazon.com/lambda/pricing/
Lambda タスクを使用する利点と制限
従来の 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」(Lambda リージョンとエンドポイント) を参照してください。
-
Lambda タスクは現在、base SWF HTTP API と AWS Flow Framework for Java でのみサポートされています。現在、AWS Flow Framework for Ruby には、Lambda タスクのサポートはありません。
ワークフローでの Lambda タスクの使用
Amazon SWF ワークフローで Lambda タスクを使用するには、以下の操作が必要です。
-
Lambda 関数を呼び出すアクセス許可を Amazon SWF に付与するように IAM ロールをセットアップします。
-
IAM ロールをワークフローにアタッチします。
-
ワークフロー実行に Lambda 関数を呼び出します。
IAM ロールのセットアップ
Amazon SWF から Lambda 関数を呼び出す前に、Amazon SWF から Lambda へのアクセス権を付与する IAM ロールを準備する必要があります。次のいずれかを実行できます。
-
あらかじめ定義されたロール、AWSLambdaRole を選択して、ワークフローにアカウントに関連する Lambda 関数を呼び出すアクセス許可を付与します。
-
独自のポリシーと関連付けられたロールを定義して、Amazon リソースネーム (ARN) で指定された特定の Lambda 関数を呼び出すためのワークフローのアクセス許可を付与します。
IAM ロールのアクセス許可を制限する
Amazon SWF に提供する IAM ロールに対するアクセス許可を制限するには、リソースの信頼ポリシーの SourceArn
および SourceAccount
コンテキストキーを使用します。これらのキーは、指定されたドメイン ARN に属する Amazon Simple Workflow Service の実行からのみ使用されるように、IAM ポリシーの使用を制限します。これらのグローバル条件コンテキストキーの両方を、同じポリシーステートメントで使用する場合、aws:SourceAccount
値と aws:SourceArn
値の中の参照されるアカウントには、同じアカウント ID を使用する必要があります。
次の信頼ポリシーの例では、SourceArn
コンテキストキーを使用して、アカウント 123456789012
の someDomain
に属する Amazon Simple Workflow Service 実行時にのみ IAM サービスロールを使用するよう制限しています。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "swf.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:swf:*:123456789012:/domain/someDomain" } } } ] }
次の信頼ポリシーの例では、SourceAccount
コンテキストキーを使用して、アカウント 123456789012
の Amazon Simple Workflow Service 実行時にのみ IAM サービスロールを使用するように制限しています。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "swf.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceAccount": "123456789012" } } } ] }
Amazon SWF に Lambda ロールを呼び出すためのアクセスを提供する
あらかじめ定義されたロール、AWSLambdaRole を使用して、Amazon SWF ワークフローがアカウントに関連する Lambda 関数を呼び出せるようにできます。
AWSLambdaRole を使用して、Lambda 関数を呼び出すアクセス権を Amazon SWF に付与するには
-
Amazon IAM コンソール
を開きます。 -
[Roles] (ロール) を選択してから [Create New Role] (ロールの新規作成) を選びます。
-
ロールに
swf-lambda
などの名前を付け、[Next Step] (次のステップ) を選択します。 -
[AWS サービスロール] で、[Amazon SWF]、[次のステップ] の順に選択します。
-
[ポリシーのアタッチ] 画面で、リストから [AWSLambdaRole] を選択します。
-
ロールを確認したら、[Next Step] (次のステップ) を選択してから、[Create Role] (ロールの作成) を選択します。
特定の Lambda 関数を呼び出すためのアクセス権を付与する IAM ロールの定義
ワークフローから特定の Lambda 関数を呼び出すためのアクセスを提供する場合は、独自の IAM ポリシーを定義する必要があります。
特定の Lambda 関数へのアクセスを提供する IAM ポリシーを作成するには
-
Amazon IAM コンソール
を開きます。 -
[Policies] (ポリシー) を選択して、[Create Policy] (ポリシーの作成) を選択します。
-
[Copy an AWS Managed Policy] (AWS 管理ポリシーをコピー) を選択して、リストから [AWSLambdaRole] を選択します。ポリシーが生成されます。必要に応じて名前と説明を編集することもできます。
-
[Policy Document] (ポリシードキュメント) の [Resource] (リソース) フィールドに、Lambda 関数の ARN を追加します。例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:111111000000:function:hello_lambda_function" ] } ] }
注記
IAM ロールでリソースを指定する方法の詳細については、「Using IAM」(IAM の使用) の「Overview of IAM Policies」(IAM ポリシーの概要) を参照してください。
-
[Create Policy] (ポリシーの作成) を選択してポリシーの作成を完了します。
新しい IAM ロールを作成するときにこのポリシーを選択し、そのロールを使用して Amazon SWF ワークフローへのアクセスを呼び出すことができます。この手順は、AWSLambdaRole ポリシーを使用してロールを作成する場合と非常によく似ています。代わりに、ロールを作成するときに独自のポリシーを選択します。
Lambda ポリシーを使用して Amazon SWF ロールを作成するには
-
Amazon IAM コンソール
を開きます。 -
[Roles] (ロール) を選択してから [Create New Role] (ロールの新規作成) を選びます。
-
ロールに
swf-lambda-function
などの名前を付け、[Next Step] (次のステップ) を選択します。 -
[AWS サービスロール] で、[Amazon SWF]、[次のステップ] の順に選択します。
-
[ポリシーのアタッチ] 画面で、リストから Lambda 関数固有のポリシーを選択します。
-
ロールを確認したら、[Next Step] (次のステップ) を選択してから、[Create Role] (ロールの作成) を選択します。
IAM ロールをワークフローにアタッチします。
IAM ロールを定義したら、それを使用して Amazon SWF にアクセス許可を付与した Lambda 関数を呼び出すワークフローにそのロールをアタッチする必要があります。
ワークフローにロールをアタッチできる場所は 2 つあります。
-
ワークフロータイプの登録中。次に、このロールは、そのワークフロータイプのすべての実行のデフォルトの Lambda ロールとして使用できます。
-
ワークフロー実行の開始時。このロールは、このワークフローの実行中 (および実行全体を通じて) のみ使用されます。
ワークフロータイプのデフォルトの Lambda ロールを提供するには
-
RegisterWorkflowType を呼び出す場合は、defaultLambdaRole フィールドを、定義したロールの ARN に設定します。
ワークフロー実行中に Lambda ロールを提供するには
-
StartWorkflowExecution を呼び出す場合は、lambdaRole フィールドを、定義したロールの ARN に設定します。
注記
RegisterWorkflowType または StartWorkflowExecution を呼び出すアカウントに、特定のロールを使用するアクセス権限がない場合、呼び出しは OperationNotPermittedFault で失敗します。
Amazon SWF ワークフローからの Lambda 関数の呼び出し
ScheduleLambdaFunctionDecisionAttributes データ型を使用して、ワークフロー実行中に呼び出す Lambda 関数を指定できます。
RespondDecisionTaskCompleted の呼び出し中に、ScheduleLambdaFunctionDecisionAttributes を決定リストで指定します。例:
{ "decisions": [{ "ScheduleLambdaFunctionDecisionAttributes": { "id": "lambdaTaskId", "name": "myLambdaFunctionName", "input": "inputToLambdaFunction", "startToCloseTimeout": "30" }, }], }
以下のパラメータを設定します。
-
Lambda タスクの識別子を示す id。これは 1~256 文字の文字列である必要があり、: (コロン)、/ (スラッシュ)、| (垂直棒)、またはその他の制御文字 (\u0000~\u001f、\u007f~\u009f)、リテラル文字列
arn
を含めることはできません。 -
Lambda 関数名の名前を示す name。Amazon SWF ワークフローは、Lambda 関数を呼び出すアクセス権を付与する IAM ロールで提供する必要があります。提供される名前は、Lambda Invoke アクションなど、FunctionName パラメータの制約に従う必要があります。
-
関数のオプションの入力データを示す input。設定された場合、Lambda Invoke アクションなど、ClientContext パラメータの制約に従う必要があります。
-
オプションでタスクがタイムアウトの例外により失敗するまでに関数で許可される最大期間 (秒数) を示す startToCloseTimeout。値 NONE を使用して、無制限の期間を指定することができます。
詳細については、「AWS Lambda タスクの実装」を参照してください。