[파이썬] AWS Lambda와 CloudFormation을 통한 배포 자동화

AWS Lambda는 서버리스 아키텍처를 구축하기 위한 핵심 서비스입니다. 람다 함수를 사용하면 코드를 서버에 배포하거나 관리하지 않고도 원하는 기능을 실행할 수 있습니다. 이러한 특징을 활용하여 애플리케이션의 배포 자동화를 간편하게 구현할 수 있습니다.

CloudFormation은 AWS의 인프라를 코드로 관리하고 배포할 수 있는 서비스입니다. CloudFormation 템플릿을 사용하면 다양한 리소스들을 정의하고 구성할 수 있으며, 이를 통해 인프라의 상태를 관리할 수 있습니다. AWS Lambda와 CloudFormation을 함께 사용하면 애플리케이션의 배포 프로세스를 전적으로 자동화할 수 있습니다.

배포 자동화를 위한 환경 설정

  1. AWS CLI 설치: AWS CLI(Command Line Interface)를 사용하면 터미널을 통해 AWS 서비스를 관리할 수 있습니다. 공식 AWS CLI 설치 가이드를 참고하여 설치해주세요.

  2. Python 가상 환경 설정: Python 가상 환경을 사용하면 프로젝트별로 패키지 의존성을 관리할 수 있습니다. 다음 명령을 사용하여 가상 환경을 설정해주세요.

    $ python3 -m venv myenv
    $ source myenv/bin/activate
    
  3. 필수 패키지 설치: AWS Lambda와 CloudFormation을 사용하기 위해 boto3 패키지를 설치해야 합니다.

    $ pip install boto3
    

Lambda 함수 구현

자동화할 기능에 맞게 Lambda 함수를 구현해야 합니다. Python을 사용하여 AWS Lambda 함수를 작성하고 패키징하는 방법에 대해서는 다른 문서에서 상세히 설명되어 있으니 참고해주세요.

CloudFormation 템플릿 작성

배포할 리소스들을 정의하기 위해 CloudFormation 템플릿을 작성해야 합니다. CloudFormation 템플릿은 JSON 또는 YAML 형식으로 작성할 수 있으며, 스택(Stack)이라는 개념을 사용하여 리소스들을 관리합니다.

다음은 간단한 CloudFormation 템플릿 예제입니다. 이 템플릿은 Lambda 함수와 필요한 IAM 역할을 정의합니다.

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyLambdaFunction:
    Type: 'AWS::Lambda::Function'
    Properties:
      Code:
        S3Bucket: my-bucket
        S3Key: my-function.zip
      Handler: index.handler
      Role: !ImportValue MyLambdaRoleArn
      Runtime: python3.8
  MyLambdaRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: MyLambdaPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - logs:CreateLogGroup
                  - logs:CreateLogStream
                  - logs:PutLogEvents
                Resource: arn:aws:logs:*:*:*

여기서 S3BucketS3Key는 Lambda 함수의 코드를 저장한 S3 버킷과 파일의 경로를 나타냅니다. Role은 Lambda 함수가 사용할 IAM 역할을 나타내며, !ImportValue를 사용하여 다른 스택에서 정의한 역할을 참조하고 있음을 알 수 있습니다.

CloudFormation 스택 생성 및 업데이트

이제 Lambda 함수와 관련 리소스들을 배포할 CloudFormation 스택을 생성하고 업데이트하는 과정을 자동화할 차례입니다. 이를 위해 AWS CLI를 사용하여 스택을 생성하거나 업데이트할 수 있습니다.

  1. CloudFormation 스택 생성:

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

    --stack-name 옵션으로 스택 이름을 지정하고, --template-body 옵션으로 템플릿 파일의 경로를 지정합니다. --capabilities CAPABILITY_IAM 옵션은 IAM 권한을 사용하는 리소스들을 스택에 포함할 수 있도록 해줍니다.

  2. CloudFormation 스택 업데이트:

    $ aws cloudformation update-stack --stack-name my-stack --template-body file://template.yaml --capabilities CAPABILITY_IAM
    

    스택을 업데이트할 때는 create-stack 대신 update-stack 명령을 사용합니다.

배포 자동화 실행

이제 Lambda 함수의 코드를 변경하고 CloudFormation 템플릿을 업데이트하는 것만으로 애플리케이션의 배포 자동화를 실행할 수 있습니다.

  1. Lambda 함수의 코드 변경: Lambda 함수의 코드를 수정하고 패키징한 후, S3 버킷에 업로드합니다.

  2. CloudFormation 템플릿 업데이트: CloudFormation 템플릿 파일을 수정한 후, 업데이트 명령을 실행하여 스택을 업데이트합니다.

자동화된 배포 프로세스를 실행함으로써 개발자는 더 이상 수동으로 리소스를 생성하고 구성하는 데 시간을 소모하지 않아도 됩니다. AWS Lambda와 CloudFormation을 통한 배포 자동화는 애플리케이션 개발과 운영에 있어서 비용과 시간을 절약할 수 있는 강력한 도구입니다.

참고 자료:
AWS Lambda 문서
AWS CloudFormation 문서