예제 9: Amazon EC2 인스턴스 사용 - AWS OpsWorks

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

예제 9: Amazon EC2 인스턴스 사용

중요

이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두 사용할 수 없게 되었습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 AWS re:Post 또는 Premium AWS Support를 통해 AWS Support 팀에 문의하세요.

지금까지는 로컬에서 인스턴스를 실행해 왔습니다. VirtualBox 이 방법이 빠르고 쉽기는 하지만 결국은 Amazon EC2 인스턴스에서 레시피를 테스트해야 합니다. 특히 Amazon Linux에서 레시피를 실행하려면 Amazon EC2에서만 가능합니다. 예비 구현 및 테스트를 위해 CentOS 같은 비슷한 시스템을 사용할 수 있지만 Amazon Linux에서 레시피를 완전히 테스트하는 유일한 방법은 Amazon EC2 인스턴스를 사용하는 것입니다.

이 주제에서는 Amazon EC2 인스턴스에서 레시피를 실행하는 방법을 살펴봅니다. 다음 두 가지 차이점만 제외하고 Test Kitchen과 Vagrant도 앞 섹션과 거의 같은 방법으로 사용합니다.

  • 드라이버가 Vagrant 대신 kitchen-ec2입니다.

  • Amazon EC2 인스턴스를 시작하는 데 필요한 정보를 사용하여 쿡북의 .kitchen.yml 파일을 구성해야 합니다.

참고

대안적 방법은 vagrant-aws Vagrant 플러그인을 사용하는 것입니다. 자세한 정보는 Vagrant AWS 공급자를 참조하세요.

Amazon EC2 인스턴스를 생성하려면 AWS 자격 증명이 필요합니다. AWS 계정이 없는 경우, 다음과 같이 계정을 얻을 수 있습니다.

가입하세요. AWS 계정

계정이 없는 경우 다음 단계를 완료하여 계정을 만드세요. AWS 계정

가입하려면 AWS 계정
  1. https://portal.aws.amazon.com/billing/signup을 엽니다.

  2. 온라인 지시 사항을 따릅니다.

    등록 절차 중 전화를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

    에 AWS 계정가입하면 AWS 계정 루트 사용자a가 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 루트 사용자 액세스 권한이 필요한 작업을 수행하는 것입니다.

AWS 가입 절차가 완료된 후 확인 이메일을 보냅니다. 언제든지 https://aws.amazon.com/으로 이동하고 내 계정을 선택하여 현재 계정 활동을 보고 계정을 관리할 수 있습니다.

관리자 액세스 권한이 있는 사용자 생성

등록한 AWS 계정후에는 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 보호하고 AWS IAM Identity Center활성화하고 생성하십시오 AWS 계정 루트 사용자.

보안을 유지하세요 AWS 계정 루트 사용자
  1. 루트 사용자를 선택하고 AWS 계정 이메일 주소를 입력하여 계정 AWS Management Console소유자로 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

    루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 AWS 로그인 User Guide루트 사용자로 로그인을 참조하십시오.

  2. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

    지침은 IAM 사용 설명서의 AWS 계정 루트 사용자 (콘솔) 에 대한 가상 MFA 디바이스 활성화를 참조하십시오.

관리자 액세스 권한이 있는 사용자 생성
  1. IAM Identity Center를 활성화합니다.

    지침은 AWS IAM Identity Center 사용 설명서AWS IAM Identity Center설정을 참조하세요.

  2. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

    를 ID 소스로 사용하는 방법에 대한 자습서는 사용 설명서의 기본값으로 IAM Identity Center 디렉터리사용자 액세스 구성을 참조하십시오. IAM Identity Center 디렉터리 AWS IAM Identity Center

관리 액세스 권한이 있는 사용자로 로그인
추가 사용자에게 액세스 권한 할당
  1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Create a permission set를 참조하세요.

  2. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

    지침은AWS IAM Identity Center 사용 설명서의 Add groups를 참조하세요.

