Chef Server에서 AWS OpsWorks Stacks로 마이그레이션 - AWS OpsWorks

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

Chef Server에서 AWS OpsWorks Stacks로 마이그레이션

중요

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

AWS OpsWorks Stacks는 Chef를 기반으로 하기 때문에 Chef Server에서 AWS OpsWorks Stacks로 마이그레이션하는 것은 비교적 간단합니다. 이 주제에서는 AWS OpsWorks Stacks와 연동되도록 Chef Server 코드를 수정하는 지침을 제공합니다.

참고

chef-solo를 기반으로 하고 검색 또는 데이터 백을 지원하지 않는 11.10 이전의 Chef 버전을 사용하는 스택으로 마이그레이션하는 것은 권장하지 않습니다.

계층에 역할 매핑

Chef Server는 각각 Java 애플리케이션 서버를 호스팅하는 인스턴스 집합처럼 용도와 구성이 동일한 인스턴스를 나타내고 관리하는 데 역할을 사용합니다. AWS OpsWorks Stacks 계층은 기본적으로 Chef 역할과 같은 용도로 사용됩니다. 계층이란 구성, 설치된 패키지, 애플리케이션 배포 절차 등이 동일한 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 집합을 생성하기 위한 청사진입니다.

AWS OpsWorks Stacks에는 여러 유형의 애플리케이션 서버, HAProxy 로드 밸런서, MySQL 데이터베이스 마스터 및 Ganglia 모니터링 마스터를 위한 기본 제공 계층 세트가 포함되어 있습니다. 예를 들어 내장 Java 앱 서버 계층은 Tomcat 서버를 호스팅하는 인스턴스를 생성하기 위한 청사진입니다.

AWS OpsWorks Stacks로 마이그레이션하려면 각 역할을 동등한 기능을 제공하는 계층과 연결해야 합니다. 일부 역할은 내장 계층 중 하나를 그냥 사용할 수 있습니다. 일부 역할에는 다양한 정도의 사용자 지정이 필요할 수 있습니다. 연결된 레시피 등 내장 계층의 기능부터 검사하여 내장 계층이 최소한 역할의 기능 일부를 제공하는지 확인하세요. 내장 계층에 대한 자세한 정보는 계층AWS OpsWorks Stacks 계층 참조 단원을 참조하세요. 내장 레시피를 검사하려면 AWS OpsWorks Stacks 퍼블릭 GitHub 리포지토리를 참조하세요.

이후의 진행은 다음과 같이 계층을 각 역할에 얼마나 가깝게 일치시킬 수 있는지에 따라 달라집니다.

내장 계층이 역할의 모든 기능을 지원

이 내장 계층을 직접 사용하거나 필요하다면 약간의 사용자 지정을 거쳐 사용할 수 있습니다. 예를 들어 역할이 Tomcat 서버를 지원하는 경우, Java 앱 서버 계층의 레시피는 이미 역할의 모든 작업과 어쩌면 일부 약간의 사용자 지정까지 처리할 수 있습니다. 예컨대 적절한 속성 또는 템플릿을 재정의하여 계층의 내장 레시피가 사용자 지정 Tomcat 또는 Apache 구성 설정을 사용하도록 할 수 있습니다.

내장 계층이 역할의 일부 기능을 지원하지만 모든 기능을 지원하지는 않음

계층을 확장하여 내장 계층을 사용할 수 있습니다. 그러려면 일반적으로 사용자 지정 레시피를 구현하여 빠진 기능을 지원하고 레시피를 계층의 수명 주기 이벤트에 할당해야 합니다. 예를 들어 역할이 Tomcat 서버를 호스팅하는 동일한 인스턴스에 Redis 서버를 설치한다고 가정해 보십시오. 이 경우, 사용자 지정 레시피를 구현하여 Redis를 Java 앱 서버 계층의 인스턴스에 설치하고 계층의 설정 이벤트에 레시피를 할당하면 역할의 기능에 일치하도록 계층을 확장할 수 있습니다.

역할의 모든 기능을 적절히 지원하는 내장 계층이 없음

사용자 지정 계층을 구현합니다. 예를 들어 어느 내장 계층도 지원하지 않는 MongoDB 데이터베이스 서버를 역할이 지원한다고 가정해 보십시오. 이러한 지원은 레시피를 구현하여 필요한 패키지를 설치하고 서버를 구성한 다음 레시피를 사용자 지정 계층의 수명 주기 이벤트에 할당함으로써 제공할 수 있습니다. 일반적으로 적어도 역할의 레시피 일부는 이러한 용도에 사용할 수 있습니다. 사용자 지정 계층을 구현하는 방법에 대한 자세한 정보는 사용자 지정 Tomcat 서버 계층 생성 단원을 참조하세요.

데이터 백 사용

