InfoGrab Docs

Amazon Elastic Container Service에 배포

요약

이 단계별 가이드는 GitLab.com에서 호스팅된 프로젝트를 Amazon Elastic Container Service (ECS)에 배포하는 방법을 안내합니다. 이 가이드에서는 AWS 콘솔을 사용하여 ECS 클러스터를 수동으로 생성하는 것으로 시작합니다.

이 단계별 가이드는 GitLab.com에서 호스팅된 프로젝트를 Amazon Elastic Container Service (ECS)에 배포하는 방법을 안내합니다.

이 가이드에서는 AWS 콘솔을 사용하여 ECS 클러스터를 수동으로 생성하는 것으로 시작합니다. GitLab 템플릿에서 생성한 간단한 애플리케이션을 배포합니다.

이 지침은 GitLab.com과 GitLab Self-Managed 인스턴스 모두에서 작동합니다. 자체 러너가 구성되어 있는지 확인하세요.

사전 조건#

  • AWS 계정. 기존 AWS 계정으로 로그인하거나 새 계정을 생성합니다.
  • 이 가이드에서는 us-east-2 리전에 인프라를 생성합니다. 어떤 리전이든 사용할 수 있지만, 시작한 후에는 변경하지 마세요.

AWS에서 인프라 및 초기 배포 생성#

GitLab에서 애플리케이션을 배포하려면 먼저 AWS에서 인프라 및 초기 배포를 생성해야 합니다. 여기에는 ECS 클러스터ECS 태스크 정의, ECS 서비스, 컨테이너화된 애플리케이션 이미지 같은 관련 구성 요소가 포함됩니다.

첫 번째 단계로 프로젝트 템플릿에서 데모 애플리케이션을 생성합니다.

템플릿에서 새 프로젝트 생성#

GitLab 프로젝트 템플릿을 사용하여 시작합니다. 이름에서 알 수 있듯이, 이 프로젝트는 잘 알려진 프레임워크를 기반으로 구축된 기본적인 애플리케이션을 제공합니다.

  1. 오른쪽 상단 모서리에서 새로 만들기(+)를 선택한 다음 새 프로젝트/리포지터리를 선택합니다.
  2. 템플릿에서 생성을 선택하면 Ruby on Rails, Spring, 또는 NodeJS Express 프로젝트 중에서 선택할 수 있습니다. 이 가이드에서는 Ruby on Rails 템플릿을 사용합니다.
  3. 프로젝트 이름을 지정합니다. 이 예시에서는 ecs-demo라고 합니다. GitLab Ultimate 플랜에서 사용 가능한 기능을 활용할 수 있도록 공개로 설정합니다.
  4. 프로젝트 생성을 선택합니다.

데모 프로젝트를 생성했으면, 이제 애플리케이션을 컨테이너화하여 컨테이너 레지스트리에 push해야 합니다.

GitLab 컨테이너 레지스트리에 컨테이너화된 애플리케이션 이미지 push#

ECS는 컨테이너 오케스트레이션 서비스이므로, 인프라 빌드 중에 컨테이너화된 애플리케이션 이미지를 제공해야 합니다. 이를 위해 GitLab Auto BuildContainer Registry를 사용할 수 있습니다.

  1. 상단 표시줄에서 검색 또는 이동을 선택하고 ecs-demo 프로젝트를 찾습니다.

  2. CI/CD 설정을 선택합니다. .gitlab-ci.yml 생성 양식으로 이동합니다.

  3. 다음 콘텐츠를 빈 .gitlab-ci.yml에 복사하여 붙여넣습니다. 이는 ECS에 대한 지속적 배포 파이프라인을 정의합니다.

    include:
      - template: AWS/Deploy-ECS.gitlab-ci.yml
    
  4. 변경 사항 커밋을 선택합니다. 그러면 자동으로 새 파이프라인이 트리거됩니다. 이 파이프라인에서 build 작업이 애플리케이션을 컨테이너화하고 이미지를 GitLab 컨테이너 레지스트리에 push합니다.

  5. 배포 > 컨테이너 레지스트리를 방문합니다. 애플리케이션 이미지가 push되었는지 확인합니다.

    GitLab 컨테이너 레지스트리의 컨테이너화된 애플리케이션 이미지.

