[파이썬] AWS Lambda와 CloudFormation을 통한 애플리케이션 배포 자동화

AWS Lambda는 서버리스 컴퓨팅 서비스로, 개발자가 서버를 관리하지 않고도 코드를 실행할 수 있게 해줍니다. CloudFormation은 인프라스트럭처를 코드로 정의하고 프로비저닝, 업데이트, 삭제하는 AWS의 서비스입니다. 이 두 가지 서비스를 결합하여 애플리케이션 배포를 자동화할 수 있습니다.

AWS Lambda

AWS Lambda를 사용하여 애플리케이션의 특정 기능을 수행하는 코드를 실행할 수 있습니다. Lambda 함수는 이벤트에 응답하고 필요에 따라 스케일링되며, 사용한 만큼만 비용을 지불하면 됩니다.

Python으로 작성된 Lambda 함수 예제:

import json

def lambda_handler(event, context):
    # 이벤트 처리 로직 작성
    response_body = {
        "message": "Hello, AWS Lambda!"
    }

    return {
        'statusCode': 200,
        'body': json.dumps(response_body)
    }

위 예제 코드는 Lambda 함수를 작성하는 간단한 예시입니다. 이 함수는 이벤트와 컨텍스트를 인자로 받고, 이벤트 처리 로직을 작성한 뒤 응답을 반환합니다.

CloudFormation

CloudFormation은 인프라스트럭처를 코드로 정의하여 AWS 리소스를 프로비저닝하고 관리하는데 사용됩니다. CloudFormation 템플릿에는 리소스의 속성, 종속성, 구성 옵션 등이 포함되어 있습니다.

간단한 CloudFormation 템플릿 예제:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyBucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: my-bucket

위 예제는 S3 버킷을 생성하는 CloudFormation 템플릿입니다. 템플릿에는 AWSTemplateFormatVersionResources 섹션이 포함되어 있으며, MyBucket 리소스의 타입과 속성이 정의되어 있습니다.

애플리케이션 배포 자동화

AWS Lambda와 CloudFormation을 결합하여 애플리케이션 배포를 자동화할 수 있습니다. 배포 과정을 CloudFormation 스택에 정의하고, Lambda 함수를 사용하여 배포 작업을 실행하는 방식입니다.

프로젝트의 루트 폴더에 template.yaml 파일을 생성하여 CloudFormation 템플릿을 작성합니다. 이 파일에는 배포할 리소스와 해당 리소스를 생성, 구성, 관리하는 로직이 포함됩니다.

예를 들어, AWS Lambda 함수와 관련된 프로비저닝, 업데이트 또는 삭제를 정의하는 CloudFormation 템플릿의 일부분은 다음과 같이 작성될 수 있습니다:

MyFunction:
  Type: AWS::Lambda::Function
  Properties:
    FunctionName: my-function
    Handler: index.lambda_handler
    Runtime: python3.8
    Code:
      ZipFile: |
        import json
        
        def lambda_handler(event, context):
            # 이벤트 처리 로직 작성
            response_body = {
                "message": "Hello, AWS Lambda!"
            }
        
            return {
                'statusCode': 200,
                'body': json.dumps(response_body)
            }

위 예제는 MyFunction이라는 Lambda 함수를 생성하는 CloudFormation 템플릿의 일부분입니다. Handler, Runtime, Code 등의 속성을 설정하고, Lambda 함수 코드를 정의하였습니다.

이제 CloudFormation CLI를 사용하여 스택을 프로비저닝, 업데이트, 삭제할 수 있습니다. 예를 들어, 다음 명령을 사용하여 스택을 생성할 수 있습니다:

aws cloudformation create-stack --stack-name my-stack --template-body file://template.yaml

위 명령은 template.yaml 파일에 정의된 CloudFormation 템플릿을 사용하여 my-stack이라는 스택을 생성합니다.

애플리케이션 배포 자동화를 위해서는 이와 같은 CloudFormation 템플릿을 작성하고 Lambda 함수를 활용하여 배포 작업을 수행하는 방식으로 구성하면 됩니다.

AWS Lambda와 CloudFormation을 통한 애플리케이션 배포 자동화는 서버리스 아키텍처를 구축하고 유연하게 애플리케이션을 관리하는 강력한 도구입니다. 이를 통해 시간과 비용을 절약하고, 안정적인 배포를 실현할 수 있습니다.