

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 4단계: 애플리케이션을 Amazon EKS에 배포하고 테이블에 데이터 쓰기
<a name="EKS-tutorial-step4"></a>

자습서의 이 단계에서는 애플리케이션에 대한 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`을 사용합니다.
+ **AWS 리전 Amazon EKS 클러스터를 생성한 Amazon EKS 클러스터의** . AWS 리전 

이 단계에서는 Amazon Keyspaces에 연결하고 테이블에 데이터를 쓰는 애플리케이션을 배포하고 실행합니다.

1. `deployment.yaml` 파일을 구성합니다. 다음 값을 교체해야 합니다.
   + `name`
   + `namespace`
   + `serviceAccountName`
   + `image`
   + `AWS_ROLE_ARN value`
   +  AWS 리전 의 `CASSANDRA_HOST`
   + `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.us-east-1.amazonaws.com/my-ecr-repository:latest
           ports:
           - containerPort: 8080
           env:
           - name: CASSANDRA_HOST
             value: "cassandra.us-east-1.amazonaws.com:9142"
           - name: CASSANDRA_DC
             value: "us-east-1"
           - name: AWS_WEB_IDENTITY_TOKEN_FILE
             value: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
           - name: AWS_ROLE_ARN
             value: "arn:aws:iam::111122223333:role/my-iam-role"
           - name: AWS_REGION
             value: "us-east-1"
   ```

1. `deployment.yaml`를 배포합니다.

   ```
   kubectl apply -f deployment.yaml
   ```

   결과는 다음과 같아야 합니다.

   ```
   deployment.apps/my-keyspaces-app created
   ```

1. 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 -n my-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.us-east-1.amazonaws.com/my_eks_repository:latest
       Image ID:       111122223333.dkr.ecr.us-east-1.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.us-east-1.amazonaws.com:9142
         CASSANDRA_DC:                 us-east-1
         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:                   us-east-1
         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.us-east-1.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.us-east-1.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.us-east-1.amazonaws.com/my_eks_repository:latest" in 222ms (222ms including waiting)
     Normal   Started          53s (x2 over 75s)  kubelet            Started container my-keyspaces-app
   ```

1. 포드의 로그를 확인하여 애플리케이션이 실행 중이고 Amazon Keyspaces 테이블에 연결할 수 있는지 확인합니다. 이러한 권한 부여는 다음 명령을 사용하여 가능합니다. 배포 이름으로 바꿉니다.

   ```
   kubectl logs -f my-keyspaces-app-123abcde4f-g5hij -n my-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.us-east-1.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)
   ```

1. Amazon Keyspaces 테이블에서 다음 CQL 쿼리를 실행하여 한 줄의 데이터가 테이블에 기록되었는지 확인합니다.

   ```
   SELECT * from aws.user;
   ```

   다음 결과가 표시됩니다.

   ```
   fname    | lname | username | last_update_date 
   ----------+-------+----------+-----------------------------
   random    | k     | test     | 2023-12-07 13:58:31.57+0000
   ```