흰 스타렉스에서 내가 내리지

AWS CDK 를 사용하여 S3 버킷 생성하기 (Python) 본문

AWS

AWS CDK 를 사용하여 S3 버킷 생성하기 (Python)

주씨. 2024. 9. 21. 21:14
728x90

# 개요

AWS CDK 를 사용하면 복잡한 인프라를 간결하게 코드로 관리할 수 있으며, 이 과정에서 인프라가 코드로서 재사용 가능하고 확장성 있게 관리된다. 

 

AWS 공식 튜토리얼 : https://docs.aws.amazon.com/ko_kr/cdk/v2/guide/serverless_example.html

 

1. 먼저, AWS CDK 프로젝트를 Python 으로 초기화한다. 

mkdir s3-cdk-project && cd s3-cdk-project
cdk init app --language python

 

* 위 명령어는 빈 디렉터리에서 실행하여야 한다. 비어있지 않은 디렉터리에서 `cdk init` 명령어를 사용하였다면 에러가 발생한다. 

 

 

위 명령어를 실행하면 AWS CDK 프로젝트가 초기화되며, Python 언어로 구성된 CDK 앱을 만들 수 있는 기본 파일 구조가 생성된다.

  • app.py : CDK 앱 진입점
  • requirements.txt : 필요한 패키지들

 

2. 가상 환경을 생성한다. 

python3 -m venv .venv
source .venv/bin/activate

 

3. 필요한 패키지를 설치한다. 

pip3 install -r requirements.txt

 

4. `aws-cdk-lib` 모듈을 설치한다.

pip3 install aws-cdk-lib constructs

 

 

5. AWS S3 버킷 생성 코드 작성하기

이제 S3 버킷을 생성하고 관리하는 코드를 작성한다.

cd s3_cdk_project && vim s3_cdk_project_stack.py

from aws_cdk import (
    Stack,
    RemovalPolicy,
    aws_s3 as s3,
)
from constructs import Construct

class S3CdkProjectStack(Stack):

    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # S3 버킷 생성
        bucket = s3.Bucket(self,
                           id="MyBucket",
                           bucket_name="my-bucket-created-by-cdk",   # 버킷 명
                           versioned=True,
                           removal_policy=RemovalPolicy.DESTROY  # 스택 삭제 시 버킷도 삭제
                           )

 

 

6. CDK 부트스트랩 실행 (prepare deploy CDK)

cdk bootstrap aws://<ACCOUNT_ID>/<REGION>

 

CDK 부트스트랩은 CDK 앱을 배포하기 전에 필요한 리소스 (S3 버킷, 역할 등) 를 계정에 생성하는 과정이다. 

부트스트랩 과정이 완료되지 않으면 CDK 가 배포에 필요한 리소스를 찾지 못해 오류가 발생한다.

 

CDK 부트스트랩이 필요한 이유는 본 게시글 하단에 추가로 설명하였다!

 

 

7. 배포

cdk deploy --require-approval never --all

 

  • --require-approval never
    • 이 옵션은 CDK 가 리소스 생성에 대해 승인을 요구하는 상황을 무시하고, 자동으로 배포를 진행하겠다는 의미이다. 
  • --all
    • CDK 앱 내의 모든 스택을 한 번에 배포하라는 옵션이다. 

위 명령어는 모든 스택을 승인 절차 없이 자동으로 AWS 에 배포하는 명령어이다.

승인 없이 배포하기 때문에 자동화된 스크립트나 CI/CD 파이프라인에서 자주 사용된다.

 

s3 버킷이 2개 생성이 되었다. 하나는 부트스트랩의 영향
cloudformation 스택도 2개 생성이 되었다.

 

 

++ 스택 삭제

AWS CDK 스택으로 생성된 리소스를 모두 삭제하려면 `cdk destroy` 명령어를 사용한다. 

이 명령어는 CDK 스택과 함께 생성된 모든 AWS 리소스를 삭제한다. 

 

특정 스택을 삭제하고 싶다면 스택 이름을 명시하여 실행한다.

cdk destroy <stack-name>

 

CDK 앱에 포함된 모든 스택을 삭제하려면 `--all` 옵션을 사용한다.

cdk destroy --all

 

`--force` 옵션은 삭제 전에 사용자 확인 (yes/no) 을 요구하지 않고 강제로 삭제를 진행한다. 이는 자동화 스크립트에서 유용하게 사용할 수 있다.

cdk destroy --all --force

 

 

 

 


# CDK 부트스트랩이 필요한 이유

AWS CDK 에서 `bootstrap` 을 실행하는 이유는 CDK 가 AWS 에 리소스를 배포하는 데 필요한 기본 인프라를 미리 준비하기 위해서이다.

`cdk bootstrap` 은 CDK 앱을 배포할 때 사용되는 S3 버킷, IAM 역할 등과 같은 리소스를 생성하여, 나중에 CDK 스택을 배포할 때 이 리소스들을 활용할 수 있도록 하는 과정이다.

 

1. S3 버킷

  • CDK 는 종종 스택에 배포할 아티팩트 (예: Lambda 함수 코드, Docker 이미지 등) 를 S3 에 업로드하여 CloudFormation 이 참조할 수 있도록 한다.
  • 이러한 아티팩트를 저장하는 S3 버킷이 없으면 CDK 배포가 불가능하므로, 부트스트랩 과정에서 이 S3 버킷을 생성한다.

2. IAM 역할 

  • CDK 가 CloudFormation 을 통해 리소스를 생성하고 업데이트할 때 필요한 권한을 제공하기 위해 부트스트랩 과정에서 IAM 역할을 생성한다.
  • 이 역할을 사용하여 CDK 는 AWS 리소스에 접근하거나 리소스를 생성할 수 있는 권한을 얻게 된다.

3. CDK 배포 도구 

  • CDK 는 배포 시 여러 AWS 계정 또는 리전에서 사용될 수 있다. 
  • 부트스트랩은 각 환경에 대해 CDK 가 안전하게 배포할 수 있는 기본 설정을 해주기 때문에, 다양한 환경에 CDK 앱을 원활하게 배포할 수 있다.

 

# `cdk bootstrap` 이 하는 일

  • S3 버킷 생성 (코드, 아티팩트 등을 업로드하기 위해)
  • IAM 역할 생성 (CDK 가 리소스에 접근하고 변경할 수 있도록)
  • 기타 필요한 리소스 및 설정

 

# 언제 `cdk bootstrap` 을 실행해야 하나?

  • 처음 AWS 계정에서 CDK 를 사용할 때
  • 새로운 리전에서 처음 CDK 앱을 배포할 때
  • 특정 리소스나 고급 기능을 사용할 떄 

 

# 결론

`cdk bootstrap` 은 CDK 가 정상적으로 AWS 리소스를 생성하고 관리할 수 있도록 필요한 인프라(버킷, IAM 역할 등)를 미리 준비하는 과정이다. 

부트스트랩을 완료하지 않으면, CDK 가 스택을 배포하는 데 필요한 기본 리소스가 없기 때문에 배포에 실패하게 된다.