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

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

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

중요

이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 만료되었으며 신규 및 기존 고객 모두에 대해 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 AWS re:Post 또는 AWS Premium Support를 통해 AWS Support 팀에 문의하세요.

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

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

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

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

참고

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

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

에 가입 AWS 계정

가 없는 경우 다음 단계를 AWS 계정완료하여 생성합니다.

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

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

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

    에 가입하면 AWS 계정AWS 계정 루트 사용자이 생성됩니다. 루트 사용자에게는 계정의 모든 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에서 사용자에게 관리 액세스 권한을 부여합니다.

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

관리 액세스 권한이 있는 사용자로 로그인
  • IAM Identity Center 사용자로 로그인하려면 IAM Identity Center 사용자를 생성할 때 이메일 주소로 전송URL된 로그인을 사용합니다.

    IAM Identity Center 사용자를 사용하여 로그인하는 데 도움이 필요하면 AWS 로그인 사용 설명서의 AWS 액세스 포털에 로그인을 참조하세요.

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

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

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

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

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

주의

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

  • AWS_ACCESS_KEY - 사용자의 액세스 키로, 다음과 같습니다.AKIAIOSFODNN7EXAMPLE.

  • AWS_SECRET_KEY - 사용자의 보안 키로, 다음과 같습니다.wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

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

쿡북을 설정하려면
  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 키 페어를 생성하는 방법에 대한 자세한 내용은 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을 초기화합니다. 다음 섹션에서는 Amazon EC2 인스턴스에 .kitchen.yml훨씬 더 복잡한를 구성하는 방법을 설명합니다.

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

Amazon용 .kitchen.yml 구성 EC2

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참조하세요.

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

name

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

aws_ssh_key_id

(필수)이 예제US-East1에서 이름이 인 Amazon EC2 SSH 키 페어 이름입니다.

transport.ssh_key

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

리전

(필수) 인스턴스의 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

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

subnet_id

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

associate_public_ip

인터넷에서 인스턴스에 액세스하려는 경우 Amazon이 퍼블릭 IP 주소를 인스턴스와 EC2 연결하도록 할 수 있습니다.

인터페이스

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

  1. DNS 이름

  2. 퍼블릭 IP 주소

  3. 프라이빗 IP 주소

  4. 프라이빗 DNS 이름

중요

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

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

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 드라이버는 적절한를 자동으로 선택하고 SSH 사용자 이름을 AMI 생성합니다. 다른 플랫폼(이 예에서는 Amazon Linux 사용)을 사용할 수 있지만 다음 platforms 속성을 명시적으로 지정해야 합니다.

name

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

driver

다음을 포함하는 driver 속성.

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

  • transport.username - Test Kitchen이 인스턴스와 통신하는 데 사용할 SSH 사용자 이름입니다.

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

.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 클라이언트를 사용하여 인스턴스에 연결할 수 있습니다.