ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • aws Step Functions_2
    카테고리 없음 2025. 5. 15. 15:51

    https://plli.tistory.com/36

    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 를 통해 실행 주기 설정한다.

Designed by Tistory.