자습서: Amazon ECS에 애플리케이션 배포 - Amazon CodeCatalyst

자습서: Amazon ECS에 애플리케이션 배포

이 자습서에서는 워크플로, Amazon ECS 및 기타 몇 가지 AWS 서비스를 사용하여 Amazon Elastic Container Service(Amazon ECS)에 서버리스 애플리케이션을 배포하는 방법을 알아봅니다. 배포된 애플리케이션은 Apache 웹 서버 Docker 이미지를 기반으로 구축된 간단한 Hello World 웹 사이트입니다. 자습서에서는 클러스터 설정과 같은 필수 준비 작업을 안내한 다음 애플리케이션을 빌드하고 배포하기 위한 워크플로를 생성하는 방법을 설명합니다.

작은 정보

이 자습서를 진행하는 대신 전체 Amazon ECS 설정을 수행하는 블루프린트를 사용할 수 있습니다. Node.js API with AWS Fargate 또는 Java API with AWS Fargate 블루프린트를 사용해야 합니다. 자세한 내용은 블루프린트를 사용하여 프로젝트 생성 섹션을 참조하십시오.

사전 조건

시작하기 전:

  • 연결된 AWS 계정이 있는 CodeCatalyst 스페이스가 필요합니다. 자세한 내용은 스페이스 생성 섹션을 참조하십시오.

  • 스페이스에는 다음과 같은 빈 프로젝트가 필요합니다.

    codecatalyst-ecs-project

    처음부터 시작 옵션을 사용하여 이 프로젝트를 생성합니다.

    자세한 내용은 Amazon CodeCatalyst에서 빈 프로젝트 생성 섹션을 참조하십시오.

  • 프로젝트에는 다음과 같은 CodeCatalyst 환경이 필요합니다.

    codecatalyst-ecs-environment

    다음과 같이 이 환경을 구성합니다.

    • 비프로덕션과 같은 유형을 선택합니다.

    • AWS 계정에 연결합니다.

    • 기본 IAM 역할의 경우 아무 역할이나 선택합니다. 나중에 다른 역할을 지정합니다.

    자세한 내용은 AWS 계정 및 VPC에 배포 섹션을 참조하십시오.

1단계: AWS 사용자 및 AWS CloudShell 설정

이 자습서의 첫 번째 단계는 AWS IAM Identity Center에서 사용자를 생성하고 이 사용자로 AWS CloudShell 인스턴스를 시작하는 것입니다. 이 자습서 기간 동안 CloudShell은 개발 컴퓨터이며 AWS 리소스와 서비스를 구성하는 곳입니다. 자습서를 완료한 후 이 사용자를 삭제합니다.

참고

이 자습서에는 루트 사용자를 사용하지 마세요. 별도의 사용자를 생성해야 합니다. 그렇지 않으면 나중에 AWS Command Line Interface(CLI)에서 작업을 수행할 때 문제가 발생할 수 있습니다.

IAM Identity Center 사용자 및 CloudShell에 대한 자세한 내용은 AWS IAM Identity Center 사용 설명서AWS CloudShell 사용 설명서를 참조하세요.

IAM Identity Center 사용자를 생성하려면
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/singlesignon/에서 AWS IAM Identity Center 콘솔을 엽니다.

    참고

    CodeCatalyst 스페이스에 연결된 AWS 계정를 사용하여 로그인해야 합니다. 스페이스로 이동하여 AWS 계정 탭을 선택하고 연결된 계정을 확인할 수 있습니다. 자세한 내용은 스페이스 생성 섹션을 참조하십시오.

  2. 탐색 창에서 UsersAdd user를 차례대로 선택합니다.

  3. 사용자 이름에 다음을 입력합니다.

    CodeCatalystECSUser
  4. 암호에서 이 사용자와 공유할 수 있는 일회용 암호 생성을 선택합니다.

  5. 이메일 주소이메일 주소 확인에 IAM Identity Center에 아직 없는 이메일 주소를 입력합니다.

  6. 이름에 다음을 입력합니다.

    CodeCatalystECSUser
  7. 표시 이름에 자동으로 생성된 이름을 유지합니다.

    CodeCatalystECSUser CodeCatalystECSUser
  8. Next(다음)를 선택합니다.

  9. 그룹에 사용자 추가 페이지에서 다음을 선택합니다.

  10. 검토 및 사용자 추가 페이지에서 정보를 검토하고 사용자 추가를 선택합니다.

    일회용 암호 대화 상자가 나타납니다.

  11. 복사를 선택한 다음 AWS 액세스 포털 URL 및 일회용 암호를 포함하여 로그인 정보를 붙여넣습니다.

  12. 닫기를 선택하세요.

권한 집합을 생성하려면

이 권한 세트를 나중에 CodeCatalystECSUser에 할당합니다.

  1. 탐색 창에서 권한 세트를 선택한 다음 권한 세트 생성을 선택합니다.

  2. 사전 정의된 권한 세트를 선택하고 AdministratorAccess를 선택합니다. 이 정책은 모든 AWS 서비스에 대한 전체 권한을 제공합니다.

  3. Next(다음)를 선택합니다.

  4. 권한 세트 이름에 다음을 입력합니다.

    CodeCatalystECSPermissionSet
  5. Next(다음)를 선택합니다.

  6. 검토 및 생성 페이지에서 정보를 검토하고 생성을 선택합니다.

이 권한 세트를 CodeCatalystECSUser에게 할당하려면
  1. 탐색 창에서 AWS 계정을 선택한 다음 현재 로그인한 AWS 계정 옆의 확인란을 선택합니다.

  2. 사용자 또는 그룹 할당을 선택합니다.

  3. 사용자 탭을 선택합니다.

  4. CodeCatalystECSUser 옆의 확인란을 선택합니다.

  5. Next(다음)를 선택합니다.

  6. CodeCatalystECSPermissionSet 옆의 확인란을 선택합니다.

  7. Next(다음)를 선택합니다.

  8. 정보를 검토하고 제출을 선택합니다.

    이제 CodeCatalystECSUserCodeCatalystECSPermissionSet를 AWS 계정에 할당하여 함께 바인딩했습니다.