Amazon EC2에 액세스할 수 있는 권한을 가진 IAM 사용자를 생성하고 사용자의 액세스 및 비밀 키를 워크스테이션의 안전한 위치에 저장해야 합니다. Test Kitchen은 이 자격 증명을 사용하여 인스턴스를 생성합니다. Test Kitchen에 자격 증명을 제공하는 선호되는 방법은 워크스테이션에서 다음 환경 변수에 키를 할당하는 것입니다.

주의

IAM 사용자는 장기 자격 증명을 보유하므로 보안상 위험이 따릅니다. 이 위험을 줄이려면 이러한 사용자에게 작업을 수행하는 데 필요한 권한만 제공하고 더 이상 필요하지 않을 경우 이러한 사용자를 제거하는 것이 좋습니다.

  • AWS_ACCESS_KEY - AKIAIOSFODNN7EXAMPLE와 같은 사용자의 액세스 키.

  • AWS_SECRET_KEY — 사용자의 비밀 키로, WJALRXUTNFEMI/K7MDENG/ CYEXAMPLEKEY와 비슷하게 보입니다. bPxRfi

이 방법은 예컨대 자격 증명이 포함된 프로젝트를 퍼블릭 리포지토리에 업로드함으로써 뜻하지 않게 계정이 침해될 가능성을 줄입니다.

쿡북을 설정하려면
  1. kitchen-ec2 드라이버를 사용하려면 시스템에 ruby-dev 패키지가 설치되어 있어야 합니다. 다음 예제 명령은 aptitude를 사용하여 Ubuntu 시스템에 패키지를 설치하는 방법을 보여줍니다.

    sudo aptitude install ruby1.9.1-dev
  2. kitchen-ec2 드라이버는 다음과 같이 설치할 수 있는 Gem입니다.

    gem install kitchen-ec2

    워크스테이션에 따라 이 명령에는 sudo가 필요할 수 있습니다. 또는 Ruby 환경 관리자(예: RVM)를 사용할 수도 있습니다. 이 절차는 kitchen-ec2 드라이버 버전 0.8.0에서 테스트했으나 최신 버전이 있습니다. 특정 버전을 설치하려면 gem install kitchen-ec2 -v <version number>를 실행합니다.

  3. Test Kitchen이 인스턴스에 연결하는 데 사용할 수 있는 Amazon EC2 SSH 키 페어를 지정해야 합니다. Amazon EC2 키 페어가 없는 경우 이러한 키 페어를 생성하는 방법은 Amazon EC2 키 페어를 참조하세요. 키 페어는 인스턴스와 동일한 AWS 리전에 속해야 합니다. 이 예에서는 미국 서부(캘리포니아 북부)를 사용합니다.

    키 페어를 선택한 후에는 opsworks_cookbooks의 하위 디렉터리로 ec2_keys를 만들고 해당 키 페어의 프라이빗 키(.pem) 파일을 이 하위 디렉터리에 복사합니다. 프라이빗 키는 시스템의 모든 위치에 저장할 수 있지만 ec2_keys에 저장하면 코드가 간소화되어 편리합니다.

  4. createdir-ec2의 하위 디렉터리 opsworks_cookbooks를 만들고 그 디렉터리로 이동합니다.

  5. createdir-ec2에 다음 콘텐츠가 포함된 metadata.rb 파일을 추가합니다.

    name "createdir-ec2" version "0.1.0"
  6. 예제 1: 패키지 설치 단원에서 설명하는 대로 Test Kitchen을 초기화합니다. 다음 단원에서는 .kitchen.yml을 구성하는 방법에 대해 설명합니다. 이 파일은 Amazon EC2 인스턴스의 경우 훨씬 더 복잡합니다.

  7. recipes 하위 디렉터리를 createdir-ec2에 추가합니다.

Amazon EC2용 .kitchen.yml 구성

