사용 AWS CloudFormation Step Functions에서 워크플로를 만들려면 - AWS Step Functions

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

사용 AWS CloudFormation Step Functions에서 워크플로를 만들려면

이 자습서에서는 다음을 생성합니다. AWS Lambda 다음을 사용하는 함수 AWS CloudFormation. 를 사용하게 될 거예요 AWS CloudFormation 스택을 생성하기 위한 콘솔 및 YAML 템플릿 (IAM역할, Lambda 함수, 상태 머신) 그런 다음 Step Functions 콘솔을 사용하여 스테이트 머신 실행을 시작합니다.

자세한 내용은 CloudFormation 템플릿AWS::StepFunctions::StateMachine 리소스 사용을 참조하십시오. AWS CloudFormation 사용 설명서.

1단계: 설정 AWS CloudFormation 템플릿

예제 템플릿을 사용하기 전에 템플릿의 각 부분을 선언하는 방법을 이해해야 합니다. AWS CloudFormation 템플릿.

Lambda에 대한 IAM 역할을 생성하려면

Lambda 함수의 IAM 역할과 관련된 신뢰 정책을 정의합니다. 다음 예제는 또는 중 하나를 YAML 사용하여 신뢰 정책을 정의합니다. JSON

YAML
LambdaExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:AssumeRole"
JSON
"LambdaExecutionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } }

Lambda 함수를 생성하는 방법

Hello World 메시지를 출력하는 Lambda 함수의 다음 속성을 정의합니다.

중요

Lambda 함수가 동일한 함수에 있는지 확인하십시오. AWS 계정 및 AWS 리전 스테이트 머신으로 사용하세요.

YAML
MyLambdaFunction: Type: "AWS::Lambda::Function" Properties: Handler: "index.handler" Role: !GetAtt [ LambdaExecutionRole, Arn ] Code: ZipFile: | exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; Runtime: "nodejs12.x" Timeout: "25"
JSON
"MyLambdaFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "LambdaExecutionRole", "Arn" ] }, "Code": { "ZipFile": "exports.handler = (event, context, callback) => {\n callback(null, \"Hello World!\");\n};\n" }, "Runtime": "nodejs12.x", "Timeout": "25" } },

스테이트 머신 실행을 위한 IAM 역할을 만들려면

스테이트 머신 실행 IAM 역할과 관련된 신뢰 정책을 정의합니다.

YAML
StatesExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - !Sub states.${AWS::Region}.amazonaws.com Action: "sts:AssumeRole" Path: "/" Policies: - PolicyName: StatesExecutionPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - "lambda:InvokeFunction" Resource: "*"
JSON
"StatesExecutionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ { "Fn::Sub": "states.${AWS::Region}.amazonaws.com" } ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "StatesExecutionPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "*" } ] } } ] } },

Lambda 상태 시스템 만들기

Lambda 상태 시스템을 정의합니다.

