Vagrant에서 스택 구성 및 배포 속성 모의 - AWS OpsWorks

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

Vagrant에서 스택 구성 및 배포 속성 모의

중요

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

참고

이 주제는 Linux 인스턴스에만 적용됩니다. Test Kitchen은 아직 Windows를 지원하지 않으므로 AWS OpsWorks Stacks 인스턴스에서 모든 Windows 예제를 실행합니다.

AWS OpsWorks Stacks는 모든 수명 주기 이벤트에 대해 스택의 각 인스턴스에 대한 노드 객체에 스택 구성 및 배포 속성을 추가합니다. 이러한 속성은 스택 구성의 스냅샷을 제공합니다. 여기에는 각 계층 및 해당 온라인 인스턴스의 구성, 배포된 각 앱의 구성 등이 포함됩니다. 이러한 속성은 노드 객체에 있으므로 모든 레시피에서 액세스할 수 있습니다. AWS OpsWorks Stacks 인스턴스의 대부분의 레시피는 이러한 속성 중 하나 이상을 사용합니다.

Vagrant 상자에서 실행되는 인스턴스는 AWS OpsWorks Stacks에서 관리하지 않으므로 노드 객체에는 기본적으로 스택 구성 및 배포 속성이 포함되지 않습니다. 하지만 Test Kitchen 환경에 적절한 속성 세트를 추가할 수 있습니다. 그런 다음 Test Kitchen은 인스턴스의 노드 객체에 속성을 추가하고 레시피는 AWS OpsWorks Stacks 인스턴스에서와 마찬가지로 속성에 액세스할 수 있습니다.

이 주제는 적합한 스택 구성 및 배포 속성의 사본을 구하고, 인스턴스에 속성을 설치하고, 속성에 액세스하는 방법을 설명합니다.

참고

Test Kitchen을 사용하여 레시피에서 테스트를 실행하는 경우, synthetichai는 스택 구성 및 배포를 모의하는 대체 방법을 제공합니다JSON.

쿡북을 설정하려면
  1. printjson의 하위 디렉터리 opsworks_cookbooks를 만들고 그 디렉터리로 이동합니다.

  2. 예제 1: 패키지 설치 단원에서 설명하는 대로 Test Kitchen을 초기화 및 구성합니다.

  3. printjson에 하위 디렉터리 recipesenvironments를 추가합니다.

적절한 정의를 포함하는 속성 파일을 쿡북에 추가하여 스택 구성 및 배포 속성을 모의할 수도 있지만, Test Kitchen 환경을 사용하는 것이 더 나은 접근 방식입니다. 기본적으로 두 가지 방법이 있습니다.

  • .kitchen.yml에 속성 정의를 추가합니다.

    이 방법은 속성이 몇 개 정도일 경우 매우 유용합니다. 자세한 정보는 kitchen.yml 단원을 참조하세요.

  • 환경 파일에서 속성을 정의하고 .kitchen.yml에서 파일 단원을 참조합니다.

    이 접근 방식은 환경 파일의 JSON 형식이 이미기 때문에 스택 구성 및 배포 속성에 일반적으로 선호됩니다. 적절한 Stacks 인스턴스에서 JSON 형식의 속성 사본을 가져와 붙여넣기만 AWS OpsWorks 하면 됩니다. 다음 예제는 모두 환경 파일을 사용합니다.

쿡북에 대한 스택 구성 및 배포 속성을 생성하는 가장 간단한 방법은 적절하게 구성된 스택을 생성하고 인스턴스에서 결과 속성을 로 복사하는 것입니다JSON. Test Kitchen 환경 파일을 관리할 수 JSON 있도록 하려면 레시피에 필요한 속성만 포함하도록 편집할 수 있습니다. 이 장의 예제는 로드 밸런서Chef 11 Linux 스택 시작하기, PHP 애플리케이션 서버 및 내SQL 데이터베이스 서버가 있는 간단한 PHP 애플리케이션 서버 스택인의 스택을 기반으로 합니다.