kitchen-ec2 드라이버가 적절히 구성된 Amazon EC2 인스턴스를 시작하는 데 필요한 정보를 사용하여 .kitchen.yml을 구성합니다. 다음은 미국 서부(캘리포니아 북부) 리전의 Amazon Linux 인스턴스용 .kitchen.yml 파일의 예입니다.

driver: name: ec2 aws_ssh_key_id: US-East1 region: us-west-1 availability_zone: us-west-1c require_chef_omnibus: true security_group_ids: sg........ subnet_id: subnet-......... associate_public_ip: true interface: dns provisioner: name: chef_solo platforms: -name: amazon driver: image_id: ami-xxxxxxxx transport: username: ec2-user ssh_key: ../ec2_keys/US-East1.pem suites: - name: default run_list: - recipe[createdir-ec2::default] attributes:

provisionersuites 섹션의 기본 설정을 사용할 수 있지만 기본 driverplatforms 설정을 수정해야 합니다. 이 예제에서는 최소한의 설정 목록을 사용하며 나머지에 대해서는 기본값을 사용합니다. 완전한 kitchen-ec2 설정 목록은 Kitchen::Ec2: Amazon EC2용 Test Kitchen 드라이버를 참조하세요.

이 예제는 다음 driver 속성을 설정합니다. 이 예제에서는 앞서 설명한 것처럼 사용자의 액세스 키와 보안 키를 표준 환경 변수에 할당했다고 가정합니다. 드라이버는 기본적으로 이러한 키를 사용합니다. 그렇지 않은 경우, aws_access_key_idaws_secret_access_keydriver 속성에 추가하여 명시적으로 키를 지정하고 적절한 키 값으로 설정해야 합니다.

이름

(필수) 이 속성은 ec2로 설정해야 합니다.

aws_ssh_key_id

(필수) 이 예제에서 US-East1으로 명명된 Amazon EC2 SSH 키 페어 이름.

transport.ssh_key

(필수) aws_ssh_key_id에 대해 지정한 키의 프라이빗 키(.pem) 파일. 이 예제에서 이 파일은 US-East1.pem으로 명명되며 ../opsworks/ec2_keys 디렉터리에 있습니다.

region

(필수) 인스턴스의 AWS 리전. 이 예에서는) 로 us-west-1 표시되는 미국 서부(캘리포니아 북부)를 사용합니다.

availability_zone

(선택 사항) 인스턴스의 가용 영역. 이 설정을 생략하면 Test Kitchen은 지정된 리전에 대해 기본 가용 영역(us-west-1b의 경우, 미국 서부(캘리포니아 북부))를 사용합니다. 하지만 이 가용 영역은 사용자 계정에서 사용하지 못할 수 있습니다. 이 경우, 가용 영역을 명시적으로 지정해야 합니다. 마침 이 예제를 준비하는 데 사용된 계정이 us-west-1b를 지원하지 않기 때문에 예제는 명시적으로 us-west-1c를 지정합니다.

require_chef_omnibus

이 설정을 true로 설정하면 omnibus installer를 사용하여 모든 플랫폼 인스턴스에 chef-client를 설치합니다.

security_group_ids

(선택 사항) 인스턴스에 적용할 보안 그룹 ID 목록. 이 설정은 default 보안 그룹을 인스턴스에 적용합니다. 보안 그룹 수신 규칙이 인바운드 SSH 연결을 허용하도록 하세요. 그렇지 않으면 Test Kitchen이 인스턴스와 통신할 수 없습니다. default 보안 그룹을 사용하는 경우, 그에 맞게 편집해야 할 수 있습니다. 자세한 내용은 Amazon EC2 보안 그룹을 참조하세요.

subnet_id

인스턴스의 대상 서브넷 ID(해당되는 경우).

associate_public_ip

인터넷에서 인스턴스에 액세스할 수 있도록 Amazon EC2 인스턴스가 해당 인스턴스에 퍼블릭 IP 주소를 연결하도록 할 수 있습니다.

