

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

# 예제 1: 패키지 설치
<a name="cookbooks-101-basics-packages"></a>

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

패키지 설치는 가장 일반적인 레시피 용도 중 하나이며, 패키지에 따라서는 아주 간단할 수 있습니다. 예를 들어 다음 레시피는 Linux 시스템에 Git를 설치합니다.

```
package 'git' do
  action :install
end
```

[`package`리소스](https://docs.chef.io/chef/resources.html#package)는 패키지 설치를 처리합니다. 이 예제에서는 아무 속성도 지정할 필요가 없습니다. 리소스 이름은 패키지를 식별하는 `package_name` 속성의 기본값입니다. `install` 작업은 공급자에게 패키지를 설치하라고 명령합니다. `install` 리소스의 기본 작업인 `package`을 건너뛰면 코드를 더욱 간단하게 만들 수 있습니다. 레시피를 실행할 때 Chef는 적절한 공급자를 사용하여 패키지를 설치합니다. 예제에 사용할 Ubuntu 시스템에서는 공급자가 `apt-get`을 호출하여 Git를 설치합니다.

**참고**  
Windows 시스템에 소프트웨어를 설치하려면 약간 다른 절차가 필요합니다. 자세한 내용은 [Windows 소프트웨어 설치](cookbooks-101-opsworks-install-software.md) 섹션을 참조하세요.

Test Kitchen을 사용하여 Vagrant에서 이 레시피를 실행하려면 먼저 쿡북을 설정한 다음 Test Kitchen을 초기화하고 구성해야 합니다. 다음은 Linux 시스템용이지만 Windows 및 Macintosh 시스템과 절차는 기본적으로 비슷합니다. 먼저 Terminal 창을 엽니다. 이 장의 모든 예제는 명령줄 도구를 사용합니다.

**쿡북을 준비하려면**

1. 홈 디렉터리에서 `opsworks_cookbooks`라는 하위 디렉터리를 만듭니다. 이 디렉터리에는 이 장의 모든 쿡북이 저장됩니다. 그런 다음 이 쿡북의 하위 디렉터리로 `installpkg`를 만들고 이 디렉터리로 이동합니다.

1. `installpkg`에서 다음 코드가 포함된 `metadata.rb`라는 파일을 만듭니다.

   ```
   name "installpkg"
   version "0.1.0"
   ```

   간단한 설명을 위해 이 장의 예제에서는 쿡북 이름 및 버전만 지정하지만, `metadata.rb`에 다양한 쿡북 메타데이터를 넣을 수 있습니다. 자세한 정보는 [About Cookbook Metadata](http://docs.chef.io/cookbook_repo.html#about-cookbook-metadata)를 참조하세요.
**참고**  
Test Kitchen에서는 `metadata.rb` 파일의 데이터를 사용하여 기본 구성 파일을 만듭니다. 그러므로 Test Kitchen을 초기화하기 전에 이 파일을 만드십시오.

1. `installpkg`에서 `kitchen init`를 실행합니다. 이 코드는 Test Kitchen을 초기화하고 기본 Vagrant 드라이버를 설치합니다.

1. `kitchen init` 명령은 `installpkg`에 YAML 구성 파일 `.kitchen.yml`을 만듭니다. 즐겨찾는 텍스트 편집기에서 파일을 엽니다. `.kitchen.yml` 파일에는 레시피를 실행할 시스템을 지정하는 `platforms` 섹션이 포함되어 있습니다. Test Kitchen은 인스턴스를 생성하고 지정된 레시피를 각 플랫폼에서 실행합니다.
**참고**  
기본적으로 Test Kitchen은 한 번에 한 플랫폼에서 레시피를 실행합니다. 인스턴스를 생성하는 명령에 `-p` 인수를 추가하면 Test Kitchen은 모든 플랫폼에서 동시에 레시피를 실행합니다.

   이 예제에서는 플랫폼 하나로 충분하므로 `.kitchen.yml` 플랫폼을 빼고 `centos-6.4`을 편집합니다. `.kitchen.yml` 파일은 이제 다음과 같아야 합니다.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: default
       run_list:
         - recipe[installpkg::default]
       attributes:
   ```

   Test Kitchen은 `.kitchen.yml` 실행 목록에 있는 레시피만 실행합니다. `[cookbook_name::recipe_name]` 형식을 사용하여 레시피를 식별합니다. 여기서 *recipe\$1name*은 `.rb` 확장명을 제외한 이름입니다. 처음에 `.kitchen.yml` 실행 목록에는 쿡북의 기본 레시피 `installpkg::default`가 포함되어 있습니다. 이 레시피가 구현하려는 레시피이므로 실행 목록을 수정할 필요가 없습니다.

1. `installpkg`의 하위 디렉터리로 `recipes`를 만듭니다.

   쿡북에 레시피가 포함되어 있는 경우 (대부분 그렇죠) 해당 레시피는 `recipes` 하위 디렉터리에 있어야 합니다. 

이제 레시피를 쿡북에 추가하고 Test Kitchen을 사용하여 인스턴스에서 레시피를 실행할 수 있습니다.

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

1. 이 단원의 시작 부분에 나온 Git 설치 예제 코드가 포함된 `default.rb` 파일을 만들어 `recipes` 하위 디렉터리에 저장합니다.

1. `installpkg` 디렉터리에서 `kitchen converge`를 실행합니다. 이 명령은 Vagrant에서 새 Ubuntu 인스턴스를 시작하고 인스턴스에 쿡북을 복사하고, Chef 실행을 시작하여 `.kitchen.yml` 실행 목록에서 레시피를 실행합니다.

1. 레시피가 성공적으로 실행되었는지 확인하려면 인스턴스에 대한 SSH 연결을 여는 `kitchen login`을 실행합니다. 그런 다음 `git --version`을 실행하여 Git가 성공적으로 설치되었는지 확인합니다. 워크스테이션으로 돌아가려면 `exit`를 실행합니다.

1. 다 마치면 `kitchen destroy`를 실행해 인스턴스를 종료하세요. 다음 예제에서는 다른 쿡북을 사용합니다.

이 예제는 시작하기에는 좋은 방법이었지만 유독 단순합니다. 다른 패키지는 설치하기가 더 복잡할 수 있습니다. 이 경우, 다음 방법 일부 또는 전부를 수행해야 할 수 있습니다.
+ 사용자를 생성하고 구성합니다.
+ 데이터, 로그 등을 위한 하나 이상의 디렉터리를 생성합니다.
+ 하나 이상의 구성 파일을 설치합니다.
+ 운영 체제에 따라 서로 다른 패키지 이름이나 속성 값을 지정합니다.
+ 서비스를 시작한 다음 필요하다면 다시 시작합니다.

다음 예제에서는 이러한 문제를 해결하는 방법과 그 밖의 몇 가지 유용한 작업을 설명합니다.