ABOUT ME

-

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

    AWS EC2 AMI 를 S3에 백업하기 위해 Lambda 와 Step Functions 를 사용했다.

     

    step functions 은 구성이 어렵지 않고 결과값을 다음 task 에 전달하는게 편했다.

     

    진행 방식

    Lambda 3개 구성 (ALB 에 연결되어 있는 EC2 만 백업)

     

    Lambda 1 : ec2 ami 

    Lambda 2 : create_store_image_task (ami -> s3 임시 디렉토리에 저장)

    Lambda 3 : s3 임시 디렉토리에 저장된 ami (ex. ami-abcd1234) 구분이 어렵기 때문에 원본 서버 이름으로 변경 후

                      백업 일자 디렉토리로 copy

                       ami, 스냅샷, 임시 ami 삭제

     

    Lambda 를 구분한 이유는 ami 생성 시간, create_store_image_task 작업 시간, copy 시간으로 인해 구분

     

    위에서 생성한 lambda 를 step functions 를 통해 순차 진행

    람다 사이에  wait 을 통해 대기 시간을 할당하고 3번 람다에서 실패하는 경우 wait 후 다시 3번 람다를 실행하게 설정했다.

     

    3번 람다에서 실패가 뜬 이유 : copy 시간이 오래 걸려 (20GB) s3에서 copy 된 ami 를 찾을 수 없어 에러 발생

                                                    람다 내 대기 시간을 넣으면 람다 제한 시간을 초과하게 됨

     

    copy 시간의 문제로 발생하는 에러였기 때문에 wait 을 추가하고 다시 실행하면서 step functions 이 문제 없이 실행됨.

     

    하지만 위에서 말했듯이 결과값을 다음 task (여기선 람다) 에 보내는 것에 문제가 발생.

    3번 람다의 결과값 (에러) 이 wait 후 4번 람다 retry_ec2_ami~~~ 로 넘어가서 4번 람다 실행 불가.

     

    그래서 사용한 방법은 3번 람다에 들어오는 값 (2번 람다의 결과값) 을 변수로 저장해서 4번 람다 실행의 input 으로 전달

          "Assign": {
            "ami_id": "{% $states.result.Payload %}"
          },

     

    이렇게 Assing 을 사용하면 변수로 사용할 수 있다.

     

    이 변수를 이렇게 입력값으로 사용 할 수 있다.

          "Arguments": {
            "FunctionName": "arn:aws:lambda:region:account_id:function:ec2_ami_backup_3-delete_ami:$LATEST",
            "Payload": "{% $ami_id %}"
          },
Designed by Tistory.