carts サービスの移行
DynamoDB テーブルは存在していますが、carts Deployment はまだクラスター内の carts-dynamodb Pod を参照しています。AWS テーブルに切り替えるには、2つの変更が必要です:
- ConfigMap:
RETAIL_CART_PERSISTENCE_DYNAMODB_ENDPOINTを置き換え、_CREATE_TABLEフラグを削除します(テーブルは既に存在しています)。 - EKS Pod Identity:
cartsServiceAccount を事前にプロビジョニングされた IAM role にバインドして、Pod が DynamoDB を呼び出せるようにします。このロールとそのポリシーはprepare-environment中に作成されます。ServiceAccount に関連付けるだけです。
ConfigMap にパッチを適用する kustomization を確認してください:
- Kustomize Patch
- ConfigMap/carts
- Diff
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: ${EKS_CLUSTER_AUTO_NAME}-carts-fastpath
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: ${EKS_CLUSTER_AUTO_NAME}-carts-fastpath
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
ベースアプリケーションのローカル carts-dynamodb Pod と Service はそのまま残ります。アプリケーションのデータベースへのポインタを切り替えるだけで、クリーンアップによって元の ConfigMap が復元されるため、他のラボも正常に動作します。
kustomization を適用します:
EKS Pod Identity を介して、carts ServiceAccount を IAM role にバインドします。ロール ${EKS_CLUSTER_AUTO_NAME}-carts-dynamo は prepare-environment によって作成されており、既に -carts と -carts-fastpath の両方のテーブルへのアクセス権を持っています:
新しい ConfigMap と Pod Identity バインディングを取得するために、carts Pod を再起動します:
deployment.apps/carts restarted
deployment "carts" successfully rolled out
Pod が新しいテーブル名を認識し、Pod Identity 認証情報が利用可能であることを確認します:
RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME=...-carts-fastpath
AWS_CONTAINER_CREDENTIALS_FULL_URI=http://...
AWS_CONTAINER_CREDENTIALS_FULL_URI 環境変数が存在することで、Pod Identity が IAM role を Pod に配線していることが確認できます。carts サービスが行うすべての DynamoDB 呼び出しは、プロビジョニングしたテーブルのみにスコープされたロールの認証情報を使用します。
これで ACK ラボは完了です。小売アプリは現在、Kubernetes API から EKS capability によって完全にプロビジョニングおよび調整された、実際の AWS マネージド DynamoDB テーブルによってサポートされています。
次に、Argo CD capability を使用して GitOps で catalog サービスを配信します。