로그아웃했다가 CodeCatalystECSUser로 다시 로그인하려면
  1. 로그아웃하기 전에 AWS 액세스 포털 URL과 CodeCatalystECSUser 사용자 이름 및 일회용 암호가 있는지 확인합니다. 이전에 이 정보를 텍스트 편집기에 복사했어야 합니다.

    참고

    이 정보가 없는 경우 IAM Identity Center의 CodeCatalystECSUser 세부 정보 페이지로 이동하여 암호 재설정, 일회용 암호 생성 [...]을 선택한 후 암호 재설정을 다시 선택하면 화면에 해당 정보가 표시됩니다.

  2. AWS에서 로그아웃합니다.

  3. AWS 액세스 포털 URL을 브라우저의 주소 표시줄에 붙여 넣습니다.

  4. CodeCatalystECSUser의 사용자 이름과 일회용 암호로 로그인합니다.

  5. 새 암호에서 암호를 입력하고 새 암호 설정을 선택합니다.

    화면에 AWS 계정 상자가 나타납니다.

  6. AWS 계정을 선택한 다음 CodeCatalystECSUser 사용자 및 권한 세트를 할당한 AWS 계정의 이름을 선택합니다.

  7. CodeCatalystECSPermissionSet 옆에 있는 Management Console을 선택합니다.

    AWS Management Console이 나타납니다. 이제 적절한 권한으로 CodeCatalystECSUser에 로그인되었습니다.

AWS CloudShell 인스턴스를 시작하려면
  1. CodeCatalystECSUser로서 상단 탐색 모음에서 AWS 아이콘( AWS icon )을 선택합니다.

    AWS Management Console의 기본 페이지가 나타납니다.

  2. 상단 탐색 모음에서 AWS CloudShell 아이콘( CloudShell icon )을 선택합니다.

    CloudShell이 열립니다. CloudShell 환경이 생성되는 동안 기다립니다.

    참고

    CloudShell 아이콘이 보이지 않는 경우 CloudShell에서 지원하는 리전에 있는지 확인하세요. 이 자습서에서는 사용자가 미국 서부(오리건) 리전에 있다고 가정합니다.

AWS CLI가 설치되어 있는지 확인하려면
  1. CloudShell 터미널에서 다음을 입력합니다.

    aws --version
  2. 버전이 나타나는지 확인합니다.

    AWS CLI는 현재 사용자에 대해 이미 구성되어 있으므로 일반적으로 CodeCatalystECSUser처럼 AWS CLI 키와 자격 증명을 구성할 필요가 없습니다.

2단계: Amazon ECS에 자리 표시자 애플리케이션 배포

이 섹션에서는 자리 표시자 애플리케이션을 Amazon ECS에 수동으로 배포합니다. 이 자리 표시자 애플리케이션은 워크플로에 의해 배포된 Hello World 애플리케이션으로 대체됩니다. 자리 표시자 애플리케이션은 Apache Web Server입니다.

Amazon ECS에 대해 자세히 알아보려면 Amazon Elastic Container Service 개발자 안내서를 참조하세요.

자리 표시자 애플리케이션을 배포하려면 다음 일련의 절차를 완료합니다.

태스크 실행 역할을 생성하는 방법

이 역할은 Amazon ECS 및 AWS Fargate에 대신 API 직접 호출을 할 수 있는 권한을 허용합니다.

  1. 신뢰 정책 생성:

    1. AWS CloudShell에 다음 명령을 입력합니다.

      cat > codecatalyst-ecs-trust-policy.json

      CloudShell 터미널에 깜박이는 프롬프트가 나타납니다.

    2. 프롬프트에서 다음 코드를 입력합니다.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    3. 커서를 마지막 중괄호(}) 뒤에 놓습니다.

    4. Enter를 누른 다음 Ctrl+d를 눌러 파일을 저장하고 cat을 종료합니다.

  2. 태스크 실행 역할을 생성합니다.

    aws iam create-role \ --role-name codecatalyst-ecs-task-execution-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  3. AWS 관리형 AmazonECSTaskExecutionRolePolicy 정책을 역할에 연결합니다.

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-task-execution-role \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
  4. 역할의 세부 정보를 표시합니다.

    aws iam get-role \ --role-name codecatalyst-ecs-task-execution-role
  5. 역할의 "Arn": 값을 기록해 둡니다. 예시: arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role. 나중에 이 Amazon 리소스 이름(ARN)이 필요합니다.

Amazon ECS 클러스터를 생성하려면

이 클러스터에는 Apache 자리 표시자 애플리케이션과 이후 Hello World 애플리케이션이 포함됩니다.

  1. CodeCatalystECSUser로서 AWS CloudShell에서 빈 클러스터를 생성합니다.

    aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
  2. (선택 사항) 클러스터가 성공적으로 생성되었는지 확인합니다.

    aws ecs list-clusters

    codecatalyst-ecs-cluster 클러스터의 ARN이 목록에 나타나 성공적으로 생성되었음을 나타냅니다.

태스크 정의 파일을 생성하는 방법

