일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- build
- 설정
- Linux
- MySQL
- 영어
- error
- Windows
- 유니티
- API
- MSSQL
- JavaScript
- ssh
- Ai
- unity
- Git
- mariadb
- logstash
- s3
- JS
- nodejs
- AWS
- docker
- 엘라스틱서치
- sample
- Kibana
- elasticsearch
- 구글
- ChatGPT
- Python
- Today
- Total
가끔 보자, 하늘.
CDK로 AWS 인프라 구축하기 - #마지막 본문
원래 #5로 끝났지만 주의할 사항들이 몇 있어 간단히 정리하고 정말 마무리 하려 합니다.
1. 여러 스택을 정의한 경우
> cdk deploy/destroy stack01 // 이렇게 명시해서 특정 스택만 배포/삭제
> cdk deploy/destroy --all // 정의된 모든 스택을 배포/삭제
2. 분기 처리 방법
local의 config, env 파일 등에 정의한 내용을 활용하여 내부 분기처리를 할수 있습니다. 예를들면 config.json 파일에 배포할 지역을 정의하고 이를 읽어 처리할 수 있습니다
// config.json 의 예
{
"regions" : ["us-east-2", "ap-northeast-2"]
}
혹은 위와 같은 내용은 ddb에 업데이트하고 deploy/destroy 시 이를 읽어 진행할 수도 있을 겁니다.
.
.
const AWS = require('aws-sdk')
AWS.config.update({region: 'us-east-2'});
var ddb = new AWS.DynamoDB.DocumentClient();
.
.
var params = {
TableName: "your_table_name"
Key : {
name : "region_list"
}
}
ddb.get(params, (err:any, data:any) => {
if(!err){
if(data.Item.regions){
var regions = data.Item.regions.split(','); // "ap-northeast-2 , us-east-2" 이와 같이 ,로 구분되어 입력되었다고 가정
for(var idx in regions){
let region = regions[idx].trim();
new RegionStack(app, 'stack-'+region, { // stack이름이 같으면 안된다. region명으로 구분한다고 가정
env: { account: 'your_account_id', region: region },
});
}
}else{
console.log("No regions. Check your table!");
}
}
});
.
.
--------------
(* region이 복수일 수 있으므로 실행 시 --all 옵션이 필요합니다.)
위에 든 예시 외에도 필요한 환경에 따라 다양한 방법을 도입할 수 있습니다.
3. 변경되는 이름 주의
리소스를 생성할 때 id를 지정하는데 일부는 지정한 id 자체로 명명되지만 (예, VPC) 대부분은 어떤 값이 추가되어 생성됩니다. (예, DynamoDB - DynamoDB 생성 시 TableName은 지정한 이름에 일별로 정해지는 별도의 텍스트가 추가되어 생성됩니다.) 이를 방지하기 위해서는 props 중 실제이름을 지정할 수 있는 속성값을 설정하세요.
4. 중복 생성 주의
예를들어 dynamodb를 아래와 같이 생성하면...
const ddb_main = new dynamodb.Table(this, "testTable", {
partitionKey: {name: "name", type:dynamodb.AttributeType.STRING},
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});
처음은 정상적으로 생성되며, 바로 이어 다시 deploy를 시도하면
✅ testTable(no changes)
위와 같은 메세지가 출력되면서 중복 생성되지 않습니다. 하지만 다음 날 시도하면 새로운 테이블이 생성됩니다.
CDK에서 리소스를 생성 시 사용자가 지정한 id 뒤에 랜덤하게 붙는 텍스트(3번 참고)가 있습니다. deploy 혹은 destroy 시 TOKEN으로 명명된 랜덤 텍스트가 추가되는데 이게 일일 별로 변경되고 있어 발생하는 문제인 듯 합니다. 이를 방지하기 위해서는 props에 "tableName"값을 추가하여 테이블명을 명시하시기 바랍니다.
DynamoDB 외에도 S3 등도 이와 유사한 이슈들이 있으니 참고하세요.
5. DynamoDB가 Destroy 시 삭제되지 않는 이슈
데이터 손실을 방지하기 위해 dynamodb의 테이블은 삭제되지 않습니다. 대신 stack에서는 분리됩니다. 이를 자동 삭제하기 위해서는 removePolicy를 아래와 같이 설정하면 되지만 추천하지는 않습니다.
const ddb_main = new dynamodb.Table(this, "testTable", {
removalPolicy: cdk.RemovalPolicy.DESTROY,
partitionKey: {name: "name", type:dynamodb.AttributeType.STRING},
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});
이상입니다. 도움이 되셨기를 ...
'개발 이야기 > 인프라 구축 및 운영' 카테고리의 다른 글
보안망/Offline 시스템에 Docker 설치하기 (0) | 2022.09.26 |
---|---|
Linux에서 AWS ECR Docker 이미지 설치하기 (0) | 2022.07.08 |
CDK로 AWS 인프라 구축하기 - #5 scale out 테스트 (0) | 2022.06.21 |
CDK로 AWS 인프라 구축하기 - #4 ECS Cluster 구성 (0) | 2022.06.17 |
CDK로 AWS 인프라 구축하기 - #3 보안 그룹과 RDBMS (0) | 2022.06.14 |