DynamoDB 사용하기
이 프로세스의 첫 번째 단계는 이미 생성된 DynamoDB 테이블을 사용하도록 carts 서비스를 재구성하는 것입니다. 애플리케이션은 대부분의 구성을 ConfigMap에서 로드하므로, 먼저 이를 살펴보겠습니다:
~$kubectl -n carts get -o yaml cm carts
apiVersion: v1
data:
AWS_ACCESS_KEY_ID: key
AWS_SECRET_ACCESS_KEY: secret
RETAIL_CART_PERSISTENCE_DYNAMODB_CREATE_TABLE: "true"
RETAIL_CART_PERSISTENCE_DYNAMODB_ENDPOINT: http://carts-dynamodb:8000
RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: Items
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
namespace: carts
다음 kustomization은 ConfigMap을 덮어쓰며, SDK가 테스트 Pod 대신 실제 DynamoDB 서비스를 기본값으로 사용하도록 지시하는 DynamoDB 엔드포인트 구성을 제거합니다. 또한 환경 변수 RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME에서 가져온, 이미 생성된 DynamoDB 테이블의 이름을 제공했습니다.
- Kustomize Patch
- ConfigMap/carts
- Diff
~/environment/eks-workshop/modules/security/irsa/dynamo/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../../../base-application/carts
configMapGenerator:
- name: carts
namespace: carts
env: config.properties
behavior: replace
options:
disableNameSuffixHash: true
apiVersion: v1
data:
RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: ${CARTS_DYNAMODB_TABLENAME}
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
namespace: carts
apiVersion: v1
data:
- AWS_ACCESS_KEY_ID: key
- AWS_SECRET_ACCESS_KEY: secret
- RETAIL_CART_PERSISTENCE_DYNAMODB_CREATE_TABLE: "true"
- RETAIL_CART_PERSISTENCE_DYNAMODB_ENDPOINT: http://carts-dynamodb:8000
- RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: Items
+ RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: ${CARTS_DYNAMODB_TABLENAME}
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
CARTS_DYNAMODB_TABLENAME의 값을 확인한 다음 Kustomize를 실행하여 실제 DynamoDB 서비스를 사용해 보겠습니다:
~$echo $CARTS_DYNAMODB_TABLENAME
eks-workshop-carts
~$kubectl kustomize ~/environment/eks-workshop/modules/security/irsa/dynamo \
| envsubst | kubectl apply -f-
이렇게 하면 ConfigMap이 새로운 값으로 덮어써집니다:
~$kubectl get -n carts cm carts -o yaml
apiVersion: v1
data:
RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: eks-workshop-carts
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
labels:
app: carts
name: carts
namespace: carts
이제 새로운 ConfigMap 내용을 적용하기 위해 모든 carts Pod를 재시작해야 합니다:
~$kubectl rollout restart -n carts deployment/carts
deployment.apps/carts restarted
~$kubectl rollout status -n carts deployment/carts --timeout=20s
Waiting for deployment "carts" rollout to finish: 1 old replicas are pending termination...
error: timed out waiting for the condition
변경 사항이 제대로 배포되지 않은 것 같습니다. Pod를 확인하여 이를 확인할 수 있습니다:
~$kubectl -n carts get pod
NAME READY STATUS RESTARTS AGE
carts-5d486d7cf7-8qxf9 1/1 Running 0 5m49s
carts-df76875ff-7jkhr 0/1 CrashLoopBackOff 3 (36s ago) 2m2s
carts-dynamodb-698674dcc6-hw2bg 1/1 Running 0 20m
무엇이 잘못되었을까요?