카테고리 없음

aws Step Functions_1

plli 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 %}"
      },