인터페이스

인스턴스에 액세스하는 데 사용하는 호스트 이름 구성 형식. 유효한 값은 dns, public, private 또는 private_dns입니다. 이 속성의 값을 지정하지 않으면 kitchen-ec2이 다음 순서로 호스트 이름 구성을 설정합니다. 이 속성을 생략하면 구성 형식이 설정되지 않습니다.

  1. DNS 이름

  2. 퍼블릭 IP 주소

  3. 프라이빗 IP 주소

  4. 프라이빗 DNS 이름

중요

액세스 키와 보안 키에 계정 자격 증명을 사용하는 대신 사용자를 생성해 이러한 자격 증명을 Test Kitchen에 제공해야 합니다. 자세한 내용은 AWS 액세스 키 관리 모범 사례를 참조하세요.

퍼블릭 또는 Bitbucket 리포지토리에 업로드하는 등 공개적으로 액세스할 수 있는 위치에 두지 않도록 주의하십시오. .kitchen.yml GitHub 그러면 자격 증명이 노출되고 계정의 보안이 훼손될 수 있습니다.

kitchen-ec2 드라이버는 다음 플랫폼에 대한 기본 지원을 제공합니다.

  • ubuntu-10.04

  • ubuntu-12.04

  • ubuntu-12.10

  • ubuntu-13.04

  • ubuntu-13.10

  • ubuntu-14.04

  • centos-6.4

  • debian-7.1.0

  • windows-2012r2

  • windows-2008r2

이런 플랫폼을 하나 이상 사용하려는 경우, 적절한 플랫폼 이름을 platforms에 추가합니다. kitchen-ec2 드라이버가 자동으로 적절한 AMI를 선택하고 SSH 사용자 이름을 생성합니다. 다른 플랫폼(이 예에서는 Amazon Linux 사용)을 사용할 수 있지만 다음 platforms 속성을 명시적으로 지정해야 합니다.

이름

플랫폼 이름. 이 예제는 Amazon Linux를 사용하므로 nameamazon으로 설정됩니다.

driver

다음을 포함하는 driver 속성.

  • image_id – 플랫폼의 AMI로서 지정된 리전에 속해야 합니다. 이 예제는 미국 서부(캘리포니아 북부) 리전의 Amazon Linux AMI인 ami-ed8e9284를 사용합니다.

  • transport.username – Test Kitchen이 인스턴스와의 통신에 사용할 SSH 사용자 이름.

    Amazon Linux의 경우, ec2-user를 사용합니다. 다른 AMI는 사용자 이름이 다를 수 있습니다.

.kitchen.yml의 코드를 예제로 바꾸고 aws_access_key_id와 같은 계정별 속성에 적절한 값을 할당합니다.

레시피 실행

이 예제는 반복의 레시피를 사용합니다.

레시피를 실행하려면
  1. 다음 코드를 사용하여 default.rb 파일을 만들어 이 파일을 쿡북의 recipes 폴더에 저장합니다.

    directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
  2. kitchen converge를 실행하여 레시피를 실행합니다. Amazon EC2 인스턴스를 시작 및 초기화하는 데 필요한 시간 때문에 이전 예제보다 이 명령을 완료하는 데 더 많은 시간이 걸릴 수 있습니다.

  3. Amazon EC2 콘솔로 이동하여 미국 서부(캘리포니아 북부) 리전을 선택하고 탐색 창에서 인스턴스를 클릭합니다. 목록에 새로 생성된 인스턴스가 보입니다.

  4. 에서 실행 중인 인스턴스와 마찬가지로 kitchen login 실행하여 인스턴스에 로그인합니다. VirtualBox /srv에 새로 생성된 디렉터리가 있습니다. 이제 즐겨 사용하는 SSH 클라이언트를 사용하여 인스턴스에 연결할 수 있습니다.