태스크 정의 파일은 DockerHub에서 가져온 Apache 2.4 웹 서버 Docker 이미지(httpd:2.4)를 실행함을 나타냅니다.

  1. CodeCatalystECSUser로서 AWS CloudShell에서 태스크 정의 파일을 생성합니다.

    cat > taskdef.json
  2. 프롬프트에서 다음 코드를 붙여넣습니다.

    { "executionRoleArn": "arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", "image": "httpd:2.4", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "family": "codecatalyst-ecs-task-def", "memory": "512", "networkMode": "awsvpc" }

    앞의 코드에서 arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role

    태스크 실행 역할을 생성하는 방법에서 기록한 태스크 실행 역할의 ARN으로 바꿉니다.

  3. 커서를 마지막 중괄호(}) 뒤에 놓습니다.

  4. Enter를 누른 다음 Ctrl+d를 눌러 파일을 저장하고 cat을 종료합니다.

Amazon ECS로 태스크 정의 파일을 등록하려면
  1. CodeCatalystECSUser로서 AWS CloudShell에서 태스크 정의를 등록합니다.

    aws ecs register-task-definition \ --cli-input-json file://taskdef.json
  2. (선택 사항) 태스크 정의가 등록되었는지 확인합니다.

    aws ecs list-task-definitions

    codecatalyst-ecs-task-def 태스크 정의가 목록에 나타나야 합니다.

Amazon ECS 서비스를 생성하는 방법

Amazon ECS 서비스는 Apache 자리 표시자 애플리케이션과 이후 Hello World 애플리케이션의 태스크(및 관련 Docker 컨테이너)를 실행합니다.

  1. CodeCatalystECSUser로서 아직 하지 않았다면 Amazon Elastic Container Service 콘솔로 전환합니다.

  2. 앞서 생성한 codecatalyst-ecs-cluster 클러스터를 선택합니다.

  3. 서비스 탭에서 생성을 선택합니다.

  4. 생성 페이지에서 다음을 수행합니다.

    1. 다음에 나열된 설정을 제외한 모든 기본 설정을 유지합니다.

    2. 시작 유형에서 FARGATE를 선택합니다.

    3. 태스크 정의패밀리 드롭다운 목록에서 다음을 선택합니다.

      codecatalyst-ecs-task-def

    4. 서비스 이름에 다음을 입력합니다.

      codecatalyst-ecs-service
    5. 원하는 태스크에 다음을 입력합니다.

      3

      이 자습서에서는 각 작업이 단일 Docker 컨테이너를 시작합니다.

    6. 네트워킹 섹션을 확장합니다.

    7. VPC에서 VPC를 선택합니다.

    8. 서브넷에서 서브넷을 선택합니다.

      참고

      서브넷을 하나만 지정합니다. 이 자습서에 필요한 것은 이것뿐입니다.

      참고

      VPC와 서브넷이 없는 경우 생성합니다. Amazon VPC 사용 설명서VPC에 서브넷 생성을 참조하여 VPC를 생성합니다.

    9. 보안 그룹에서 새 보안 그룹 생성을 선택하고 다음을 수행합니다.

      1. 보안 그룹 이름에 다음을 입력합니다.

        codecatalyst-ecs-security-group
      2. 보안 그룹 설명에 다음을 입력합니다.

        CodeCatalyst ECS security group
      3. 규칙 추가를 선택합니다. 유형에서 HTTP를 선택하고 소스에서 Anywhere를 선택합니다.

    10. 하단에서 생성을 선택합니다.

    11. 서비스가 생성되는 동안 기다립니다. 몇 분 정도 소요될 수 있습니다.

  5. 태스크 탭을 선택한 후 새로 고침 버튼을 선택합니다. 세 태스크 모두에서 마지막 상태 열이 실행 중으로 설정되어 있는지 확인합니다.

(선택 사항) Apache 자리 표시자 애플리케이션이 실행 중인지 확인하려면
  1. 태스크 탭에서 세 가지 작업 중 하나를 선택합니다.

  2. 퍼블릭 IP 필드에서 개방형 주소를 선택합니다.

    It Works! 페이지가 나타납니다. 이는 Amazon ECS 서비스가 Apache 이미지로 Docker 컨테이너를 시작한 태스크를 성공적으로 시작했음을 나타냅니다.

    자습서의 이 시점에서 Amazon ECS 클러스터, 서비스 및 태스크 정의와 Apache 자리 표시자 애플리케이션을 수동으로 배포했습니다. 이러한 모든 항목이 준비되면 이제 Apache 자리 표시자 애플리케이션을 자습서의 Hello World 애플리케이션으로 대체하는 워크플로를 생성할 준비가 된 것입니다.

3단계: Amazon ECR 이미지 리포지토리 생성

이 섹션에서는 Amazon Elastic Container Registry(Amazon ECR)에서 프라이빗 이미지 리포지토리를 생성합니다. 이 리포지토리에는 이전에 배포한 Apache 자리 표시자 이미지를 대체하는 자습서의 Docker 이미지가 저장됩니다.

Amazon ECR에 대한 자세한 내용은 Amazon Elastic Container Registry 사용 설명서를 참조합니다.

Amazon ECR에서 이미지 리포지토리를 생성하려면
  1. CodeCatalystECSUser의 경우와 같이 AWS CloudShell에서 Amazon ECR에 빈 리포지토리를 생성합니다.

    aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
  2. Amazon ECR 리포지토리의 세부 정보를 표시합니다.

    aws ecr describe-repositories \ --repository-names codecatalyst-ecs-image-repo
  3. “repositoryUri”: 값을 기록해 둡니다. 예시: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo.

    나중에 워크플로에 리포지토리를 추가할 때 필요합니다.

4단계: AWS 역할 생성

이 섹션에서는 CodeCatalyst 워크플로가 작동하는 데 필요한 AWS IAM 역할을 생성합니다. 이러한 역할은 다음과 같습니다.

  • 빌드 역할 - CodeCatalyst 빌드 작업(워크플로 내)에 AWS 계정에 액세스하고 Amazon ECR 및 Amazon EC2에 쓸 수 있는 권한을 부여합니다.

  • 역할 배포 - CodeCatalyst ECS에 배포 작업(워크플로 내)에 AWS 계정, Amazon ECS 및 기타 몇 가지 AWS 서비스에 액세스할 수 있는 권한을 부여합니다.

