

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

# Beanstalk 클러스터 시작하기
<a name="beanstalk-cluster-getting-started"></a>

이 자습서에서는 Elastic Beanstalk 애플리케이션과 Beanstalk 클러스터 환경을 생성합니다. Elastic Beanstalk가 사전 빌드된 샘플 컨테이너 이미지를 배포하도록 애플리케이션 버전을 생략합니다. 그런 다음 환경이 준비되고 URL을 검색하여 종료될 때까지 기다립니다. 또는 전체 안내 환경을 제공하는 AWS 관리 콘솔에서 시작하거나 AI 에이전트가 [Beanstalk 클러스터](beanstalk-cluster.md) 설명서를 가리키도록 할 수 있습니다.

예상 소요 시간: **15\~20분**

**중요**  
Elastic Beanstalk에는 추가 요금이 부과되지 않지만 Amazon EKS 및 컴퓨팅을 포함하여 환경에서 사용하는 AWS 리소스에 대한 비용은 사용자가 지불합니다. 자세한 내용은 [Elastic Beanstalk 요금을](https://aws.amazon.com/elasticbeanstalk/pricing/) 참조하세요. 이 자습서를 마치면 정리 단계를 완료합니다.

## 시작하기 전 준비 사항
<a name="beanstalk-cluster-getting-started-prerequisites"></a>

다음 사전 조건을 완료합니다.
+  AWS CLI를 설치하고 구성합니다. 지침은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI시작하기](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)를 참조하세요.
+ Elastic Beanstalk 애플리케이션 및 환경을 생성 및 관리할 수 있고 환경을 생성할 때 클러스터, 노드 및 관찰성 역할을 전달할 수 있는 IAM 보안 주체를 사용합니다. 정확한 권한은 단원을 참조하십시오[환경을 생성할 수 있는 권한](beanstalk-cluster-permissions.md#beanstalk-cluster-permissions-caller).
+ 에 설명된 대로 Amazon EKS가 수임하는 클러스터 역할, 클러스터의 Amazon EC2 노드가 수임하는 노드 역할, 환경의 지표, 로그 및 추적을 게시하는 관찰성 역할을 생성합니다[IAM 역할 생성](#beanstalk-cluster-getting-started-roles). 환경에서 사용하는 VPC 서브넷을 선택하려면 섹션을 참조하세요[Beanstalk 클러스터 환경을 위한 네트워킹 구성](configuring-cluster-networking.md).
+ Beanstalk 클러스터를 사용할 수 있는 AWS 리전을 선택합니다. 명령은 AWS CLI 구성의 리전을 사용합니다.

## IAM 역할 생성
<a name="beanstalk-cluster-getting-started-roles"></a>

Beanstalk 클러스터 환경에는 클러스터 역할, 노드 역할 및 관찰성 역할이라는 세 가지 IAM 역할이 필요합니다. Elastic Beanstalk 콘솔에서 자동으로 생성하지만이 자습서에서는를 사용 AWS CLI하므로 먼저 생성합니다. 콘솔이 이름으로 기존 역할을 선택하므로 이러한 이름을 사용합니다. 각 역할의 용도와 이를 전달하는 데 필요한 호출자 권한은 섹션을 참조하세요[Beanstalk 클러스터에 대한 권한](beanstalk-cluster-permissions.md).

**클러스터, 노드 및 관찰성 역할을 생성하려면**

1. 역할을 수임하는 각 서비스에 대한 신뢰 정책 파일을 생성합니다. 클러스터 역할은 Amazon EKS를 신뢰하고, 노드 역할은 Amazon EC2를 신뢰하며, 관찰성 역할은 Amazon EKS Pod Identity를 신뢰합니다.

   ```
   $ cat > eks-trust.json <<'EOF'
   {
     "Version": "2012-10-17",
     "Statement": [{
       "Effect": "Allow",
       "Principal": {"Service": "eks.amazonaws.com"},
       "Action": ["sts:AssumeRole", "sts:TagSession"]
     }]
   }
   EOF
   ```

   ```
   $ cat > ec2-trust.json <<'EOF'
   {
     "Version": "2012-10-17",
     "Statement": [{
       "Effect": "Allow",
       "Principal": {"Service": "ec2.amazonaws.com"},
       "Action": "sts:AssumeRole"
     }]
   }
   EOF
   ```

   ```
   $ cat > pods-trust.json <<'EOF'
   {
     "Version": "2012-10-17",
     "Statement": [{
       "Effect": "Allow",
       "Principal": {"Service": "pods.eks.amazonaws.com"},
       "Action": ["sts:AssumeRole", "sts:TagSession"]
     }]
   }
   EOF
   ```

1. 클러스터 역할을 생성하고 정책을 연결합니다.

   ```
   $ aws iam create-role \
       --role-name aws-elasticbeanstalk-eks-cluster-role \
       --assume-role-policy-document file://eks-trust.json
   $ for p in AmazonEKSClusterPolicy AmazonEKSNetworkingPolicy AmazonEKSComputePolicy \
            AmazonEKSBlockStoragePolicy AmazonEKSLoadBalancingPolicy AWSElasticBeanstalkEKSTagging; do
       aws iam attach-role-policy \
           --role-name aws-elasticbeanstalk-eks-cluster-role \
           --policy-arn arn:aws:iam::aws:policy/$p
   done
   ```

1. 노드 역할을 생성하고 정책을 연결합니다.

   ```
   $ aws iam create-role \
       --role-name aws-elasticbeanstalk-eks-node-role \
       --assume-role-policy-document file://ec2-trust.json
   $ for p in AmazonEKSWorkerNodeMinimalPolicy AmazonEC2ContainerRegistryPullOnly \
            AmazonSSMManagedInstanceCore; do
       aws iam attach-role-policy \
           --role-name aws-elasticbeanstalk-eks-node-role \
           --policy-arn arn:aws:iam::aws:policy/$p
   done
   ```

1. 관찰성 역할을 생성하고 정책을 연결합니다.

   ```
   $ aws iam create-role \
       --role-name aws-elasticbeanstalk-eks-observability-role \
       --assume-role-policy-document file://pods-trust.json
   $ for p in CloudWatchAgentServerPolicy AWSElasticBeanstalkEKSObservability; do
       aws iam attach-role-policy \
           --role-name aws-elasticbeanstalk-eks-observability-role \
           --policy-arn arn:aws:iam::aws:policy/$p
   done
   ```

1. 세 가지 역할 ARNs 기록합니다. 환경을 생성할 때 이를 전달합니다.

   ```
   $ for r in cluster node observability; do
       aws iam get-role --role-name aws-elasticbeanstalk-eks-$r-role \
           --query 'Role.Arn' --output text
   done
   ```

## 지원되는 프로비저닝 도구 선택
<a name="beanstalk-cluster-getting-started-tools"></a>

Elastic Beanstalk 콘솔, Elastic Beanstalk API 또는를 사용하여 Beanstalk 클러스터 환경을 생성하고 관리할 수 있습니다 AWS CLI. 이 자습서에서는 각 요청을 보고 반복할 수 AWS CLI 있도록를 사용합니다.

공식 GitHub 작업을 사용하여를 배포하고, AWS 공급자를 통해 환경을 Terraform을 사용한 코드형 인프라로 정의할 수도 있습니다. GitHub 작업은 섹션을 참조하세요[GitHub 작업을 사용하여 Elastic Beanstalk에 배포](deploying-github-actions.md).

## 애플리케이션 생성 및 샘플 배포
<a name="beanstalk-cluster-getting-started-deploy"></a>

1. 환경을 포함할 Elastic Beanstalk 애플리케이션을 생성합니다.

   ```
   $ aws elasticbeanstalk create-application \
       --application-name getting-started-cluster-app
   ```

1. 환경을 생성합니다. `Cluster` 티어는 Beanstalk 클러스터를 선택합니다. 이 요청에는 버전 레이블이 없으므로 Elastic Beanstalk는 샘플 애플리케이션을 배포합니다.

   ```
   $ aws elasticbeanstalk create-environment \
       --application-name getting-started-cluster-app \
       --environment-name getting-started-cluster-env \
       --tier Name=Cluster,Type=EKS \
       --option-settings \
           Namespace=aws:elasticbeanstalk:eks,OptionName=cluster-role,Value={{cluster-role-arn}} \
           Namespace=aws:elasticbeanstalk:eks,OptionName=node-role,Value={{node-role-arn}} \
           Namespace=aws:elasticbeanstalk:eks:environment,OptionName=observability-role,Value={{observability-role-arn}}
   ```

   역할 ARN 자리 표시자를 준비한 역할로 바꿉니다. 요청에는 `service-port` 및가 생략됩니다`load-balancer-type`. Elastic Beanstalk는 이러한 설정을 기본값인 `8080` 및 로 확인합니다`ALB`. 다른 값을 선택하려면를 사용하여 전달합니다`--option-settings`. 전체 옵션 참조는 섹션을 참조하세요[Beanstalk 클러스터 환경의 구성 옵션](command-options-general-eks.md).

1. 환경이 준비될 때까지 기다립니다. Elastic Beanstalk가 Amazon EKS 클러스터를 생성하고 샘플을 배포하는 동안 첫 번째 환경은 15\~20분이 걸릴 수 있습니다. 는 AWS CLI 환경이를 보고할 때까지 폴링하는 기본 제공 웨이터를 제공합니다`Ready`. 웨이터는 20초 간격으로 최대 20회, 약 6분 40초 동안 폴링하므로 첫 번째 환경에서는를 보고할 것으로 예상합니다`Max attempts exceeded`. 성공이 보고될 때까지 다시 실행합니다.

   ```
   $ aws elasticbeanstalk wait environment-exists \
       --environment-names getting-started-cluster-env
   ```

   웨이터는 환경이 아직 생성 중인 경우와 생성이 실패한 경우 `Max attempts exceeded` 모두 보고합니다. 몇 번의 실행 후에도 성공이 보고되지 않으면 환경의 최근 이벤트를 검사하고 계속하기 전에 보고된 오류를 해결합니다.

   ```
   $ aws elasticbeanstalk describe-events \
       --environment-name getting-started-cluster-env \
       --query 'Events[].[EventDate,Severity,Message]' \
       --output table
   ```

1. 환경 상태, 상태 색상, 상태 및 URL을 검사합니다.

   ```
   $ aws elasticbeanstalk describe-environments \
       --application-name getting-started-cluster-app \
       --environment-names getting-started-cluster-env \
       --query 'Environments[0].[Status,Health,HealthStatus,CNAME]' \
       --output table
   ```

   환경이 비어 있지 않은를 보고`Ready`하고 반환하는지 확인합니다`CNAME`. 웹 브라우저에서 CNAME `https://` 다음에를 열고 샘플 애플리케이션이 응답하는지 확인합니다. 로드 밸런서는 HTTPS에서만 응답하므로에 대한 요청은 시간이 초과될 때까지 `http://` 대기합니다. HTTP 요청을 수락하고 Elastic Beanstalk에서 HTTPS로 리디렉션하도록 하려면 섹션을 참조하세요[Beanstalk 클러스터 환경을 위한 네트워킹 구성](configuring-cluster-networking.md). 유휴 환경은 애플리케이션 상태를 확인하기 위한 요청이 너무 적기 `NoData` 때문에 처음에 `Grey` 및를 보고할 수 있습니다. 상태 이벤트는이 상태를 로 표시합니다`No Data`. 이는 배포 실패를 나타내지 않습니다. 애플리케이션이 충분한 성공적인 요청을 수신하면 상태는 일반적으로 `Green` 및 로 이동합니다`Ok`. CNAME이 비어 있거나 애플리케이션이 응답하지 않거나 상태가 실패를 보고하는 경우 계속하기 전에 환경의 최근 이벤트를 검사합니다.

   ```
   $ aws elasticbeanstalk describe-events \
       --environment-name getting-started-cluster-env \
       --query 'Events[].[EventDate,Severity,Message]' \
       --output table
   ```

   클러스터 상태 모델은 섹션을 참조하세요[Beanstalk 클러스터 환경 모니터링](monitoring-cluster-environments.md).

## 자체 컨테이너 이미지 배포
<a name="beanstalk-cluster-getting-started-deploy-own"></a>

생성 요청에 버전 레이블이 없으므로 환경에서 샘플 애플리케이션을 실행 중입니다. 자체 애플리케이션을 실행하려면 컨테이너 이미지의 이름을 지정하는 *애플리케이션 버전을* 생성한 다음 해당 버전을 환경에 배포합니다. 이는 일반적인 Elastic Beanstalk 흐름입니다. 애플리케이션 버전은 배포 가능한 아티팩트이고 샘플은 제공하지 않을 때 Elastic Beanstalk가 배포하는 것입니다.

시작하기 전에 계정의 Amazon Elastic Container Registry(Amazon ECR) 리포지토리와 같은 레지스트리에 이미 푸시한 컨테이너 이미지가 필요하며 이미지는 환경의를 수신해야 합니다. `service-port`이는 변경`8080`하지 않는 한 마찬가지입니다. 자체 버전을 배포하면 샘플 애플리케이션이 대체됩니다. 대신 Elastic Beanstalk가 소스에서 이미지를 빌드하도록 하려면 섹션을 참조하세요[Beanstalk 클러스터 환경을 위한 컨테이너 이미지 빌드](beanstalk-cluster-app-versions.md).

1. 이미지를 가리키는 애플리케이션 버전을 생성합니다.

   ```
   $ aws elasticbeanstalk create-application-version \
       --application-name getting-started-cluster-app \
       --version-label v1 \
       --image-configuration Source={Uri={{your-image-uri}}}
   ```

   {{your-image-uri}}를와 같은 이미지로 바꿉니다`111122223333.dkr.ecr.us-east-1.amazonaws.com/my-app:v1`. 이미지가 이미 빌드되었으므로 버전에는 빌드 단계가 필요하지 않으며 배포할 준비가 되었습니다.

1. 환경에 버전을 배포합니다.

   ```
   $ aws elasticbeanstalk update-environment \
       --environment-name getting-started-cluster-env \
       --version-label v1
   ```

1. 배포가 완료되고 환경이 애플리케이션을 제공하고 있는지 확인합니다.

   ```
   $ aws elasticbeanstalk describe-events \
       --environment-name getting-started-cluster-env \
       --query 'Events[].[EventDate,Severity,Message]' \
       --output table
   ```

   웹 브라우저에서 환경의 CNAME `https://` 뒤에를 열고 애플리케이션이 응답하는지 확인합니다. 그렇지 않은 경우 이벤트에 배포 실패가 있는지 확인하고 이미지가 환경의에서 수신되는지 확인합니다`service-port`.

## 자습서 리소스 정리
<a name="beanstalk-cluster-getting-started-cleanup"></a>

1. 환경 종료.

   ```
   $ aws elasticbeanstalk terminate-environment \
       --environment-name getting-started-cluster-env
   ```

1. 환경이 `Terminated` 상태에 도달할 때까지 기다립니다. 는 AWS CLI 종료가 완료될 때까지 폴링하는 기본 제공 웨이터를 제공합니다. 이 웨이터에는 20회 시도 제한이 동일하므로 성공이 보고될 때까지 다시 실행합니다.

   ```
   $ aws elasticbeanstalk wait environment-terminated \
       --environment-names getting-started-cluster-env
   ```

   웨이터는 종료가 아직 진행 중인 경우와 종료가 실패한 경우 `Max attempts exceeded` 모두 보고합니다. 몇 번의 실행 후에도 성공이 보고되지 않으면 환경 이벤트의 오류를 해결합니다. 환경이 여전히 존재하는 동안에는 애플리케이션을 삭제하지 마십시오.

1. Elastic Beanstalk가 생성한 샘플 버전과 추가한 버전을 포함하여 애플리케이션과 애플리케이션 버전을 삭제합니다. 이렇게 해도 제공한 컨테이너 이미지 또는 컨테이너 이미지가 들어 있는 리포지토리는 삭제되지 않습니다. 섹션을 참조하세요[Beanstalk 클러스터 환경을 위한 컨테이너 이미지 빌드](beanstalk-cluster-app-versions.md).

   ```
   $ aws elasticbeanstalk delete-application \
       --application-name getting-started-cluster-app
   ```

Elastic Beanstalk는 공유 Amazon EKS 클러스터를 사용하는 마지막 환경을 종료한 후에만 공유 Amazon EKS 클러스터를 삭제합니다. 클러스터 삭제에는 최대 3시간이 걸릴 수 있습니다. Amazon EKS 및 기타 리소스 요금은 삭제가 완료될 때까지 계속됩니다. 종료해도 고객 제공 클러스터, 노드 및 관찰성 IAM 역할은 삭제되지 않습니다. 에 설명된 대로 클러스터 삭제를 확인합니다[클러스터 삭제](beanstalk-cluster-concepts.md#beanstalk-cluster-clusters-lifecycle).

## 다음 단계
<a name="beanstalk-cluster-getting-started-next"></a>
+ 애플리케이션 버전을 생성하여 자체 컨테이너 이미지 또는 소스를 배포합니다. [Beanstalk 클러스터 환경을 위한 컨테이너 이미지 빌드](beanstalk-cluster-app-versions.md)을(를) 참조하세요.
+ 리소스 제한, 조정, 배포 동작, 로드 밸런싱 및 관찰성을 구성합니다. [Beanstalk 클러스터 환경의 구성 옵션](command-options-general-eks.md)을(를) 참조하세요.
+ 환경을 업데이트하고 모니터링하는 방법을 알아봅니다. [Elastic Beanstalk 환경 관리](using-features.managing.md) 및 [Beanstalk 클러스터 환경 모니터링](monitoring-cluster-environments.md) 단원을 참조하세요.