以下に示す手順通りにステートマシンを作成します。各ステップの番号をクリックして、セクションを展開してください。

  • AWS Step Functions コンソールを使用してステートマシンを作成する

    ステートマシンを作成するには、AWS Step Functions コンソールを使用します。Step Functions はウェブサービスで、視覚的ワークフローを使用して分散アプリケーションやマイクロサービスのコンポーネントをコーディネートできます。Lambda 関数は、ステートマシンが実行され、タスク状態に達すると呼び出されます。

    このプロジェクトでは、ステートマシンは次のタスクを実行します。

    • AppStream 2.0 画像ビルダーを作成します。
    • AppStream 2.0 画像ビルダーとフリートのステータスを取得します。
    • ストリーミング URL を送信します。
    • AppStream 2.0 イメージ名を取得します。
    • AppStream フリートとスタックを作成し、フリートをスタックに関連付けます。
    • AppStream 2.0 フリートおよびイメージビルダーを停止します。
     

    ステートマシンを作成するには、次の手順を実行します。

    1. https://console.aws.amazon.com/states/ にある AWS Step Functions コンソールを開きます。
    2. 以下のいずれかを行います。
      • 初めてステートマシン関数を作成する場合、[開始] ページが表示されます。[開始] を選択してから、[ステートマシン] を選択します。
      • ステートマシン関数を作成した場合は、[ステートマシン] ページの右上にある [ステートマシンを作成] を選択します。
    3. [ステートマシンを定義] ページで、[コードスニペットからの作成者] を選択したままにします。
    4. [タイプ] セクションで、[標準] を選択したままにします。
    5. [ステートマシン定義] セクションで、プレースホルダーコードを削除し、次のコードを [編集] ウィンドウに貼り付けます。
    {
      "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> の形式になります。