IAM 역할에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서IAM 역할 섹션을 참조하세요.

참고

시간을 절약하기 위해 이전에 나열한 두 역할 대신 CodeCatalystWorkflowDevelopmentRole-spaceName 역할이라는 단일 역할을 생성할 수 있습니다. 자세한 내용은 계정 및 스페이스의 CodeCatalystWorkflowDevelopmentRole-spaceName 역할 생성 섹션을 참조하십시오. CodeCatalystWorkflowDevelopmentRole-spaceName 역할에는 보안 위험을 초래할 수 있는 매우 광범위한 권한이 있음을 이해합니다. 보안에 대한 우려가 적은 자습서 및 시나리오에서만 이 역할을 사용하는 것이 좋습니다. 이 자습서에서는 이전에 나열된 두 역할을 생성하고 있다고 가정합니다.

빌드 및 배포 역할을 생성하려면 AWS Management Console 또는 AWS CLI를 사용할 수 있습니다.

AWS Management Console

빌드 및 배포 역할을 생성하려면 다음 절차 시리즈를 완료합니다.

빌드 역할을 생성하려면
  1. 역할에 대한 정책을 다음과 같이 생성합니다.

    1. AWS에 로그인합니다.

    2. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

    3. 탐색 창에서 Policies를 선택합니다.

    4. 정책 생성을 선택합니다.

    5. JSON 탭을 선택합니다.

    6. 기존 코드를 삭제합니다.

    7. 다음 코드를 붙여넣습니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
      참고

      역할을 처음 사용하여 워크플로 작업을 실행할 때 리소스 정책 문에서 와일드카드를 사용한 다음, 사용 가능한 리소스 이름으로 정책 범위를 좁힙니다.

      "Resource": "*"
    8. 다음: 태그를 선택합니다.

    9. 다음: 검토를 선택합니다.

    10. 이름에 다음과 같이 입력합니다.

      codecatalyst-ecs-build-policy
    11. 정책 생성을 선택합니다.

      이제 권한 정책을 생성했습니다.

  2. 다음과 같이 빌드 역할을 생성합니다.

    1. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

    2. 사용자 지정 신뢰 정책을 선택합니다.

    3. 기존 사용자 지정 신뢰 정책을 삭제합니다.

    4. 다음 사용자 지정 신뢰 정책을 추가합니다.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. Next(다음)를 선택합니다.

    6. 권한 정책에서 codecatalyst-ecs-build-policy를 검색하고 해당 확인란을 선택합니다.

    7. Next(다음)를 선택합니다.

    8. 역할 이름에 다음과 같이 입력합니다.

      codecatalyst-ecs-build-role
    9. 역할 설명에 다음과 같이 입력합니다.

      CodeCatalyst ECS build role
    10. 역할 생성을 선택합니다.

    이제 신뢰 정책 및 권한 정책으로 빌드 역할을 생성했습니다.

  3. 다음과 같이 빌드 역할 ARN을 가져옵니다.

    1. 탐색 창에서 Roles를 선택합니다.

    2. 검색 상자에 방금 생성한 역할의 이름을 입력합니다(codecatalyst-ecs-build-role).

    3. 목록에서 역할을 선택합니다.

      역할의 요약 페이지가 나타납니다.

    4. 상단에서 ARN 값을 복사합니다. 나중에 필요합니다.

배포 역할을 생성하려면
  1. 역할에 대한 정책을 다음과 같이 생성합니다.

    1. AWS에 로그인합니다.

    2. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

    3. 탐색 창에서 Policies를 선택합니다.

    4. 정책 생성(Create Policy)을 선택합니다.

    5. JSON 탭을 선택합니다.

    6. 기존 코드를 삭제합니다.

    7. 다음 코드를 붙여넣습니다.

      { "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
      참고

      역할을 처음 사용하여 워크플로 작업을 실행할 때 리소스 정책 문의 와일드카드를 사용합니다. 그런 다음 사용 가능한 리소스 이름을 사용하여 정책의 범위를 좁힐 수 있습니다.

      "Resource": "*"
    8. 다음: 태그를 선택합니다.

    9. 다음: 검토를 선택합니다.

    10. 이름에 다음과 같이 입력합니다.

      codecatalyst-ecs-deploy-policy
    11. 정책 생성을 선택합니다.

      이제 권한 정책을 생성했습니다.

  2. 다음과 같이 배포 역할을 생성합니다.

    1. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

    2. 사용자 지정 신뢰 정책을 선택합니다.

    3. 기존 사용자 지정 신뢰 정책을 삭제합니다.

    4. 다음 사용자 지정 신뢰 정책을 추가합니다.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. Next(다음)를 선택합니다.

    6. 권한 정책에서 codecatalyst-ecs-deploy-policy를 검색하고 해당 확인란을 선택합니다.

    7. Next(다음)를 선택합니다.

    8. 역할 이름에 다음과 같이 입력합니다.

      codecatalyst-ecs-deploy-role
    9. 역할 설명에 다음과 같이 입력합니다.

      CodeCatalyst ECS deploy role
    10. 역할 생성을 선택합니다.

    이제 신뢰 정책으로 배포 역할을 생성했습니다.

  3. 다음과 같이 배포 역할 ARN을 가져옵니다.

    1. 탐색 창에서 Roles를 선택합니다.

    2. 검색 상자에 방금 생성한 역할의 이름을 입력합니다(codecatalyst-ecs-deploy-role).

    3. 목록에서 역할을 선택합니다.

      역할의 요약 페이지가 나타납니다.

    4. 상단에서 ARN 값을 복사합니다. 나중에 필요합니다.

AWS CLI

빌드 및 배포 역할을 생성하려면 다음 절차 시리즈를 완료합니다.

두 역할에 대한 신뢰 정책을 생성하려면

CodeCatalystECSUser로서 AWS CloudShell에서 신뢰 정책 파일을 생성합니다.

  1. 다음 파일을 생성합니다.

    cat > codecatalyst-ecs-trust-policy.json
  2. 터미널 프롬프트에서 다음 코드를 붙여넣습니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  3. 커서를 마지막 중괄호(}) 뒤에 놓습니다.

  4. Enter를 누른 다음 Ctrl+d를 눌러 파일을 저장하고 cat을 종료합니다.

