기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Chef 11.10 스택용 레시피 구현
중요
The AWS OpsWorks Stacks 서비스 수명이 2024년 5월 26일에 종료되었으며 신규 및 기존 고객 모두 사용할 수 없습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 다음 연락처로 문의하십시오. AWS Support 팀 구성: AWS re:포스트 포스트
Chef 11.10 스택은 Chef 11.4 스택에 비해 다음과 같은 장점이 있습니다.
-
Chef 실행은 Ruby 2.0.0을 사용합니다. 따라서 레시피가 새로운 Ruby 구문을 사용할 수 있습니다.
-
레시피는 Chef 검색 및 데이터 백을 사용할 수 있습니다.
Chef 11.10 스택은 많은 커뮤니티 쿡북을 수정 없이 사용할 수 있습니다.
-
Berkshelf를 사용하여 쿡북을 관리할 수 있습니다.
Berkshelf는 스택에서 사용자 지정 쿡북을 관리하고 커뮤니티 쿡북을 사용하는 훨씬 유연한 방법을 제공합니다.
-
쿡북은
metadata.rb
에서 종속성을 선언해야 합니다.쿡북이 다른 쿡북에 의존하는 경우 해당 쿡북의
metadata.rb
파일에서 종속성을 포함시켜야 합니다. 예를 들어 쿡북에include_recipe anothercookbook::somerecipe
같은 문을 사용하는 레시피가 있는 경우 쿡북의metadata.rb
파일에depends "anothercookbook"
행이 있어야 합니다. -
AWS OpsWorks 스택은 스택에 My SQL 레이어가 포함된 경우에만 스택의 인스턴스에 My SQL 클라이언트를 설치합니다.
-
AWS OpsWorks 스택은 스택에 Ganglia 레이어가 포함된 경우에만 스택 인스턴스에 Ganglia 클라이언트를 설치합니다.
-
배포가
bundle install
을 실행하고 설치가 실패할 경우 배포도 실패합니다.
중요
내장 쿡북 이름을 사용자 지정 또는 커뮤니티 쿡북에 재사용하지 마십시오. 내장 쿡북과 이름이 동일한 사용자 지정 쿡북은 실패할 수 있습니다. Chef 11.10, 11.4 및 0.9 스택과 함께 사용할 수 있는 내장 쿡북의 전체 목록은 의 opsworks-cookbook 리포지토리를 참조하십시오. GitHub
Chef 0.9 및 11.4 스택에서 성공적으로 실행되는 ASCII 문자가 아닌 쿡북은 Chef 11.10 스택에서 실패할 수 있습니다. Chef 11.10 스택은 Chef 실행을 위해 Ruby 1.8.7보다 인코딩이 훨씬 엄격한 Ruby 2.0.0을 사용하기 때문입니다. 이러한 쿡북이 Chef 11.10 스택에서 성공적으로 실행되려면 ASCII 비문자를 사용하는 각 파일의 상단에 인코딩에 대한 힌트를 제공하는 주석이 있어야 합니다. 예를 들어 UTF -8 인코딩의 경우 주석은 다음과 같습니다. #
encoding: UTF-8
Ruby 2.0.0 인코딩에 대한 자세한 정보는 Encoding
쿡북 설치 및 우선 순위
설치 절차 AWS OpsWorks 스택 쿡북은 Chef 11.10 스택에서 이전 Chef 버전과 약간 다르게 작동합니다. 셰프 11.10 스택의 경우, 이후 AWS OpsWorks Stacks는 내장, 사용자 지정 및 Berkshelf 쿡북을 설치하고 다음과 같은 순서로 공통 디렉토리에 병합합니다.
-
내장 쿡북
-
Berkshelf 쿡북(있는 경우)
-
사용자 지정 쿡북(있는 경우)
일시 AWS OpsWorks Stacks는 이 병합을 수행하고 레시피를 포함한 디렉토리의 전체 내용을 복사합니다. 중복 항목이 있을 경우 다음 규칙이 적용됩니다.
-
Berkshelf 쿡북의 콘텐츠가 내장 쿡북보다 우선합니다.
-
사용자 지정 쿡북의 콘텐츠가 Berkshelf 쿡북보다 우선합니다.
이 프로세스가 작동하는 방법을 예시하기 위해, 세 개의 쿡북 디렉터리 모두 mycookbook
이라는 쿡북을 포함하고 있는 시나리오를 생각해 봅시다.
-
내장 쿡북 -
mycookbook
은someattributes.rb
라는 속성 파일,sometemplate.erb
이라는 템플릿 파일 및somerecipe.rb
라는 이름의 레시피를 포함합니다. -
Berkshelf 쿡북 -
mycookbook
은sometemplate.erb
및somerecipe.rb
을(를) 포함합니다. -
사용자 지정 쿡북 -
mycookbook
은somerecipe.rb
을(를) 포함합니다.
병합된 쿡북은 다음 항목을 포함합니다.
-
내장 쿡북의
someattributes.rb
-
Berkshelf 쿡북의
sometemplate.erb
-
사용자 지정 쿡북의
somerecipe.rb
중요
전체 내장 쿡북을 리포지토리로 복사한 후 쿡북의 일부를 수정하여 Chef 11.10 스택을 사용자 지정하면 안 됩니다. 그러면 레시피를 포함하여 전체 내장 쿡북을 재정의합니다. If AWS OpsWorks 스택은 해당 쿡북을 업데이트합니다. 개인 사본을 수동으로 업데이트하지 않는 한 스택은 해당 업데이트의 이점을 얻을 수 없습니다. 스택을 사용자 지정하는 방법에 대한 자세한 정보는 커스터마이징 AWS OpsWorks 스택 단원을 참조하세요.
Chef 검색 사용
레시피에서 Chef search
메서드
-
인스턴스의 스택 구성 및 베포 속성
-
인스턴스의 내장 및 사용자 지정 쿡북 속성 파일의 속성
-
Ohai가 수집한 시스템 데이터
스택 구성 및 배포 속성에는 스택 내 각 온라인 인스턴스의 호스트 이름과 IP 주소 같이 일반적으로 레시피가 검색을 통해 가져오는 정보를 대부분 포함합니다. AWS OpsWorks Stacks는 각 수명 주기 이벤트에서 이러한 속성을 업데이트하여 현재 스택 상태가 정확히 반영되도록 합니다. 이는 스택에서 검색 의존형 커뮤니티 레시피를 수정 없이 자주 사용할 수 있음을 의미합니다. 검색 메서드는 여전히 해당 데이터를 반환합니다. 데이터는 서버가 아니라 스택 구성 및 배포 속성으로부터 가져옵니다.
주요 제한 사항은 다음과 같습니다. AWS OpsWorks 스택 검색은 로컬 노드 개체의 데이터, 특히 스택 구성 및 배포 속성만 처리한다는 것입니다. 이러한 이유 때문에 다음 형식의 데이터는 검색을 통해 가져오지 못할 수 있습니다.
-
다른 인스턴스의 로컬에서 정의된 속성
레시피가 속성을 로컬로 정의하는 경우 해당 정보는 해당 레시피에 다시 보고되지 않습니다. AWS OpsWorks Stacks 서비스이므로 검색을 사용하여 다른 인스턴스에서 해당 데이터에 액세스할 수 없습니다.
-
사용자 지정
deploy
속성앱을 배포할 JSON 때 사용자 지정을 지정할 수 있으며, 해당 속성은 해당 배포의 스택 인스턴스에 설치됩니다. 하지만 사용자가 선택한 인스턴스에만 배포하는 경우 속성이 이러한 인스턴스에만 설치됩니다. 다른 모든 인스턴스에서는 이러한 사용자 지정 JSON 속성에 대한 쿼리가 실패합니다. 또한 사용자 지정 속성은 해당 특정 배포의 스택 구성 및 JSON 배포에만 포함됩니다. 이들 속성은 다음 번 수명 주기 이벤트가 새로운 스택 구성 및 배포 속성 세트를 설치할 때까지만 액세스할 수 있습니다. JSON스택에 사용자 지정을 지정하는 경우 속성은 모든 수명 주기 이벤트의 모든 인스턴스에 설치되며 검색을 통해 항상 액세스할 수 있습니다.
-
다른 인스턴스의 Ohai 데이터
Chef의 Ohai 도구
는 인스턴스의 다양한 시스템 데이터를 가져와 노드 객체에 추가합니다. 이 데이터는 로컬에 저장되며 다시 보고되지 않습니다. AWS OpsWorks 스택 서비스이므로 검색으로 다른 인스턴스의 Ohai 데이터에 접근할 수 없습니다. 하지만 이 데이터 중 일부가 스택 구성 및 배포 속성에 포함될 수도 있습니다. -
오프라인 인스턴스
스택 구성 및 배포 속성은 온라인 인스턴스에 대한 데이터만 포함합니다.
다음 레시피 발췌문은 검색을 사용하여 PHP 레이어 인스턴스의 프라이빗 IP 주소를 가져오는 방법을 보여줍니다.
appserver = search(:node, "role:php-app").first Chef::Log.info("The private IP is '#{appserver[:private_ip]}'")
참고
일시 AWS OpsWorks 스택은 스택 구성 및 배포 속성을 노드 개체에 추가하며, 실제로는 각각 동일한 데이터를 가진 두 세트의 계층 속성을 생성합니다. layers
네임스페이스에 한 세트가 있는데, 어떻게 AWS OpsWorks 스택은 데이터를 저장합니다. 다른 한 세트는 role
네임스페이스에 위치합니다. 이것은 Chef 서버가 데이터를 저장하는 방법입니다. role
네임스페이스의 목적은 Chef 서버용으로 구현된 검색 코드를 다음 서버에서 실행할 수 있도록 하는 것입니다. AWS OpsWorks 스택 인스턴스. 특별히 다음과 같은 목적으로 코드를 작성하는 경우 AWS OpsWorks 스택의 경우 이전 role:php-app
예제에서 layers:php-app
또는 둘 중 하나를 사용할 수 있으며 search
동일한 결과가 반환됩니다.
데이터 백 사용
레시피에서 Chef data_bag_item
메서드node.chef_environment
항상 _default
반환됩니다.
custom을 사용하여 속성에 하나 이상의 속성을 JSON 추가하여 데이터 백을 생성합니다. [:opsworks][:data_bags]
다음 예제는 사용자 정의에서 데이터 백을 생성하는 일반적인 형식을 보여줍니다JSON.
참고
데이터 백을 쿡북 리포지토리에 추가하여 생성할 수는 없습니다. 사용자 정의를 사용해야 합니다JSON.
{ "opsworks": { "data_bags": { "bag_name1": { "item_name1: { "key1" : “value1”, "key2" : “value2”, ... } }, "bag_name2": { "item_name1": { "key1" : “value1”, "key2" : “value2”, ... } }, ... } } }
일반적으로 JSON스택에 사용자 정의를 지정하여 이후의 각 수명 주기 이벤트에 대해 모든 인스턴스에 사용자 지정 속성을 설치합니다. 앱을 배포할 JSON 때 사용자 지정을 지정할 수도 있지만 이러한 속성은 해당 배포에만 설치되며 선택한 인스턴스 집합에만 설치될 수 있습니다. 자세한 내용은 앱 배포 단원을 참조하십시오.
다음 사용자 지정 JSON 예제는 라는 이름의 데이터 백을 만듭니다myapp
. 이 데이터 백은 하나의 항목 mysql
을 포함하며 키-값 페어가 두 개입니다.
{ "opsworks": { "data_bags": { "myapp": { "mysql": { "username": "default-user", "password": "default-pass" } } } } }
레시피에서 데이터를 사용하려면 다음 코드에 나온 대로 data_bag_item
을 호출하고 여기에 데이터 백 및 값 이름을 전달할 수 있습니다.
mything = data_bag_item("myapp", "mysql") Chef::Log.info("The username is '#{mything['username']}' ")
데이터 백의 데이터를 수정하려면 사용자 JSON 지정을 수정하면 됩니다. 그러면 다음 라이프사이클 이벤트를 위해 스택의 인스턴스에 설치됩니다.
Berkshelf 사용
Chef 0.9 및 Chef 11.4 스택에서는 사용자 지정 쿡북 리포지토리를 하나만 설치할 수 있습니다. Chef 11.10 스택의 경우 Berkshelf
Berkshelf를 사용하려면 사용자 지정 쿡북 설치 섹션에서 설명하는 대로 명시적으로 Berkshelf를 활성화해야 합니다. 그런 다음 Berksfile
파일을 쿡북 리포지토리의 루프 디렉터리(설치할 쿡북을 지정)에 포함시킵니다.
Berksfile에서 외부 쿡북 소스를 지정하려면 파일 상단에 기본 리포지토리를 지정하는 소스 속성을 포함하세요. URL 저장소를 명시적으로 URLs 지정하지 않는 한 Berkshelf는 소스에서 쿡북을 찾습니다. 그런 다음 설치하려는 각 쿡북을 다음 형식으로 한 줄에 포함시킵니다.
cookbook '
cookbook_name
', ['>=
cookbook_version
'], [cookbook_options
]
cookbook
다음의 필드는 특정 쿡북을 지정합니다.
-
cookbook_name
— (필수) 쿡북의 이름을 지정합니다.다른 필드를 포함하지 않으면 Berkshelf는 지정된 소스에서 쿡북을 설치합니다. URLs
-
cookbook_version
— (선택 사항) 쿡북 버전 또는 버전을 지정합니다.=
또는>=
같은 접두사를 사용하여 특정 버전 또는 허용 가능한 버전 범위를 지정할 수 있습니다. 버전을 지정하지 않을 경우 Berkshelf는 최신 버전을 설치합니다. -
cookbook_options
— (선택 사항) 마지막 필드는 저장소 위치와 같은 옵션을 지정하는 하나 이상의 키-값 쌍이 포함된 해시입니다.예를 들어
git
키를 포함시켜 특정 Git 리포지토리를 지정하고tag
키를 포함시켜 특정 리포지토리 브랜치를 지정할 수 있습니다. 리포지토리 브랜치 지정은 일반적으로 선호하는 쿡북이 설치되도록 보장하는 최선의 방법입니다.
중요
Berksfile에 metadata
행을 포함시키고 metadata.rb
에서 쿡북 종속성을 선언하여 쿡북을 선언하지 마십시오. 이 방법이 제대로 작동하려면 두 파일이 모두 동일한 디렉터리에 있어야 합니다. 다음과 같이 AWS OpsWorks Stacks의 경우 Berksfile은 저장소의 루트 디렉터리에 있어야 하지만 metadata.rb
파일은 해당 쿡북 디렉터리에 있어야 합니다. 대신에 Berksfile에서 외부 쿡북을 명시적으로 선언해야 합니다.
다음은 쿡북을 지정하는 다양한 방법을 보여주는 Berksfile의 예제입니다. Berksfile을 생성하는 방법에 대한 자세한 정보는 Berkshelf
source "https://supermarket.chef.io" cookbook 'apt' cookbook 'bluepill', '>= 2.3.1' cookbook 'ark', git: 'git://github.com/opscode-cookbooks/ark.git' cookbook 'build-essential', '>= 1.4.2', git: 'git://github.com/opscode-cookbooks/build-essential.git', tag: 'v1.4.2'
이 파일은 다음 쿡북을 설치합니다.
-
커뮤니티 쿡북 중 최신 버전의
apt
-
커뮤니티 쿡북 중 최신 버전의
bluepill
(버전 2.3.1 이상) -
지정된 리포지토리로부터 최신 버전의
ark
이 예제는 퍼블릭 커뮤니티 쿡북 리포지토리를 위한 것이지만 프라이빗 리포지토리를 포함한 GitHub 다른 리포지토리에서 쿡북을 설치할 수 있습니다. URL 자세한 정보는 Berkshelf
를 참조하세요. -
지정된 리포지토리의 v1.4.2 브랜치로부터
build-essential
쿡북
사용자 지정 쿡북 리포지토리에는 Berksfile 이외에 사용자 지정 쿡북이 포함될 수 있습니다. 이 경우, AWS OpsWorks Stacks는 두 쿡북 세트를 모두 설치합니다. 즉, 인스턴스에 쿡북 리포지토리가 세 개까지 있을 수 있습니다.
-
내장 쿡북은
/opt/aws/opsworks/current/cookbooks
에 설치됩니다. -
사용자 지정 쿡북 리포지토리에 쿡북이 포함되어 있는 경우 이러한 쿡북은
/opt/aws/opsworks/current/site-cookbooks
에 설치됩니다. -
Berkshelf가 활성화되어 있고 사용자 지정 쿡북 리포지토리에 Berksfile이 포함되어 있는 경우 지정된 쿡북은
/opt/aws/opsworks/current/berkshelf-cookbooks
에 설치됩니다.
내장 쿡북 및 사용자 지정 쿡북은 설정 시 각 인스턴스에 설치되며, 이후 사용자가 수동으로 Update Custom Cookbooks 스택 명령을 실행하기 전에는 업데이트되지 않습니다. AWS OpsWorks Stacks는 모든 Chef 실행에서 berks install
을(를) 실행합니다. 따라서 Berkshelf 쿡북은 각 수명 주기 이벤트에서 다음 규칙에 따라 업데이트됩니다.
-
리포지토리에 새 쿡북 버전이 있을 경우 이 작업은 리포지토리로부터 쿡북을 업데이트합니다.
-
그렇지 않을 경우 이 작업은 로컬 캐시로부터 Berkshelf 쿡북을 업데이트합니다.
참고
이 작업은 Berkshelf 쿡북을 덮어쓰므로 쿡북의 로컬 복사본을 수정한 경우 변경 사항을 덮어쓰게 됩니다. 자세한 정보는 Berkshelf
또한 사용자 지정 쿡북 업데이트 스택 명령을 실행하여 Berkshelf 쿡북을 업데이트할 수도 있습니다. 이 경우 Berkshelf 쿡북 및 사용자 지정 쿡북 모두 업데이트됩니다.