Chef Server를 통해 데이터 백을 사용하여 사용자 정의 데이터를 레시피에 전달할 수 있습니다.

  • 쿡북을 사용하여 데이터를 저장하면 Chef가 각 인스턴스에 데이터를 설치합니다.

  • 비밀번호와 같은 민감한 데이터에는 암호화된 데이터 백을 사용할 수 있습니다.

AWS OpsWorks Stacks는 데이터 백을 지원합니다. 레시피는 Chef Server와 정확히 동일한 코드를 사용하여 데이터를 검색할 수 있습니다. 다만 이 지원에는 다음과 같은 제한과 차이점이 있습니다.

  • 데이터 백은 Chef 11.10 Linux 및 이후의 스택에서만 지원됩니다.

    이보다 이전 버전의 Chef에서 실행되는 Windows 스택과 Linux 스택은 데이터 백을 지원하지 않습니다.

  • 데이터 백을 쿡북 리포지토리에 저장하지 마십시오.

    그 대신 사용자 지정 JSON을 사용하여 데이터 백의 데이터를 관리하세요.

  • AWS OpsWorks Stacks는 암호화된 데이터 백을 지원하지 않습니다.

    암호나 인증서 등 암호화된 형식의 민감한 데이터를 저장해야 하는 경우, 프라이빗 S3 버킷에 저장하는 것이 좋습니다. 그런 다음 Ruby용 Amazon SDK를 사용하는 사용자 지정 레시피를 생성해 데이터를 검색할 수 있습니다. 예제는 SDK for Ruby 사용 섹션을 참조하세요.

자세한 내용은 데이터 백 사용 섹션을 참조하세요.

Chef Server는 IP 주소와 역할 구성 같은 스택 구성 정보를 서버에 저장합니다. 레시피는 Chef 검색을 사용하여이 데이터를 검색합니다. AWS OpsWorks Stacks는 약간 다른 접근 방식을 사용합니다. 예를 들어 Chef 11.10 Linux 스택은 Chef Server의 경량 버전(흔히 Chef Zero라고 함)을 인스턴스에서 로컬로 실행하는 Chef 클라이언트 옵션인 Chef 클라이언트 로컬 모드에 기반합니다. Chef Zero는 인스턴스의 노드 객체에 저장된 데이터에 대한 검색을 지원합니다.

스택 데이터를 원격 서버에 저장하는 대신 AWS OpsWorks Stacks는 모든 수명 주기 이벤트에 대해 각 인스턴스의 노드 객체에 스택 구성 및 배포 속성 세트를 추가합니다. 이 속성들은 스택 구성의 스냅샷을 나타냅니다. 이 속성들은 Chef Server와 동일한 구문을 사용하며, 레시피가 서버에서 검색해야 하는 대부분의 데이터를 나타냅니다.

AWS OpsWorks Stacks에 대한 레시피의 검색 종속 코드를 수정할 필요가 없는 경우가 많습니다. Chef 검색은 스택 구성 및 배포 속성을 포함하는 노드 객체에서 작동하므로 AWS OpsWorks Stacks의 검색 쿼리는 일반적으로 Chef Server와 동일하게 작동합니다.

기본 예외는 스택 구성 및 배포 속성에 AWS OpsWorks Stacks가 인스턴스에 속성을 설치할 때 인식하는 데이터만 포함되어 있기 때문입니다. 특정 인스턴스에서 로컬로 속성을 생성하거나 수정하는 경우 이러한 변경 사항은 AWS OpsWorks Stacks로 다시 전파되지 않으며 다른 인스턴스에 설치된 스택 구성 및 배포 속성에 통합되지 않습니다. 해당 인스턴스에서만 검색을 사용하여 속성을 검색할 수 있습니다. 자세한 내용은 Chef 검색 사용 단원을 참조하십시오.

Chef Server와의 호환성을 위해 AWS OpsWorks Stacks는 노드 객체에 role 속성 세트를 추가합니다. 각 객체에는 스택의 계층 속성 중 하나가 포함됩니다. 레시피가 roles를 검색 키로 사용하는 경우, 검색 코드를 변경할 필요가 없습니다. 쿼리는 자동으로 해당 계층에 대한 데이터를 반환합니다. 예를 들어 다음의 두 쿼리는 모두 php-app 계층의 속성을 반환합니다.

phpserver = search(:node, "layers:php-app").first
phpserver = search(:node, "roles:php-app").first

쿡북 및 레시피 관리

AWS OpsWorks Stacks와 Chef Server는 쿡북과 레시피를 약간 다르게 처리합니다. Chef Server의 경우:

  • 직접 구현하거나 커뮤니티 쿡북을 사용하여 모든 쿡북을 제공합니다.

  • 쿡북을 서버에 저장합니다.

  • 수동으로 또는 정기적으로 레시피를 실행합니다.

