-
aws Step Functions_2카테고리 없음 2025. 5. 15. 15:51
aws Step Functions_1 에 이어서 작성
람다 1 에 관한 step function
{ "Comment": "A description of my state machine", "StartAt": "ec2_ami_backup-1_create_ami", "States": { "ec2_ami_backup-1_create_ami": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", // 해당 람다 실행 후 결과값을 다음 람다에 전달 "Output": "{% $states.result.Payload %}", "Arguments": { // step functions 에 적용된 람다 "FunctionName": "arn:aws:lambda:region:account_id:function:ec2_ami_backup_1-create_ami:$LATEST", // 해당 람다에 들어오는 값 "Payload": "{% $states.input %}" }, // 아래 error 발생 시 재시도 설정 "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ], // 해당 람다(task) 종료 후 이동할 위치 "Next": "waitcopy_1" },
람다 2 에 관한 step function
// 1번 람다 종료 후 도착한 위치 // 대기 시간 240초 "waitcopy_1": { "Type": "Wait", "Seconds": 240, // 240초 대기 후 이동할 위치 "Next": "ec2_ami_backup_2-copy-s3" }, "ec2_ami_backup_2-copy-s3": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", // 해당 람다 실행 후 결과값을 다음 람다에 전달 "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account_id:function:ec2_ami_backup_2-copy_s3:$LATEST", // 1번 람다의 결과값이 들어온다 "Payload": "{% $states.input %}" }, // 해당 람다 실행 후 나오는 결과 값을 변수로 저장 "Assign": { "ami_id": "{% $states.result.Payload %}" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ], "Next": "waitcopy_2" },
전체 step functions 코드
{ "Comment": "A description of my state machine", "StartAt": "ec2_ami_backup-1_create_ami", "States": { "ec2_ami_backup-1_create_ami": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account_id:function:ec2_ami_backup_1-create_ami:$LATEST", "Payload": "{% $states.input %}" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ], "Next": "waitcopy_1" }, "waitcopy_1": { "Type": "Wait", "Seconds": 240, "Next": "ec2_ami_backup_2-copy-s3" }, "ec2_ami_backup_2-copy-s3": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account_id:function:ec2_ami_backup_2-copy_s3:$LATEST", "Payload": "{% $states.input %}" }, // 4번 람다에 3번 람다와 동일한 input 을 넣어주기 위해 변수 선언 및 값 저장 "Assign": { "ami_id": "{% $states.result.Payload %}" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ], "Next": "waitcopy_2" }, "waitcopy_2": { "Type": "Wait", "Seconds": 240, "Next": "ec2_ami_backup_3-delete_ami" }, "ec2_ami_backup_3-delete_ami": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account_id:function:ec2_ami_backup_3-delete_ami:$LATEST", "Payload": "{% $states.input %}" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 10, "MaxAttempts": 5, "BackoffRate": 2.5, "JitterStrategy": "FULL" } ], // 에러 발생 시 fail_wait 으로 보냄 "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Output": "{% { 'input': $states.input, 'error': $states.errorOutput } %}", "Next": "fail_wait" } ], "Next": "SuccessState" }, "fail_wait": { "Type": "Wait", "Seconds": 600, "Next": "retry_ec2_ami_backup_3-delete_ami" }, "retry_ec2_ami_backup_3-delete_ami": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account_id:function:ec2_ami_backup_3-delete_ami:$LATEST", // 3번 람다와 동일한 input 을 받기 위해 설정 "Payload": "{% $ami_id %}" }, "Next": "SuccessState" }, "SuccessState": { "Type": "Pass", "End": true } }, "QueryLanguage": "JSONata" }
이 코드로 step functions 실행 시 이상이 없으면 event bridge 를 통해 실행 주기 설정한다.