Linux 인스턴스에서 외부 쿡북 사용: Berkshelf - AWS OpsWorks

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

Linux 인스턴스에서 외부 쿡북 사용: Berkshelf

중요

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

참고

Berkshelf는 Chef 11.10 Linux 스택에서만 사용할 수 있습니다.

쿡북을 구현하기 전에 Chef 커뮤니티의 구성원들이 매우 다양한 용도를 위해 생성한 쿡북이 포함되어 있는 Chef 커뮤니티 쿡북을 확인하세요. 이러한 쿡북 중 상당수는 수정 없이 AWS OpsWorks 스택과 함께 사용할 수 있으므로 모든 코드를 직접 구현하는 대신 일부 작업에 활용할 수 있습니다.

인스턴스에서 외부 쿡북을 사용하려면 쿡북을 설치하고 종속성을 관리할 방법이 필요합니다. 선호되는 방법은 Berkshelf라는 종속성 관리자를 지원하는 쿡북을 구현하는 것입니다. Berkshelf는 스택 인스턴스를 AWS OpsWorks 포함한 Amazon EC2 인스턴스에서 작동하지만 테스트 키친 및 Vagrant와도 작동하도록 설계되었습니다. 하지만 Vagrant의 사용법은 AWS OpsWorks Stacks와 약간 다르므로 이 항목에는 두 플랫폼에 대한 예제가 모두 포함되어 있습니다. Berkshelf를 사용하는 방법에 대한 자세한 정보는 Berkshelf를 참조하세요.

Test Kitchen 및 Vagrant에서 Berkshelf 사용

이 예제는 Berkshelf를 사용하여 시작하기 커뮤니티 쿡북을 설치하고 해당 레시피를 실행하는 방법을 보여줍니다. 이 레시피는 인스턴스의 홈 디렉터리에 간단한 텍스트 파일을 설치합니다.

Berkshelf를 설치하고 쿡북을 초기화하려면
  1. 워크스테이션에 다음과 같이 Berkshelf Gem을 설치합니다.

    gem install berkshelf

    워크스테이션에 따라 이 명령에는 sudo가 필요할 수 있습니다. 또는 Ruby 환경 관리자(예: RVM)를 사용할 수도 있습니다. Berkshelf가 성공적으로 설치되었는지 확인하려면 berks --version을 실행합니다.

  2. 이 주제의 쿡북 이름은 external_cookbook입니다. 이전 주제에서 채택한 수동 접근 방식 대신 Berkshelf를 사용하여 초기화된 쿡북을 생성할 수 있습니다. 이렇게 하려면 opsworks_cookbooks 디렉터리로 이동하여 다음 명령을 실행합니다.

    berks cookbook external_cookbook

    이 명령은 external_cookbook 디렉터리와 recipestest를 비롯하여 Chef 및 Test Kitchen 하위 디렉터리를 만듭니다. 또한 이 명령은 다음을 비롯하여 여러 표준 파일의 기본 버전을 생성합니다.

    • metadata.rb

    • Vagrant, Test Kitchen 및 Berkshelf용 구성 파일

    • default.rb 디렉터리의 빈 recipes 레시피

    참고

    kitchen init를 실행할 필요가 없습니다. berks cookbook 명령이 이러한 작업을 처리하기 때문입니다.

  3. kitchen converge를 실행합니다. 새로 생성된 쿡북은 이 시점에서 어떠한 의미 있는 작업을 수행하지 않지만 수렴을 수행합니다.

참고

또한 berks init를 사용하여 Berkshelf를 사용하도록 기존 쿡북을 초기화할 수도 있습니다.

Berkshelf를 사용하여 쿡북의 외부 종속성을 관리하려면 쿡북의 루트 디렉터리에 Berkshelf가 종속성을 관리하는 방법을 지정하는 구성 파일인 Berksfile이 포함되어야 합니다. berks cookbook을 사용하여 external_cookbook 쿡북을 생성한 경우 다음 콘텐츠를 포함하는 Berksfile이 생성되었습니다.