이제 AWS에서 pull할 수 있는 컨테이너화된 애플리케이션 이미지가 있습니다. 다음으로 AWS에서 이 애플리케이션 이미지가 사용되는 방식의 사양을 정의합니다.

ECS 클러스터가 아직 연결되지 않아 production_ecs 작업이 실패합니다. 나중에 이를 수정할 수 있습니다.

ECS 태스크 정의 생성#

ECS 태스크 정의ECS 서비스에서 애플리케이션 이미지를 시작하는 방법에 대한 사양입니다.

  1. AWS 콘솔에서 ECS > 태스크 정의로 이동합니다.

  2. 새 태스크 정의 생성을 선택합니다.

    태스크 정의 페이지에 '새 태스크 정의 생성' 버튼이 있습니다.

  3. 시작 유형으로 EC2를 선택합니다. 다음 단계를 선택합니다.

  4. 태스크 정의 이름ecs_demo를 설정합니다.

  5. 태스크 크기 > 태스크 메모리태스크 CPU512를 설정합니다.

  6. 컨테이너 정의 > 컨테이너 추가를 선택합니다. 컨테이너 등록 양식이 열립니다.

  7. 컨테이너 이름web을 설정합니다.

  8. 이미지registry.gitlab.com/<your-namespace>/ecs-demo/master:latest를 설정합니다. 또는 GitLab 컨테이너 레지스트리 페이지에서 이미지 경로를 복사하여 붙여넣을 수 있습니다.

    컨테이너 이름과 이미지 필드가 완성되었습니다.

  9. 포트 매핑을 추가합니다. 호스트 포트80을, 컨테이너 포트5000을 설정합니다.

    포트 매핑 필드가 완성되었습니다.

  10. 생성을 선택합니다.

이제 초기 태스크 정의가 있습니다. 다음으로 애플리케이션 이미지를 실행하기 위한 실제 인프라를 생성합니다.

ECS 클러스터 생성#

ECS 클러스터ECS 서비스의 가상 그룹입니다. 또한 계산 리소스로서 EC2 또는 Fargate와 연결됩니다.

  1. AWS 콘솔에서 ECS > 클러스터로 이동합니다.

  2. 클러스터 생성을 선택합니다.

  3. 클러스터 템플릿으로 EC2 Linux + Networking을 선택합니다. 다음 단계를 선택합니다.

  4. 클러스터 이름ecs-demo를 설정합니다.

  5. 네트워킹에서 기본 VPC를 선택합니다. 기존 VPC가 없는 경우, 새 VPC를 생성하도록 그대로 둘 수 있습니다.

  6. VPC의 모든 사용 가능한 서브넷을 서브넷에 설정합니다.

  7. 생성을 선택합니다.

  8. ECS 클러스터가 성공적으로 생성되었는지 확인합니다.

    모든 인스턴스가 실행 중인 상태로 ECS 클러스터가 성공적으로 생성되었습니다.

이제 다음 단계에서 ECS 클러스터에 ECS 서비스를 등록할 수 있습니다.

다음 사항에 유의하세요:

  • 선택적으로, 생성 양식에서 SSH 키 페어를 설정할 수 있습니다. 이를 통해 디버깅을 위해 EC2 인스턴스에 SSH로 접근할 수 있습니다.
  • 기존 VPC를 선택하지 않으면 기본적으로 새 VPC가 생성됩니다. 계정의 최대 허용 인터넷 게이트웨이 수에 도달하면 오류가 발생할 수 있습니다.
  • 클러스터에는 EC2 인스턴스가 필요하므로 인스턴스 유형에 따라 비용이 발생합니다.

