Amazon ECS Managed Instances용 작업 만들기 배우기

Amazon ECS Managed Instances용 작업 만들기 배우기

Amazon ECS와 Amazon ECS Managed Instances를 함께 사용해 컨테이너화된 애플리케이션을 실행하는 방법을 알아봐요. 클러스터 생성부터 태스크 정의, 서비스 실행, 정리까지 전체 과정을 단계별로 다뤄요.

출처: 문서

본문

사전 조건 (Prerequisites)

튜토리얼을 시작하기 전에 다음을 완료해 주세요.

  • Amazon ECS 사용 설정 - Set up to use Amazon ECS의 단계를 완료해요.
  • Amazon ECS Managed Instances에 필요한 IAM 역할 - 다음을 포함해요:
    • Infrastructure role (인프라 역할) - Amazon ECS가 사용자를 대신해 AWS 서비스에 호출을 보내 Managed Instances 인프라를 관리할 수 있게 해줘요. 자세한 내용은 Amazon ECS infrastructure IAM role 참고.
    • Instance profile (인스턴스 프로파일) - 관리형 인스턴스(managed instances)에서 실행되는 Amazon ECS container agent와 Docker daemon에 권한을 제공해요. 인스턴스 역할 이름은 인프라 역할의 iam:PassRole 액션과 일치하도록 ecsInstanceRole을 접두사로 포함해야 해요. 자세한 내용은 Amazon ECS Managed Instances instance profile 참고.
  • VPC와 보안 그룹 - 이 튜토리얼은 Amazon ECR Public에 호스팅된 컨테이너 이미지를 사용하므로 인스턴스에 인터넷 접근이 필요해요. 인스턴스에 인터넷 경로를 제공하려면 다음 옵션 중 하나를 사용해요:
    • 탄력적 IP 주소를 가진 NAT gateway가 있는 프라이빗 서브넷 사용.
    • 퍼블릭 서브넷을 사용하고 인스턴스에 퍼블릭 IP 주소를 할당.
    • 보안 그룹과 규칙에 대한 내용은 Default security groups for your VPCs와 Example rules (Amazon Virtual Private Cloud User Guide) 참고.
  • (선택 사항) AWS CloudShell - EC2 인스턴스를 직접 만들지 않아도 명령줄을 제공하는 도구예요. 자세한 내용은 What is AWS CloudShell? (AWS CloudShell User Guide) 참고.

1단계: 클러스터 만들기 (Create a cluster)

  1. Amazon ECS 콘솔(https://console.aws.amazon.com/ecs/v2)을 엽니다.
  2. 내비게이션 바에서 사용할 리전(Region)을 선택합니다.
  3. 내비게이션 창에서 Clusters를 선택합니다.
  4. Clusters 페이지에서 Create cluster를 선택합니다.
  5. Cluster configuration의 Cluster name에 클러스터의 고유한 이름을 입력합니다.
  6. Infrastructure에서 Fargate와 Managed EC2를 선택합니다.
  7. Managed Instances 설정을 구성합니다:
    • Infrastructure role - Managed Instances 인프라 관리를 위해 만든 IAM 역할을 선택합니다.
    • Instance profile - 생성한 ecsInstanceRole을 선택합니다.
    • Instance attributes - Use ECS defaults를 선택합니다.
  8. Networking에서 Managed Instances의 VPC와 서브넷을 구성합니다:
    • VPC - Managed Instances를 호스팅할 VPC를 선택합니다.
    • Subnets - Managed Instances가 시작될 하나 이상의 서브넷을 선택합니다.
    • Security groups - 하나 이상의 보안 그룹을 선택합니다.
  9. (선택 사항) 클러스터에 태그를 추가하려면 Tags를 확장하고 태그를 구성합니다.
  10. Create를 선택합니다.

2단계: 태스크 정의 만들기 (Create a task definition)

태스크 정의는 애플리케이션의 설계도(blueprint)예요. Amazon ECS에서 태스크를 시작할 때마다 태스크 정의를 지정합니다. 그러면 서비스가 컨테이너에 사용할 Docker 이미지, 태스크에서 사용할 컨테이너 수, 각 컨테이너의 리소스 할당량을 알게 돼요.

  1. 내비게이션 창에서 Task Definitions, Create new task definition, Create new task definition with JSON을 선택합니다.
  2. 다음 JSON을 편집기에 복사·붙여넣기하여 미리 채워진 JSON을 대체합니다. account-id를 AWS 계정 ID로, region을 사용 중인 리전으로 바꿔요.
{
  "family": "managed-instance-tutorial",
  "networkMode": "awsvpc",
  "executionRoleArn": "arn:aws:iam::account-id:role/ecsTaskExecutionRole",
  "containerDefinitions": [
    {
      "name": "sample-app",
      "image": "public.ecr.aws/docker/library/httpd:latest",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80,
          "protocol": "tcp"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/managed-instance-tutorial",
          "awslogs-region": "region",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ],
  "requiresCompatibilities": [
    "MANAGED_INSTANCES"
  ],
  "cpu": "1024",
  "memory": "2048"
}
  1. Create를 선택합니다.

3단계: 서비스 만들기 (Create a service)

Amazon ECS 서비스는 태스크 정의의 지정된 수의 인스턴스를 Amazon ECS 클러스터에서 동시에 실행하고 유지할 수 있게 해줘요.

  1. 내비게이션 창에서 Clusters를 선택한 후 managed-instance-tutorial 클러스터를 선택합니다.
  2. Services 탭에서 Create를 선택합니다.
  3. Task definition family에서 managed-instance-tutorial을 선택합니다.
  4. Service name에 managed-instance-tutorial-service를 입력합니다.
  5. Environment에서 Capacity provider strategy를 선택합니다.
  6. Networking에서 다음을 구성합니다:
    • 기존 VPC를 선택하거나 새로 만듭니다.
    • Subnets에서 사용할 서브넷을 선택합니다.
    • Security groups에서 기존 보안 그룹을 선택하거나 포트 80의 인바운드 트래픽을 허용하는 새 보안 그룹을 만듭니다.
  7. Create를 선택합니다.

4단계: 서비스 확인하기 (View your service)

서비스가 실행된 후 서비스를 확인하고 테스트할 수 있어요.

  1. managed-instance-tutorial-service 서비스를 선택합니다.
  2. Tasks 탭에서 실행 중인 태스크의 태스크 ID를 선택합니다.
  3. Network의 Public IP에서 Open address를 선택합니다.
  4. Apache HTTP Server 테스트 페이지가 표시되면 웹 서버가 제대로 실행되고 있다는 뜻이에요.

5단계: 정리하기 (Clean up)

튜토리얼이 끝나면 사용하지 않는 리소스에 대한 비용을 피하기 위해 관련 리소스를 정리해야 해요.

  1. 내비게이션 창에서 Clusters를 선택합니다.
  2. Clusters 페이지에서 managed-instance-tutorial 클러스터를 선택합니다.
  3. Services 탭을 선택합니다.
  4. managed-instance-tutorial-service 서비스를 선택한 후 Delete를 선택합니다.
  5. 확인 프롬프트에 delete를 입력한 후 Delete를 선택합니다.
  6. 서비스가 삭제된 후 내비게이션 창에서 Clusters를 선택합니다.
  7. Clusters 페이지에서 managed-instance-tutorial 클러스터를 선택한 후 Delete cluster를 선택합니다.
  8. 확인 프롬프트에 delete managed-instance-tutorial을 입력한 후 Delete를 선택합니다.

더 알아보기 (Learn more)