[파이썬] AWS Lambda와 CloudFormation을 통한 인프라 코드 관리

AWS Lambda와 CloudFormation은 AWS에서 제공하는 서비스로, 인프라 코드를 관리하고 배포하는데 매우 유용합니다. 이 블로그 포스트에서는 Python을 사용하여 AWS Lambda 함수를 작성하고 CloudFormation 템플릿을 사용하여 인프라를 구성하는 방법을 알아보겠습니다.

AWS Lambda란?

AWS Lambda는 서버 없이 코드를 실행할 수 있게 해주는 이벤트 기반 서비스입니다. 여러분은 Lambda 함수를 작성하고, 해당 함수가 특정 이벤트(예: API Gateway 요청, S3 이벤트 등) 발생 시 자동으로 실행되도록 구성할 수 있습니다. Lambda 함수는 필요한 리소스 및 실행 환경을 자동으로 관리하므로 개발자는 인프라에 신경쓰지 않고 코드에 집중할 수 있습니다.

CloudFormation이란?

CloudFormation은 AWS에서 제공하는 인프라 자동화 서비스입니다. JSON 또는 YAML 형식의 템플릿을 사용하여 인프라를 정의하고, 해당 템플릿을 기반으로 AWS 리소스를 생성, 수정, 삭제할 수 있습니다. 이를 통해 인프라를 코드화하여 인프라 변경 사항을 추적하고 반복적인 배포 작업을 자동화할 수 있습니다.

Python을 사용하여 AWS Lambda 함수 작성하기

아래는 Python을 사용하여 간단한 AWS Lambda 함수를 작성하는 예제입니다.

import json

def lambda_handler(event, context):
    # 이벤트로 전달된 데이터 처리
    name = event['name']
    message = f'Hello, {name}!'

    # 처리된 데이터를 리턴
    return {
        'statusCode': 200,
        'body': json.dumps(message)
    }

위 코드에서는 lambda_handler 함수가 Lambda 함수의 진입점이 됩니다. 이 함수는 이벤트와 컨텍스트 매개 변수를 받으며, 이벤트 데이터를 처리하고 응답을 반환합니다.

CloudFormation을 사용하여 인프라 구성하기

CloudFormation을 사용하여 AWS 인프라를 구성하려면 JSON 또는 YAML 형식의 템플릿 파일을 작성해야 합니다. 아래는 CloudFormation 템플릿의 예입니다.

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-bucket

위 템플릿에서는 MyBucket이라는 이름의 S3 버킷을 생성하는 리소스를 정의합니다. 해당 리소스의 속성을 통해 버킷 이름을 지정할 수 있습니다.

Lambda 함수와 CloudFormation 템플릿을 함께 사용하기

Python으로 작성한 Lambda 함수를 CloudFormation 템플릿에 포함시킬 수 있습니다. 이를 통해 Lambda 함수와 그와 관련된 인프라 리소스를 한 번에 배포할 수 있습니다. 아래는 Lambda 함수와 S3 버킷을 함께 배포하는 CloudFormation 템플릿의 예입니다.

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-bucket

  MyFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-function
      Code:
        ZipFile: |
          import json

          def lambda_handler(event, context):
              name = event['name']
              message = f'Hello, {name}!'

              return {
                  'statusCode': 200,
                  'body': json.dumps(message)
              }
      Handler: index.lambda_handler
      Runtime: python3.8

위 템플릿에서는 MyFunction이라는 이름의 Lambda 함수와 MyBucket이라는 이름의 S3 버킷을 생성하는 리소스를 정의합니다. Lambda 함수의 코드는 ZipFile 속성을 통해 인라인으로 제공됩니다.

정리

이 블로그 포스트에서는 AWS Lambda와 CloudFormation을 사용하여 인프라 코드를 관리하는 방법을 알아보았습니다. AWS Lambda를 사용하여 서버 없이 코드를 실행하고, CloudFormation을 사용하여 인프라를 코드화함으로써 자동화된 인프라 관리를 할 수 있습니다. Lambda 함수와 CloudFormation 템플릿을 함께 사용하면 코드와 인프라를 한 번에 배포할 수 있어 유용합니다.