아래의 단계별 지침에 따라 상태 시스템을 생성합니다. 각 단계 번호를 클릭하면 해당 섹션이 펼쳐집니다.

  • 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> 형식입니다.