source "https://supermarket.chef.io" metadata

이 파일에는 다음 선언이 포함됩니다.

  • source – 쿡북 소스의 URL.

    Berksfile에는 각각 종속 쿡북의 기본 소스를 지정하는 source 선언이 여러 개 포함될 수 있습니다. 쿡북의 소스를 명시적으로 지정하지 않을 경우 Berkshelf는 기본 리포지토리에서 동일한 이름의 쿡북을 찾습니다. 기본 Berksfile에는 커뮤니티 쿡북 리포지토리를 지정하는 source 속성이 포함됩니다. 이 리포지토리에 시작하기 쿡북이 들어 있습니다. 따라서 이 줄은 그대로 둘 수 있습니다.

  • metadata - Berkshelf에게 쿡북의 metadata.rb 파일에서 선언된 쿡북 종속성을 포함하도록 지시합니다.

    나중에 설명하듯이 cookbook 속성을 포함시켜 Berksfile에서 종속 쿡북을 선언할 수도 있습니다.

쿡북 종속성을 선언하는 방법은 두 가지입니다.

  • Berksfile에 cookbook 선언을 포함.

    Stacks에서 사용하는 접근 방식은 다음과 같습니다. AWS OpsWorks 예를 들어 이 예제에서 사용되는 시작하기 쿡북을 지정하려면 Berksfile에 cookbook "getting-started"를 포함시킵니다. 그러면 Berkshelf가 기본 리포지토리에서 동일한 이름의 쿡북을 찾습니다. 또한 cookbook을 사용하여 쿡북 소스는 물론 특정 버전까지 명시적으로 지정할 수도 있습니다. 자세한 정보는 Berkshelf를 참조하세요.

  • Berksfile에 metadata 선언을 포함하고 metadata.rb에서 종속성을 선언.

    이 선언은 Berkshelf에게 쿡북의 metadata.rb 파일에서 선언된 쿡북 종속성을 포함하도록 지시합니다. 예를 들어 시작하기 종속성을 선언하려면 depends 'getting-started' 선언을 쿡북의 metadata.rb 파일에 추가합니다.

이 예제에서는 AWS OpsWorks 스택과의 일관성을 위해 첫 번째 접근 방식을 사용합니다.

getting-started 쿡북을 설치하려면
  1. 기본 Berksfile을 편집하여 metadata 선언을 getting-started에 대한 cookbook 선언으로 바꿉니다. 내용은 다음과 같아야 합니다.

    source "https://supermarket.chef.io" cookbook 'getting-started'
  2. 커뮤니티 쿡북 리포지토리에서 워크스테이션의 Berkshelf 디렉터리(일반적으로 ~/.berkshelf)로 getting-started 쿡북을 다운로드하는 berks install을 실행합니다. 일반적으로 이 디렉터리는 the Berkshelf라고 합니다. Berkshelf의 cookbooks 디렉터리를 살펴보면 getting-started 쿡북의 디렉터리가 있어야 하고 이 디렉터리의 이름은 getting-started-0.4.0과 유사합니다.

  3. external_cookbook::default 실행 목록의 .kitchen.ymlgetting-started::default로 바꿉니다. 이 예제는 external_cookbook의 레시피를 실행하지 않고 기본적으로 getting-started 쿡북을 사용하는 방식입니다. .kitchen.yml 파일은 이제 다음과 유사해야 합니다.

    --- driver: name: vagrant provisioner: name: chef_solo platforms: - name: ubuntu-12.04 suites: - name: default run_list: - recipe[getting-started::default] attributes:
  4. kitchen converge를 실행한 다음 kitchen login을 사용하여 인스턴스에 로그인합니다. 로그인 디렉터리에는 내용이 다음과 같은 chef-getting-started.txt 파일이 포함되어 있어야 합니다.

    Welcome to Chef! This is Chef version 11.12.8. Running on ubuntu. Version 12.04.

    Test Kitchen은 인스턴스의 /tmp/kitchen/cookbooks 디렉터리에 쿡북을 설치합니다. 이 디렉터리의 내용을 나열하면 external_cookbook 및 getting-started, 이렇게 2개의 쿡북이 있습니다.

  5. kitchen destroy를 실행하여 인스턴스를 종료합니다. 다음 예제에서는 AWS OpsWorks Stacks 인스턴스를 사용합니다.

