AWS OpsWorks 스택 Linux 인스턴스에서 레시피 실행 - AWS OpsWorks

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

AWS OpsWorks 스택 Linux 인스턴스에서 레시피 실행

중요

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

Test Kitchen과 Vagrant는 쿡북을 구현하는 간단하고 효율적인 방법을 제공하지만 쿡북의 레시피가 프로덕션 환경에서 제대로 실행되는지 확인하려면 Stacks 인스턴스에서 실행해야 합니다. AWS OpsWorks 이 주제에서는 AWS OpsWorks Stacks Linux 인스턴스에 사용자 지정 쿡북을 설치하고 간단한 레시피를 실행하는 방법을 설명합니다. 또한 효율적으로 레시피 버그를 수정하기 위한 몇 가지 팁도 제공합니다.

Windows 인스턴스에서 레시피를 실행하는 방법에 대한 설명은 Windows 인스턴스에서 레시피 실행 단원을 참조하세요.

레시피 생성 및 실행

먼저 스택을 생성해야 합니다. 다음은 이 예제를 위한 스택을 생성하는 방법을 간략히 요약한 것입니다. 자세한 내용은 새 스택 생성 섹션을 참조하세요.

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

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

    • 이름 — OpsTest

    • 기본 SSH 키 – Amazon EC2 키 페어

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

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

    • 이름 — OpsTest

    • 짧은 이름 - opstest

    모든 계층 유형이 실제로 Linux 스택에서 작동하지만 이 예제에서는 다른 계층 유형에서 설치한 패키지가 필요하지 않기 때문에 사용자 지정 계층을 사용하는 것이 가장 간단합니다.

  4. 기본 설정을 사용하여 계층에 24/7 인스턴스를 추가하고 해당 인스턴스를 시작합니다.

인스턴스가 시작되는 동안(보통 몇 분 정도 소요됨) 쿡북을 생성할 수 있습니다. 이 예제에서는 조건부 논리을 약간 수정한 버전을 사용합니다. 이는 플랫폼에 따라 명명된 데이터 디렉터리를 생성합니다.

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

  2. 다음 내용이 포함된 metadata.rb 파일을 만들어 opstest에 저장합니다.

    name "opstest" version "0.1.0"
  3. recipes 안에 opstest 디렉터리를 만듭니다.

  4. 다음 레시피가 포함된 default.rb 파일을 만들어 recipes 디렉터리에 저장합니다.

    Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) directory data_dir do mode 0755 owner 'root' group 'root' recursive true action :create end

    레시피는 메시지를 기록하지만 이 파일은 Chef::Log.info를 호출해 기록합니다. 이 예제에서는 Test Kitchen을 사용하지 않으므로 log 메서드는 그다지 유용하지 않습니다. Chef::Log.info메시지를 Chef 로그에 저장합니다. 이 로그는 Chef 실행이 끝난 후 읽을 수 있습니다. AWS OpsWorks 스택은 나중에 설명하는 것처럼 이러한 로그를 쉽게 볼 수 있는 방법을 제공합니다.

    참고

    Chef 로그에는 일반적으로 일상적이고 상대적으로 관심도가 떨어지는 정보가 많이 포함되어 있습니다. 메시지 텍스트를 묶고 있는 '*' 문자 덕분에 메시지를 쉽게 식별할 수 있습니다.

  5. .zipopsworks_cookbooks 아카이브를 생성합니다. AWS OpsWorks Stacks 인스턴스에 쿡북을 설치하려면 쿡북을 리포지토리에 저장하고 쿡북을 인스턴스로 다운로드하는 데 필요한 정보를 AWS OpsWorks Stacks에 제공해야 합니다. 지원되는 여러 리포지토리 유형에 쿡북을 저장할 수 있습니다. 이 예제에서는 쿡북이 포함된 아카이브 파일을 Amazon S3 버킷에 저장합니다. 쿡북 리포지토리에 대한 자세한 정보는 쿡북 리포지토리 단원을 참조하세요.

    참고

    간단한 설명을 위해 이 예제에서는 전체 opsworks_cookbooks 디렉터리를 보관합니다. 그러나 이는 쿡북 중 하나만 사용하더라도 AWS OpsWorks Stacks가 모든 opsworks_cookbooks 쿡북을 인스턴스로 다운로드한다는 것을 의미합니다. 예제 쿡북만 설치하려면 다른 상위 디렉터리를 만들어 opstest를 해당 디렉터리로 이동합니다. 그런 다음 상위 디렉터리의 .zip 아카이브를 만들어 opsworks_cookbooks.zip 대신 사용합니다.

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

  6. 아카이브를 Amazon S3 버킷에 업로드하고, 해당 아카이브를 퍼블릭으로 설정한 다음, 아카이브의 URL을 적어 둡니다.

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

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

    • 리포지토리 유형S3 아카이브

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

    기타 설정에 기본값을 사용하고 [저장]을 클릭하여 스택 구성을 업데이트합니다.

  2. 사용자 지정 쿡북 업데이트 스택 명령을 실행하여 스택의 인스턴스에 사용자 지정 쿡북의 최신 버전을 설치합니다. 쿡북의 이전 버전이 있으면 이 명령이 이전 버전을 덮어 씁니다.

  3. 실행할 레시피opstest::default으로 설정된 상태에서 레시피 실행 스택 명령을 실행하여 레시피를 실행합니다. 이 명령은 opstest::default로 구성된 실행 목록을 사용하여 Chef 실행을 시작합니다.

