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

ACKリソースのプロビジョニング

デフォルトでは、サンプルアプリケーションのCartsコンポーネントは、EKSクラスター内でポッドとして実行されているcarts-dynamodbというDynamoDBローカルインスタンスを使用しています。このセクションでは、Kubernetesカスタムリソースを使用してアプリケーション用のAmazon DynamoDBクラウドベーステーブルをプロビジョニングし、Cartsデプロイメントをローカルコピーの代わりにこの新しくプロビジョニングされたDynamoDBテーブルを使用するように構成します。

ACK reconciler concept

Kubernetesマニフェストを使用してDynamoDBテーブルを作成する方法を見てみましょう:

~/environment/eks-workshop/modules/automation/controlplanes/ack/dynamodb/dynamodb-create.yaml

apiVersion: dynamodb.services.k8s.aws/v1alpha1
kind: Table
metadata:
name: items
namespace: carts
spec:
keySchema:
- attributeName: id
keyType: HASH
attributeDefinitions:
- attributeName: id
attributeType: "S"
- attributeName: customerId
attributeType: "S"
billingMode: PAY_PER_REQUEST
tableName: "${EKS_CLUSTER_NAME}-carts-ack"
globalSecondaryIndexes:
- indexName: idx_global_customerId
keySchema:
- attributeName: customerId
keyType: HASH
- attributeName: id
keyType: RANGE
projection:
projectionType: "ALL"
A

ACK DynamoDBコントローラーを使用

B

DynamoDBテーブルリソースを作成

C

id属性をパーティションキー(HASH)として使用してプライマリキーを指定

D

idcustomerIdを文字列属性として定義

E

オンデマンド課金モデルを指定

F

${EKS_CLUSTER_NAME}環境変数プレフィックスを使用してDynamoDBテーブル名を指定

G

すべてのテーブル属性が射影されたidx_global_customerIdという名前のグローバルセカンダリインデックスを作成し、customerIDによる効率的なクエリを可能にします

備考

注意深い観察者は、YAMLの仕様がDynamoDBのAPIシグネチャに非常に似ていることに気づくでしょう。tableNameattributeDefinitionsなどの馴染みのあるフィールドが含まれています。

では、これらの更新をクラスターに適用しましょう:

~$kubectl kustomize ~/environment/eks-workshop/modules/automation/controlplanes/ack/dynamodb \
| envsubst | kubectl apply -f-
table.dynamodb.services.k8s.aws/items created

クラスター内のACKコントローラーはこれらの新しいリソースに応答し、マニフェストで定義されたAWSインフラストラクチャをプロビジョニングします。ACKがテーブルを作成したことを確認するには、次のコマンドを実行します:

~$kubectl wait table.dynamodb.services.k8s.aws items -n carts --for=condition=ACK.ResourceSynced --timeout=15m
table.dynamodb.services.k8s.aws/items condition met
~$kubectl get table.dynamodb.services.k8s.aws items -n carts -ojson | yq '.status."tableStatus"'
ACTIVE

最後に、AWS CLIを使用してテーブルが作成されたことを確認しましょう:

~$aws dynamodb list-tables
 
{
    "TableNames": [
        "eks-workshop-carts-ack"
    ]
}

この出力は、新しいテーブルが正常に作成されたことを確認しています!

ACKを活用することで、Kubernetesクラスターから直接クラウドベースのDynamoDBテーブルをシームレスにプロビジョニングし、AWSリソースを管理するためのこのアプローチの力と柔軟性を実証しました。