ECS 서비스 생성#

ECS 서비스ECS 태스크 정의를 기반으로 애플리케이션 컨테이너를 생성하는 데몬입니다.

  1. AWS 콘솔에서 ECS > 클러스터 > ecs-demo > 서비스로 이동합니다.

  2. 배포를 선택합니다. 서비스 생성 양식이 열립니다.

  3. 시작 유형에서 EC2를 선택합니다.

  4. 태스크 정의ecs_demo를 설정합니다. 이는 이전에 생성한 태스크 정의에 해당합니다.

  5. 서비스 이름ecs_demo를 설정합니다.

  6. 원하는 태스크1을 설정합니다.

    모든 입력이 완성된 서비스 페이지.

  7. 배포를 선택합니다.

  8. 생성된 서비스가 활성 상태인지 확인합니다.

    태스크가 실행 중인 활성 서비스.

AWS 콘솔 UI는 때때로 변경됩니다. 지침에서 관련 구성 요소를 찾을 수 없는 경우 가장 유사한 것을 선택합니다.

데모 애플리케이션 보기#

이제 데모 애플리케이션에 인터넷에서 접근할 수 있습니다.

  1. AWS 콘솔에서 EC2 > 인스턴스로 이동합니다.

  2. ECS Instance로 검색하여 ECS 클러스터가 생성한 해당 EC2 인스턴스를 찾습니다.

  3. EC2 인스턴스의 ID를 선택합니다. 인스턴스 상세 페이지로 이동합니다.

  4. Public IPv4 address를 복사하여 브라우저에 붙여넣습니다. 이제 데모 애플리케이션이 실행 중인 것을 볼 수 있습니다.

    브라우저에서 실행 중인 데모 애플리케이션.

