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

Kubernetesマニフェストを使用してDynamoDBテーブルを作成する方法を見てみましょう:
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"
ACK DynamoDBコントローラーを使用
DynamoDBテーブルリソースを作成
id属性をパーティションキー(HASH)として使用してプライマリキーを指定
idとcustomerIdを文字列属性として定義
オンデマンド課金モデルを指定
${EKS_CLUSTER_NAME}環境変数プレフィックスを使用してDynamoDBテーブル名を指定
すべてのテーブル属性が射影されたidx_global_customerIdという名前のグローバルセカンダリインデックスを作成し、customerIDによる効率的なクエリを可能にします
注意深い観察者は、YAMLの仕様がDynamoDBのAPIシグネチャに非常に似ていることに気づくでしょう。tableNameやattributeDefinitionsなど の馴染みのあるフィールドが含まれています。
では、これらの更新をクラスターに適用しましょう:
table.dynamodb.services.k8s.aws/items created
クラスター内のACKコントローラーはこれらの新しいリソースに応答し、マニフェストで定義されたAWSインフラストラクチャをプロビジョニングします。ACKがテーブルを作成したことを確認するには、次のコマンドを実行します:
table.dynamodb.services.k8s.aws/items condition met
ACTIVE
最後に、AWS CLIを使用してテーブルが作成されたことを確認しましょう:
{"TableNames": [
"eks-workshop-carts-ack"
]
}
この出力は、新しいテーブルが正常に作成されたことを確認しています!
ACKを活用することで、Kubernetesクラスターから直接クラウドベースのDynamoDBテーブルをシームレスにプロビジョニングし、AWSリソースを管理するためのこのアプローチの力と柔軟性を実証しました。