アプリケーションの更新
新しいリソースが作成または更新されると、アプリケーション設定はこれらの新しいリソースを利用するように調整する必要があることがよくあります。環境変数はアプリケーション開発者が設定を保存するために人気のある選択肢であり、Kubernetesでは、デプロイメントを作成する際にcontainer 仕様のenvフィールドを通じてコンテナに環境変数を渡すことができます。
Kubernetesでこれを実現するための主な方法は2つあります:
- ConfigMap:これらはKubernetesのコアリソースであり、環境変数、テキストフィールド、その他のアイテムをキーと値の形式でポッド仕様で使用するように渡すことができます。
- Secret:デフォルトでは暗号化されていませんが(これは覚えておくことが重要です)、シークレットはパスワードなどの機密情報を保存するために使用されます。
このラボでは、cartsコンポーネントのConfigMapの更新に焦点を当てます。ローカルのDynamoDBを指す設定を削除し、代わりにCrossplaneによって作成されたDynamoDBテーブルの名前を使用します:
- Kustomize Patch
- ConfigMap/carts
- Diff
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../../../../base-application/carts
patches:
- path: carts-serviceAccount.yaml
configMapGenerator:
- name: carts
namespace: carts
env: config.properties
behavior: replace
options:
disableNameSuffixHash: true
apiVersion: v1
data:
RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: ${EKS_CLUSTER_NAME}-carts-crossplane
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_NAME}-carts-crossplane
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
さらに、cartsポッドにDynamoDBサービスにアクセスするための適切なIAM権限を提供する必要があります。IAMロールはすでに作成されており、IAM Roles for Service Accounts(IRSA)を使用してこれをcartsポッドに適用します:
- Kustomize Patch
- ServiceAccount/carts
- Diff
apiVersion: v1
kind: ServiceAccount
metadata:
name: carts
namespace: carts
annotations:
eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
name: carts
namespace: carts
apiVersion: v1
kind: ServiceAccount
metadata:
+ annotations:
+ eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
name: carts
namespace: carts
IRSAの仕組みについて詳しく学ぶには、公式ドキュメントを参照してください。
この新しい設定を適用しましょう:
新しいConfigMapの内容を取得するために、すべてのcartsポッドをリサイクルする必要があります:
deployment.apps/carts restarted
Waiting for deployment "carts" rollout to finish: 1 old replicas are pending termination...
deployment "carts" successfully rolled out
アプリケーションが新しいDynamoDBテーブルで動作していることを確認するために、サンプルアプリケーションを公開するために作成されたNetwork Load Balancer(NLB)を使用できます。これにより、Webブラウザを通じてアプリケーションと直接対話することができます:
http://k8s-ui-uinlb-647e781087-6717c5049aa96bd9.elb.us-west-2.amazonaws.com
このコマンドを実行すると、新しいNetwork Load Balancerエンドポイントがプロビジョニングされるため、実際のエンドポイントは異なります。
ロードバランサーがプロビジョニングを完了するまで待つには、次のコマンドを実行します:
ロードバランサーがプロビジョニングされたら、WebブラウザにURLを貼り付けてアクセスできます。Webストアのユーザーインターフェイスが表示され、サイト内をユーザーとして移動することができます。

Cartsモジュールが実際に私たちがプロビジョニングしたDynamoDBテーブルを使用していることを確認するには、カートにいくつかのアイテムを追加してみてください。
DynamoDBテーブルにもアイテムが存在するかどうかを確認するには、次のコマンドを実行します:
おめでとうございます!KubernetesのAPI内から離れることなく、AWSリソースを正常に作成して利用しました!