빌드 정책 및 빌드 역할을 생성하려면
  1. 다음 빌드 정책을 생성합니다.

    1. CodeCatalystECSUser로서 AWS CloudShell에서 빌드 정책 파일을 생성합니다.

      cat > codecatalyst-ecs-build-policy.json
    2. 프롬프트에서 다음 코드를 입력합니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
    3. 커서를 마지막 중괄호(}) 뒤에 놓습니다.

    4. Enter를 누른 다음 Ctrl+d를 눌러 파일을 저장하고 cat을 종료합니다.

  2. AWS에 빌드 정책 추가:

    aws iam create-policy \ --policy-name codecatalyst-ecs-build-policy \ --policy-document file://codecatalyst-ecs-build-policy.json
  3. 명령 출력에서 와 같은 "arn": 값을 기록해 둡니다(예: arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy). 나중에 이 ARN이 필요합니다.

  4. 빌드 역할을 생성하여 신뢰 정책에 연결합니다.

    aws iam create-role \ --role-name codecatalyst-ecs-build-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  5. 빌드 정책을 빌드 역할에 연결합니다.

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-build-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy

    arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy가 앞서 언급한 빌드 정책의 ARN으로 대체되는 경우.

  6. 빌드 역할의 세부 정보를 표시합니다.

    aws iam get-role \ --role-name codecatalyst-ecs-build-role
  7. 역할의 "Arn": 값을 기록해 둡니다. 예시: arn:aws:iam::111122223333:role/codecatalyst-ecs-build-role. 나중에 이 ARN이 필요합니다.

배포 정책을 생성하고 역할을 배포하려면
  1. 배포 정책 생성:

    1. AWS CloudShell에서 배포 정책 파일을 생성합니다.

      cat > codecatalyst-ecs-deploy-policy.json
    2. 프롬프트에서 다음 코드를 입력합니다.

      { "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
      참고

      역할을 처음 사용하여 워크플로 작업을 실행할 때 리소스 정책 문에서 와일드카드를 사용한 다음, 사용 가능한 리소스 이름으로 정책 범위를 좁힙니다.

      "Resource": "*"
    3. 커서를 마지막 중괄호(}) 뒤에 놓습니다.

    4. Enter를 누른 다음 Ctrl+d를 눌러 파일을 저장하고 cat을 종료합니다.

  2. 배포 정책을 AWS에 추가합니다.

    aws iam create-policy \ --policy-name codecatalyst-ecs-deploy-policy \ --policy-document file://codecatalyst-ecs-deploy-policy.json
  3. 명령 출력에서 와 같은 "arn": 값을 기록해 둡니다(예: arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy). 나중에 이 ARN이 필요합니다.

  4. 빌드 역할을 생성하여 신뢰 정책에 연결합니다.

    aws iam create-role \ --role-name codecatalyst-ecs-deploy-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  5. 배포 정책을 배포 역할에 연결합니다. 여기서 arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy는 앞서 언급한 배포 정책의 ARN으로 대체됩니다.

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-deploy-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy
  6. 배포 역할의 세부 정보를 표시합니다.

    aws iam get-role \ --role-name codecatalyst-ecs-deploy-role
  7. 역할의 "Arn": 값을 기록해 둡니다. 예시: arn:aws:iam::111122223333:role/codecatalyst-ecs-deploy-role. 나중에 이 ARN이 필요합니다.

5단계: CodeCatalyst에 AWS 역할 추가

이 단계에서는 빌드 역할(codecatalyst-ecs-build-role)을 추가하고 스페이스의 CodeCatalyst 계정 연결에 역할(codecatalyst-ecs-deploy-role)을 배포합니다.

계정 연결에 빌드 및 배포 역할을 추가하려면
  1. CodeCatalyst에서 스페이스로 이동합니다.

  2. AWS 계정을 선택합니다. 계정 연결 목록이 나타납니다.

  3. 빌드 및 배포 역할을 생성한 계정을 나타내는 AWS 계정 연결을 선택합니다.

  4. AWS Management Console에서 역할 관리를 선택합니다.

    Amazon CodeCatalyst 스페이스에 IAM 역할 추가 페이지가 나타납니다. 페이지에 액세스하려면 로그인해야 할 수 있습니다.

  5. IAM에서 생성한 기존 역할 추가를 선택합니다.

    드롭다운 목록이 나타납니다. 목록에는 codecatalyst-runner.amazonaws.com.rproxy.goskope.comcodecatalyst.amazonaws.com 서비스 위탁자가 포함된 신뢰 정책이 있는 모든 IAM 역할이 표시됩니다.

  6. 드롭다운 목록에서 codecatalyst-ecs-build-role을 선택하고 역할 추가를 선택합니다.

    참고

    The security token included in the request is invalid가 표시되면 적절한 권한이 없기 때문일 수 있습니다. 이 문제를 해결하려면 AWS에서 로그아웃하고 CodeCatalyst 스페이스를 생성할 때 사용한 AWS 계정으로 다시 로그인합니다.

  7. IAM 역할 추가를 선택하고 IAM에서 생성한 기존 역할 추가를 선택한 다음 드롭다운 목록에서 codecatalyst-ecs-deploy-role을 선택합니다. [Add role]을 선택합니다.

    이제 스페이스에 빌드 및 배포 역할을 추가했습니다.

  8. Amazon CodeCatalyst 표시 이름의 값을 복사합니다. 워크플로를 생성할 때 나중에 이 값이 필요합니다.