레시피가 성공적으로 실행되면 이를 확인할 수 있습니다.

opstest를 확인하려면
  1. 가장 먼저 Chef 로그를 확인합니다. opstest1 인스턴스의 로그 열에서 표시를 클릭하여 로그를 표시합니다. 아래로 스크롤하면 맨 아래 근처에 로그 메시지가 보입니다.

    ... [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache. [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache. [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.****** [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3) ...
  2. SSH를 사용하여 인스턴스에 로그인하고 /srv/www/의 내용을 표시합니다.

모든 단계를 수행했다면 예상했던 /srv/www/shared 디렉터리 대신 /srv/www/config 디렉터리가 보일 것입니다. 다음 섹션에서는 이러한 버그를 빠르게 수정하는 몇 가지 지침을 제공합니다.

자동으로 레시피 실행

[레시피 실행] 명령은 사용자 지정 레시피를 테스트하는 편리한 방법입니다. 이 때문에 다음 예제의 대부분에서 이 명령이 사용됩니다. 하지만 실제로는 일반적으로 인스턴스 수명 주기의 표준 시점 (예: 인스턴스 부팅이 끝난 후 또는 앱을 배포할 때) 에 레시피를 실행합니다. AWS OpsWorks 스택은 설치, 구성, 배포, 배포 취소, 종료 등 각 계층에 대한 일련의 수명 주기 이벤트를 지원하여 인스턴스에서 레시피를 간단하게 실행할 수 있습니다. 적절한 라이프사이클 이벤트에 레시피를 할당하여 AWS OpsWorks 스택이 레이어의 인스턴스에서 레시피를 자동으로 실행하도록 할 수 있습니다.

일반적으로는 인스턴스가 부팅을 완료하는 대로 디렉터리를 생성하는데, 이는 설정 이벤트에 해당합니다. 다음 절차는 예제의 이전 단계에서 생성한 것과 동일한 스택을 사용하여 설정 시 예제 레시피를 실행하는 방법을 보여줍니다. 다른 이벤트에도 동일한 절차를 사용할 수 있습니다.

설정 시 레시피를 자동으로 실행하려면
  1. 탐색 창에서 레이어를 선택한 다음 레이어의 레시피 링크 옆에 있는 연필 아이콘을 선택합니다. OpsTest

  2. opstest::default을 계층의 설정 레시피에 추가하고, +를 클릭하여 계층에 추가하고, 저장을 선택하여 구성을 저장합니다.

  3. [인스턴스]를 선택해 계층에 다른 인스턴스를 추가한 다음 시작합니다.

    이 인스턴스의 이름은 opstest2여야 합니다. 부팅이 완료되면 AWS OpsWorks 스택이 실행됩니다. opstest::default

  4. opstest2 인스턴스가 온라인 상태가 되면 /srv/www/shared가 있는지 확인합니다.

참고

설정, Configure 또는 Deploy 이벤트에 레시피를 할당한 경우 스택 명령(설정 및 Configure) 또는 배포 명령(Deploy)을 사용하여 이벤트를 트리거함으로써 수동으로 레시피를 실행할 수도 있습니다. 한 이벤트에 여러 레시피를 할당하면 이러한 명령은 모든 레시피를 실행합니다.

레시피 문제 해결 및 수정

예상한 결과를 얻지 못하거나 레시피가 성공적으로 실행되지 않은 경우 일반적으로 Chef 로그를 검사하는 것으로 문제 해결이 시작됩니다. 로그에는 실행에 대한 상세한 설명과 레시피로부터의 모든 인라인 로그 메시지가 포함됩니다. 레시피가 그냥 실패한 경우 로그가 특히 유용합니다. 이러한 경우가 발생하면 Chef가 스택 트레이스를 포함하여 오류를 기록합니다.

이 예제에서와 같이 레시피가 성공한 경우에는 Chef 로그가 큰 도움이 안 됩니다. 그러면 레시피의 첫 몇 줄을 보다 면밀히 검토하여 문제를 파악할 수 있습니다.

Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...

Vagrant에서 레시피를 테스트할 경우 CentOS가 Amazon Linux의 합리적 대역이지만, 지금은 실제 Amazon Linux 인스턴스가 실행 중입니다. Amazon Linux용 플랫폼 값은 amazon입니다. value_for_platform 호출에 이 값이 포함되지 않으므로 기본적으로 레시피가 /srv/www/config를 생성합니다. 문제 해결에 대한 자세한 정보는 디버깅 및 문제 해결 안내서 단원을 참조하세요.

이제 문제를 식별했으므로 레시피를 업데이트하고 수정을 확인해야 합니다. 원래 소스 파일로 돌아가 default.rb를 업데이트하고, 새 아카이브를 Amazon S3로 업로드하는 등의 작업을 수행합니다. 하지만 이 프로세스는 약간 번거롭고 시간이 걸릴 수 있습니다. 다음은 인스턴스에서 레시피를 편집하는 방법으로, 예제 내 버그와 같은 간단한 레시피 버그를 수정하는 데 특히 유용한 훨씬 빠른 접근 방식입니다.

인스턴스에서 레시피를 편집하려면
  1. SSH를 사용하여 인스턴스에 로그인한 다음 sudo su를 실행하여 권한을 승격시킵니다. 이 쿡북 디렉터리에 액세스하려면 루트 권한이 필요합니다.

  2. AWS OpsWorks 스택은 쿡북을 저장하므로 탐색해 /opt/aws/opsworks/current/site-cookbooks 보세요. /opt/aws/opsworks/current/site-cookbooks/opstest/recipes

    참고

    AWS OpsWorks 스택에는 요리책 사본도 보관됩니다. /opt/aws/opsworks/current/merged-cookbooks 이러한 쿡북은 편집하지 마십시오. 레시피를 실행하면 AWS OpsWorks Stacks는 쿡북을 에서 .../site-cookbooks.../merged-cookbooks 복사하므로 변경한 내용을 덮어씁니다. .../merged-cookbooks

  3. 인스턴스에서 텍스트 편집기를 사용하여 default.rb를 편집하고 centosamazon으로 바꿉니다. 이제 레시피가 다음과 같이 보여야 합니다.

    Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "amazon" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...

수정을 확인하려면 레시피 실행 스택 명령을 다시 실행하여 레시피를 실행합니다. 이제 인스턴스에 /srv/www/shared 디렉터리가 있을 것입니다. 추가로 레시피를 수정해야 할 경우 [레시피 실행]을 원하는 만큼 실행할 수 있으며, 명령을 실행할 때마다 인스턴스를 중지했다 재시작할 필요가 없습니다. 레시피가 올바로 작동하는 것으로 판단되면 소스 쿡북에서 코드를 업데이트할 필요가 없습니다.

참고

AWS OpsWorks Stacks가 자동으로 실행되도록 라이프사이클 이벤트에 레시피를 할당한 경우 언제든지 레시피 실행을 사용하여 레시피를 다시 실행할 수 있습니다. 또한 AWS OpsWorks Stacks 콘솔을 사용하여 적절한 이벤트를 수동으로 트리거함으로써 인스턴스를 다시 시작하지 않고도 원하는 만큼 레시피를 재실행할 수 있습니다. 하지만 이 방법에서는 이벤트의 레시피가 모두 실행됩니다. 다음을 기억하세요.

  • 설정 또는 Configure 이벤트를 트리거하려면 스택 명령을 사용합니다.

  • Deploy 또는 Undeploy 이벤트를 트리거하려면 배포 명령을 사용합니다.