

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

# OpsWorks Stacks 데이터 백 참조
<a name="data-bags"></a>

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

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

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

**참고**  
OpsWorks Stacks는 암호화된 데이터 백을 지원하지 않습니다. 암호나 인증서 등 암호화된 형식의 민감한 데이터를 저장해야 하는 경우, 프라이빗 S3 버킷에 저장하는 것이 좋습니다. 그런 다음 [Ruby용 Amazon SDK](https://aws.amazon.com/documentation/sdk-for-ruby/)를 사용하는 사용자 지정 레시피를 생성해 데이터를 검색할 수 있습니다. 예제는 [ SDK for Ruby 사용](cookbooks-101-opsworks-s3.md) 섹션을 참조하세요.

데이터 백 콘텐츠는 다음 콘텐츠를 포함할 수 있습니다.
+ **문자열** 콘텐츠 - 표준 Ruby 구문을 따르며 작은따옴표 또는 큰따옴표를 사용할 수 있습니다. 단, 일부 특수 문자를 포함하는 문자열은 반드시 큰따옴표가 있어야 합니다. 자세한 정보는 [Ruby](http://www.ruby-lang.org/en/documentation/) 설명서 사이트를 참조하세요.
+ **부울** 콘텐츠 - `true` 또는 `false`입니다(따옴표 없음).
+ **숫자** 콘텐츠 - 정수(예: `4`) 또는 소수(예: `2.5`)입니다(따옴표 없음).
+ **목록** 콘텐츠 - 대괄호로 묶인 쉼표로 구분된 값(예: `[ '80', '443' ]`)입니다(따옴표 없음).
+ **JSON 객체** - 추가 데이터 백 콘텐츠(예: `"my-app": {"elastic_ip": null,...}`)를 포함합니다.

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

Chef 검색을 통해 데이터 백에 액세스하려면 [원하는 검색](https://docs.chef.io/dsl_recipe.html#search) 인덱스를 지정하여 검색 방법을 사용합니다. OpsWorks Stacks는 다음과 같은 검색 인덱스를 제공합니다.
+ [aws\$1opsworks\$1app](data-bag-json-app.md) - 특정 스택의 배포된 앱 세트를 나타냅니다.
+ [aws\$1opsworks\$1command](data-bag-json-command.md) - 특정 스택에서 실행된 명령 세트를 나타냅니다.
+ [aws\$1opsworks\$1ecs\$1cluster](data-bag-json-ecs-cluster.md) - 특정 스택의 Amazon Elastic Container Service(Amazon ECS) 클러스터 인스턴스 집합을 나타냅니다.
+ [aws\$1opsworks\$1elastic\$1load\$1balancer](data-bag-json-elb.md) - 특정 스택의 Elastic Load Balancing 로드 밸런서 집합을 나타냅니다.
+ [aws\$1opsworks\$1instance](data-bag-json-instance.md) - 특정 스택의 인스턴스 집합을 나타냅니다.
+ [aws\$1opsworks\$1layer](data-bag-json-layer.md) - 특정 스택의 계층 집합을 나타냅니다.
+ [aws\$1opsworks\$1rds\$1db\$1instance](data-bag-json-rds.md) - 특정 스택의 Amazon Relational Database Service(RDS) 인스턴스 집합을 나타냅니다.
+ [aws\$1opsworks\$1stack](data-bag-json-stack.md) - 특정 스택을 나타냅니다.
+ [aws\$1opsworks\$1user](data-bag-json-user.md) - 특정 스택의 사용자 집합을 나타냅니다.

검색 인덱스 이름을 알면 해당 검색 인덱스의 데이터 백의 콘텐츠에 액세스할 수 있습니다. 예를 들어 다음 레시피 코드는 `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`를 지정하여 현재 레시피가 실행되고 있는 인스턴스를 나타낼 수 있습니다. 다음 레시피 코드는 해당 데이터 백 항목의 콘텐츠를 사용하여 해당 인스턴스의 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\$1bag](https://docs.chef.io/dsl_recipe.html#data-bag) 및 [data\$1bag\$1item](https://docs.chef.io/dsl_recipe.html#data-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 검색을 사용할 것을 권장합니다. 이 설명서의 관련 예제에서는 모두 이 접근 방식을 예시합니다.

**Topics**
+ [앱 데이터 백(aws\$1opsworks\$1app)](data-bag-json-app.md)
+ [명령 데이터 백(aws\$1opsworks\$1command)](data-bag-json-command.md)
+ [Amazon 클러스터 데이터 백(aws\$1opsworks\$1ecs\$1cluster)](data-bag-json-ecs-cluster.md)
+ [Elastic Load Balancing 데이터 백(aws\$1opsworks\$1elastic\$1load\$1balancer)](data-bag-json-elb.md)
+ [인스턴스 데이터 백(aws\$1opsworks\$1instance)](data-bag-json-instance.md)
+ [계층 데이터 백(aws\$1opsworks\$1layer)](data-bag-json-layer.md)
+ [Amazon RDS 데이터 백(aws\$1opsworks\$1rds\$1db\$1instance)](data-bag-json-rds.md)
+ [스택 데이터 백(aws\$1opsworks\$1stack)](data-bag-json-stack.md)
+ [사용자 데이터 백(aws\$1opsworks\$1user)](data-bag-json-user.md)