6단계: 소스 리포지토리 생성

이 단계에서는 CodeCatalyst에 소스 리포지토리를 생성합니다. 이 리포지토리는 작업 정의 파일과 같은 자습서의 소스 파일을 저장합니다.

소스 리포지토리에 대한 자세한 정보는 소스 리포지토리 생성 섹션을 참조하세요.

소스 리포지토리를 생성하려면
  1. https://codecatalyst.aws/에서 CodeCatalyst 콘솔을 엽니다.

  2. codecatalyst-ecs-project 프로젝트로 이동합니다.

  3. 탐색 창에서 코드를 선택한 다음 소스 리포지토리를 선택합니다.

  4. 리포지토리 추가를 선택하고 리포지토리 생성을 선택합니다.

  5. 리포지토리 이름에 다음과 같이 입력합니다.

    codecatalyst-ecs-source-repository
  6. 생성(Create)을 선택합니다.

7단계: 소스 파일 추가

이 섹션에서는 Hello World 소스 파일을 CodeCatalyst 리포지토리 codecatalyst-ecs-source-repository에 추가합니다. 다음과 같이 구성됩니다.

  • index.html 파일 - 브라우저에 Hello World 메시지를 표시합니다.

  • Dockerfile - Docker 이미지에 사용할 기본 이미지와 Docker 명령으로 적용할 기본 이미지를 설명합니다.

  • taskdef.json 파일 - 클러스터에서 작업을 시작할 때 사용할 Docker 이미지를 정의합니다.

폴더의 구조는 다음과 같습니다.

. |— public-html | |— index.html |— Dockerfile |— taskdef.json
참고

다음 지침은 CodeCatalyst 콘솔을 사용하여 파일을 추가하는 방법을 보여주지만 원하는 경우 Git을 사용할 수 있습니다. 세부 정보는 소스 리포지토리 복제을 참조하세요.

index.html

index.html 파일에 브라우저에 Hello World 메시지가 표시됩니다.

index.html 파일을 추가하려면
  1. CodeCatalyst 콘솔에서 codecatalyst-ecs-source-repository 소스 리포지토리로 이동합니다.

  2. 파일에서 파일 생성을 선택합니다.

  3. 파일 이름에 다음과 같이 입력합니다.

    public-html/index.html
    중요

    동일한 이름의 폴더를 만들려면 public-html/ 접두사를 포함해야 합니다. index.html이 폴더에 있을 것으로 예상됩니다.

  4. 다음 코드를 텍스트 상자에 입력합니다.

    <html> <head> <title>Hello World</title> <style> body { background-color: black; text-align: center; color: white; font-family: Arial, Helvetica, sans-serif; } </style> </head> <body> <h1>Hello World</h1> </body> </html>
  5. 커밋을 선택한 다음 커밋을 다시 선택합니다.

    index.htmlpublic-html 폴더의 리포지토리에 추가됩니다.

Dockerfile

Dockerfile은 사용할 기본 Docker 이미지와 적용할 Docker 명령을 설명합니다. Dockerfile에 대한 자세한 내용은 Dockerfile 참조를 참조하세요.

여기에 지정된 Dockerfile은 Apache 2.4 기본 이미지(httpd)를 사용함을 나타냅니다. 또한 index.html 소스 파일을 웹 페이지를 제공하는 Apache 서버의 폴더에 복사하는 방법도 포함되어 있습니다. Dockerfile의 EXPOSE 지침은 컨테이너가 포트 80에서 수신 중임을 Docker에게 알립니다.

Dockerfile을 추가하려면
  1. 소스 리포지토리에서 파일 생성을 선택합니다.

  2. 파일 이름에 다음과 같이 입력합니다.

    Dockerfile

    파일 확장자는 제외합니다.

    중요

    Dockerfile은 리포지토리의 루트 폴더에 있어야 합니다. 워크플로의 Docker build 명령은 해당 파일이 있을 것으로 예상합니다.

  3. 다음 코드를 텍스트 상자에 입력합니다.

    FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80
  4. 커밋을 선택한 다음 커밋을 다시 선택합니다.

    Dockerfile이 리포지토리에 추가됩니다.

taskdef.json

이 단계에서 추가하는 taskdef.json 파일은 2단계: Amazon ECS에 자리 표시자 애플리케이션 배포에서 이미 지정한 파일과 동일하며 다음과 같은 차이점이 있습니다.

image: 필드(httpd:2.4)에 하드코딩된 Docker 이미지 이름을 지정하는 대신, 여기서 태스크 정의는 몇 가지 변수를 사용하여 이미지($REPOSITORY_URI$IMAGE_TAG)를 나타냅니다. 이러한 변수는 이후 단계에서 워크플로를 실행할 때 워크플로의 빌드 작업에서 생성된 실제 값으로 대체됩니다.

태스크 정의 파라미터에 대한 자세한 정보는 Amazon Elastic Container Service 개발자 안내서태스크 정의 파라미터를 참조하세요.

