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

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

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

중요

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

참고

이 주제는 Linux 인스턴스에만 적용됩니다. 테스트 키친은 아직 Windows를 지원하지 않으므로 모든 Windows 예제를 AWS OpsWorks Stacks 인스턴스에서 실행해 보세요.

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

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

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

참고

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

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

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

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

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

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

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

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

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

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

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

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

    이 예제에서는 두 개의 ['opsworks']['stack'] 속성만 포함하는 많이 편집된 버전의 MyStack JSON을 사용합니다. ['id] ['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 형식의 기본 속성.

      이러한 속성은 속성 유형이 default인 노드 객체에 추가되는데, 이 속성 유형은 모든 스택 구성 및 배포 JSON 속성에서 사용합니다. 이 예제에서는 앞서 표시된 스택 구성 및 배포 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 스택 환경을 더 가깝게 복제하려면 Chef solo 대신 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 ...