メインコンテンツまでスキップ

クレーム

Crossplaneに新しいXRの詳細を設定した後、直接作成するか、クレームを使用することができます。通常、Crossplaneの構成を担当するチーム(多くの場合、プラットフォームチームまたはSREチーム)のみがXRを直接作成する権限を持っています。その他の人は、Composite Resource Claim(略してクレーム)と呼ばれる軽量のプロキシリソースを通じてXRを管理します。

このクレームにより、開発者はテーブルを作成するためにDynamoDBテーブル名、ハッシュキー、およびグローバルインデックス名のデフォルトのみを指定する必要があります。これにより、プラットフォームチームやSREチームは、課金モード、デフォルトの読み書き容量、プロジェクションタイプ、コストやインフラ関連のタグなどの側面を標準化することができます。

~/environment/eks-workshop/modules/automation/controlplanes/crossplane/compositions/claim/claim.yaml
apiVersion: awsblueprints.io/v1alpha1
kind: DynamoDBTable
metadata:
name: "${EKS_CLUSTER_NAME}-carts-crossplane"
spec:
dynamoConfig:
attribute:
- name: id
type: S
- name: customerId
type: S
globalSecondaryIndex:
- name: idx_global_customerId
A

クラスター名環境変数をプレフィックスとして使用したDynamoDBテーブル名を指定します

B

idをプライマリキー属性として指定します

C

customerIdをセカンダリー属性として指定します

D

idx_global_customerIdをグローバルセカンダリインデックス名として指定します

まず、前の「マネージドリソース」セクションで作成したDynamoDBテーブルをクリーンアップしましょう:

~$kubectl delete tables.dynamodb.aws.upbound.io --all --ignore-not-found=true
~$kubectl wait --for=delete tables.dynamodb.aws.upbound.io --all --timeout=5m

次に、Claimを作成してテーブルを再作成できます:

~$cat ~/environment/eks-workshop/modules/automation/controlplanes/crossplane/compositions/claim/claim.yaml \
| envsubst | kubectl -n carts apply -f -
dynamodbtable.awsblueprints.io/eks-workshop-carts-crossplane created
~$kubectl wait dynamodbtables.awsblueprints.io ${EKS_CLUSTER_NAME}-carts-crossplane -n carts \
--for=condition=Ready --timeout=5m

AWSマネージドサービスのプロビジョニングには時間がかかります。DynamoDBの場合、最大で2分かかることがあります。CrossplaneはKubernetesのCompositeおよびマネージドリソースのSYNCEDフィールドに調整のステータスを報告します。

~$kubectl get table
NAME                                        READY   SYNCED   EXTERNAL-NAME                   AGE
eks-workshop-carts-crossplane-bt28w-lnb4r   True   True      eks-workshop-carts-crossplane   6s

では、このクレームを使用してDynamoDBテーブルがどのようにデプロイされるかを理解しましょう:

Crossplane reconciler concept

カートネームスペースにデプロイされたクレームDynamoDBTableを照会すると、Composite Resource(XR)XDynamoDBTableを指し、作成することがわかります:

~$kubectl get DynamoDBTable -n carts -o yaml | grep "resourceRef:" -A 3
 
    resourceRef:
      apiVersion: awsblueprints.io/v1alpha1
      kind: XDynamoDBTable
      name: eks-workshop-carts-crossplane-bt28w

Composition table.dynamodb.awsblueprints.ioは、Composite Resource Kind(XR-KIND)がXDynamoDBTableであることを示しています。このCompositionは、XDynamoDBTable XRを作成したときにCrossplaneが何をすべきかを指示します。各Compositionは、XRと1つ以上のマネージドリソースのセットの間にリンクを作成します。

~$kubectl get composition
NAME                              XR-KIND          XR-APIVERSION               AGE
table.dynamodb.awsblueprints.io   XDynamoDBTable   awsblueprints.io/v1alpha1   143m

任意のネームスペースに限定されていないXDynamoDBTable XRを照会すると、DynamoDBマネージドリソースTableを作成していることがわかります:

~$kubectl get XDynamoDBTable -o yaml | grep "resourceRefs:" -A 3
 
    resourceRefs:
    - apiVersion: dynamodb.aws.upbound.io/v1beta1
      kind: Table
      name: eks-workshop-carts-crossplane-bt28w-lnb4r