버크쉘프를 스택과 함께 사용하기 AWS OpsWorks

AWS OpsWorks 스택은 Chef 11.10 스택용 버크쉘프를 선택적으로 지원합니다. 스택에서 Berkshelf를 사용하려면 다음을 수행해야 합니다.

  • 스택에서 Berkshelf를 활성화합니다.

    AWS OpsWorks 그러면 스택이 스택 인스턴스에 Berkshelf를 설치하는 세부 정보를 처리합니다.

  • Berksfile을 리포지토리의 루트 디렉터리에 추가합니다.

    Berksfile은 모든 종속 쿡북에 대해 sourcecookbook 선언을 포함해야 합니다.

AWS OpsWorks Stacks는 인스턴스에 사용자 지정 쿡북 리포지토리를 설치할 때 Berkshelf를 사용하여 리포지토리의 Berksfile에 선언된 종속 쿡북을 설치합니다. 자세한 정보는 Berkshelf 사용을 참조하세요.

이 예제는 Berkshelf를 사용하여 Stacks 인스턴스에 시작하기 커뮤니티 쿡북을 설치하는 방법을 보여줍니다. AWS OpsWorks 또한 지정된 디렉터리에 파일을 생성하는 createfile 사용자 지정 쿡북도 설치합니다. createfile 파일이 작동하는 방식에 대한 자세한 정보는 쿡북에서 파일 설치 단원을 참조하세요.

참고

AWS OpsWorks Stacks 스택에 사용자 지정 쿡북을 처음 설치하는 경우 먼저 예제를 살펴봐야 합니다. Linux 인스턴스에서 레시피 실행

다음에 요약된 대로 스택을 생성하여 시작합니다. 자세한 내용은 새 스택 생성 섹션을 참조하세요.

스택을 만듭니다
  1. AWS OpsWorks Stacks 콘솔을 열고 스택 추가를 클릭합니다.

  2. 다음 설정을 지정하고, 그 외 설정에 대해서는 기본값을 수락한 다음 [스택 추가]를 클릭합니다.

    • 이름 — BerksTest

    • 기본 SSH 키 – Amazon EC2 키 페어

    Amazon EC2 키 페어를 생성해야 하는 경우 Amazon EC2 키 페어를 참조하세요. 키 페어는 인스턴스와 동일한 AWS 리전에 속해야 합니다. 이 예에서는 기본 미국 서부(오레곤) 리전을 사용합니다.

  3. [계층 추가]를 클릭하여 스택에 다음 설정으로 사용자 지정 계층을 추가합니다.

    • 이름 — BerksTest

    • 짧은 이름 - berkstest

    이 예제에는 실제로 모든 계층 유형을 사용할 수 있습니다. 그러나 이 예제에서는 다른 계층에서 설치한 패키지가 필요하지 않기 때문에 사용자 지정 계층을 사용하는 것이 가장 간단합니다.

  4. 기본 설정을 사용하여 BerksTest 레이어에 연중무휴 인스턴스를 추가하되 아직 시작하지는 마세요.

AWS OpsWorks Stacks를 사용하면 쿡북이 표준 디렉터리 구조의 원격 리포지토리에 있어야 합니다. 그런 다음 AWS OpsWorks Stacks에 다운로드 정보를 제공하면 시작 시 저장소가 각 스택 인스턴스에 자동으로 다운로드됩니다. 간단히 설명하자면 이 예제의 리포지토리는 퍼블릭 Amazon S3 아카이브이지만 AWS OpsWorks Stacks는 HTTP 아카이브, Git 리포지토리 및 Subversion 리포지토리도 지원합니다. 자세한 정보는 쿡북 리포지토리을 참조하세요.

