기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: Amazon에 애플리케이션 배포 ECS
이 자습서에서는 워크플로, Amazon 및 기타 몇 가지 AWS 서비스를 사용하여 Amazon Elastic Container Service (AmazonECS) 에 서버리스 애플리케이션을 배포하는 방법을 알아봅니다. ECS 배포된 애플리케이션은 Apache 웹 서버 Docker 이미지를 기반으로 구축된 간단한 Hello World 웹 사이트입니다. 이 자습서에서는 클러스터 설정과 같은 필수 준비 작업을 안내한 다음 애플리케이션을 빌드하고 배포하기 위한 워크플로를 만드는 방법을 설명합니다.
작은 정보
이 튜토리얼을 따라가는 대신 완전한 Amazon ECS 설정을 수행하는 블루프린트를 사용할 수 있습니다. API블루프린트와 함께 Node.js 또는 AWS Fargate블루프린트와 API 함께 AWS Fargate Java를 사용해야 합니다. 자세한 내용은 블루프린트를 사용하여 프로젝트 생성 단원을 참조하십시오.
주제
사전 조건
시작하기 전:
-
연결된 AWS 계정이 있는 CodeCatalyst 공간이 필요합니다. 자세한 내용은 공백 생성 단원을 참조하십시오.
-
스페이스에 다음과 같은 빈 프로젝트가 필요합니다.
codecatalyst-ecs-project
처음부터 시작 옵션을 사용하여 이 프로젝트를 만들 수 있습니다.
자세한 내용은 Amazon에서 빈 프로젝트 생성 CodeCatalyst 단원을 참조하십시오.
-
프로젝트에는 다음과 같은 CodeCatalyst 환경이 필요합니다.
codecatalyst-ecs-environment
이 환경을 다음과 같이 구성하십시오.
-
원하는 유형 (예: 비프로덕션) 을 선택합니다.
-
AWS 계정을 여기에 연결하십시오.
-
기본 IAM 역할의 경우 원하는 역할을 선택합니다. 나중에 다른 역할을 지정하게 됩니다.
자세한 내용은 AWS 계정 및 에 배포 VPCs 단원을 참조하십시오.
-
1단계: AWS 사용자 설정 및 AWS CloudShell
이 자습서의 첫 번째 단계는 에서 AWS IAM Identity Center사용자를 생성하고 이 사용자로 AWS CloudShell 인스턴스를 시작하는 것입니다. 이 자습서를 진행하는 동안 CloudShell 는 개발용 컴퓨터이며 AWS 리소스와 서비스를 구성하는 곳입니다. 자습서를 완료한 후 이 사용자를 삭제하십시오.
참고
이 자습서에는 루트 사용자를 사용하지 마십시오. 별도의 사용자를 만들어야 합니다. 그렇지 않으면 나중에 AWS Command Line Interface (CLI) 에서 작업을 수행할 때 문제가 발생할 수 있습니다.
IAMIdentity Center 사용자에 대한 자세한 내용은 AWS IAM Identity Center 사용 설명서 및AWS CloudShell 사용 설명서를 참조하십시오. CloudShell
IAM아이덴티티 센터 사용자를 만들려면
에 AWS Management Console 로그인하고 에서 AWS IAM Identity Center 콘솔을 엽니다 https://console.aws.amazon.com/singlesignon/
. 참고
CodeCatalyst스페이스에 AWS 계정 연결된 계정을 사용하여 로그인해야 합니다. 스페이스로 이동하고 계정 탭을 선택하면 어떤 계정이 연결되어 있는지 확인할 수 있습니다. AWS 자세한 내용은 공백 생성 단원을 참조하십시오.
-
탐색 창에서 Users와 Add user를 차례대로 선택합니다.
-
사용자 이름에 다음을 입력합니다.
CodeCatalystECSUser
-
비밀번호에서 이 사용자와 공유할 수 있는 일회용 비밀번호 생성을 선택합니다.
-
이메일 주소 및 이메일 주소 확인에 IAM Identity Center에 아직 없는 이메일 주소를 입력합니다.
-
이름과 성에 다음을 입력합니다.
CodeCatalystECSUser
-
표시 이름에 자동으로 생성된 이름을 유지합니다.
CodeCatalystECSUser CodeCatalystECSUser
-
Next(다음)를 선택합니다.
-
그룹에 사용자 추가 페이지에서 다음을 선택합니다.
-
사용자 검토 및 추가 페이지에서 정보를 검토하고 사용자 추가를 선택합니다.
일회용 암호 대화 상자가 나타납니다.
-
복사를 선택한 다음 AWS 액세스 포털 URL 및 일회용 비밀번호를 포함한 로그인 정보를 붙여넣습니다.
-
닫기를 선택하세요.
권한 집합을 생성하려면
나중에 이 권한 세트를 할당할 CodeCatalystECSUser
것입니다.
-
탐색 창에서 권한 세트를 선택한 다음 권한 세트 생성을 선택합니다.
-
사전 정의된 권한 집합을 선택한 다음 선택합니다 AdministratorAccess. 이 정책은 모든 AWS 서비스사람에게 전체 권한을 제공합니다.
-
Next(다음)를 선택합니다.
-
권한 세트 이름에 다음을 입력합니다.
CodeCatalystECSPermissionSet
-
Next(다음)를 선택합니다.
-
검토 및 생성 페이지에서 정보를 검토하고 생성을 선택합니다.
권한 세트를 할당하려면 CodeCatalyst ECSUser
-
탐색 창에서 선택한 다음 현재 로그인되어 AWS 계정 있는 권한 옆의 확인란을 선택합니다. AWS 계정
-
사용자 또는 그룹 할당을 선택합니다.
-
사용자 탭을 선택합니다.
-
CodeCatalystECSUser
옆의 확인란을 선택합니다. -
Next(다음)를 선택합니다.
-
CodeCatalystECSPermissionSet
옆의 확인란을 선택합니다. -
Next(다음)를 선택합니다.
-
정보를 검토하고 제출을 선택합니다.
이제 두 개를 하나로
CodeCatalystECSUser
AWS 계정묶어CodeCatalystECSPermissionSet
자신에게 할당했습니다.
다음과 같이 로그아웃하고 다시 로그인하려면 CodeCatalyst ECSUser
-
로그아웃하기 전에 AWS 액세스 URL 포털과 사용자 이름, 일회용 비밀번호가 있는지 확인하세요.
CodeCatalystECSUser
이전에 이 정보를 텍스트 편집기에 복사했어야 합니다.참고
이 정보가 없는 경우 IAM Identity Center의
CodeCatalystECSUser
세부 정보 페이지로 이동하여 암호 재설정, 일회용 암호 생성 [...] 을 선택합니다. 그리고 암호를 다시 재설정하여 화면에 정보를 표시하십시오. -
AWS로그아웃하세요.
-
AWS 액세스 URL 포털을 브라우저의 주소 표시줄에 붙여넣습니다.
-
사용자 이름과 일회용 비밀번호로 로그인합니다.
CodeCatalystECSUser
-
새 비밀번호에 비밀번호를 입력하고 새 비밀번호 설정을 선택합니다.
화면에 AWS 계정 상자가 나타납니다.
-
선택한 AWS 계정다음
CodeCatalystECSUser
사용자에게 할당한 AWS 계정 이름과 권한 집합을 선택합니다. -
CodeCatalystECSPermissionSet
옆에 있는 관리 콘솔을 선택합니다.가 AWS Management Console 나타납니다. 이제 적절한
CodeCatalystECSUser
권한으로 로그인했습니다.
AWS CloudShell 인스턴스를 시작하려면
-
CodeCatalystECSUser
마찬가지로 상단 내비게이션 바에서 AWS 아이콘 ( ) 을 선택합니다.의 메인 페이지가 AWS Management Console 나타납니다.
-
상단 내비게이션 바에서 AWS CloudShell 아이콘 ( ) 을 선택합니다.
CloudShell 열립니다. CloudShell 환경이 만들어지는 동안 기다려 주세요.
참고
CloudShell 아이콘이 보이지 않는 경우 에서 지원하는 지역에 있는지 확인하세요 CloudShell. 이 자습서에서는 사용자가 미국 서부(오레곤) 리전에 있다고 가정합니다.
가 AWS CLI 설치되었는지 확인하려면
-
CloudShell 터미널에서 다음을 입력합니다.
aws --version
-
버전이 나타나는지 확인합니다.
AWS CLI 는 이미 현재 사용자에 맞게 구성되어 있으므로 일반적으로 그렇듯이 AWS CLI 키와 자격 증명을 구성할 필요가 없습니다.
CodeCatalystECSUser
2단계: Amazon에 플레이스홀더 애플리케이션 배포 ECS
이 섹션에서는 ECS Amazon에 플레이스홀더 애플리케이션을 수동으로 배포합니다. 이 플레이스홀더 애플리케이션은 워크플로에서 배포한 Hello World 애플리케이션으로 대체됩니다. 자리 표시자 응용 프로그램은 Apache 웹 서버입니다.
Amazon에 대한 자세한 내용은 Amazon ECS Elastic 컨테이너 서비스 개발자 안내서를 참조하십시오.
다음 일련의 절차를 완료하여 플레이스홀더 애플리케이션을 배포하십시오.
작업 실행 역할을 만들려면
이 역할은 ECS Amazon과 사용자를 대신하여 API 전화를 걸 수 있는 AWS Fargate 권한을 부여합니다.
-
신뢰 정책 생성:
-
에서 AWS CloudShell다음 명령을 입력합니다.
cat > codecatalyst-ecs-trust-policy.json
CloudShell 터미널에 깜박이는 프롬프트가 나타납니다.
-
프롬프트에 다음 코드를 입력합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
마지막 중괄호 (
}
) 뒤에 커서를 놓습니다. -
버튼을 누른
Enter
다음Ctrl+d
파일을 저장하고 cat을 종료합니다.
-
-
작업 실행 역할 생성:
aws iam create-role \ --role-name codecatalyst-ecs-task-execution-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
-
AWS 관리형
AmazonECSTaskExecutionRolePolicy
정책을 역할에 연결합니다.aws iam attach-role-policy \ --role-name codecatalyst-ecs-task-execution-role \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
-
역할 세부 정보 표시:
aws iam get-role \ --role-name codecatalyst-ecs-task-execution-role
-
역할의
"Arn":
값 (예:) 을 기록해 둡니다arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
. 나중에 이 Amazon 리소스 이름 (ARN) 이 필요합니다.
Amazon ECS 클러스터를 만들려면
이 클러스터에는 Apache 플레이스홀더 애플리케이션이 포함되며 나중에는 Hello World 애플리케이션이 포함됩니다.
-
에서와
CodeCatalystECSUser
AWS CloudShell같이 빈 클러스터를 생성합니다.aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
-
(선택 사항) 클러스터가 성공적으로 생성되었는지 확인합니다.
aws ecs list-clusters
codecatalyst-ecs-cluster
클러스터가 목록에 나타나야 하는데, 이는 성공적으로 생성되었음을 나타냅니다. ARN
작업 정의 파일을 만들려면
작업 정의 파일은 가져온 Apache 2.4 웹 서버httpd:2.4
) 를 실행하도록 지정합니다. DockerHub
-
에서와
CodeCatalystECSUser
AWS CloudShell같이 작업 정의 파일을 생성합니다.cat > taskdef.json
-
프롬프트에 다음 코드를 붙여넣습니다.
{ "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 작업 실행 역할을 만들려면 언급한 작업 실행 역할로 바꾸십시오.
-
마지막 중괄호 (
}
) 뒤에 커서를 놓습니다. -
버튼을 누른
Enter
다음Ctrl+d
파일을 저장하고 cat을 종료합니다.
Amazon에 작업 정의 파일을 등록하려면 ECS
-
에서와
CodeCatalystECSUser
AWS CloudShell같이 작업 정의를 등록하십시오.aws ecs register-task-definition \ --cli-input-json file://taskdef.json
-
(선택 사항) 작업 정의가 등록되었는지 확인합니다.
aws ecs list-task-definitions
codecatalyst-ecs-task-def
작업 정의가 목록에 나타나야 합니다.
Amazon ECS 서비스를 만들려면
Amazon ECS 서비스는 Apache 플레이스홀더 애플리케이션의 작업 (및 관련 Docker 컨테이너) 을 실행하고 나중에는 Hello World 애플리케이션을 실행합니다.
-
마찬가지로
CodeCatalystECSUser
, 아직 전환하지 않았다면 Amazon Elastic Container Service 콘솔로 전환하십시오. -
앞서 만든 클러스터를 선택하세요
codecatalyst-ecs-cluster
. -
[서비스] 탭에서 [Create] 를 선택합니다.
-
만들기 페이지에서 다음을 수행합니다.
-
다음에 나열된 설정을 제외한 모든 기본 설정을 유지합니다.
-
시작 유형에서 선택합니다 FARGATE.
-
작업 정의의 패밀리 드롭다운 목록에서 다음을 선택합니다.
codecatalyst-ecs-task-def
-
서비스 이름에 다음을 입력합니다.
codecatalyst-ecs-service
-
원하는 작업에 다음을 입력합니다.
3
이 자습서에서는 각 작업이 단일 Docker 컨테이너를 시작합니다.
-
네트워킹 섹션을 확장하세요.
-
원하는 VPC항목을 선택하십시오VPC.
-
서브넷의 경우 원하는 서브넷을 선택합니다.
참고
서브넷을 하나만 지정하십시오. 이 자습서에 필요한 것은 여기까지입니다.
참고
AND 서브넷이 없는 경우 해당 VPC 서브넷을 생성하십시오. Amazon VPC 사용 설명서의 서브넷 생성 및 서브넷 생성을 참조하십시오. VPC VPC
-
보안 그룹의 경우 새 보안 그룹 생성을 선택하고 다음을 수행하십시오.
-
보안 그룹 이름에 다음을 입력합니다.
codecatalyst-ecs-security-group
-
보안 그룹 설명에 다음을 입력합니다.
CodeCatalyst ECS security group
-
규칙 추가를 선택합니다. 유형에서 선택하고 HTTP, 소스에 대해서는 Anywhere를 선택합니다.
-
-
하단에서 [만들기] 를 선택합니다.
-
서비스가 생성되는 동안 잠시 기다려 주세요. 몇 분 정도 소요될 수 있습니다.
-
-
태스크 탭을 선택한 다음 새로 고침 버튼을 선택합니다. 세 작업 모두의 [마지막 상태] 열이 [실행 중] 으로 설정되어 있는지 확인하십시오.
(선택 사항) Apache 플레이스홀더 애플리케이션이 실행 중인지 확인하려면
-
태스크 탭에서 세 가지 작업 중 하나를 선택합니다.
-
퍼블릭 IP 필드에서 오픈 주소를 선택합니다.
It Works!
페이지가 나타납니다. 이는 Amazon ECS 서비스가 Apache 이미지를 사용하여 Docker 컨테이너를 시작하는 작업을 성공적으로 시작했음을 나타냅니다.자습서의 이 시점에서는 Amazon ECS 클러스터, 서비스, 작업 정의와 Apache 플레이스홀더 애플리케이션을 수동으로 배포했습니다. 이 모든 항목이 준비되었으므로 이제 Apache 자리 표시자 애플리케이션을 자습서의 Hello World 애플리케이션으로 대체할 워크플로를 만들 준비가 되었습니다.
3단계: Amazon ECR 이미지 리포지토리 생성
이 섹션에서는 Amazon Elastic 컨테이너 레지스트리 (AmazonECR) 에 프라이빗 이미지 리포지토리를 생성합니다. 이 리포지토리에는 이전에 배포한 Apache 플레이스홀더 이미지를 대체할 자습서의 Docker 이미지가 저장됩니다.
Amazon에 대한 자세한 내용은 Amazon ECR Elastic 컨테이너 레지스트리 사용 설명서를 참조하십시오.
Amazon에서 이미지 리포지토리를 만들려면 ECR
-
에서와 ECR 같이
CodeCatalystECSUser
Amazon에 AWS CloudShell빈 리포지토리를 생성하십시오.aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
-
Amazon ECR 리포지토리의 세부 정보를 표시합니다.
aws ecr describe-repositories \ --repository-names codecatalyst-ecs-image-repo
-
“repositoryUri”:
값을 기록해 둡니다 (예:)111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
.나중에 워크플로에 리포지토리를 추가할 때 필요합니다.
4단계: AWS 역할 생성
이 섹션에서는 CodeCatalyst 워크플로가 작동하는 데 필요한 AWS IAM 역할을 생성합니다. 이러한 역할은 다음과 같습니다.
-
빌드 역할 - (워크플로의) CodeCatalyst 빌드 작업에 AWS 계정에 액세스하고 Amazon ECR 및 Amazon에 글을 쓸 수 있는 권한을 EC2 부여합니다.
-
배포 역할 - 사용자 AWS 계정ECS, Amazon 및 기타 몇 가지 AWS 서비스에 액세스할 수 있는 CodeCatalyst Deploy to ECS Action (워크플로의) 권한을 부여합니다.
IAM역할에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서의 IAM 역할을 참조하십시오.
참고
시간을 절약하기 위해 앞서 나열한 두 역할 대신 CodeCatalystWorkflowDevelopmentRole-
역할이라는 단일 역할을 만들 수 있습니다. 자세한 내용은 계정 및 스페이스에 대한 CodeCatalystWorkflowDevelopmentRole-spaceName역할 만들기 단원을 참조하십시오. spaceName
CodeCatalystWorkflowDevelopmentRole-
역할에는 보안 위험을 초래할 수 있는 매우 광범위한 권한이 있다는 점을 이해하세요. 보안이 덜 우려되는 자습서 및 시나리오에서만 이 역할을 사용하는 것이 좋습니다. 이 자습서에서는 앞서 나열한 두 개의 역할을 생성한다고 가정합니다.spaceName
빌드 및 배포 역할을 만들려면 AWS Management Console 또는 를 AWS CLI사용할 수 있습니다.
5단계: AWS 역할 추가 CodeCatalyst
이 단계에서는 스페이스의 CodeCatalyst 계정 연결에 빌드 역할 (codecatalyst-ecs-build-role
codecatalyst-ecs-deploy-role
) 과 배포 역할 () 을 추가합니다.
계정 연결에 빌드 및 배포 역할을 추가하려면
-
CodeCatalyst에서 스페이스로 이동합니다.
-
AWS 계정을 선택하세요. 계정 연결 목록이 나타납니다.
-
빌드 및 배포 역할을 생성한 AWS 계정을 나타내는 계정 연결을 선택합니다.
-
관리 콘솔에서 역할 AWS 관리를 선택합니다.
Amazon CodeCatalyst 스페이스에 IAM 역할 추가 페이지가 나타납니다. 페이지에 액세스하려면 로그인해야 할 수 있습니다.
-
에서 생성한 기존 역할 추가를 선택합니다IAM.
드롭다운 목록이 나타납니다. 목록에는
codecatalyst-runner.amazonaws.com
및codecatalyst.amazonaws.com
서비스 주체를 포함하는 신뢰 정책이 적용된 모든 IAM 역할이 표시됩니다. -
드롭다운 목록에서 역할을 선택하고 역할
codecatalyst-ecs-build-role
추가를 선택합니다.참고
표시되는
The security token included in the request is invalid
경우 적절한 권한이 없기 때문일 수 있습니다. 이 문제를 해결하려면 CodeCatalyst 스페이스를 만들 때 사용한 AWS 계정으로 로그아웃하고 다시 로그인하세요. AWS -
IAM역할 추가를 선택하고 에서 IAM 생성한 기존 역할 추가를 선택한 다음 드롭다운 목록에서 선택합니다
codecatalyst-ecs-deploy-role
. [Add role]을 선택합니다.이제 스페이스에 빌드 및 배포 역할을 추가했습니다.
-
Amazon CodeCatalyst 디스플레이 이름의 값을 복사합니다. 이 값은 나중에 워크플로를 만들 때 필요합니다.
6단계: 소스 리포지토리 만들기
이 단계에서는 에서 소스 리포지토리를 생성합니다 CodeCatalyst. 이 저장소에는 자습서의 소스 파일 (예: 작업 정의 파일) 이 저장됩니다.
소스 리포지토리에 대한 자세한 내용은 을 참조하십시오. 소스 리포지토리 생성
소스 리포지토리를 생성하려면
-
프로젝트로 이동합니다
codecatalyst-ecs-project
. -
탐색 창에서 코드를 선택한 다음 소스 리포지토리를 선택합니다.
-
리포지토리 추가를 선택하고 리포지토리 생성을 선택합니다.
-
리포지토리 이름에 다음을 입력합니다.
codecatalyst-ecs-source-repository
-
생성(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 파일을 추가하려면
-
CodeCatalyst 콘솔에서 소스 리포지토리로 이동합니다
codecatalyst-ecs-source-repository
. -
파일에서 파일 생성을 선택합니다.
-
파일 이름에 다음을 입력합니다.
public-html/index.html
중요
같은 이름의 폴더를 만들려면
public-html/
접두사를 포함해야 합니다.index.html
이 폴더에 있을 것으로 예상됩니다. -
텍스트 상자에 다음 코드를 입력합니다.
<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>
-
[커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.
저장소의
public-html
폴더에index.html
추가됩니다.
Dockerfile
Dockerfile은 사용할 기본 Docker 이미지와 여기에 적용할 Docker 명령을 설명합니다. Dockerfile에 대한 자세한 내용은 Dockerfile 참조를 참조하십시오.
여기에 지정된 Dockerfile은 Apache 2.4 기본 이미지 () 를 사용하도록 나타냅니다. httpd
또한 웹 페이지를 제공하는 Apache 서버의 폴더에 호출된 소스 파일을 index.html
복사하기 위한 지침도 포함되어 있습니다. Dockerfile의 EXPOSE
지침은 컨테이너가 포트 80에서 수신 중임을 Docker에 알립니다.
도커파일을 추가하려면
-
소스 리포지토리에서 파일 생성을 선택합니다.
-
파일 이름에 다음을 입력합니다.
Dockerfile
파일 확장자를 포함하지 마십시오.
중요
Dockerfile은 리포지토리의 루트 폴더에 있어야 합니다. 워크플로의
Docker build
명령에서는 해당 파일이 있을 것으로 예상합니다. -
텍스트 상자에 다음 코드를 입력합니다.
FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80
-
[커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.
Dockerfile이 리포지토리에 추가됩니다.
taskdef.json
이 단계에서 추가하는 taskdef.json
파일은 이미 지정한 파일과 동일하지만 다음과 같은 차이점이 있습니다. 2단계: Amazon에 플레이스홀더 애플리케이션 배포 ECS
여기의 작업 정의에서는 image:
필드 (httpd:2.4
) 에 하드코딩된 Docker 이미지 이름을 지정하는 대신 두 개의 변수를 사용하여 이미지를 나타냅니다: 및. $REPOSITORY_URI
$IMAGE_TAG
이러한 변수는 이후 단계에서 워크플로를 실행할 때 워크플로의 빌드 작업에서 생성된 실제 값으로 대체됩니다.
작업 정의 파라미터에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서의 작업 정의 파라미터를 참조하십시오.
taskdef.json 파일을 추가하려면
-
소스 리포지토리에서 파일 생성을 선택합니다.
-
파일 이름에 다음을 입력합니다.
taskdef.json
-
텍스트 상자에 다음 코드를 입력합니다.
{ "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 작업 실행 역할을 만들려면 언급한 작업 실행 역할로 바꾸십시오.
-
[커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.
taskdef.json
파일이 저장소에 추가됩니다.
8단계: 워크플로우 생성 및 실행
이 단계에서는 소스 파일을 가져와 Docker 이미지로 빌드한 다음 Amazon ECS 클러스터에 이미지를 배포하는 워크플로를 생성합니다. 이 배포는 기존 Apache 플레이스홀더 애플리케이션을 대체합니다.
워크플로는 순차적으로 실행되는 다음과 같은 구성 요소로 구성됩니다.
-
트리거 - 이 트리거는 소스 리포지토리에 변경 내용을 푸시할 때 워크플로가 자동으로 실행됩니다. 트리거에 대한 자세한 내용은 트리거를 사용하여 자동으로 워크플로 실행 시작 주제를 참조하십시오.
-
빌드 작업 (
BuildBackend
) — 트리거 시 작업은 Dockerfile을 사용하여 Docker 이미지를 빌드하고 Amazon에 이미지를 푸시합니다. ECR 또한 빌드 작업은 를taskdef.json
올바른image
필드 값으로 업데이트한 다음 이 파일의 출력 아티팩트를 생성합니다. 이 아티팩트는 다음 단계인 배포 작업의 입력으로 사용됩니다.빌드 작업에 대한 자세한 내용은 을 참조하십시오워크플로를 사용한 빌드.
-
배포 작업 (
DeployToECS
) — 빌드 작업이 완료되면 배포 작업은 빌드 작업 (TaskDefArtifact
) 에서 생성된 출력 아티팩트를 찾아 그taskdef.json
내부를 찾아 Amazon ECS 서비스에 등록합니다. 그러면 서비스가taskdef.json
파일의 지침에 따라 Amazon 클러스터 내에서 세 개의 Amazon ECS 작업과 관련 Hello World Docker 컨테이너를 실행합니다. ECS
워크플로 생성 방법
-
CodeCatalyst 콘솔의 탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.
-
워크플로 만들기를 선택합니다.
-
소스 리포지토리의 경우 선택합니다
codecatalyst-ecs-source-repository
. -
Branch의 경우 선택하십시오
main
. -
생성(Create)을 선택합니다.
YAML샘플 코드를 삭제합니다.
-
다음 YAML 코드를 추가합니다.
참고
다음 YAML 코드에서는 원하는 경우
Connections:
섹션을 생략할 수 있습니다. 이러한 섹션을 생략하는 경우 환경의 기본 역할 필드에 지정된 역할에 에서 설명한 두 IAM 역할의 권한 및 신뢰 정책이 포함되는지 확인해야 합니다. 5단계: AWS 역할 추가 CodeCatalyst 기본 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 --regionus-west-2
| docker login --username AWS --password-stdin111122223333.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단계: AWS 역할 추가 CodeCatalyst 단원을 참조하십시오. -
codecatalyst-ecs-build-role
에서 만든 빌드 역할의 이름을 사용합니다4단계: AWS 역할 생성. -
111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
(Value:
속성에) 생성한 Amazon ECR 리포지토리의 정보를 포함합니다3단계: Amazon ECR 이미지 리포지토리 생성. URI -
111122223333.dkr.ecr.us-west-2.amazonaws.com
(Run: aws ecr
명령에서) 이미지 접미사 (/codecatalyst-ecs-image-repo
) 가 없는 Amazon ECR 리포지토리를 사용합니다. URI -
codecatalyst-ecs-deploy-role
에서 생성한 배포 역할의 이름을 사용합니다. 4단계: AWS 역할 생성 -
의 두 인스턴스 모두
us-west-2
AWS 지역 코드를 사용하세요. 지역 코드 목록은 의 지역 엔드포인트를 참조하십시오. AWS 일반 참조
참고
빌드 및 배포 역할을 생성하지 않기로 결정했다면 다음을 대체하세요.
codecatalyst-ecs-build-role
그리고codecatalyst-ecs-deploy-role
CodeCatalystWorkflowDevelopmentRole-
역할 이름을 입력하세요. 이에 대한 자세한 내용은 4단계: AWS 역할 생성 섹션을 참조하세요.spaceName
작은 정보
이전 워크플로 코드에 표시된
find
및sed
명령을 사용하여 리포지토리와 이미지 이름을 업데이트하는 대신 Render Amazon ECS 작업 정의 작업을 이 용도로 사용할 수 있습니다. 자세한 내용은 Amazon ECS 작업 정의 수정 단원을 참조하십시오. -
-
(선택 사항) [Validate] 를 선택하여 커밋하기 전에 YAML 코드가 유효한지 확인하십시오.
-
커밋을 선택합니다.
-
워크플로 커밋 대화 상자에 다음을 입력합니다.
-
커밋 메시지의 경우 텍스트를 제거하고 다음을 입력합니다.
Add first workflow
-
리포지토리의 경우 선택합니다
codecatalyst-ecs-source-repository
. -
브랜치 이름으로 main을 선택합니다.
-
커밋을 선택합니다.
이제 워크플로가 생성되었습니다. 워크플로 맨 위에 정의된 트리거로 인해 워크플로 실행이 자동으로 시작됩니다. 특히,
workflow.yaml
파일을 소스 리포지토리에 커밋 (및 푸시) 하면 트리거가 워크플로 실행을 시작했습니다. -
워크플로 실행 진행 상황을 보려면
-
CodeCatalyst 콘솔의 탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.
-
방금 만든 워크플로를 선택합니다.
codecatalyst-ecs-workflow
-
빌드 진행 상황을 BuildBackend확인하도록 선택합니다.
-
DeployToECS선택하여 배포 진행 상황을 확인하세요.
실행 세부 정보 보기에 대한 자세한 내용은 을 참조하십시오워크플로 실행 상태 및 세부 정보 보기.
배포를 확인하려면
-
에서 Amazon ECS 클래식 콘솔을 엽니다 https://console.aws.amazon.com/ecs/
. -
클러스터를 선택하세요
codecatalyst-ecs-cluster
. -
작업 탭을 선택합니다.
-
세 가지 작업 중 하나를 선택합니다.
-
퍼블릭 IP 필드에서 공개 주소를 선택합니다.
브라우저에 Amazon ECS 서비스가 애플리케이션을 성공적으로 배포했음을 나타내는 “Hello World” 페이지가 나타납니다.
9단계: 소스 파일 변경
이 섹션에서는 소스 리포지토리의 index.html
파일을 변경합니다. 이 변경으로 인해 워크플로우는 새 Docker 이미지를 빌드하고, 커밋 ID로 태그를 지정하고, Amazon으로 푸시하고ECR, ECS Amazon에 배포합니다.
index.html 변경하기
-
CodeCatalyst 콘솔의 탐색 창에서 코드를 선택한 다음 소스 리포지토리를 선택한 다음 리포지토리를 선택합니다.
codecatalyst-ecs-source-repository
-
[
public-html
]를 선택한 다음 [index.html
]를 선택합니다.의 내용이 나타납니다.
index.html
-
편집을 선택합니다.
-
14번째 줄에서
Hello World
텍스트를 로 변경합니다Tutorial complete!
. -
[커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.
커밋하면 새 워크플로가 실행됩니다.
-
(선택 사항) 소스 리포지토리의 기본 페이지로 이동하여 커밋 보기를 선택한 다음
index.html
변경 사항의 커밋 ID를 기록해 둡니다. -
배포 진행 상황 보기:
-
탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.
-
최근
codecatalyst-ecs-workflow
실행을 보도록 선택합니다. -
선택하고 BuildBackend워크플로우 실행 진행 DeployToECS상황을 확인하세요.
-
-
다음과 같이 애플리케이션이 업데이트되었는지 확인하십시오.
-
에서 Amazon ECS 클래식 콘솔을 엽니다 https://console.aws.amazon.com/ecs/
. -
클러스터를 선택하세요
codecatalyst-ecs-cluster
. -
작업 탭을 선택합니다.
-
세 가지 작업 중 하나를 선택합니다.
-
퍼블릭 IP 필드에서 공개 주소를 선택합니다.
Tutorial complete!
페이지가 나타납니다.
-
-
(선택 사항) 에서 AWS Amazon ECR 콘솔로 전환하여 새 Docker 이미지에 6단계의 커밋 ID 태그가 지정되었는지 확인합니다.
정리
요금이 부과되지 않도록 이 자습서에서 사용되는 파일 및 서비스를 정리하세요.
AWS Management Console에서는 다음과 같은 순서로 정리하십시오.
-
ECSAmazon에서는 다음을 수행하십시오.
-
삭제
codecatalyst-ecs-service
. -
삭제
codecatalyst-ecs-cluster
. -
codecatalyst-ecs-task-definition
등록을 취소합니다.
-
-
ECRAmazon에서는 삭제하십시오
codecatalyst-ecs-image-repo
. -
EC2Amazon에서는 삭제하십시오
codecatalyst-ecs-security-group
. -
IAMID 센터에서 삭제:
-
CodeCatalystECSUser
-
CodeCatalystECSPermissionSet
-
CodeCatalyst 콘솔에서 다음과 같이 정리합니다.
-
삭제
codecatalyst-ecs-workflow
. -
삭제
codecatalyst-ecs-environment
. -
삭제
codecatalyst-ecs-source-repository
. -
삭제
codecatalyst-ecs-project
.
이 자습서에서는 CodeCatalyst 워크플로와 Amazon에 배포 ECS 작업을 사용하여 Amazon ECS 서비스에 애플리케이션을 배포하는 방법을 배웠습니다.