기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서의 이 단계에서는 애플리케이션에 대한 Amazon EKS 배포를 구성하고 애플리케이션이 실행 중이며 Amazon Keyspaces에 연결할 수 있는지 확인합니다.
Amazon EKS에 애플리케이션을 배포하려면 deployment.yaml
이라는 파일에서 모든 관련 설정을 구성해야 합니다. 그런 다음 이 파일은 Amazon EKS에서 애플리케이션을 배포하는 데 사용됩니다. 파일의 메타데이터에는 다음 정보가 포함되어야 합니다.
-
애플리케이션 이름 – 애플리케이션의 이름입니다. 본 자습서에서는
my-keyspaces-app
을 사용합니다. -
Kubernetes 네임스페이스 - Amazon EKS 클러스터의 네임스페이스입니다. 본 자습서에서는
my-eks-namespace
를 사용합니다. -
Amazon EKS 서비스 계정 이름 - Amazon EKS 서비스 계정의 이름입니다. 본 자습서에서는
my-eks-serviceaccount
을 사용합니다. -
이미지 이름 - 애플리케이션 이미지의 이름입니다. 본 자습서에서는
my-keyspaces-app
을 사용합니다. -
Amazon ECR - Amazon EKS의 Docker 이미지 URI입니다.
-
AWS 계정 ID - AWS 계정 ID입니다.
-
IAM 역할 ARN - 서비스 계정이 수임할 수 있도록 생성된 IAM 역할의 ARN입니다. 본 자습서에서는
my-iam-role
을 사용합니다. -
Amazon EKS 클러스터의 AWS 리전 - Amazon EKS 클러스터를 생성한 AWS 리전입니다.
이 단계에서는 Amazon Keyspaces에 연결하고 테이블에 데이터를 쓰는 애플리케이션을 배포하고 실행합니다.
-
deployment.yaml
파일을 구성합니다. 다음 값을 교체해야 합니다.name
namespace
serviceAccountName
image
AWS_ROLE_ARN value
CASSANDRA_HOST
의 AWS 리전AWS_REGION
다음 파일을 예제로 사용할 수 있습니다.
apiVersion: apps/v1 kind: Deployment metadata: name:
my-keyspaces-app
namespace:my-eks-namespace
spec: replicas: 1 selector: matchLabels: app:my-keyspaces-app
template: metadata: labels: app:my-keyspaces-app
spec: serviceAccountName:my-eks-serviceaccount
containers: - name:my-keyspaces-app
image:111122223333.dkr.ecr.
ports: - containerPort: 8080 env: - name: CASSANDRA_HOST value: "cassandra.aws-region
.amazonaws.com/my-ecr-repository
:latest
.amazonaws.com:9142" - name: CASSANDRA_DC value: "aws-region
" - name: AWS_WEB_IDENTITY_TOKEN_FILE value: /var/run/secrets/eks.amazonaws.com/serviceaccount/token - name: AWS_ROLE_ARN value: "aws-region
arn:aws:iam::111122223333:role/my-iam-role
" - name: AWS_REGION value: "
"aws-region
-
deployment.yaml
를 배포합니다.kubectl apply -f deployment.yaml
결과는 다음과 같아야 합니다.
deployment.apps/my-keyspaces-app created
-
Amazon EKS 클러스터의 네임스페이스에서 포드의 상태를 확인합니다.
kubectl get pods -n my-eks-namespace
결과가 다음 예제와 비슷해야 합니다.
NAME READY STATUS RESTARTS AGE my-keyspaces-app-123abcde4f-g5hij 1/1 Running 0 75s
자세한 내용은 다음 명령을 사용하여 확인할 수 있습니다.
kubectl describe pod
my-keyspaces-app-123abcde4f-g5hij
-nmy-eks-namespace
Name: my-keyspaces-app-123abcde4f-g5hij Namespace: my-eks-namespace Priority: 2000001000 Priority Class Name: system-node-critical Service Account: my-eks-serviceaccount Node: fargate-ip-192-168-102-209.ec2.internal/192.168.102.209 Start Time: Thu, 23 Nov 2023 12:15:43 +0000 Labels: app=my-keyspaces-app eks.amazonaws.com/fargate-profile=my-fargate-profile pod-template-hash=6c56fccc56 Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND Status: Running IP: 192.168.102.209 IPs: IP: 192.168.102.209 Controlled By: ReplicaSet/my-keyspaces-app-6c56fccc56 Containers: my-keyspaces-app: Container ID: containerd://41ff7811d33ae4bc398755800abcdc132335d51d74f218ba81da0700a6f8c67b Image: 111122223333.dkr.ecr.
aws-region
.amazonaws.com/my_eks_repository:latest Image ID: 111122223333.dkr.ecr.aws-region
.amazonaws.com/my_eks_repository@sha256:fd3c6430fc5251661efce99741c72c1b4b03061474940200d0524b84a951439c Port: 8080/TCP Host Port: 0/TCP State: Running Started: Thu, 23 Nov 2023 12:15:19 +0000 Finished: Thu, 23 Nov 2023 12:16:17 +0000 Ready: True Restart Count: 1 Environment: CASSANDRA_HOST: cassandra.aws-region
.amazonaws.com:9142 CASSANDRA_DC:aws-region
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_ROLE_ARN: arn:aws:iam::111122223333:role/my-iam-role AWS_REGION:aws-region
AWS_STS_REGIONAL_ENDPOINTS: regional Mounts: /var/run/secrets/eks.amazonaws.com/serviceaccount from aws-iam-token (ro) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-fssbf (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: aws-iam-token: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 86400 kube-api-access-fssbf: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning LoggingDisabled 2m13s fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found Normal Scheduled 89s fargate-scheduler Successfully assigned my-eks-namespace/my-keyspaces-app-6c56fccc56-mgs2m to fargate-ip-192-168-102-209.ec2.internal Normal Pulled 75s kubelet Successfully pulled image "111122223333.dkr.ecr.aws-region
.amazonaws.com/my_eks_repository:latest" in 13.027s (13.027s including waiting) Normal Pulling 54s (x2 over 88s) kubelet Pulling image "111122223333.dkr.ecr.aws-region
.amazonaws.com/my_eks_repository:latest" Normal Created 54s (x2 over 75s) kubelet Created container my-keyspaces-app Normal Pulled 54s kubelet Successfully pulled image "111122223333.dkr.ecr.aws-region
.amazonaws.com/my_eks_repository:latest" in 222ms (222ms including waiting) Normal Started 53s (x2 over 75s) kubelet Started container my-keyspaces-app 포드의 로그를 확인하여 애플리케이션이 실행 중이고 Amazon Keyspaces 테이블에 연결할 수 있는지 확인합니다. 이러한 권한 부여는 다음 명령을 사용하여 가능합니다. 배포 이름으로 바꿉니다.
kubectl logs -f
my-keyspaces-app-123abcde4f-g5hij
-nmy-eks-namespace
아래 예제와 같이 Amazon Keyspaces에 대한 연결을 확인하는 애플리케이션 로그 항목을 볼 수 있어야 합니다.
2:47:20.553 [s0-admin-0] DEBUG c.d.o.d.i.c.metadata.MetadataManager - [s0] Adding initial contact points [Node(endPoint=cassandra.
aws-region
.amazonaws.com/1.222.333.44:9142, hostId=null, hashCode=e750d92)] 22:47:20.562 [s0-admin-1] DEBUG c.d.o.d.i.c.c.ControlConnection - [s0] Initializing with event types [SCHEMA_CHANGE, STATUS_CHANGE, TOPOLOGY_CHANGE] 22:47:20.564 [s0-admin-1] DEBUG c.d.o.d.i.core.context.EventBus - [s0] Registering com.datastax.oss.driver.internal.core.metadata.LoadBalancingPolicyWrapper$$Lambda$812/0x0000000801105e88@769afb95 for class com.datastax.oss.driver.internal.core.metadata.NodeStateEvent 22:47:20.566 [s0-admin-1] DEBUG c.d.o.d.i.c.c.ControlConnection - [s0] Trying to establish a connection to Node(endPoint=cassandra.us-east-1.amazonaws.com/1.222.333.44:9142, hostId=null, hashCode=e750d92)Amazon Keyspaces 테이블에서 다음 CQL 쿼리를 실행하여 한 줄의 데이터가 테이블에 기록되었는지 확인합니다.
SELECT * from aws.user;
다음 결과가 표시됩니다.
fname | lname | username | last_update_date ----------+-------+----------+----------------------------- random | k | test | 2023-12-07 13:58:31.57+0000