Amazon S3 버킷에 전달한 콘텐츠에는 고객 콘텐츠가 포함될 수 있습니다. 중요 데이터 제거에 관한 자세한 내용은 S3 버킷을 비우려면 어떻게 해야 합니까? 단원 또는 S3 버킷을 삭제하려면 어떻게 해야 합니까? 단원을 참조하세요.

쿡북 리포지토리를 생성하려면
  1. opsworks_cookbooks 디렉터리에서 berkstest_cookbooks라는 디렉터리를 만듭니다. 이 디렉터리는 리포지토리에 업로드할 것이므로 원하는 경우 편리한 위치면 어디에든 이 디렉터리를 만들 수 있습니다.

  2. 다음 내용이 포함된 Berksfile이라는 파일을 berkstest_cookbooks에 추가합니다.

    source "https://supermarket.chef.io" cookbook 'getting-started'

    이 파일은 getting-started 쿡북 종속성을 선언하고 Berkshelf에 커뮤니티 쿡북 사이트에서 종속성을 다운로드하도록 지시합니다.

  3. createfile 디렉터리를 다음 항목이 포함된 berkstest_cookbooks에 추가합니다.

    • 다음 내용이 포함된 metadata.rb 파일

      name "createfile" version "0.1.0"
    • 다음 내용이 들어 있는 files/default 파일이 포함된 example_data.json 디렉터리

      { "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }

      파일의 이름 및 내용은 임의적입니다. 이 레시피는 지정된 위치에 파일을 복사하기만 합니다.

    • 다음 레시피 코드가 들어 있는 recipes 파일이 포함된 default.rb 디렉터리

      directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end

      이 레시피는 /srv/www/shared를 만들고, 쿡북의 files 디렉터리에서 이 디렉터리로 example_data.json을 복사합니다.

  4. berkstest_cookbooks.zip 아카이브를 생성하고, 이 아카이브를 Amazon S3 버킷에 업로드한 다음, 해당 아카이브를 퍼블릭으로 설정하고, 아카이브의 URL을 기록합니다.

이제 쿡북을 설치하고 레시피를 실행할 수 있습니다.

쿡북을 설치하고 레시피를 실행하려면
  1. 스택을 편집해 사용자 지정 쿡북을 활성화하고 다음 설정을 지정합니다.

    • 리포지토리 유형Http Archive

    • 리포지토리 URL - 앞에서 기록해 둔 쿡북 아카이브 URL

    • Berkshelf 관리

    처음 두 설정은 쿡북 리포지토리를 인스턴스에 다운로드하는 데 필요한 정보를 AWS OpsWorks 스택에 제공합니다. 마지막 설정은 인스턴스로 getting-started 쿡북을 다운로드하는 Berkshelf 지원을 활성화합니다. 기타 설정에 대해 기본값을 수락하고 [저장]을 클릭하여 스택 구성을 업데이트합니다.

  2. BerksTest 레이어를 편집하여 레이어의 설정 수명 주기 이벤트에 다음 레시피를 추가합니다.

    • getting-started::default

    • createfile::default

  3. 인스턴스를 시작합니다. Setup 이벤트는 인스턴스 부팅이 완료된 후에 발생합니다. AWS OpsWorks 그런 다음 Stacks는 쿡북 리포지토리를 설치하고, Berkshelf를 사용하여 시작 쿡북을 다운로드하고, 및 를 포함한 레이어의 설정 및 배포 레시피를 실행합니다. getting-started::default createfile::default

  4. 인스턴스가 온라인 상태가 되면 SSH를 사용하여 로그인합니다. 다음과 같은 모양이어야 합니다.

    • /srv/www/shared에는 example_data.json이 포함되어 있어야 합니다.

    • /root에는 chef-getting-started.txt이 포함되어 있어야 합니다.

      AWS OpsWorks Stacks는 레시피를 루트로 실행하므로 getting-start는 홈 디렉터리가 아닌 디렉터리에 파일을 설치합니다. /root