ステートマシンを作成するには、AWS Step Functions コンソールを使用します。Step Functions はウェブサービスで、視覚的ワークフローを使用して分散アプリケーションやマイクロサービスのコンポーネントをコーディネートできます。Lambda 関数は、ステートマシンが実行され、タスク状態に達すると呼び出されます。
このプロジェクトでは、ステートマシンは次のタスクを実行します。
- AppStream 2.0 画像ビルダーを作成します。
- AppStream 2.0 画像ビルダーとフリートのステータスを取得します。
- ストリーミング URL を送信します。
- AppStream 2.0 イメージ名を取得します。
- AppStream フリートとスタックを作成し、フリートをスタックに関連付けます。
- AppStream 2.0 フリートおよびイメージビルダーを停止します。
ステートマシンを作成するには、次の手順を実行します。
- https://console.aws.amazon.com/states/ にある AWS Step Functions コンソールを開きます。
- 以下のいずれかを行います。
- 初めてステートマシン関数を作成する場合、[開始] ページが表示されます。[開始] を選択してから、[ステートマシン] を選択します。
- ステートマシン関数を作成した場合は、[ステートマシン] ページの右上にある [ステートマシンを作成] を選択します。
- [ステートマシンを定義] ページで、[コードスニペットからの作成者] を選択したままにします。
- [タイプ] セクションで、[標準] を選択したままにします。
- [ステートマシン定義] セクションで、プレースホルダーコードを削除し、次のコードを [編集] ウィンドウに貼り付けます。
{
"StartAt": "Create Image Builder",
"States": {
"Create Image Builder": {
"Type": "Task",
"Resource":
"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_createimagebuilder",
"ResultPath": "$.type",
"Next": "Resource Created?"
},
"Resource Created?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.type",
"NumericEquals": -1,
"Next": "Creation Failed"
},
{
"Variable": "$.type",
"NumericEquals": 1,
"Next": "Sleep"
},
{
"Variable": "$.type",
"NumericEquals": 2,
"Next": "Sleep"
}
],
"Default": "Sleep"
},
"Sleep": {
"Type": "Wait",
"Seconds": 300,
"Next": "Get Status"
},
"Get Status": {
"Type": "Task",
"Resource":
"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
"Next": "Instance Status",
"ResultPath": "$.status"
},
"Instance Status": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.status",
"NumericEquals": -1,
"Next": "Creation Failed"
},
{
"Variable": "$.status",
"NumericEquals": 1,
"Next": "Send StreamingURL"
}
],
"Default": "Sleep"
},
"Send StreamingURL": {
"Type": "Task",
"Resource":
"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_sendstreamingurl",
"Next": "Split",
"ResultPath": "$.status"
},
"Split": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.type",
"NumericEquals": 1,
"Next": "Wait For Snapshot"
},
{
"Variable": "$.type",
"NumericEquals": 2,
"Next": "1 Hour Timer"
}
],
"Default": "1 Hour Timer"
},
"Wait For Snapshot": {
"Type": "Wait",
"Seconds": 1500,
"Next": "IB Status"
},
"IB Status": {
"Type": "Task",
"Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
"ResultPath": "$.status",
"Next": "Snapshotting?"
},
"Snapshotting?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.status",
"NumericEquals": 2,
"Next": "Get ImageName"
},
{
"Variable": "$.status",
"NumericEquals": 3,
"Next": "Get ImageName"
}
],
"Default": "Wait For Snapshot"
},
"Get ImageName": {
"Type": "Task",
"Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getimagename",
"ResultPath": "$.imagename",
"Next": "Wait For ImageReady"
},
"Wait For ImageReady": {
"Type": "Wait",
"Seconds": 300,
"Next": "Image Status"
},
"Image Status": {
"Type": "Task",
"Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_getstatus",
"ResultPath": "$.status",
"Next": "ImageReady?"
},
"ImageReady?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.status",
"NumericEquals": 3,
"Next": "Create Fleet"
}
],
"Default": "Wait For ImageReady"
},
"Create Fleet": {
"Type": "Task",
"Resource":"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_createfleet",
"ResultPath": "$.type",
"Next": "Resource Created?"
},
"1 Hour Timer": {
"Type": "Wait",
"Seconds": 3600,
"Next": "StopResources"
},
"Creation Failed": {
"Type": "Fail",
"Cause": "Process Failed",
"Error": "Process Failed"
},
"StopResources": {
"Type": "Task",
"Resource":
"arn:aws:lambda:<REGION-CODE>:<AWS-ACCOUNT-ID>:function:examplecorp_eao_stopresources",
"End": true
}
}
}
6.以下を独自の値に置き換えます。
• <AWS-ACCOUNT-ID> を AWS アカウント番号に置き換えます。
• <REGION-CODE> を選択した AWS リージョンに置き換えます。値はすべて小文字でなければなりません。
7.[
次へ] を選択します。
8.[
名前] に、[
examplecorp_eao] と入力します。
9.[
アクセス許可] セクションで、[
既存のロールを選択] をクリックします。
10.[
既存のロール] ドロップダウンで、モジュール 2 で作成した IAM ロールである [
examplecorp_eao_role] を選択します。
11.[
ステートマシンの作成] をクリックします。
12.ページ上部にある [
詳細] セクションに、ステーとマシンの
ARN が表示されます。この ARN を書き留めます。この ARN はプロジェクトの後半で必要となり、arn:aws:states:<REGION-CODE>:<AWS_ACCOUNT-ID>:stateMachine:<STATE-MACHINE-NAME> の形式になります。