일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백트래킹
- 데코레이터
- fetch
- execute
- exclusive lock
- JPQL
- 일대다
- 지연로딩
- BOJ
- 즉시로딩
- PS
- 다대일
- FetchType
- 스프링 폼
- dfs
- 비관적락
- 유니크제약조건
- 스토어드 프로시저
- SQL프로그래밍
- 힙
- querydsl
- 연결리스트
- 동적sql
- 낙관적락
- shared lock
- 이진탐색
- CHECK OPTION
- 연관관계
- eager
- 다대다
- Today
- Total
흰 스타렉스에서 내가 내리지
AWS CDK 를 사용하여 S3 버킷 생성하기 (Python) 본문
# 개요
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 파이프라인에서 자주 사용된다.
++ 스택 삭제
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 가 스택을 배포하는 데 필요한 기본 리소스가 없기 때문에 배포에 실패하게 된다.
'AWS' 카테고리의 다른 글
CF(2): CloudFront Origin (원본) (0) | 2024.10.25 |
---|---|
CF(1): CDN 과 Amazon CloudFront 소개 (0) | 2024.10.25 |
AWS CloudFormation 와 AWS CDK : 차이점과 장단점, 그리고 추천 방법 (0) | 2024.09.21 |
CloudFormation 으로 서버리스 알리미 구축하기 (1) | 2024.09.14 |
CloudFormation 을 이용하여 IAM 역할 생성 및 정책 할당 (CLI 사용) (0) | 2024.09.13 |