

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

# Linux 스택에서 검색 사용
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-linux"></a>

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

이 예제는 단일 PHP 애플리케이션 서버를 포함하는 Linux 스택을 기반으로 합니다. Chef 검색을 사용하여 서버의 퍼블릭 IP 주소를 가져와 `/tmp` 디렉터리의 파일에 이 주소를 저장합니다. 기본적으로 [속성 값을 직접 가져오기](cookbooks-101-opsworks-opsworks-stack-config-node.md)와 동일한 정보를 노드 객체에서 검색하지만, 이 코드는 스택 구성 및 배포 속성 구조의 세부 정보에 의존하지 않습니다.

다음은 이 예제를 위한 스택을 생성하는 방법을 간략히 요약한 것입니다. 자세한 내용은 [새 스택 생성](workingstacks-creating.md) 단원을 참조하십시오.

**참고**  
이전에 OpsWorks Stacks 인스턴스에서 사용자 지정 레시피를 실행하지 않은 경우 먼저 [Linux 인스턴스에서 레시피 실행](cookbooks-101-opsworks-opsworks-instance.md) 예제를 진행해야 합니다.

**스택을 만듭니다**

1. [OpsWorks Stacks 콘솔](https://console.aws.amazon.com/opsworks/)을 열고 **스택 추가**를 클릭합니다.

1. 다음 설정을 지정하고, 그 외 설정에 대해서는 기본값을 수락한 다음 [**스택 추가**]를 클릭합니다.
   + **이름** – SearchJSON
   + **기본 SSH 키** – Amazon EC2 키 페어

   Amazon EC2 키 페어를 생성해야 하는 경우 [Amazon EC2 키 페어](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)를 참조하세요. 키 페어는 인스턴스와 동일한 AWS 리전에 속해야 합니다. 이 예에서는 미국 서부(오레곤) 리전을 사용합니다.

1. **계층 추가**를 클릭하여 스택에 기본 설정으로 [PHP 앱 서버 계층을 추가](workinglayers-custom.md)합니다.

1. 기본 설정을 사용하여 계층에 [24/7 인스턴스를 추가](workinginstances-add.md)하고 [해당 인스턴스를 시작](workinginstances-starting.md)합니다.

**쿡북을 설정하려면**

1. `opsworks_cookbooks` 안에 `searchjson` 하위 디렉터리를 만들고 그 디렉터리로 이동합니다.

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

   ```
   name "searchjson"
   version "0.1.0"
   ```

1. `recipes` 안에 `searchjson` 디렉터리를 만듭니다.

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

   ```
   phpserver = search(:node, "layers:php-app").first
   Chef::Log.info("**********The public IP address is: '#{phpserver[:ip]}'**********")
   
   file "/tmp/ip_addresses" do
     content "#{phpserver[:ip]}"
     mode 0644
     action :create
   end
   ```

   Linux 스택은 `node` 검색 인덱스만 지원합니다. 레시피는 이 인덱스를 사용하여 `php-app` 계층의 인스턴스 목록을 얻습니다. 이 계층에는 인스턴스가 하나 뿐인 것으로 알려져 있기 때문에 레시피는 첫 번째 인스턴스만 `phpserver`에 할당합니다. 계층에 인스턴스가 여러 개인 경우 인스턴스를 열거하여 필요한 정보를 검색할 수 있습니다. 각 목록 항목은 인스턴스 속성 세트가 포함된 해시 테이블입니다. `ip` 속성은 인스턴스의 퍼블릭 IP 주소로 설정되므로 후속 레시피 코드의 해당 주소를 `phpserver[:ip]`로 표현할 수 있습니다.

   메시지를 Chef 로그에 추가하면 레시피는 [https://docs.chef.io/chef/resources.html#file](https://docs.chef.io/chef/resources.html#file) 리소스를 사용하여 `ip_addresses` 파일을 만듭니다. `content` 속성은 `phpserver[:ip]`의 문자열 표현으로 설정됩니다. Chef가 `ip_addresses`를 생성하면 이 파일에 해당 문자열이 추가됩니다.

1. `opsworks_cookbooks`의 `.zip` 아카이브를 생성하고, [이 아카이브를 Amazon S3 버킷에 업로드](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html)한 다음, [해당 아카이브를 퍼블릭으로 설정](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)하고, 아카이브의 URL을 기록합니다. 쿡북 리포지토리에 대한 자세한 정보는 [쿡북 리포지토리](workingcookbook-installingcustom-repo.md) 단원을 참조하세요.

   Amazon S3 버킷에 전달한 콘텐츠에는 고객 콘텐츠가 포함될 수 있습니다. 중요 데이터 제거에 관한 자세한 내용은 [S3 버킷을 비우려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) 단원 또는 [S3 버킷을 삭제하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) 단원을 참조하세요.

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

**레시피를 실행하려면**

1. [스택을 편집해 사용자 지정 쿡북을 활성화](workingcookbook-installingcustom-enable.md)하고 다음 설정을 지정합니다.
   + **리포지토리 유형** – **Http Archive**
   + **리포지토리 URL** - 앞에서 기록해 둔 쿡북 아카이브 URL

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

1. 사용자 지정 계층 구성을 편집하고 계층의 설정 이벤트에를 [할당`searchjson::default`](workingcookbook-assigningcustom.md)합니다. 인스턴스가 부팅된 후 또는 설정 이벤트를 명시적으로 트리거한 경우 OpsWorks 스택이 레시피를 실행합니다.

1. [사용자 지정 쿡북 업데이트 스택 명령을 실행](workingstacks-commands.md)하여 스택의 인스턴스에 사용자 지정 쿡북 리포지토리의 최신 버전을 설치합니다. 리포지토리의 이전 버전이 있으면 이 명령이 이전 버전을 덮어 씁니다.

1. [**설정**] 스택 명령을 실행하여 레시피를 실행합니다. 이 레시피는 인스턴스에서 설정 이벤트를 트리거하고 `searchjson::default`를 실행합니다. [**실행 명령 설정**] 페이지는 열어 둡니다.

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

**searchjson을 확인하려면**

1. 가장 먼저, [Chef 로그](troubleshoot-debug-log.md)에서 최신 설정 이벤트를 확인합니다. **실행 중인 명령 설정 페이지**에서 php-app1 인스턴스의 **로그** 열에 있는 **표시**를 클릭하여 로그를 표시합니다. 로그를 중간 지점 근처까지 스크롤하여 다음과 같은 로그 메시지를 찾습니다.

   ```
   ...
   [2014-09-05T17:08:41+00:00] WARN: Previous bash[logdir_existence_and_restart_apache2]: ...
   [2014-09-05T17:08:41+00:00] WARN: Current  bash[logdir_existence_and_restart_apache2]: ...
   [2014-09-05T17:08:41+00:00] INFO: **********The public IP address is: '192.0.2.0'**********
   [2014-09-05T17:08:41+00:00] INFO: Processing directory[/etc/sysctl.d] action create (opsworks_initial_setup::sysctl line 1)
   ...
   ```

1. [SSH를 사용하여 인스턴스에 로그인](workinginstances-ssh.md)하고 `/tmp`의 내용을 나열합니다. 여기에는 IP 주소가 포함된 `ip_addresses` 파일이 있어야 합니다.