翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Lambda オーケストレーションの例
このサンプルプロジェクトでは、Step AWS Lambda Functions ステートマシンに関数を統合する方法を紹介します。
このプロジェクトでは、Step Functions は Lambda 関数を使用して株価をチェックし、売買取引レコメンデーションを決定します。その後、ユーザーにはこのレコメンデーションが提供され、株式の売買を選択できます。取引の結果は SNS トピックを使用して返されます。
Step Functions サービス統合の詳細については、以下を参照してください。
-
以下の IAM ポリシー:
注記
このサンプルプロジェクトでは、料金が発生する場合があります。
AWS 新規ユーザーには、無料利用枠が用意されています。この枠では、サービスを利用しても一定のレベル以下であれば無料です。 AWS 費用と無料利用枠について詳しくは、「料金表
ステップ 1: ステートマシンを作成してリソースをプロビジョニングする
-
Step Functions コンソール
を開き、[ステートマシンの作成] を選択します。 -
検索ボックスに
Orchestrate Lambda functions
と入力し、返された検索結果から [Lambda 関数のオーケストレーション] を選択します。 -
[次へ] を選択して続行します。
-
Step Functions には、 AWS サービス 選択したサンプルプロジェクトで使用されているものが一覧表示されます。サンプルプロジェクトのワークフローグラフも表示されます。 AWS アカウント このプロジェクトを自分のプロジェクトにデプロイするか、独自のプロジェクトを構築するための出発点として使用してください。進める方法に応じて、[デモの実行] または [その上に構築する] を選択します。
このサンプルプロジェクトは、以下のリソースをデプロイします。
-
5 つの Lambda 関数
-
Amazon Simple Queue Service キュー
-
Amazon Simple Notification Service トピック
-
AWS Step Functions ステートマシン
-
関連する AWS Identity and Access Management (IAM) ロール
以下のイメージは、[Lambda 関数のオーケストレーション] サンプルプロジェクトのワークフローグラフを示しています。
-
-
[テンプレートの使用] を選択して選択を続行します。
-
次のいずれかを行います。
-
[その上に構築する] を選択した場合、Step Functions は選択したサンプルプロジェクトのワークフロープロトタイプを作成します。Step Functions は、ワークフロー定義にリストされているリソースをデプロイしません。
Workflow Studio の デザインモード では、[State browser] (状態ブラウザ) から状態をドラッグアンドドロップして、ワークフロープロトタイプの構築を続行できます。または、VS Code と同様の統合コードエディタを提供する コードモード に切り替えて、Step Functions コンソール内のステートマシンの Amazon ステートメント言語 (ASL) 定義を更新してください。Workflow Studio を使用してステートマシンを構築する方法の詳細については、「Workflow Studio を使用する」を参照してください。
重要
ワークフローを実行する前に、サンプルプロジェクトで使用されているリソースのプレースホルダー Amazon リソースネーム (ARN) を必ず更新してください。
-
[デモの実行] を選択した場合、Step Functions AWS CloudFormation AWS はテンプレートを使用してそのテンプレートにリストされているリソースをにデプロイする読み取り専用のサンプルプロジェクトを作成します。 AWS アカウント
ヒント
サンプルプロジェクトのステートマシン定義を表示するには、[コード] を選択します。
準備できたら、[デプロイと実行] を選択してサンプルプロジェクトをデプロイし、リソースを作成します。
これらのリソースおよび関連する IAM 許可が作成されるまで、最大 10 分かかることがあります。リソースのデプロイ中に CloudFormation Stack ID リンクを開いて、どのリソースがプロビジョニングされているかを確認できます。
サンプルプロジェクトのすべてのリソースが作成されると、新しいサンプルプロジェクトが [ステートマシン] ページに表示されます。
重要
CloudFormation テンプレートで使用される各サービスには標準料金が適用される場合があります。
-
ステップ 2: ステートマシンを実行する
すべてのリソースのプロビジョニングとデプロイが完了すると、[実行を開始] ダイアログボックスが表示されます。
-
[ステートマシン] ページで、サンプルプロジェクトを選択します。
-
サンプルプロジェクトページで、[実行を開始] を選択します。
-
[実行を開始] ダイアログボックスで、以下の操作を行います。
-
(オプション) 実行を識別するには、[名前] ボックスに名前を指定します。デフォルトでは、Step Functions は自動的に一意の実行名を生成します。
注記
Step Functions では、ステートマシン、実行、アクティビティの名前、および ASCII 以外の文字を含むラベルを作成できます。これらの非ASCII名は、Amazonでは機能しません。 CloudWatch CloudWatch メトリクスを追跡できるようにするには、ASCII 文字のみを使用する名前を選択してください。
-
(オプション) [入力] ボックスに、JSON 形式の入力値を入力してワークフローを実行します。
[デモの実行] を選択した場合、実行入力を入力する必要はありません。
注記
デプロイしたデモプロジェクトに事前入力された実行入力データが含まれている場合は、その入力を使用してステートマシンを実行します。
-
[実行のスタート] を選択します。
-
Step Functions コンソールから実行 ID のタイトルが付いたページが表示されます。このページは、[実行の詳細] ページと呼ばれます。このページでは、実行の進行中または完了後に実行結果を確認できます。
実行結果を確認するには、[グラフビュー] で個々の状態を選択し、ステップの詳細 ペインの個々のタブを選択すると、入力、出力、定義などの各状態の詳細がそれぞれ表示されます。[実行の詳細] ページに表示できる実行情報の詳細については、「[実行の詳細] ページ - インターフェイスの概要」を参照してください。
-
ステートマシンとその実行について
このサンプルプロジェクトのステートマシンは、 AWS Lambda パラメータを直接リソースに渡すことでと統合し、Amazon SQS キューを使用して人間による承認リクエストを管理し、Amazon SNS トピックを使用してクエリの結果を返します。
Step Functions を実行すると、JSON テキストを入力として受け取り、その入力をワークフローの最初の状態に渡します。それぞれの状態で JSON データを入力として受け取ります。また、通常 JSON データを出力として次の状態に渡します。このサンプルプロジェクトでは、各ステップの出力がワークフローの次のステップへの入力として渡されます。例えば、[買い/売りのレコメンデーションを生成] ステップでは、[株価を確認] ステップの出力を入力として受け取ります。また、[買い/売りのレコメンデーションを生成] ステップの出力は、人間の承認ステップを模倣した次のステップ [人間による承認をリクエスト] に入力として渡されます。
注記
人間による承認ステップを実装するには、通常、タスクトークンが返されるまでワークフローの実行を一時停止します。このサンプルプロジェクトでは、メッセージが Amazon SQS キューに渡され、コールバック機能を処理するために定義された Lambda 関数のトリガーとして使用されます。メッセージにはタスクトークンと、前のステップで返された出力が含まれています。Lambda 関数はメッセージのペイロードで呼び出されます。ワークフローの実行は、SendTaskSuccess
API 呼び出しでタスクトークンが返されるまで一時停止されます。タスクの詳細については、「タスクトークンのコールバックまで待機する」を参照してください。
次の StepFunctionsSample-HelloLambda-ApproveSqsLambda
関数のコードは、Step Functions ステートマシンを通じて Amazon SQS キューから送信されたタスクを自動的に承認するように定義する方法を示しています。
exports.lambdaHandler = (event, context, callback) => {
const stepfunctions = new aws.StepFunctions();
// For every record in sqs queue
for (const record of event.Records) {
const messageBody = JSON.parse(record.body);
const taskToken = messageBody.TaskToken;
const params = {
output: "\"approved\"",
taskToken: taskToken
};
console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`);
// Approve
stepfunctions.sendTaskSuccess(params, (err, data) => {
if (err) {
console.error(err.message);
callback(err.message);
return;
}
console.log(data);
callback(null);
});
}
};
このステートマシンの例を参照して、 Step Functions が Lambda と Amazon SQS をどのように制御するかを確認します。
AWS 他のサービスを制御する方法の詳細については AWS Step Functions 、「」を参照してください。AWS Step Functions 他のサービスとの併用
{
"StartAt": "Check Stock Price",
"States": {
"Check Stock Price": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666",
"Next": "Generate Buy/Sell recommendation"
},
"Generate Buy/Sell recommendation": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012",
"ResultPath": "$.recommended_type",
"Next": "Request Human Approval"
},
"Request Human Approval": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"Parameters": {
"QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999",
"MessageBody": {
"Input.$": "$",
"TaskToken.$": "$$.Task.Token"
}
},
"ResultPath": null,
"Next": "Buy or Sell?"
},
"Buy or Sell?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.recommended_type",
"StringEquals": "buy",
"Next": "Buy Stock"
},
{
"Variable": "$.recommended_type",
"StringEquals": "sell",
"Next": "Sell Stock"
}
]
},
"Buy Stock": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000",
"Next": "Report Result"
},
"Sell Stock": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111",
"Next": "Report Result"
},
"Report Result": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222",
"Message": {
"Input.$": "$"
}
},
"End": true
}
}
}
Step Functions AWS を他のサービスで使用する場合の IAM の設定方法については、を参照してください統合サービスの IAM ポリシー。
IAM の例
サンプルプロジェクトで生成されたこれらのサンプル AWS Identity and Access Management (IAM) ポリシーには、ステートマシンと関連リソースを実行するのに必要な最小限の権限が含まれています。IAM ポリシーで必要なアクセス許可のみを含めることをお勧めします。
{
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"sqs:SendMessage*"
],
"Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111",
"Effect": "Allow"
}
]
}
{
"Statement": [
{
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222",
"Effect": "Allow"
}
]
}
Step Functions AWS を他のサービスで使用する場合の IAM の設定方法については、を参照してください統合サービスの IAM ポリシー。