이 가이드에서는 HTTPS/SSL이 구성되어 있지 않습니다. HTTP로만 애플리케이션에 접근할 수 있습니다(예: http://<ec2-ipv4-address>).

GitLab에서 지속적 배포 설정#

ECS에서 애플리케이션이 실행되면, GitLab에서 지속적 배포를 설정할 수 있습니다.

배포자로서 새 IAM 사용자 생성#

GitLab이 이전에 생성한 ECS 클러스터, 서비스, 태스크 정의에 접근하려면 AWS에서 배포자 사용자를 생성해야 합니다:

  1. AWS 콘솔에서 IAM > 사용자로 이동합니다.

  2. 사용자 추가를 선택합니다.

  3. 사용자 이름ecs_demo를 설정합니다.

  4. 프로그래밍 방식 액세스 체크박스를 활성화합니다. 다음: 권한을 선택합니다.

  5. 권한 설정에서 기존 정책 직접 연결을 선택합니다.

  6. 정책 목록에서 AmazonECS_FullAccess를 선택합니다. 다음: 태그다음: 검토를 선택합니다.

    선택된 AmazonECS_FullAccess 정책.

  7. 사용자 생성을 선택합니다.

  8. 생성된 사용자의 액세스 키 ID비밀 액세스 키를 기록해 둡니다.

Note

비밀 액세스 키를 공개적인 장소에 공유하지 마세요. 안전한 곳에 저장해야 합니다.

파이프라인 작업이 ECS에 접근할 수 있도록 GitLab에 자격 증명 설정#

GitLab CI/CD 변수에 접근 정보를 등록할 수 있습니다. 이 변수들은 파이프라인 작업에 주입되어 ECS API에 접근할 수 있습니다.

  1. 상단 표시줄에서 검색 또는 이동을 선택하고 ecs-demo 프로젝트를 찾습니다.

  2. 설정 > CI/CD > 변수로 이동합니다.

  3. 변수 추가를 선택하고 다음 키-값 쌍을 설정합니다.

    참고
    AWS_ACCESS_KEY_ID <배포자의 액세스 키 ID> aws CLI 인증용.
    AWS_SECRET_ACCESS_KEY <배포자의 비밀 액세스 키> aws CLI 인증용.
    AWS_DEFAULT_REGION us-east-2 aws CLI 인증용.
    CI_AWS_ECS_CLUSTER ecs-demo production_ecs 작업이 ECS 클러스터에 접근합니다.
    CI_AWS_ECS_SERVICE ecs_demo production_ecs 작업이 클러스터의 ECS 서비스를 업데이트합니다. 이 변수의 범위를 적절한 환경(production, staging, review/*)으로 지정해야 합니다.
    CI_AWS_ECS_TASK_DEFINITION ecs_demo production_ecs 작업이 ECS 태스크 정의를 업데이트합니다.

데모 애플리케이션 변경#

프로젝트의 파일을 변경하고 ECS의 데모 애플리케이션에 반영되는지 확인합니다:

  1. 상단 표시줄에서 검색 또는 이동을 선택하고 ecs-demo 프로젝트를 찾습니다.

  2. app/views/welcome/index.html.erb 파일을 엽니다.

  3. 편집을 선택합니다.

  4. 텍스트를 You're on ECS!로 변경합니다.

  5. 변경 사항 커밋을 선택합니다. 자동으로 새 파이프라인이 트리거됩니다. 완료될 때까지 기다립니다.

  6. ECS 클러스터에서 실행 중인 애플리케이션에 접근합니다. 다음과 같은 화면이 표시됩니다:

    확인 메시지가 있는 ECS에서 실행 중인 애플리케이션.

축하합니다! ECS에 대한 지속적 배포를 성공적으로 설정했습니다.

Note

ECS 배포 작업은 롤아웃이 완료될 때까지 기다린 후 종료됩니다. 이 동작을 비활성화하려면 CI_AWS_ECS_WAIT_FOR_ROLLOUT_COMPLETE_DISABLED를 비어 있지 않은 값으로 설정합니다.

리뷰 앱 설정#

ECS에서 리뷰 앱을 사용하려면:

  1. 서비스를 설정합니다.
  2. CI_AWS_ECS_SERVICE 변수를 사용하여 이름을 설정합니다.
  3. 환경 범위를 review/*로 설정합니다.

이 서비스가 모든 리뷰 앱에서 공유되므로 한 번에 하나의 리뷰 앱만 배포할 수 있습니다.

보안 테스트 설정#

SAST 구성#

ECS에서 SAST를 사용하려면 .gitlab-ci.yml 파일에 다음을 추가합니다:

include:
   - template: Jobs/SAST.gitlab-ci.yml

자세한 내용 및 구성 옵션은 SAST 문서를 참조하세요.

DAST 구성#

기본이 아닌 브랜치에서 DAST를 사용하려면 리뷰 앱을 설정하고 .gitlab-ci.yml 파일에 다음을 추가합니다:

include:
  - template: Security/DAST.gitlab-ci.yml

기본 브랜치에서 DAST를 사용하려면:

  1. 서비스를 설정합니다. 이 서비스는 임시 DAST 환경을 배포하는 데 사용됩니다.
  2. CI_AWS_ECS_SERVICE 변수를 사용하여 이름을 설정합니다.
  3. 범위를 dast-default 환경으로 설정합니다.
  4. .gitlab-ci.yml 파일에 다음을 추가합니다:
include:
  - template: Security/DAST.gitlab-ci.yml
  - template: Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml

자세한 내용 및 구성 옵션은 DAST 문서를 참조하세요.

추가 자료#

  • 클라우드로의 지속적 배포에 더 관심이 있다면 클라우드 배포를 참조하세요.
  • 프로젝트에서 DevSecOps를 빠르게 설정하려면 Auto DevOps를 참조하세요.
  • 프로덕션급 환경을 빠르게 설정하려면 5분 프로덕션 앱을 참조하세요.

Amazon Elastic Container Service에 배포

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

이 단계별 가이드는 GitLab.com에서 호스팅된 프로젝트를 Amazon Elastic Container Service (ECS)에 배포하는 방법을 안내합니다. 이 가이드에서는 AWS 콘솔을 사용하여 ECS 클러스터를 수동으로 생성하는 것으로 시작합니다.

이 단계별 가이드는 GitLab.com에서 호스팅된 프로젝트를 Amazon Elastic Container Service (ECS)에 배포하는 방법을 안내합니다.

이 가이드에서는 AWS 콘솔을 사용하여 ECS 클러스터를 수동으로 생성하는 것으로 시작합니다. GitLab 템플릿에서 생성한 간단한 애플리케이션을 배포합니다.

이 지침은 GitLab.com과 GitLab Self-Managed 인스턴스 모두에서 작동합니다. 자체 러너가 구성되어 있는지 확인하세요.

사전 조건#

  • AWS 계정. 기존 AWS 계정으로 로그인하거나 새 계정을 생성합니다.
  • 이 가이드에서는 us-east-2 리전에 인프라를 생성합니다. 어떤 리전이든 사용할 수 있지만, 시작한 후에는 변경하지 마세요.

AWS에서 인프라 및 초기 배포 생성#

GitLab에서 애플리케이션을 배포하려면 먼저 AWS에서 인프라 및 초기 배포를 생성해야 합니다. 여기에는 ECS 클러스터ECS 태스크 정의, ECS 서비스, 컨테이너화된 애플리케이션 이미지 같은 관련 구성 요소가 포함됩니다.

첫 번째 단계로 프로젝트 템플릿에서 데모 애플리케이션을 생성합니다.

템플릿에서 새 프로젝트 생성#

GitLab 프로젝트 템플릿을 사용하여 시작합니다. 이름에서 알 수 있듯이, 이 프로젝트는 잘 알려진 프레임워크를 기반으로 구축된 기본적인 애플리케이션을 제공합니다.

  1. 오른쪽 상단 모서리에서 새로 만들기(+)를 선택한 다음 새 프로젝트/리포지터리를 선택합니다.
  2. 템플릿에서 생성을 선택하면 Ruby on Rails, Spring, 또는 NodeJS Express 프로젝트 중에서 선택할 수 있습니다. 이 가이드에서는 Ruby on Rails 템플릿을 사용합니다.
  3. 프로젝트 이름을 지정합니다. 이 예시에서는 ecs-demo라고 합니다. GitLab Ultimate 플랜에서 사용 가능한 기능을 활용할 수 있도록 공개로 설정합니다.
  4. 프로젝트 생성을 선택합니다.

데모 프로젝트를 생성했으면, 이제 애플리케이션을 컨테이너화하여 컨테이너 레지스트리에 push해야 합니다.

GitLab 컨테이너 레지스트리에 컨테이너화된 애플리케이션 이미지 push#

ECS는 컨테이너 오케스트레이션 서비스이므로, 인프라 빌드 중에 컨테이너화된 애플리케이션 이미지를 제공해야 합니다. 이를 위해 GitLab Auto BuildContainer Registry를 사용할 수 있습니다.

  1. 상단 표시줄에서 검색 또는 이동을 선택하고 ecs-demo 프로젝트를 찾습니다.

  2. CI/CD 설정을 선택합니다. .gitlab-ci.yml 생성 양식으로 이동합니다.

  3. 다음 콘텐츠를 빈 .gitlab-ci.yml에 복사하여 붙여넣습니다. 이는 ECS에 대한 지속적 배포 파이프라인을 정의합니다.

    include:
      - template: AWS/Deploy-ECS.gitlab-ci.yml
    
  4. 변경 사항 커밋을 선택합니다. 그러면 자동으로 새 파이프라인이 트리거됩니다. 이 파이프라인에서 build 작업이 애플리케이션을 컨테이너화하고 이미지를 GitLab 컨테이너 레지스트리에 push합니다.

  5. 배포 > 컨테이너 레지스트리를 방문합니다. 애플리케이션 이미지가 push되었는지 확인합니다.

    GitLab 컨테이너 레지스트리의 컨테이너화된 애플리케이션 이미지.

이제 AWS에서 pull할 수 있는 컨테이너화된 애플리케이션 이미지가 있습니다. 다음으로 AWS에서 이 애플리케이션 이미지가 사용되는 방식의 사양을 정의합니다.

ECS 클러스터가 아직 연결되지 않아 production_ecs 작업이 실패합니다. 나중에 이를 수정할 수 있습니다.

ECS 태스크 정의 생성#

ECS 태스크 정의ECS 서비스에서 애플리케이션 이미지를 시작하는 방법에 대한 사양입니다.

  1. AWS 콘솔에서 ECS > 태스크 정의로 이동합니다.

  2. 새 태스크 정의 생성을 선택합니다.

    태스크 정의 페이지에 '새 태스크 정의 생성' 버튼이 있습니다.

  3. 시작 유형으로 EC2를 선택합니다. 다음 단계를 선택합니다.

  4. 태스크 정의 이름ecs_demo를 설정합니다.

  5. 태스크 크기 > 태스크 메모리태스크 CPU512를 설정합니다.

  6. 컨테이너 정의 > 컨테이너 추가를 선택합니다. 컨테이너 등록 양식이 열립니다.

  7. 컨테이너 이름web을 설정합니다.

  8. 이미지registry.gitlab.com/<your-namespace>/ecs-demo/master:latest를 설정합니다. 또는 GitLab 컨테이너 레지스트리 페이지에서 이미지 경로를 복사하여 붙여넣을 수 있습니다.

    컨테이너 이름과 이미지 필드가 완성되었습니다.

  9. 포트 매핑을 추가합니다. 호스트 포트80을, 컨테이너 포트5000을 설정합니다.

    포트 매핑 필드가 완성되었습니다.

  10. 생성을 선택합니다.

이제 초기 태스크 정의가 있습니다. 다음으로 애플리케이션 이미지를 실행하기 위한 실제 인프라를 생성합니다.

ECS 클러스터 생성#

ECS 클러스터ECS 서비스의 가상 그룹입니다. 또한 계산 리소스로서 EC2 또는 Fargate와 연결됩니다.

  1. AWS 콘솔에서 ECS > 클러스터로 이동합니다.

  2. 클러스터 생성을 선택합니다.

  3. 클러스터 템플릿으로 EC2 Linux + Networking을 선택합니다. 다음 단계를 선택합니다.

  4. 클러스터 이름ecs-demo를 설정합니다.

  5. 네트워킹에서 기본 VPC를 선택합니다. 기존 VPC가 없는 경우, 새 VPC를 생성하도록 그대로 둘 수 있습니다.

  6. VPC의 모든 사용 가능한 서브넷을 서브넷에 설정합니다.

  7. 생성을 선택합니다.

  8. ECS 클러스터가 성공적으로 생성되었는지 확인합니다.

    모든 인스턴스가 실행 중인 상태로 ECS 클러스터가 성공적으로 생성되었습니다.

이제 다음 단계에서 ECS 클러스터에 ECS 서비스를 등록할 수 있습니다.

다음 사항에 유의하세요:

  • 선택적으로, 생성 양식에서 SSH 키 페어를 설정할 수 있습니다. 이를 통해 디버깅을 위해 EC2 인스턴스에 SSH로 접근할 수 있습니다.
  • 기존 VPC를 선택하지 않으면 기본적으로 새 VPC가 생성됩니다. 계정의 최대 허용 인터넷 게이트웨이 수에 도달하면 오류가 발생할 수 있습니다.
  • 클러스터에는 EC2 인스턴스가 필요하므로 인스턴스 유형에 따라 비용이 발생합니다.

ECS 서비스 생성#

ECS 서비스ECS 태스크 정의를 기반으로 애플리케이션 컨테이너를 생성하는 데몬입니다.

  1. AWS 콘솔에서 ECS > 클러스터 > ecs-demo > 서비스로 이동합니다.

  2. 배포를 선택합니다. 서비스 생성 양식이 열립니다.

  3. 시작 유형에서 EC2를 선택합니다.

  4. 태스크 정의ecs_demo를 설정합니다. 이는 이전에 생성한 태스크 정의에 해당합니다.

  5. 서비스 이름ecs_demo를 설정합니다.

  6. 원하는 태스크1을 설정합니다.

    모든 입력이 완성된 서비스 페이지.

  7. 배포를 선택합니다.

  8. 생성된 서비스가 활성 상태인지 확인합니다.

    태스크가 실행 중인 활성 서비스.

AWS 콘솔 UI는 때때로 변경됩니다. 지침에서 관련 구성 요소를 찾을 수 없는 경우 가장 유사한 것을 선택합니다.

데모 애플리케이션 보기#

이제 데모 애플리케이션에 인터넷에서 접근할 수 있습니다.

  1. AWS 콘솔에서 EC2 > 인스턴스로 이동합니다.

  2. ECS Instance로 검색하여 ECS 클러스터가 생성한 해당 EC2 인스턴스를 찾습니다.

  3. EC2 인스턴스의 ID를 선택합니다. 인스턴스 상세 페이지로 이동합니다.

  4. Public IPv4 address를 복사하여 브라우저에 붙여넣습니다. 이제 데모 애플리케이션이 실행 중인 것을 볼 수 있습니다.

    브라우저에서 실행 중인 데모 애플리케이션.

이 가이드에서는 HTTPS/SSL이 구성되어 있지 않습니다. HTTP로만 애플리케이션에 접근할 수 있습니다(예: http://<ec2-ipv4-address>).

GitLab에서 지속적 배포 설정#

ECS에서 애플리케이션이 실행되면, GitLab에서 지속적 배포를 설정할 수 있습니다.

배포자로서 새 IAM 사용자 생성#

GitLab이 이전에 생성한 ECS 클러스터, 서비스, 태스크 정의에 접근하려면 AWS에서 배포자 사용자를 생성해야 합니다:

  1. AWS 콘솔에서 IAM > 사용자로 이동합니다.

  2. 사용자 추가를 선택합니다.

  3. 사용자 이름ecs_demo를 설정합니다.

  4. 프로그래밍 방식 액세스 체크박스를 활성화합니다. 다음: 권한을 선택합니다.

  5. 권한 설정에서 기존 정책 직접 연결을 선택합니다.

  6. 정책 목록에서 AmazonECS_FullAccess를 선택합니다. 다음: 태그다음: 검토를 선택합니다.

    선택된 AmazonECS_FullAccess 정책.

  7. 사용자 생성을 선택합니다.

  8. 생성된 사용자의 액세스 키 ID비밀 액세스 키를 기록해 둡니다.

Note

비밀 액세스 키를 공개적인 장소에 공유하지 마세요. 안전한 곳에 저장해야 합니다.

파이프라인 작업이 ECS에 접근할 수 있도록 GitLab에 자격 증명 설정#

GitLab CI/CD 변수에 접근 정보를 등록할 수 있습니다. 이 변수들은 파이프라인 작업에 주입되어 ECS API에 접근할 수 있습니다.

  1. 상단 표시줄에서 검색 또는 이동을 선택하고 ecs-demo 프로젝트를 찾습니다.

  2. 설정 > CI/CD > 변수로 이동합니다.

  3. 변수 추가를 선택하고 다음 키-값 쌍을 설정합니다.

    참고
    AWS_ACCESS_KEY_ID <배포자의 액세스 키 ID> aws CLI 인증용.
    AWS_SECRET_ACCESS_KEY <배포자의 비밀 액세스 키> aws CLI 인증용.
    AWS_DEFAULT_REGION us-east-2 aws CLI 인증용.
    CI_AWS_ECS_CLUSTER ecs-demo production_ecs 작업이 ECS 클러스터에 접근합니다.
    CI_AWS_ECS_SERVICE ecs_demo production_ecs 작업이 클러스터의 ECS 서비스를 업데이트합니다. 이 변수의 범위를 적절한 환경(production, staging, review/*)으로 지정해야 합니다.
    CI_AWS_ECS_TASK_DEFINITION ecs_demo production_ecs 작업이 ECS 태스크 정의를 업데이트합니다.

데모 애플리케이션 변경#

프로젝트의 파일을 변경하고 ECS의 데모 애플리케이션에 반영되는지 확인합니다:

  1. 상단 표시줄에서 검색 또는 이동을 선택하고 ecs-demo 프로젝트를 찾습니다.

  2. app/views/welcome/index.html.erb 파일을 엽니다.

  3. 편집을 선택합니다.

  4. 텍스트를 You're on ECS!로 변경합니다.

  5. 변경 사항 커밋을 선택합니다. 자동으로 새 파이프라인이 트리거됩니다. 완료될 때까지 기다립니다.

  6. ECS 클러스터에서 실행 중인 애플리케이션에 접근합니다. 다음과 같은 화면이 표시됩니다:

    확인 메시지가 있는 ECS에서 실행 중인 애플리케이션.

축하합니다! ECS에 대한 지속적 배포를 성공적으로 설정했습니다.

Note

ECS 배포 작업은 롤아웃이 완료될 때까지 기다린 후 종료됩니다. 이 동작을 비활성화하려면 CI_AWS_ECS_WAIT_FOR_ROLLOUT_COMPLETE_DISABLED를 비어 있지 않은 값으로 설정합니다.

리뷰 앱 설정#

ECS에서 리뷰 앱을 사용하려면:

  1. 서비스를 설정합니다.
  2. CI_AWS_ECS_SERVICE 변수를 사용하여 이름을 설정합니다.
  3. 환경 범위를 review/*로 설정합니다.

이 서비스가 모든 리뷰 앱에서 공유되므로 한 번에 하나의 리뷰 앱만 배포할 수 있습니다.

보안 테스트 설정#

SAST 구성#

ECS에서 SAST를 사용하려면 .gitlab-ci.yml 파일에 다음을 추가합니다:

include:
   - template: Jobs/SAST.gitlab-ci.yml

자세한 내용 및 구성 옵션은 SAST 문서를 참조하세요.

DAST 구성#

기본이 아닌 브랜치에서 DAST를 사용하려면 리뷰 앱을 설정하고 .gitlab-ci.yml 파일에 다음을 추가합니다:

include:
  - template: Security/DAST.gitlab-ci.yml

기본 브랜치에서 DAST를 사용하려면:

  1. 서비스를 설정합니다. 이 서비스는 임시 DAST 환경을 배포하는 데 사용됩니다.
  2. CI_AWS_ECS_SERVICE 변수를 사용하여 이름을 설정합니다.
  3. 범위를 dast-default 환경으로 설정합니다.
  4. .gitlab-ci.yml 파일에 다음을 추가합니다:
include:
  - template: Security/DAST.gitlab-ci.yml
  - template: Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml

자세한 내용 및 구성 옵션은 DAST 문서를 참조하세요.

추가 자료#

  • 클라우드로의 지속적 배포에 더 관심이 있다면 클라우드 배포를 참조하세요.
  • 프로젝트에서 DevSecOps를 빠르게 설정하려면 Auto DevOps를 참조하세요.
  • 프로덕션급 환경을 빠르게 설정하려면 5분 프로덕션 앱을 참조하세요.