AWS OpsWorks 스택 데이터 백 레퍼런스 - AWS OpsWorks

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

AWS OpsWorks 스택 데이터 백 레퍼런스

중요

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

AWS OpsWorks Stacks는 레시피에 대한 다양한 설정을 Chef 데이터 백 콘텐츠로 제공합니다. 이 참조에는 이 데이터 백 콘텐츠가 나열되어 있습니다.

데이터 백은 Chef 개념의 하나입니다. 데이터 백은 JSON 데이터로 저장되는 인스턴스에 대한 전역 변수로서, 이 JSON 데이터는 Chef에서 액세스할 수 있습니다. 예를 들어, 데이터 백은 앱의 소스 URL, 인스턴스의 호스트 이름, 관련 스택의 VPC 식별자와 같은 글로벌 변수를 저장할 수 있습니다. AWS OpsWorks 스택은 데이터 백을 각 스택의 인스턴스에 저장합니다. Linux 인스턴스에서 AWS OpsWorks Stacks는 디렉터리에 데이터 백을 저장합니다. /var/chef/runs/run-ID/data_bags Windows 인스턴스에서는 데이터 백이 drive:\chef\runs\run-id\data_bags 디렉터리에 저장됩니다. 두 경우 모두 Run-ID는 AWS OpsWorks Stacks가 인스턴스에서 실행되는 각 Chef에 할당하는 고유 ID입니다. 이들 디렉터리에는 데이터 백 세트가 포함됩니다(하위 디렉터리). 각 데이터 백에는 여러 개의 데이터 백 콘텐츠를 포함하는 JSON 형식 파일인 데이터 백 항목이 0개 이상 들어 있습니다.

참고

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

데이터 백 콘텐츠는 다음 콘텐츠를 포함할 수 있습니다.

  • 문자열 콘텐츠 - 표준 Ruby 구문을 따르며 작은따옴표 또는 큰따옴표를 사용할 수 있습니다. 단, 일부 특수 문자를 포함하는 문자열은 반드시 큰따옴표가 있어야 합니다. 자세한 정보는 Ruby 설명서 사이트를 참조하세요.

  • 부울 콘텐츠 - true 또는 false입니다(따옴표 없음).

  • 숫자 콘텐츠 - 정수(예: 4) 또는 소수(예: 2.5)입니다(따옴표 없음).

  • 목록 콘텐츠 - 대괄호로 묶인 쉼표로 구분된 값(예: [ '80', '443' ])입니다(따옴표 없음).

  • JSON 객체 - 추가 데이터 백 콘텐츠(예: "my-app": {"elastic_ip": null,...})를 포함합니다.

Chef 레시피는 Chef 검색을 통해 또는 직접 데이터 백, 데이터 백 항목 및 데이터 백 콘텐츠에 액세스할 수 있습니다. 이제부터 두 액세스 접근 방식을 사용하는 방법을 설명합니다(Chef 검색이 선호됨).

Chef 검색을 통해 데이터 백에 액세스하려면 원하는 검색 색인을 지정하는 검색 방법을 사용하십시오. AWS OpsWorks Stacks는 다음과 같은 검색 색인을 제공합니다.

검색 인덱스 이름을 알면 해당 검색 인덱스의 데이터 백의 콘텐츠에 액세스할 수 있습니다. 예를 들어 다음 레시피 코드는 aws_opsworks_app 검색 인덱스를 사용하여 aws_opsworks_app 데이터 백(aws_opsworks_app 디렉터리)에서 첫 번째 데이터 백 항목(첫 번째 JSON 파일)의 콘텐츠를 가져옵니다. 그런 다음 코드는 Chef 로그에 메시지 2개를 기록합니다. 한 메시지는 앱의 짧은 이름 데이터 백 콘텐츠(JSON 파일 내 문자열)를 포함하고 다른 메시지는 앱의 소스 URL 데이터 백 콘텐츠(JSON 파일 내 다른 문자열)를 포함합니다.

app = search("aws_opsworks_app").first Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")

여기서 ['shortname']['app_source']['url']은 해당 JSON 파일에서 다음 데이터 백 콘텐츠를 지정합니다.

{ ... "shortname": "mylinuxdemoapp", ... "app_source": { ... "url": "https://s3.amazonaws.com/opsworks-demo-assets/opsworks-linux-demo-nodejs.tar.gz", }, ... }

검색 가능한 데이터 백 콘텐츠의 목록은 이 섹션의 참조 항목 단원을 참조하세요.

또한 한 데이터 백 안의 여러 데이터 백 항목에 대해 반복할 수 있습니다. 예를 들어 다음 레시피 코드는 이전 예제와 비슷합니다. 이 코드는 데이터 백 항목이 여러 개일 경우 데이터 백의 각 데이터 백 항목을 반복합니다.

search("aws_opsworks_app").each do |app| Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") end

특정 데이터 백 콘텐츠의 존재를 알고 있다면 다음 구문을 사용하여 해당 데이터 백 항목을 찾을 수 있습니다.

search("search_index", "key:value").first

예를 들어 다음 레시피 코드는 aws_opsworks_app 검색 인덱스를 사용하여 mylinuxdemoapp의 짧은 이름을 포함하는 데이터 백 항목을 찾습니다. 그런 다음 데이터 백 항목의 콘텐츠를 사용하여 해당 앱의 짧은 이름 및 소스 URL을 포함하는 메시지를 Chef 로그에 기록합니다.

app = search("aws_opsworks_app", "shortname:mylinuxdemoapp").first Chef::Log.info("********** For the app with the short name '#{app['shortname']}', the app's URL is '#{app['app_source']['url']}' **********")

aws_opsworks_instance 검색 인덱스에 한해, self:true를 지정하여 현재 레시피가 실행되고 있는 인스턴스를 나타낼 수 있습니다. 다음 레시피 코드는 해당 데이터 백 항목의 콘텐츠를 사용하여 해당 인스턴스의 AWS OpsWorks Stacks에서 생성한 ID 및 운영 체제와 함께 Chef 로그에 메시지를 작성합니다.

instance = search("aws_opsworks_instance", "self:true").first Chef::Log.info("********** For instance '#{instance['instance_id']}', the instance's operating system is '#{instance['os']}' **********")

Chef 검색을 사용하여 데이터 백, 데이터 백 항목 및 데이터 백 콘텐츠에 액세스하는 대신, 직접 이들에 액세스할 수 있습니다. 이렇게 하려면 data_bagdata_bag_item 메서드를 사용하여 각각 데이터 백 및 데이터 백 항목에 액세스합니다. 예를 들어 다음 레시피 코드는 앞서의 예제와 동일한 작업을 수행하지만, 데이터 백 항목이 여러 개일 경우 단일 데이터 백 항목, 그런 다음 다중 데이터 백 항목에 직접 액세스하는 것이 다릅니다.

# Syntax: data_bag_item("the data bag name", "the file name in the data bag without the file extension") app = data_bag_item("aws_opsworks_app", "mylinuxdemoapp") Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") data_bag("aws_opsworks_app").each do |data_bag_item| app = data_bag_item("aws_opsworks_app", data_bag_item) Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") end

두 접근 방식 중 Chef 검색을 사용할 것을 권장합니다. 이 설명서의 관련 예제에서는 모두 이 접근 방식을 예시합니다.