Managed Resources
기본적으로 샘플 애플리케이션의 Carts 컴포넌트는 EKS 클러스터에서 Pod로 실행되는 DynamoDB 로컬 인스턴스인 carts-dynamodb를 사용합니다. 이 실습 섹션에서는 Crossplane managed resources를 사용하여 애플리케이션을 위한 Amazon DynamoDB 클라우드 기반 테이블을 프로비저닝하고, 로컬 복사본 대신 새로 프로비저닝된 DynamoDB 테이블을 사용하도록 Carts 배포를 구성하겠습니다.

Crossplane managed resource 매니페스트를 통해 DynamoDB 테이블을 생성하는 방법을 살펴보겠습니다:
apiVersion: dynamodb.aws.upbound.io/v1beta1
kind: Table
metadata:
name: "${EKS_CLUSTER_NAME}-carts-crossplane"
labels:
testing.upbound.io/example-name: dynamodb
annotations:
crossplane.io/external-name: "${EKS_CLUSTER_NAME}-carts-crossplane"
spec:
forProvider:
attribute:
- name: id
type: S
- name: customerId
type: S
hashKey: id
billingMode: PAY_PER_REQUEST
globalSecondaryIndex:
- hashKey: customerId
name: idx_global_customerId
projectionType: ALL
region: ""
tags:
namespace: carts
providerConfigRef:
name: aws-provider-config
Upbound의 AWS DynamoDB provider를 사용
DynamoDB 테이블 리소스 생성
클러스터 접두사가 붙은 이름과 external name 어노테이션이 있는 Kubernetes 객체 지정
id와 customerId를 문자열(S) 타입 속성으로 정의
id를 기본 파티션 키로 설정
온디맨드 요금 모델 지정
모든 속성이 프로젝션된 customerId에 대한 글로벌 보조 인덱스 생성
인 증을 위해 AWS provider 구성 참조
이제 dynamodb.aws.upbound.io 리소스를 사용하여 DynamoDB 테이블 구성을 생성할 수 있습니다.
table.dynamodb.aws.upbound.io/eks-workshop-carts-crossplane created
AWS 관리형 서비스를 프로비저닝하는 데 시간이 걸리며, DynamoDB의 경우 최대 2분까지 소요됩니다. Crossplane은 Kubernetes 커스텀 리소스의 status 필드에 reconciliation 상태를 보고합니다.
NAME READY SYNCED EXTERNAL-NAME AGE
eks-workshop-carts-crossplane True True eks-workshop-carts-crossplane 6s
이 구성이 적용되면 Crossplane은 AWS에 DynamoDB 테이블을 생성하며, 이는 애플리케이션에서 사용할 수 있습니다. 다음 섹션에서는 이 새로 생성된 테이블을 사용하도록 애플리케이션을 업데이트하겠습니다.