AWS OpsWorks Stacks 사용:

  • AWS OpsWorks Stacks는 각 내장 계층에 대해 하나 이상의 쿡북을 제공합니다. 이러한 쿡북은 내장 계층의 소프트웨어 설치 및 구성과 앱 배포 같은 표준 작업을 처리합니다.

    내장 쿡북이 수행하지 않는 작업을 처리하려면 스택에 사용자 지정 쿡북을 추가하거나 커뮤니티 쿡북을 사용해야 합니다.

  • Stacks AWS OpsWorks 쿡북을 S3 버킷 또는 Git 리포지토리와 같은 원격 리포지토리에 저장합니다.

    자세한 내용은 쿡북 저장 단원을 참조하십시오.

  • 레시피를 수동으로 실행할 수 있지만 일반적으로 인스턴스의 수명 주기 중 주요 지점에서 발생하는 수명 주기 이벤트 세트에 대한 응답으로 AWS OpsWorks Stacks가 레시피를 실행하도록 합니다.

    자세한 내용은 레시피 실행 단원을 참조하십시오.

  • AWS OpsWorks Stacks는 Chef 11.10 스택에서만 Berkshelf를 지원합니다. Berkshelf를 사용하여 쿡북 종속성을 관리하는 경우, Chef 11.4 또는 이전 버전을 실행하는 스택은 사용할 수 없습니다.

    자세한 내용은 Berkshelf 사용 섹션을 참조하세요.

쿡북 저장

Chef Server의 경우, 쿡북을 서버에 저장하고 서버에서 인스턴스로 쿡북을 배포합니다. Stacks를 사용하면 S3 또는 HTTP 아카이브나 Git 또는 Subversion 리포지토리와 같은 리포지토리에 AWS OpsWorks 쿡북을 저장할 수 있습니다. 쿡북을 설치할 때 AWS OpsWorks Stacks가 리포지토리에서 스택의 인스턴스로 코드를 다운로드하는 데 필요한 정보를 지정합니다.

Chef Server에서 마이그레이션하려면 쿡북을 이러한 리포지토리 중 하나에 두어야 합니다. 쿡북 리포지토리를 구성하는 방법에 대해서는 쿡북 리포지토리를 참조하세요.

레시피 실행

AWS OpsWorks Stacks의 각 계층에는 설정, 구성, 배포, 배포 취소 및 종료와 같은 수명 주기 이벤트 세트가 있으며, 각 이벤트는 인스턴스의 수명 주기 동안 키 포인트에서 발생합니다. 사용자 지정 레시피를 실행하려면 일반적으로 적절한 계층에서 적절한 이벤트에 사용자 지정 레시피를 할당합니다. 이벤트가 발생하면 AWS OpsWorks Stacks는 연결된 레시피를 실행합니다. 예를 들어 설정 이벤트는 인스턴스 부팅이 완료된 후 발생하므로 일반적으로 이 이벤트에는 패키지 설치 및 구성과 서비스 시작을 수행하는 레시피를 할당합니다.

레시피 실행 스택 명령을 사용하면 수동으로 레시피를 실행할 수 있습니다. 이 명령은 개발 및 테스트에도 유용하지만 수명 주기 이벤트에 매핑되지 않는 레시피를 실행하는 데도 사용할 수 있습니다. 레시피 실행 명령을 사용하여 설정 및 Configure 이벤트를 수동으로 트리거할 수도 있습니다.

AWS OpsWorks Stacks 콘솔 외에도 AWS CLI 또는 SDKs를 사용하여 레시피를 실행할 수 있습니다. 이 도구들은 모든 AWS OpsWorks Stacks API 작업을 지원하지만 API보다 사용이 더 간단합니다. create-deployment CLI 명령을 사용하여 수명 주기 이벤트를 트리거하면 연결된 모든 레시피가 실행됩니다. 이 명령을 사용하여 이벤트를 트리거하지 않고 하나 이상의 레시피를 실행할 수도 있습니다. 이에 상응하는 SDK 코드는 특정 언어에 의존하지만 대체로 CLI 명령과 비슷합니다.

다음 예제는 create-deployment CLI 명령을 사용하여 애플리케이션 배포를 자동화하는 두 가지 방법을 설명합니다.

  • 단일 인스턴스가 포함된 사용자 지정 계층을 스택에 추가하여 정기적으로 앱을 배포합니다.

    인스턴스에서 cron 작업을 생성해 지정된 일정에 명령을 실행하는 사용자 지정 설정 레시피를 계층에 추가합니다. 레시피를 사용하여 cron 작업을 생성하는 방법의 예제는 Linux 인스턴스에서 Cron 작업 실행 단원을 참조하세요.

  • create-deployment CLI 명령을 사용하여 앱을 배포하는 작업을 지속적 통합 파이프라인에 추가합니다.

Chef 환경 사용

AWS OpsWorks Stacks는 Chef 환경을 지원하지 않으며 node.chef_environment 항상를 반환합니다_default.