taskdef.json 파일을 추가하려면
  1. 소스 리포지토리에서 파일 생성을 선택합니다.

  2. 파일 이름에 다음과 같이 입력합니다.

    taskdef.json
  3. 다음 코드를 텍스트 상자에 입력합니다.

    { "executionRoleArn": "arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", # The $REPOSITORY_URI and $IMAGE_TAG variables will be replaced # by the workflow at build time (see the build action in the # workflow) "image": $REPOSITORY_URI:$IMAGE_TAG, "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "codecatalyst-ecs-task-def" }

    앞의 코드에서

    arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role

    태스크 실행 역할을 생성하는 방법에서 기록한 태스크 실행 역할의 ARN으로 바꿉니다.

  4. 커밋을 선택한 다음 커밋을 다시 선택합니다.

    taskdef.json 파일이 리포지토리에 추가됩니다.

8단계: 워크플로 생성 및 실행

이 단계에서는 소스 파일을 가져와 Docker 이미지로 빌드한 다음 Amazon ECS 클러스터에 이미지를 배포하는 워크플로를 생성합니다. 이 배포는 기존 Apache 자리 표시자 애플리케이션을 대체합니다.

워크플로는 순차적으로 실행되는 다음 구성 요소로 구성됩니다.

  • 트리거 - 이 트리거는 소스 리포지토리에 변경 사항을 푸시할 때 워크플로 실행을 자동으로 시작합니다. 트리거에 대한 자세한 내용은 트리거를 사용하여 워크플로 실행 자동 시작 주제를 참조하십시오.

  • 빌드 작업(BuildBackend) - 트리거 시 작업은 Dockerfile을 사용하여 Docker 이미지를 빌드하고 Amazon ECR에 이미지를 푸시합니다. 빌드 작업은 또한 taskdef.json를 올바른 image 필드 값으로 업데이트한 다음 이 파일의 출력 아티팩트를 생성합니다. 이 아티팩트는 다음 배포 작업의 입력으로 사용됩니다.

    빌드 작업에 대한 자세한 내용은 워크플로로 빌드하기 섹션을 참조하세요.

  • 배포 작업(DeployToECS) - 빌드 작업이 완료되면 배포 작업은 빌드 작업(TaskDefArtifact)에서 생성된 출력 아티팩트를 찾고, 그 안에서 taskdef.json을 찾아 Amazon ECS 서비스에 등록합니다. 그런 다음 Amazon ECS 서비스는 taskdef.json 파일의 지침에 따라 Amazon ECS 클러스터 내에서 Amazon ECS 작업 및 연결된 Docker 컨테이너를 실행합니다.

워크플로 생성 방법
  1. CodeCatalyst 콘솔의 탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.

  2. 워크플로 생성을 선택합니다.

  3. 소스 리포지토리에서 codecatalyst-ecs-source-repository를 선택합니다.

  4. 브랜치에서 main을 선택합니다.

  5. 생성(Create)을 선택합니다.

  6. YAML 샘플 코드를 삭제합니다.

  7. 다음 YAML 코드를 추가합니다.

    참고

    다음 YAML 코드에서 원하는 경우 Connections: 섹션을 생략할 수 있습니다. 이 섹션을 생략하는 경우 환경의 기본 IAM 역할 필드에 지정된 역할에 5단계: CodeCatalyst에 AWS 역할 추가에 설명된 두 역할의 권한 및 신뢰 정책이 포함되어 있는지 확인해야 합니다. 기본 IAM 역할이 있는 환경 설정에 대한 자세한 내용은 환경 생성 섹션을 참조하세요.

    Name: codecatalyst-ecs-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name: codecatalyst-ecs-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-ecs-build-role Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo - Name: IMAGE_TAG Value: ${WorkflowSource.CommitId} Configuration: Steps: #pre_build: - Run: echo Logging in to Amazon ECR... - Run: aws --version - Run: aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com #build: - Run: echo Build started on `date` - Run: echo Building the Docker image... - Run: docker build -t $REPOSITORY_URI:latest . - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG #post_build: - Run: echo Build completed on `date` - Run: echo Pushing the Docker images... - Run: docker push $REPOSITORY_URI:latest - Run: docker push $REPOSITORY_URI:$IMAGE_TAG # Replace the variables in taskdef.json - Run: find taskdef.json -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find taskdef.json -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat taskdef.json # The output artifact will be a zip file that contains a task definition file. Outputs: Artifacts: - Name: TaskDefArtifact Files: - taskdef.json DeployToECS: DependsOn: - BuildBackend Identifier: aws/ecs-deploy@v1 Environment: Name: codecatalyst-ecs-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-ecs-deploy-role Inputs: Sources: [] Artifacts: - TaskDefArtifact Configuration: region: us-west-2 cluster: codecatalyst-ecs-cluster service: codecatalyst-ecs-service task-definition: taskdef.json

    앞의 코드에서

    • codecatalyst-ecs-environment 인스턴스 두 개를 모두 사전 조건에서 생성한 환경 이름으로 바꿉니다.

    • codecatalyst-account-connection 인스턴스 두 개를 모두 계정 연결의 표시 이름으로 바꿉니다. 표시 이름은 숫자일 수 있습니다. 자세한 내용은 5단계: CodeCatalyst에 AWS 역할 추가 섹션을 참조하십시오.

    • codecatalyst-ecs-build-role4단계: AWS 역할 생성에서 생성한 빌드 역할 이름으로 바꿉니다.

    • 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo(Value: 속성 내)를 3단계: Amazon ECR 이미지 리포지토리 생성에서 생성한 Amazon ECR 리포지토리의 URI로 바꿉니다.

    • 111122223333.dkr.ecr.us-west-2.amazonaws.com(Run: aws ecr 명령 내)을 이미지 접미사(/codecatalyst-ecs-image-repo) 제외 Amazon ECR 리포지토리의 URI로 바꿉니다.

    • codecatalyst-ecs-deploy-role4단계: AWS 역할 생성에서 생성한 배포 역할의 이름으로 바꿉니다.

    • us-west-2의 인스턴스 두 개를 AWS 리전 코드로 바꿉니다. 리전 코드 목록은 AWS 일반 참조리전 엔드포인트를 참조하세요.

    참고

    빌드 및 배포 역할을 생성하지 않기로 결정한 경우 codecatalyst-ecs-build-rolecodecatalyst-ecs-deploy-roleCodeCatalystWorkflowDevelopmentRole-spaceName 역할 이름으로 바꿉니다. 이에 대한 자세한 내용은 4단계: AWS 역할 생성 섹션을 참조하세요.

    작은 정보

    이전 워크플로 코드에 표시된 findsed 명령을 사용하여 리포지토리 및 이미지 이름을 업데이트하는 대신 이 용도로 Amazon ECS 작업 정의 렌더링 작업을 사용할 수 있습니다. 자세한 내용은 Amazon ECS 작업 정의 수정 섹션을 참조하십시오.

  8. (선택 사항) 커밋하기 전에 YAML 코드가 유효한지 확인하려면 검증을 선택합니다.

  9. 커밋을 선택합니다.

  10. 워크플로 커밋 대화 상자에서 다음을 입력합니다.

    1. 커밋 메시지에서 텍스트를 제거하고 다음을 입력합니다.

      Add first workflow
    2. 리포지토리에서 codecatalyst-ecs-source-repository를 선택합니다.

    3. 브랜치 이름에서 기본을 선택합니다.

    4. 커밋을 선택합니다.

    이제 워크플로를 생성했습니다. 워크플로 상단에 정의된 트리거로 인해 워크플로 실행이 자동으로 시작됩니다. 특히 workflow.yaml 파일을 소스 리포지토리에 커밋(및 푸시)할 때 트리거가 워크플로 실행을 시작했습니다.

진행 중인 워크플로 실행을 보려면
  1. CodeCatalyst 콘솔의 탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.

  2. 방금 생성한 codecatalyst-ecs-workflow 워크플로를 선택합니다.

  3. BuildBackend를 선택하여 빌드 진행 상황을 확인합니다.

  4. DeployToECS를 선택하여 배포 진행 상황을 확인합니다.

    실행 세부 정보 보기에 대한 자세한 내용은 워크플로 실행 상태 및 세부 정보 보기를 참조하세요.

배포를 확인하려면
  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 클래식 콘솔을 엽니다.

  2. codecatalyst-ecs-cluster 클러스터를 선택합니다.

  3. 작업 탭을 선택합니다.

  4. 세 가지 태스크 중 하나를 선택합니다.

  5. 퍼블릭 IP 필드에서 개방형 주소를 선택합니다.

    브라우저에 "Hello World" 페이지가 나타나 Amazon ECS 서비스가 애플리케이션을 성공적으로 배포했음을 나타냅니다.

9단계: 소스 파일 변경

이 섹션에서는 소스 리포지토리의 index.html 파일을 변경합니다. 이 변경으로 인해 워크플로는 새 Docker 이미지를 빌드하고 커밋 ID로 태그를 지정하고 Amazon ECR에 푸시한 다음 Amazon ECS에 배포합니다.

index.html을 변경하려면
  1. CodeCatalyst 콘솔의 탐색 창에서 코드를 선택한 다음 소스 리포지토리를 선택하고 codecatalyst-ecs-source-repository 리포지토리를 선택합니다.

  2. [public-html]를 선택한 다음 [index.html]를 선택합니다.

    index.html의 내용이 나타납니다.

  3. 편집을 선택합니다.

  4. 14행에서 Hello World 텍스트를 Tutorial complete!로 변경합니다.

  5. 커밋을 선택한 다음 커밋을 다시 선택합니다.

    커밋으로 인해 새 워크플로 실행이 시작됩니다.

  6. (선택 사항) 소스 리포지토리의 메인 페이지로 이동하여 커밋 보기를 선택한 다음 index.html 변경 사항에 대한 커밋 ID를 기록해 둡니다.

  7. 배포 진행 상황 보기:

    1. 탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.

    2. 최신 실행을 보려면 codecatalyst-ecs-workflow를 선택합니다.

    3. BuildBackendDeployToECS를 선택하여 워크플로 실행 진행 상황을 확인합니다.

  8. 다음과 같이 애플리케이션이 업데이트되었는지 확인합니다.

    1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 클래식 콘솔을 엽니다.

    2. codecatalyst-ecs-cluster 클러스터를 선택합니다.

    3. 작업 탭을 선택합니다.

    4. 세 가지 태스크 중 하나를 선택합니다.

    5. 퍼블릭 IP 필드에서 개방형 주소를 선택합니다.

      Tutorial complete! 페이지가 나타납니다.

  9. (선택 사항) AWS에서 Amazon ECR 콘솔로 전환하고 새 Docker 이미지가 6단계의 커밋 ID로 태그 지정되었는지 확인합니다.

정리

요금이 부과되지 않도록 이 자습서에서 사용하는 파일과 서비스를 정리합니다.

AWS Management Console에서 다음 순서로 정리합니다.

  1. Amazon ECS에서 다음을 수행합니다.

    1. codecatalyst-ecs-service을 삭제합니다.

    2. codecatalyst-ecs-cluster을 삭제합니다.

    3. codecatalyst-ecs-task-definition 등록을 취소합니다.

  2. Amazon ECR에서 codecatalyst-ecs-image-repo를 삭제합니다.

  3. Amazon EC2에서 codecatalyst-ecs-security-group를 삭제합니다.

  4. IAM Identity Center에서 다음을 삭제합니다.

    1. CodeCatalystECSUser

    2. CodeCatalystECSPermissionSet

CodeCatalyst 콘솔에서 다음과 같이 정리합니다.

  1. codecatalyst-ecs-workflow를 삭제합니다.

  2. codecatalyst-ecs-environment를 삭제합니다.

  3. codecatalyst-ecs-source-repository를 삭제합니다.

  4. codecatalyst-ecs-project를 삭제합니다.

이 자습서에서는 CodeCatalyst 워크플로와 Amazon ECS에 배포 작업을 사용하여 Amazon ECS 서비스에 애플리케이션을 배포하는 방법을 배웠습니다.