翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
使用 AWS CDK Step Functions で Express ワークフローを作成する
このチュートリアルでは、 を使用して、同期エクスプレスステートマシンRESTAPIをバックエンド統合として API Gateway を作成する方法について説明します。 AWS Cloud Development Kit (AWS CDK) Infrastructure as Code (IAC) フレームワーク。
StepFunctionsRestApi
コンストラクトを使用してステートマシンをAPIゲートウェイに接続します。StepFunctionsRestApi
コンストラクトは、必要なアクセス許可とHTTPANY「」メソッドを使用してAPI、デフォルトの入出力マッピングとAPIゲートウェイ REST を設定します。
で AWS CDK は、Infrastructure as Code (IAC) フレームワークであり、ユーザーが定義します。 AWS プログラミング言語を使用する インフラストラクチャ。CDKでサポートされている言語のいずれかでアプリケーションを定義し、コードを に合成します。 AWS CloudFormation テンプレートをデプロイし、インフラストラクチャを にデプロイします。 AWS アカウント。
を使用します。 AWS CloudFormation バックエンドとして同期 Express REST ステートマシンと統合APIされているAPIゲートウェイ を定義するには、 を使用します。 AWS Management Console は実行を開始します。
このチュートリアルを開始する前に、 AWS CDK 「 の開始方法」で説明されている 開発環境 AWS CDK - 前提条件 、次に をインストールします AWS CDK 発行する:
npm install -g aws-cdk
ステップ 1: をセットアップする AWS CDK プロジェクト
まず、新しい のディレクトリを作成します。 AWS CDK をアプリケーションにし、プロジェクトを初期化します。
- TypeScript
-
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language typescript
- JavaScript
-
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language javascript
- Python
-
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language python
プロジェクトが初期化されたら、プロジェクトの仮想環境をアクティブ化し、 をインストールします。 AWS CDKのベースライン依存関係。
source .venv/bin/activate
python -m pip install -r requirements.txt
- Java
-
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language java
- C#
-
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language csharp
- Go
-
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language go
必ずディレクトリの名前はディレクトリ stepfunctions-rest-api
としてください。- AWS CDK アプリケーションテンプレートは、 ディレクトリの名前を使用してソースファイルとクラスの名前を生成します。別の名前を使用する場合は、アプリはこのチュートリアルと一致しません。
次に、 のコンストラクトライブラリモジュールをインストールします。 AWS Step Functions および Amazon API Gateway。
- TypeScript
-
npm install @aws-cdk/aws-stepfunctions @aws-cdk/aws-apigateway
- JavaScript
-
npm install @aws-cdk/aws-stepfunctions @aws-cdk/aws-apigateway
- Python
-
python -m pip install aws-cdk.aws-stepfunctions
python -m pip install aws-cdk.aws-apigateway
- Java
-
プロジェクトの pom.xml
を編集し、既存の <dependencies>
コンテナ 内に、以下の依存関係を追加します。
<dependency>
<groupId>software.amazon.awscdk</groupId>
<artifactId>stepfunctions</artifactId>
<version>${cdk.version}</version>
</dependency>
<dependency>
<groupId>software.amazon.awscdk</groupId>
<artifactId>apigateway</artifactId>
<version>${cdk.version}</version>
</dependency>
Mavenは、次回アプリケーションを構築するときに、これらの依存関係を自動的にインストールします。Java の Build コマンドを構築、発行IDE、mvn compile
または使用するには。
- C#
-
dotnet add src/StepfunctionsRestApi package Amazon.CDK.AWS.Stepfunctions
dotnet add src/StepfunctionsRestApi package Amazon.CDK.AWS.APIGateway
表示されたパッケージはGUI、ツール > パッケージNuGet マネージャー > ソリューションの NuGet パッケージの管理 から入手できる Visual Studio NuGet を使用してインストールすることもできます。
モジュールをインストールしたら、 で使用できます。 AWS CDK 次のパッケージをインポートして アプリ。
- TypeScript
-
@aws-cdk/aws-stepfunctions
@aws-cdk/aws-apigateway
- JavaScript
-
@aws-cdk/aws-stepfunctions
@aws-cdk/aws-apigateway
- Python
-
aws_cdk.aws_stepfunctions
aws_cdk.aws_apigateway
- Java
-
software.amazon.awscdk.services.apigateway.StepFunctionsRestApi
software.amazon.awscdk.services.stepfunctions.Pass
software.amazon.awscdk.services.stepfunctions.StateMachine
software.amazon.awscdk.services.stepfunctions.StateMachineType
- C#
-
Amazon.CDK.AWS.StepFunctions
Amazon.CDK.AWS.APIGateway
- Go
-
stepfunctions-rest-api.go
内の import
に次のものを追加します。
"github.com/aws/aws-cdk-go/awscdk/awsapigateway"
"github.com/aws/aws-cdk-go/awscdk/awsstepfunctions"
ステップ 2: を使用する AWS CDK
同期 Express ステートマシンのバックエンド統合RESTAPIを使用してAPIゲートウェイを作成するには
まず、同期 Express ステートマシンとAPIゲートウェイを定義する個々のコードを提示しAPI、それらを REST にまとめる方法について説明します。 AWS CDK アプリ。次に、これらのリソースを合成してデプロイする方法を見ていきます。
ここで紹介するステートマシンは、Pass
ステートのシンプルなステートマシンです。
高速ステートマシンを作成するには
これは AWS CDK Pass
状態のシンプルなステートマシンを定義する コード。
- TypeScript
-
const machineDefinition = new stepfunctions.Pass(this, 'PassState', {
result: {value:"Hello!"},
})
const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
definition: machineDefinition,
stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
- JavaScript
-
const machineDefinition = new sfn.Pass(this, 'PassState', {
result: {value:"Hello!"},
})
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
definition: machineDefinition,
stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
- Python
-
machine_definition = sfn.Pass(self,"PassState",
result = sfn.Result("Hello"))
state_machine = sfn.StateMachine(self, 'MyStateMachine',
definition = machine_definition,
state_machine_type = sfn.StateMachineType.EXPRESS)
- Java
-
Pass machineDefinition = Pass.Builder.create(this, "PassState")
.result(Result.fromString("Hello"))
.build();
StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
.definition(machineDefinition)
.stateMachineType(StateMachineType.EXPRESS)
.build();
- C#
-
var machineDefinition = new Pass(this, "PassState", new PassProps
{
Result = Result.FromString("Hello")
});
var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
{
Definition = machineDefinition,
StateMachineType = StateMachineType.EXPRESS
});
- Go
-
var machineDefinition = awsstepfunctions.NewPass(stack, jsii.String("PassState"), &awsstepfunctions.PassProps
{
Result: awsstepfunctions.NewResult(jsii.String("Hello")),
})
var stateMachine = awsstepfunctions.NewStateMachine(stack, jsii.String("StateMachine"), &awsstepfunctions.StateMachineProps
{
Definition: machineDefinition,
StateMachineType: awsstepfunctions.StateMachineType_EXPRESS,
})
この短いスニペットで見ることができます:
-
PassState
という名前のマシン定義 (Pass
ステート)。
-
ステートマシンの論理名、MyStateMachine
。
-
マシンの定義がステートマシン定義として使用されます。
-
StepFunctionsRestApi
は同期高速ステートマシンのみを許可するため、ステートマシンタイプは EXPRESS
に設定されています。
StepFunctionsRestApi
コンストラクトRESTAPIを使用してAPIゲートウェイを作成するには
StepFunctionsRestApi
コンストラクトを使用して、必要なアクセス許可とデフォルトの入出力マッピングRESTAPIを持つAPIゲートウェイを作成します。
- TypeScript
-
const api = new apigateway.StepFunctionsRestApi(this,
'StepFunctionsRestApi', { stateMachine: stateMachine });
- JavaScript
-
const api = new apigateway.StepFunctionsRestApi(this,
'StepFunctionsRestApi', { stateMachine: stateMachine });
- Python
-
api = apigw.StepFunctionsRestApi(self, "StepFunctionsRestApi",
state_machine = state_machine)
- Java
-
StepFunctionsRestApi api = StepFunctionsRestApi.Builder.create(this, "StepFunctionsRestApi")
.stateMachine(stateMachine)
.build();
- C#
-
var api = new StepFunctionsRestApi(this, "StepFunctionsRestApi", new StepFunctionsRestApiProps
{
StateMachine = stateMachine
});
- Go
-
awsapigateway.NewStepFunctionsRestApi(stack, jsii.String("StepFunctionsRestApi"), &awsapigateway.StepFunctionsRestApiProps
{
StateMachine = stateMachine,
})
を構築してデプロイするには AWS CDK アプリケーション
左 AWS CDK 作成した プロジェクトで、スタックの定義を含む ファイルを編集して、次のコードのようになります。Step Functions ステートマシンとAPIゲートウェイの定義は、上から認識できます。
- TypeScript
-
以下のように lib/stepfunctions-rest-api-stack.ts
を更新します。
import * as cdk from 'aws-cdk-lib';
import * as stepfunctions from 'aws-cdk-lib/aws-stepfunctions'
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
export class StepfunctionsRestApiStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const machineDefinition = new stepfunctions.Pass(this, 'PassState', {
result: {value:"Hello!"},
});
const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
definition: machineDefinition,
stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
const api = new apigateway.StepFunctionsRestApi(this,
'StepFunctionsRestApi', { stateMachine: stateMachine });
- JavaScript
-
以下のように lib/stepfunctions-rest-api-stack.js
を更新します。
const cdk = require('@aws-cdk/core');
const stepfunctions = require('@aws-cdk/aws-stepfunctions');
const apigateway = require('@aws-cdk/aws-apigateway');
class StepfunctionsRestApiStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const machineDefinition = new stepfunctions.Pass(this, "PassState", {
result: {value:"Hello!"},
})
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
definition: machineDefinition,
stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
const api = new apigateway.StepFunctionsRestApi(this,
'StepFunctionsRestApi', { stateMachine: stateMachine });
}
}
module.exports = { StepStack }
- Python
-
以下のように stepfunctions_rest_api/stepfunctions_rest_api_stack.py
を更新します。
from aws_cdk import App, Stack
from constructs import Construct
from aws_cdk import aws_stepfunctions as sfn
from aws_cdk import aws_apigateway as apigw
class StepfunctionsRestApiStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
machine_definition = sfn.Pass(self,"PassState",
result = sfn.Result("Hello"))
state_machine = sfn.StateMachine(self, 'MyStateMachine',
definition = machine_definition,
state_machine_type = sfn.StateMachineType.EXPRESS)
api = apigw.StepFunctionsRestApi(self,
"StepFunctionsRestApi",
state_machine = state_machine)
- Java
-
以下のように src/main/java/com.myorg/StepfunctionsRestApiStack.java
を更新します。
package com.myorg;
import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.Stack;
import software.amazon.awscdk.core.StackProps;
import software.amazon.awscdk.services.stepfunctions.Pass;
import software.amazon.awscdk.services.stepfunctions.StateMachine;
import software.amazon.awscdk.services.stepfunctions.StateMachineType;
import software.amazon.awscdk.services.apigateway.StepFunctionsRestApi;
public class StepfunctionsRestApiStack extends Stack {
public StepfunctionsRestApiStack(final Construct scope, final String id) {
this(scope, id, null);
}
public StepfunctionsRestApiStack(final Construct scope, final String id, final StackProps props) {
super(scope, id, props);
Pass machineDefinition = Pass.Builder.create(this, "PassState")
.result(Result.fromString("Hello"))
.build();
StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
.definition(machineDefinition)
.stateMachineType(StateMachineType.EXPRESS)
.build();
StepFunctionsRestApi api = StepFunctionsRestApi.Builder.create(this, "StepFunctionsRestApi")
.stateMachine(stateMachine)
.build();
}
}
- C#
-
以下のように src/StepfunctionsRestApi/StepfunctionsRestApiStack.cs
を更新します。
using Amazon.CDK;
using Amazon.CDK.AWS.StepFunctions;
using Amazon.CDK.AWS.APIGateway;
namespace StepfunctionsRestApi
{
public class StepfunctionsRestApiStack : Stack
{
internal StepfunctionsRestApi(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
{
var machineDefinition = new Pass(this, "PassState", new PassProps
{
Result = Result.FromString("Hello")
});
var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
{
Definition = machineDefinition,
StateMachineType = StateMachineType.EXPRESS
});
var api = new StepFunctionsRestApi(this, "StepFunctionsRestApi", new StepFunctionsRestApiProps
{
StateMachine = stateMachine
});
}
}
}
- Go
-
以下のように stepfunctions-rest-api.go
を更新します。
package main
import (
"github.com/aws/aws-cdk-go/awscdk"
"github.com/aws/aws-cdk-go/awscdk/awsapigateway"
"github.com/aws/aws-cdk-go/awscdk/awsstepfunctions"
"github.com/aws/constructs-go/constructs/v3"
"github.com/aws/jsii-runtime-go"
)
type StepfunctionsRestApiGoStackProps struct {
awscdk.StackProps
}
func NewStepfunctionsRestApiGoStack(scope constructs.Construct, id string, props *StepfunctionsRestApiGoStackProps) awscdk.Stack {
var sprops awscdk.StackProps
if props != nil {
sprops = props.StackProps
}
stack := awscdk.NewStack(scope, &id, &sprops)
// The code that defines your stack goes here
var machineDefinition = awsstepfunctions.NewPass(stack, jsii.String("PassState"), &awsstepfunctions.PassProps
{
Result: awsstepfunctions.NewResult(jsii.String("Hello")),
})
var stateMachine = awsstepfunctions.NewStateMachine(stack, jsii.String("StateMachine"), &awsstepfunctions.StateMachineProps{
Definition: machineDefinition,
StateMachineType: awsstepfunctions.StateMachineType_EXPRESS,
});
awsapigateway.NewStepFunctionsRestApi(stack, jsii.String("StepFunctionsRestApi"), &awsapigateway.StepFunctionsRestApiProps{
StateMachine = stateMachine,
})
return stack
}
func main() {
app := awscdk.NewApp(nil)
NewStepfunctionsRestApiGoStack(app, "StepfunctionsRestApiGoStack", &StepfunctionsRestApiGoStackProps{
awscdk.StackProps{
Env: env(),
},
})
app.Synth(nil)
}
// env determines the AWS environment (account+region) in which our stack is to
// be deployed. For more information see: https://docs.aws.amazon.com/cdk/latest/guide/environments.html
func env() *awscdk.Environment {
// If unspecified, this stack will be "environment-agnostic".
// Account/Region-dependent features and context lookups will not work, but a
// single synthesized template can be deployed anywhere.
//---------------------------------------------------------------------------
return nil
// Uncomment if you know exactly what account and region you want to deploy
// the stack to. This is the recommendation for production stacks.
//---------------------------------------------------------------------------
// return &awscdk.Environment{
// Account: jsii.String("123456789012"),
// Region: jsii.String("us-east-1"),
// }
// Uncomment to specialize this stack for the AWS Account and Region that are
// implied by the current CLI configuration. This is recommended for dev
// stacks.
//---------------------------------------------------------------------------
// return &awscdk.Environment{
// Account: jsii.String(os.Getenv("CDK_DEFAULT_ACCOUNT")),
// Region: jsii.String(os.Getenv("CDK_DEFAULT_REGION")),
// }
}
ソースファイルを保存し、cdk synth
アプリケーションのメインディレクトリで発行します。- AWS CDK はアプリケーションを実行し、 を合成します。 AWS CloudFormation テンプレートから、 テンプレートを表示します。
Amazon API Gateway と を実際にデプロイするには AWS Step Functions ステートマシンをAWSアカウントに、 を発行しますcdk deploy
。IAM ポリシーを承認するように求められます。 AWS CDK が生成しました。
ステップ 3: APIゲートウェイをテストする
バックエンド統合として同期 Express ステートマシンRESTAPIを使用してAPIゲートウェイを作成したら、APIゲートウェイをテストできます。
Gateway コンソールAPIを使用してデプロイされた API Gateway をテストするには
-
Amazon API Gateway コンソールを開き、サインインします。
-
REST API という名前の を選択しますStepFunctionsRestApi
。
-
[リソース] ペインで、ANY
メソッドを選択します。
-
[テスト] タブを選択します。タブを表示するには、右矢印ボタンを選択する必要がある場合があります。
-
[Method] (メソッド) で、[POST] を選択します。
-
[リクエスト本文] には、以下のリクエストパラメータをコピーします。
{
"key": "Hello"
}
-
[テスト] を選択します。次の情報が表示されます。
-
[リクエスト]: メソッド用に呼び出されたリソースのパスです。
-
ステータスはレスポンスHTTPのステータスコードです。
-
[レイテンシー]: 発信者からリクエストを受信してから応答を返すまでの時間です。
-
レスポンス本文はHTTPレスポンス本文です。
-
レスポンスヘッダーはHTTPレスポンスヘッダーです。
-
ログには、このメソッドが API Gateway コンソールの外部で呼び出された場合に書き込まれたシミュレートされた Amazon CloudWatch Logs エントリが表示されます。
CloudWatch Logs エントリはシミュレートされますが、メソッド呼び出しの結果は実際のものです。
[レスポンス本文] の出力は、次のようになります。
"Hello"
異なるメソッドと無効な入力でAPIゲートウェイを試して、エラー出力を確認します。特定のキーを検索するステートマシンを変更し、テスト中に間違ったキーを指定してステートマシンの実行を失敗させ、[レスポンス本文] の出力にエラーメッセージを生成させる場合があります。
c APIを使用してデプロイされた をテストするにはURL
-
ターミナルウィンドウを開きます。
-
次の cURL コマンドをコピーしてターミナルウィンドウに貼り付け、 を APIの API ID <api-id>
に置き換え、 を APIがデプロイされているリージョン<region>
に置き換えます。
curl -X POST\
'https://<api-id>
.execute-api.<region>
.amazonaws.com/prod' \
-d '{"key":"Hello"}' \
-H 'Content-Type: application/json'
[レスポンス本文] の出力は、次のようになります。
"Hello"
異なるメソッドと無効な入力でAPIゲートウェイを試して、エラー出力を確認します。特定のキーを検索するステートマシンを変更し、テスト中に間違ったキーを指定してステートマシンの実行を失敗させ、[レスポンス本文] の出力にエラーメッセージを生成させる場合があります。
ステップ 4: クリーンアップする
API ゲートウェイの試用が完了したら、 を使用してステートマシンとAPIゲートウェイの両方を切り離すことができますAWSCDK。アプリケーションのメインディレクトリで cdk destroy
を発行します。