스택 구성 및 배포를 생성하려면 JSON
  1. S 배포를 Chef 11 Linux 스택 시작하기포함하여에 설명된 MyStack 대로를 생성합니다implePHPApp. 원하는 경우에서에 대해 호출된 두 번째 PHP 앱 서버 인스턴스를 생략할 수 있습니다. 예제4단계: 스케일 아웃 MyStack에서는 이러한 속성을 사용하지 않습니다.

  2. 아직 시작하지 않은 경우 php-app1 인스턴스를 시작한 다음 로 로그인합니다SSH.

  3. 터미널 창에서 다음 agent cli 명령을 실행합니다.

    sudo opsworks-agent-cli get_json

    이 명령은 인스턴스의 최신 스택 구성 및 배포 속성을 터미널 창에 JSON 형식으로 인쇄합니다.

  4. JSON를 .json 파일에 복사하여 워크스테이션의 편리한 위치에 저장합니다. 세부 정보는 SSH 클라이언트에 따라 다릅니다. 예를 들어 Windows에서 PuTTY를 사용하는 경우 터미널 창의 모든 텍스트를 Windows 클립보드에 복사하는 Copy All to Clipboard 명령을 실행할 수 있습니다. 그런 다음 해당 내용을 .json 파일에 붙여 넣고 이 파일을 편집해 관련 없는 텍스트를 제거합니다.

  5. 필요에 따라를 편집 MyStack JSON합니다. 스택 구성 및 배포 속성은 수 없이 많지만 일반적으로 쿡북에서는 이 중 극히 일부만 사용합니다. 환경 파일을 관리할 수 JSON 있도록 하려면 원래 구조를 유지하되 쿡북이 실제로 사용하는 속성만 포함하도록를 편집할 수 있습니다.

    이 예제에서는 ['id] 및 라는 두 가지 ['opsworks']['stack'] 속성만 포함하는의 MyStack JSON 심하게 편집된 버전을 사용합니다['name']. 다음과 같은 편집된 버전의 MyStack JSON를 생성합니다.

    { "opsworks": { "stack": { "name": "MyStack", "id": "42dfd151-6766-4f1c-9940-ba79e5220b58", }, }, }

인스턴스의 노드 객체JSON로 가져오려면 Test Kitchen 환경에 추가해야 합니다.

Test Kitchen 환경에 스택 구성 및 배포 속성을 추가하려면
  1. 다음 내용이 포함된 환경 파일 test.json을 만들어 이 파일을 쿡북의 environments 폴더에 저장합니다.

    { "default_attributes": { "opsworks" : { "stack" : { "name" : "MyStack", "id" : "42dfd151-6766-4f1c-9940-ba79e5220b58" } } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }

    환경 파일에는 다음 요소가 포함되어 있습니다.

    • default_attributes - JSON 형식의 기본 속성입니다.

      이러한 속성은 모든 스택 구성 및 배포 JSON 속성에서 사용하는 유형인 default 속성 유형을 사용하여 노드 객체에 추가됩니다. 이 예제에서는 앞서 JSON 설명한 스택 구성 및 배포의 편집된 버전을 사용합니다.

    • chef_type - 이 요소는 environment로 설정합니다.

    • json_class - 이 요소는 Chef::Environment로 설정합니다.

  2. .kitchen.yml을 편집하여 Test Kitchen 환경을 다음과 같이 정의합니다.

    --- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-12.04 suites: - name: printjson provisioner: solo_rb: environment: test run_list: - recipe[printjson::default] attributes:

    kitchen init이 생성한 기본 .kitchen.yml에 다음 요소를 추가하여 환경을 정의합니다.

    provisioner

    다음 요소를 추가합니다.

    • name - 이 요소는 chef_solo로 설정합니다.

      AWS OpsWorks Stacks 환경을 더 가깝게 복제하려면 Chef 솔로 대신 Chef 클라이언트 로컬 모드를 사용할 수 있습니다. 로컬 모드는 원격 서버 대신 인스턴스에서 로컬로 실행되는 Chef 서버의 경량 버전(Chef Zero)을 사용하는 Chef 클라이언트 옵션입니다. 로컬 모드에서는 레시피가 원격 서버에 연결하지 않고 검색 또는 데이터 백과 같은 Chef 서버 기능을 사용할 수 있습니다.

    • environments_path - 환경 파일(이 예제의 경우 ./environments)을 포함하는 쿡북 하위 디렉터리

    suites:provisioner

    환경 파일의 이름(.json 확장명 제외)으로 설정된 environment 요소와 함께 solo_rb 요소를 추가합니다. 이 예제에서는 environmenttest로 설정합니다.

  3. 다음 내용이 포함된 레시피 파일 default.rb를 만들어 이 파일을 쿡북의 recipes 디렉터리에 저장합니다.

    log "Stack name: #{node['opsworks']['stack']['name']}" log "Stack id: #{node['opsworks']['stack']['id']}"

    이 레시피는 환경에 추가한 스택 구성 및 배포 값 2개를 기록하기만 합니다. 레시피가 Virtual Box에서 로컬로 실행되고 있지만 레시피가 AWS OpsWorks Stacks 인스턴스에서 실행 중일 때와 동일한 노드 구문을 사용하여 이러한 속성을 참조합니다.

  4. kitchen converge을(를) 실행합니다. 다음 로그 출력과 유사해야 합니다.

    ... Converging 2 resources Recipe: printjson::default * log[Stack name: MyStack] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack name: MyStack] action write (printjson::default line 1) [2014-07-01T23:14:09+00:00] INFO: Stack name: MyStack * log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write (printjson::default line 2) [2014-07-01T23:14:09+00:00] INFO: Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58 ...