YAML
MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString: !Sub - |- { "Comment": "A Hello World example using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "${lambdaArn}", "End": true } } } - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]} RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
JSON
"MyStateMachine": { "Type": "AWS::StepFunctions::StateMachine", "Properties": { "DefinitionString": { "Fn::Sub": [ "{\n \"Comment\": \"A Hello World example using an AWS Lambda function\",\n \"StartAt\": \"HelloWorld\",\n \"States\": {\n \"HelloWorld\": {\n \"Type\": \"Task\",\n \"Resource\": \"${lambdaArn}\",\n \"End\": true\n }\n }\n}", { "lambdaArn": { "Fn::GetAtt": [ "MyLambdaFunction", "Arn" ] } } ] }, "RoleArn": { "Fn::GetAtt": [ "StatesExecutionRole", "Arn" ] } } }

2단계: 사용 AWS CloudFormation Lambda 스테이트 머신을 생성하기 위한 템플릿

구성 요소를 이해하면 AWS CloudFormation 템플릿을 한데 모아 템플릿을 사용하여 템플릿을 만들 수 있습니다. AWS CloudFormation 스택.

Lambda 상태 시스템 만들기

  1. 다음 예제 데이터를 예제 또는 MyStateMachine.json for라는 이름의 MyStateMachine.yaml 파일에 JSON 복사합니다. YAML

    YAML
    AWSTemplateFormatVersion: "2010-09-09" Description: "An example template with an IAM role for a Lambda state machine." Resources: LambdaExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:AssumeRole" MyLambdaFunction: Type: "AWS::Lambda::Function" Properties: Handler: "index.handler" Role: !GetAtt [ LambdaExecutionRole, Arn ] Code: ZipFile: | exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; Runtime: "nodejs12.x" Timeout: "25" StatesExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - !Sub states.${AWS::Region}.amazonaws.com Action: "sts:AssumeRole" Path: "/" Policies: - PolicyName: StatesExecutionPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - "lambda:InvokeFunction" Resource: "*" MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString: !Sub - |- { "Comment": "A Hello World example using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "${lambdaArn}", "End": true } } } - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]} RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
    JSON
    { "AWSTemplateFormatVersion": "2010-09-09", "Description": "An example template with an IAM role for a Lambda state machine.", "Resources": { "LambdaExecutionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }, "MyLambdaFunction": { "Type": "AWS::Lambda::Function", "Properties": { "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "LambdaExecutionRole", "Arn" ] }, "Code": { "ZipFile": "exports.handler = (event, context, callback) => {\n callback(null, \"Hello World!\");\n};\n" }, "Runtime": "nodejs12.x", "Timeout": "25" } }, "StatesExecutionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ { "Fn::Sub": "states.${AWS::Region}.amazonaws.com" } ] }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyName": "StatesExecutionPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "*" } ] } } ] } }, "MyStateMachine": { "Type": "AWS::StepFunctions::StateMachine", "Properties": { "DefinitionString": { "Fn::Sub": [ "{\n \"Comment\": \"A Hello World example using an AWS Lambda function\",\n \"StartAt\": \"HelloWorld\",\n \"States\": {\n \"HelloWorld\": {\n \"Type\": \"Task\",\n \"Resource\": \"${lambdaArn}\",\n \"End\": true\n }\n }\n}", { "lambdaArn": { "Fn::GetAtt": [ "MyLambdaFunction", "Arn" ] } } ] }, "RoleArn": { "Fn::GetAtt": [ "StatesExecutionRole", "Arn" ] } } } } }
  2. AWS CloudFormation 콘솔을 열고 스택 생성을 선택합니다.

  3. 템플릿 선택 페이지에서 Amazon S3에 템플릿 업로드를 선택합니다. MyStateMachine 파일을 선택한 후 다음을 선택합니다.

  4. 세부 정보 지정 페이지에서 스택 이름MyStateMachine을 입력한 후 다음을 선택합니다.

  5. 옵션 페이지에서 다음을 선택합니다.

  6. 리뷰 페이지에서 다음을 승인함을 선택합니다. AWS CloudFormation IAM리소스를 생성할 수도 있습니다. 그런 다음 [Create] 를 선택합니다.

    AWS CloudFormation MyStateMachine스택 생성을 시작하고 CREATE_IN_ PROGRESS 상태를 표시합니다. 프로세스가 완료되면 AWS CloudFormation CREATE_ COMPLETE 상태를 표시합니다.

  7. (선택 사항) 스택에 리소스를 표시하려면 스택을 선택하고 [Resources ] 탭을 선택합니다.

3단계: 상태 시스템 실행 시작

Lambda 상태 시스템을 만들었으면 실행을 시작할 수 있습니다.

상태 시스템 실행을 시작하려면

  1. Step Functions 콘솔을 열고 사용하여 만든 상태 머신의 이름을 선택합니다. AWS CloudFormation.

  2. 에서 MyStateMachine-ABCDEFGHIJ1K페이지에서 새 실행을 선택합니다.

    [New execution] 페이지가 표시됩니다.

  3. (선택 사항) 생성된 기본값을 재정의하려면 사용자 지정 실행 이름을 입력합니다.

    ASCII비이름 및 로깅

    Step Functions는 ASCII -자가 아닌 문자를 포함하는 상태 머신, 실행, 액티비티 및 레이블의 이름을 허용합니다. CloudWatchAmazon에서는 이러한 문자를 사용할 수 없으므로 지표를 추적할 수 있도록 ASCII 문자만 사용하는 것이 좋습니다 CloudWatch.

  4. 실행 시작을 선택합니다.

    상태 머신의 새로운 실행이 시작되고 실행 중인 실행을 보여주는 새로운 페이지가 표시됩니다.

  5. (선택 사항) 실행 세부 정보에서 실행 상태시작됨종료됨 타임스탬프를 검토합니다.

  6. 실행 결과를 보려면 Output(출력)을 선택합니다.