

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

# Stacks에서 OpsWorks 쿡북 시작하기
<a name="gettingstarted-cookbooks"></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 쿡북을 구현하는 것을 의미합니다. *쿡북*은 *레시피*라고 하는 지침 등의 구성 정보가 포함된 패키지 파일입니다. *레시피*는 Ruby 언어 구문으로 작성된 하나 이상의 지침 세트로서 사용할 리소스와 이러한 리소스가 적용되는 순서를 지정합니다. Chef에서 사용되는 *리소스*란 구성 정책 설명입니다. 이 연습에서는 Stacks용 Chef OpsWorks 쿡북 구현에 대한 기본 소개를 제공합니다. Chef, 레시피, 리소스에 대한 자세한 정보는 [다음 단계](gettingstarted-cookbooks-next-steps.md)의 링크를 참조하세요.

이 안내서에서는 주로 본인의 쿡북을 만드는 방법을 설명합니다. [Chef Supermarket](https://supermarket.chef.io)과 같은 웹 사이트에서 커뮤니티가 제공하는 쿡북을 사용할 수도 있습니다. 커뮤니티 쿡북 시작을 돕기 위해 이 안내서 뒷부분에 Chef Supermarket의 커뮤니티 쿡북 사용 지침이 포함되어 있습니다.

이 안내서를 시작하기 전에 몇 가지 설정 단계를 완료하세요. [시작하기: 샘플](gettingstarted-intro.md) 등 이 장의 다른 안내서를 이미 마쳤다면 이 안내서의 사전 조건을 충족했을 것이므로 [이 안내서 시작](gettingstarted-cookbooks-create-cookbook.md)으 단원으로 건너뛸 수 있습니다. 그렇지 않다면 [사전 조건](gettingstarted-intro-prerequisites.md)을 완료한 다음 이 안내서로 돌아오십시오.

**Topics**
+ [1단계: 쿡북 생성](gettingstarted-cookbooks-create-cookbook.md)
+ [2단계: 스택 및 구성 요소 생성](gettingstarted-cookbooks-create-stack.md)
+ [3단계: 레시피 실행 및 테스트](gettingstarted-cookbooks-test-recipe.md)
+ [4단계: 패키지를 설치하도록 쿡북 업데이트](gettingstarted-cookbooks-install-package.md)
+ [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md)
+ [6단계: 사용자를 추가하도록 쿡북 업데이트](gettingstarted-cookbooks-add-user.md)
+ [7단계: 디렉터리를 생성하도록 쿡북 업데이트](gettingstarted-cookbooks-create-directory.md)
+ [8단계: 파일을 생성하고 복사하도록 쿡북 업데이트](gettingstarted-cookbooks-create-file.md)
+ [9단계: 명령을 실행하도록 쿡북 업데이트](gettingstarted-cookbooks-run-command.md)
+ [10단계: 스크립트를 실행하도록 쿡북 업데이트](gettingstarted-cookbooks-run-script.md)
+ [11단계: 서비스를 관리하도록 쿡북 업데이트](gettingstarted-cookbooks-manage-service.md)
+ [12단계: 사용자 지정 JSON을 사용하도록 쿡북 업데이트](gettingstarted-cookbooks-custom-json.md)
+ [13단계: 데이터 백을 사용하도록 쿡북 업데이트](gettingstarted-cookbooks-data-bags.md)
+ [14단계: 반복을 사용하도록 쿡북 업데이트](gettingstarted-cookbooks-iteration.md)
+ [15단계: 조건부 논리를 사용하도록 쿡북 업데이트](gettingstarted-cookbooks-conditional-logic.md)
+ [16단계: 커뮤니티 쿡북을 사용하도록 쿡북 업데이트](gettingstarted-cookbooks-community-cookbooks.md)
+ [17단계: (선택 사항) 정리](gettingstarted-cookbooks-clean-up.md)
+ [다음 단계](gettingstarted-cookbooks-next-steps.md)

# 1단계: 쿡북 생성
<a name="gettingstarted-cookbooks-create-cookbook"></a>

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

쿡북 만들기로 시작합니다. 이 쿡북은 시작하는 데 큰 도움이 되는 것은 아니지만, 이 연습의 나머지 부분에 대한 기초 역할을 합니다.

**참고**  
이 단계에서는 수동으로 쿡북을 만드는 방법을 보여 줍니다. Chef 개발 키트([Chef DK](https://docs.chef.io/#chef-dk-title))를 사용하면 로컬 워크스테이션에서 [https://docs.chef.io/ctl_chef.html#chef-generate-cookbook](https://docs.chef.io/ctl_chef.html#chef-generate-cookbook) 명령을 실행하여 더 짧은 시간 안에 쿡북을 만들 수 있습니다. 하지만 이 명령은 이 안내서에서는 필요 없는 몇몇 폴더와 파일을 생성합니다.

**쿡북을 생성하려면**

1. 로컬 워크스테이션에 디렉터리 `opsworks_cookbook_demo`를 만듭니다. 다른 이름을 사용할 수 있는데 이렇게 하려면 이 연습 전체에서 `opsworks_cookbook_demo`를 해당 이름으로 바꿔야 합니다.

1. `opsworks_cookbook_demo` 디렉터리에서 텍스트 편집기를 사용하여 `metadata.rb`라는 파일을 생성합니다. 다음 코드를 추가하여 쿡북의 이름을 지정합니다. `metadata.rb`에 대한 자세한 내용은 Chef 웹 사이트의 [metadata.rb](https://docs.chef.io/config_rb_metadata.html)를 참조하세요.

   ```
   name "opsworks_cookbook_demo"
   ```

1. `opsworks_cookbook_demo` 디렉터리에서 하위 디렉터리 `recipes`를 만듭니다. 이 하위 디렉터리에는 이 연습의 쿡북을 위해 생성하는 레시피가 모두 저장됩니다.

1. `recipes` 디렉터리에서 `default.rb`라는 파일 만듭니다. 이 파일에는 파일 이름과 같은 레시피가 있는데 파일 확장명 `default`는 생략되어 있습니다. 다음 코드 한 행을 `default.rb` 파일에 추가합니다. 이 코드는 레시피 실행 시 로그에 간단한 메시지를 표시하는 한 행짜리 레시피입니다.

   ```
   Chef::Log.info("********** Hello, World! **********")
   ```

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 그 내용이 포함된 `opsworks_cookbook_demo.tar.gz` 파일을 만듭니다. 예제:

   ```
   tar -czvf opsworks_cookbook_demo.tar.gz opsworks_cookbook_demo/
   ```

   다른 파일 이름을 사용할 수 있는데 이렇게 하면 이 연습 전체에서 `opsworks_cookbook_demo.tar.gz`를 해당 이름으로 바꿔야 합니다.
**참고**  
Windows에서 `tar` 파일을 만드는 경우 최상위 디렉터리는 쿡북의 상위 디렉터리여야 합니다. 이 연습은 Linux에서는 `tar` 패키지에서 제공하는 **tar** 명령을 사용하고 Windows에서는 [Git Bash](https://git-for-windows.github.io/)에서 제공하는 **tar** 명령을 사용하여 테스트되었습니다. 다른 명령 또는 프로그램을 사용하여 압축 TAR(.tar.gz) 파일을 만들면 예상대로 진행되지 않을 수 있습니다.

1. S3 버킷을 생성하거나 기존 버킷을 사용합니다. 자세한 정보는 [버킷 만들기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)를 참조하세요.

1. `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다. 자세한 내용은 [버킷에 객체 추가](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.html)를 참조하세요.

이제 이 안내서에서 사용할 쿡북이 만들어졌습니다.

[다음 단계에서](gettingstarted-cookbooks-create-stack.md)는 나중에 OpsWorks 쿡북을 업로드하고 쿡북의 레시피를 실행하는 데 사용할 Stacks 스택을 생성합니다.

# 2단계: 스택 및 구성 요소 생성
<a name="gettingstarted-cookbooks-create-stack"></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 스택과 해당 구성 요소를 생성합니다. 이후 단계에서는 쿡북을 인스턴스에 업로드한 다음 해당 인스턴스에서 쿡북의 레시피를 실행합니다.

**스택을 생성하는 방법**

1. [https://console.aws.amazon.com/opsworks](https://console.aws.amazon.com/opsworks) OpsWorks Stacks 콘솔에 로그인합니다.

1. 해당하는 경우 다음 중 하나를 수행하세요.
   + ** OpsWorks 스택 시작** 페이지가 표시되면 **첫 번째 스택 추가** 또는 **첫 번째 OpsWorks 스택 추가를** 선택합니다(두 선택 모두 동일한 작업을 수행함). [**스택 추가**] 페이지가 표시됩니다.
   + [**OpsWorks 대시보드**] 페이지가 표시되면 [**스택 추가**]를 선택합니다. [**스택 추가**] 페이지가 표시됩니다.

1. [**Chef 12 스택**]을 선택합니다.

1. **스택 이름** 상자에 스택 이름(예: **MyCookbooksDemoStack**)을 입력하세요. 다른 이름을 입력할 수 있는데 이렇게 하면 이 연습 전체에서 `MyCookbooksDemoStack`를 해당 이름으로 바꿔야 합니다.

1. **리전**에서 **미국 서부(오레곤)**를 선택합니다.

1. **VPC**의 경우 다음 중 하나를 수행합니다.
   + VPC를 사용할 수 있는 경우 선택합니다. 자세한 내용은 [VPC에서 스택 실행](workingstacks-vpc.md) 단원을 참조하십시오.
   + 그렇지 않은 경우 [**VPC 없음**]을 선택합니다.

1. [**사용자 지정 Chef 쿡북 사용**]에 대해 [**예**]를 선택합니다.

1. [**리포지토리 유형**]으로 [**S3 아카이브**]를 선택합니다.
**참고**  
[시작하기: Linux](gettingstarted-linux.md) 연습에서는 [**Http 아카이브**]를 선택합니다. 여기에서는 대신 [**S3 아카이브**]를 선택합니다.

1. [**리포지토리 URL**]로 S3의 `opsworks_cookbook_demo.tar.gz` 파일에 대한 경로를 입력합니다. 이 경로를 확인하려면 S3 콘솔에서 [`opsworks_cookbook_demo.tar.gz`] 파일을 선택합니다. [**속성**] 창에서 [**링크**] 필드의 값을 복사합니다. 이 값은 `https://s3.amazonaws.com/amzn-s3-demo-bucket/opsworks_cookbook_demo.tar.gz`와 유사해야 합니다.

1. S3 버킷이 기본값인 프라이빗 버킷인 경우 **액세스 키 ID** 및 **보안 액세스 키**에 대해 이 연습에서 사용 중인 IAM 사용자의 액세스 키 ID 및 보안 액세스 키를 입력합니다. 자세한 정보는 [객체 권한 편집](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EditingPermissionsonanObject.html) 및 [다른 사용자와 객체 공유](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)를 참조하세요.

1. 다음 옵션의 경우 기본값을 그대로 둘 수 있습니다.
   + [**기본 가용 영역**]([**us-west-2a**])
   + **기본 운영 체제**(**Linux** 및 **Amazon Linux 2016.09**)
   + [**기본 SSH 키**]([**기본 SSH 키 사용 금지**])
   + [**스택 색상**](짙은 파란색)

1. **고급**을 선택합니다.

1. **IAM 역할**에 대해 다음 중 하나를 수행합니다.
   + [**aws-opsworks-service-role**]을 사용할 수 있는 경우 선택합니다.
   + **aws-opsworks-service-role**을 사용할 수 없는 경우 **새 IAM 역할**을 선택합니다.

1. **기본 IAM 인스턴스 프로파일**의 경우 다음 중 하나를 수행합니다.
   + [**aws-opsworks-ec2-role**]을 사용할 수 있는 경우 선택합니다.
   + **aws-opsworks-ec2-role**을 사용할 수 없는 경우 **새 IAM 인스턴스 프로파일**을 선택합니다.

1. 다음 옵션의 경우 기본값을 그대로 둘 수 있습니다.
   + [**기본 루트 디바이스 유형**]([**EBS 지원**])
   + [**호스트 이름 테마**]([**계층 종속적**])
   + [**OpsWorks Agent 버전**](최신 버전)
   + [**사용자 지정 Chef JSON**](비워 둠)
   + [**보안**], [**OpsWorks 보안 그룹 사용**]([**예**])

1. **스택 추가**를 선택합니다. OpsWorks 스택은 스택을 생성하고 **MyCookbooksDemoStack** 페이지를 표시합니다.

**계층을 생성하려면**

1. 서비스 탐색 창에서 [**계층**]을 선택합니다. [**계층**] 페이지가 표시됩니다.

1. [**계층 추가**]를 선택합니다.

1. **OpsWorks** 탭에서 **이름**으로 **MyCookbooksDemoLayer**를 입력합니다. 다른 이름을 입력할 수 있는데 이렇게 하면 이 연습 전체에서 `MyCookbooksDemoLayer`를 해당 이름으로 바꿔야 합니다.

1. **짧은 이름**에 **cookbooks-demo**를 입력합니다. 다른 이름을 입력할 수 있는데 이렇게 하면 이 연습 전체에서 `cookbooks-demo`를 해당 이름으로 바꿔야 합니다.

1. **계층 추가**를 선택합니다. OpsWorks 스택은 계층을 추가하고 **계층** 페이지를 표시합니다.

**인스턴스를 생성 및 시작하려면**

1. 서비스 탐색 창에서 [**인스턴스**]를 선택합니다. [**인스턴스**] 페이지가 표시됩니다.

1. **인스턴스 추가**를 선택합니다.

1. [**새로 만들기**] 탭에서 [**고급**]를 선택합니다.

1. 다음 옵션의 경우 기본값을 그대로 둘 수 있습니다.
   + [**호스트 이름**]([**cookbooks-demo1**])
   + [**크기**]([**c3.large**])
   + [**서브넷**](*IP 주소* **us-west-2a**)
   + [**조정 유형**]([**24/7**])
   + [**SSH 키**]([**기본 SSH 키 사용 금지**])
   + **운영 체제**(**Amazon Linux 2016.09**)
   + [**OpsWorks Agent 버전**]([**스택에서 상속**])
   + [**테넌시**]([**기본값 - VPC 설정 사용**])
   + [**루트 디바이스 유형**]([**EBS 지원**])
   + [**볼륨 유형**]([**범용(SSD)**])
   + [**볼륨 크기**]([**8**])

1. [**인스턴스 추가**]를 선택합니다.

1. [**MyCookbooksDemoLayer**]의 [**cookbooks-demo1**]에 해당하는 [**작업**]에서 [**시작**]을 선택합니다. [**상태**]가 [**온라인**]으로 변경될 때까지 진행하지 마십시오. 이 프로세스에는 몇 분이 걸릴 수 있으니 조금만 기다려 주십시오.

이제 스택, 계층 및 S3 버킷에서 쿡북이 자동으로 복사된 인스턴스가 생겼습니다. [다음 단계](gettingstarted-cookbooks-test-recipe.md)에서는 이 인스턴스의 쿡북 안에서 기본 레시피를 실행하고 테스트합니다.

# 3단계: 레시피 실행 및 테스트
<a name="gettingstarted-cookbooks-test-recipe"></a>

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

Stacks가 인스턴스에 복사한 OpsWorks 쿡북 내에서 `default` 레시피를 실행하고 테스트합니다. 앞서 살펴본 것처럼 이것은 실행될 때 로그에 간단한 메시지를 표시하는 한 줄짜리 레시피입니다.

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

1. 서비스 탐색 창에서 [**스택**]을 선택합니다. [**MyCookbooksDemoStack**] 페이지가 표시됩니다.

1. [**명령 실행**]을 선택합니다. [**명령 실행**] 페이지가 표시됩니다.

1. [**명령**]에 대해 [**레시피 실행**]을 선택합니다.

1. **실행할 레시피**에 **opsworks\$1cookbook\$1demo::default**를 입력합니다.

   **opsworks\$1cookbook\$1demo**는 `metadata.rb` 파일에 정의된 대로 쿡북의 이름입니다. **default**는 실행할 레시피의 이름, 즉 쿡북의 `recipes` 하위 디렉터리에 있는 `default.rb` 파일의 이름으로, 파일 확장명은 빠져 있습니다.

1. 다음 기본 설정은 그래도 두십시오.
   + [**설명**](비워 둠)
   + [**고급**], [**사용자 지정 Chef JSON**](비워 둠)
   + [**인스턴스**]([**모두 선택**] 선택, [**MyCookbooksDemoLayer**] 선택, [**cookbooks-demo1**] 선택)

1. [**레시피 실행**]을 선택합니다. [**execute\$1recipes 명령 실행 중**] 페이지가 표시됩니다. [**상태**]가 [**성공**]으로 변경될 때까지 진행하지 마십시오. 이 프로세스에는 몇 분이 걸릴 수 있으니 조금 기다려 주십시오.

**레시피의 결과를 확인하려면**

1. [**execute\$1recipes 명령 실행 중**] 페이지가 표시된 상태에서 [**cookbooks-demo1**]의 [**로그**]에 대해 [**표시**]를 선택합니다. [**execute\$1recipes**] 로그 페이지가 표시됩니다.

1. 로그를 아래로 스크롤하여 다음과 유사한 항목을 찾습니다.

   ```
   [2015-11-13T19:14:39+00:00] INFO: ********** Hello, World! **********
   ```

첫 레시피를 성공적으로 실행했습니다\$1 [다음 단계](gettingstarted-cookbooks-install-package.md)에서는 인스턴스에 패키지를 설치하는 레시피를 추가하여 쿡북을 업데이트합니다.

# 4단계: 패키지를 설치하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-install-package"></a>

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

인기 텍스트 편집기인 GNU Emacs가 포함된 패키지를 인스턴스에 설치하는 레시피를 추가하여 쿡북을 업데이트합니다.

인스턴스에 쉽게 로그인하고 패키지를 한 번 설치할 수 있지만 레시피를 작성하면 OpsWorks Stacks에서 레시피를 한 번 실행하여 스택의 여러 인스턴스에 여러 패키지를 동시에 설치할 수 있습니다.

**패키지를 설치하도록 쿡북을 업데이트하려면**

1. 로컬 워크스테이션으로 돌아와 다음 코드를 사용하여 `opsworks_cookbook_demo` 디렉터리의 `recipes` 하위 디렉터리에 `install_package.rb` 파일을 생성합니다.

   ```
   package "Install Emacs" do
     package_name "emacs"
   end
   ```

   이 레시피는 인스턴스에 `emacs` 패키지를 설치합니다. 자세한 정보는 [패키지](https://docs.chef.io/resource_package.html)를 참조하세요.
**참고**  
레시피에는 원하는 파일 이름을 지정할 수 있습니다. Stacks가 레시피를 실행하도록 OpsWorks 하려면 항상 올바른 레시피 이름을 지정해야 합니다.

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

이 새 레시피는 인스턴스에서 쿡북을 업데이트한 다음 업데이트된 쿡북에서 새 레시피를 실행할 때 실행됩니다. 다음 단계에서는 그 방법을 설명합니다.

[다음 단계](gettingstarted-cookbooks-copy-cookbook.md)를 마친 후에는 인스턴스에 로그인한 다음 명령 프롬프트에서 **emacs**를 입력하여 GNU Emacs를 시작할 수 있습니다. (자세한 내용은 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)을 참조하세요.) GNU Emacs를 끝내려면 **Ctrl\$1X** 버튼을 누른 다음 **Ctrl\$1C** 버튼을 누릅니다.

**중요**  
인스턴스에 로그인하려면 먼저 OpsWorks Stacks에 퍼블릭 SSH 키(ssh-keygen 또는 PuTTYgen과 같은 도구를 사용하여 생성할 수 있음)에 대한 정보를 제공한 다음 `MyCookbooksDemoStack` 스택에 대한 권한을 설정하여 사용자가 인스턴스에 로그인할 수 있도록 해야 합니다. 지침은 [사용자의 퍼블릭 SSH 키 등록](security-settingsshkey.md) 및 [SSH를 사용하여 로그인](workinginstances-ssh.md) 섹션을 참조하세요.

# 5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행
<a name="gettingstarted-cookbooks-copy-cookbook"></a>

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

인스턴스에서 쿡북을 업데이트한 다음 인스턴스의 업데이트된 쿡북에서 새 레시피를 실행합니다. 이 안내서의 나머지 부분에서도 새 레시피를 추가하여 쿡북을 업데이트할 때마다 이 단계를 반복합니다.

**인스턴스에서 쿡북을 업데이트하려면**

1. 서비스 탐색 창에서 [**스택**]을 선택합니다. [**MyCookbooksDemoStack**] 페이지가 표시됩니다.

1. [**명령 실행**]을 선택합니다. [**명령 실행**] 페이지가 표시됩니다.

1. [**명령**]에 대해서는 [**사용자 지정 쿡북 업데이트**]를 선택합니다.

1. 다음 기본 설정은 그래도 두십시오.
   + [**설명**](비워 둠)
   + [**고급**], [**사용자 지정 Chef JSON**](비워 둠)
   + [**고급**], [**인스턴스**]([**모두 선택**] 선택, [**MyCookbooksDemoLayer**] 선택, [**cookbooks-demo1**] 선택)

1. [**사용자 지정 쿡북 업데이트**]를 선택합니다. [**Running command update\$1custom\$1cookbooks**] 페이지가 표시됩니다. [**상태**]가 [**성공**]으로 변경될 때까지 진행하지 마십시오. 이 프로세스에는 몇 분이 걸릴 수 있으니 조금만 기다려 주십시오.

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

1. 서비스 탐색 창에서 [**스택**]을 선택합니다. [**MyCookbooksDemoStack**] 페이지가 표시됩니다.

1. [**명령 실행**]을 선택합니다. [**명령 실행**] 페이지가 표시됩니다.

1. [**명령**]에 대해 [**레시피 실행**]을 선택합니다.

1. [**실행할 레시피**]에 실행할 레시피 이름을 입력합니다. 처음으로 입력할 때 레시피 이름을 **opsworks\$1cookbook\$1demo::install\$1package**로 지정합니다.
**참고**  
이후에 이 절차를 반복할 때에는 쿡북의 이름(**opsworks\$1cookbook\$1demo**)을 입력하고 콜론을 두 번 입력한 다음(**::**) 레시피 이름을 입력합니다. 이때, 레시피 파일 이름에서 `.rb` 파일 확장명은 제외합니다.

1. 다음 기본 설정은 그래도 두십시오.
   + [**설명**](비워 둠)
   + [**고급**], [**사용자 지정 Chef JSON**](비워 둠)
   + [**인스턴스**]([**모두 선택**] 선택, [**MyCookbooksDemoLayer**] 선택, [**cookbooks-demo1**] 선택)

1. [**레시피 실행**]을 선택합니다. [**execute\$1recipes 명령 실행 중**] 페이지가 표시됩니다. [**상태**]가 [**성공**]으로 변경될 때까지 진행하지 마십시오. 이 프로세스에는 몇 분이 걸릴 수 있으니 조금 기다려 주십시오.

**참고**  
수동으로 레시피를 실행할 필요는 없습니다. 설정 및 구성 이벤트와 같은 계층의 수명 주기 이벤트에 레시피를 할당할 수 있으며, OpsWorks Stacks는 이벤트가 발생할 때 해당 레시피를 자동으로 실행합니다. 자세한 내용은 [OpsWorks Stacks 수명 주기 이벤트](workingcookbook-events.md) 단원을 참조하십시오.

[다음 단계](gettingstarted-cookbooks-add-user.md)에서는 사용자를 인스턴스에 추가하도록 쿡북을 업데이트합니다.

# 6단계: 사용자를 추가하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-add-user"></a>

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

로컬 사용자를 인스턴스에 추가하고 사용자의 홈 디렉터리와 셸을 설정하는 레시피를 추가하여 쿡북을 업데이트합니다. 이것은 Linux **adduser** 또는 **useradd** 명령이나 Windows **net user** 명령을 실행하는 것과 비슷합니다. 예컨대 인스턴스의 파일 및 디렉터리에 대한 액세스를 제어하려는 경우, 인스턴스에 로컬 사용자를 추가합니다.

쿡북을 사용하지 않고 사용자를 관리할 수도 있습니다. 자세한 내용은 [사용자 관리](opsworks-security-users-manage.md) 단원을 참조하십시오.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션으로 돌아와 다음 코드를 사용하여 `opsworks_cookbook_demo` 디렉터리의 `recipes` 하위 디렉터리에 `add_user.rb` 파일을 생성합니다(자세한 정보는 [사용자](https://docs.chef.io/resource_user.html) 참조).

   ```
   user "Add a user" do
     home "/home/jdoe"
     shell "/bin/bash"
     username "jdoe"  
   end
   ```

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::add\$1user**를 입력합니다.

**레시피를 테스트하려면**

1. 아직 로그인하지 않았다면 인스턴스에 로그인합니다.

1. 명령 프롬프트에서 다음 명령을 실행하여 새 사용자가 추가되었는지 확인합니다.

   ```
   grep jdoe /etc/passwd
   ```

   사용자 이름, ID 번호, 그룹 ID 번호, 홈 디렉터리, 셸 등 세부 정보를 비롯하여 사용자에 대한 다음과 유사한 정보가 표시됩니다.

   ```
   jdoe:x:501:502::/home/jdoe:/bin/bash
   ```

[다음 단계](gettingstarted-cookbooks-create-directory.md)에서는 인스턴스에서 디렉터리를 생성하도록 쿡북을 업데이트합니다.

# 7단계: 디렉터리를 생성하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-create-directory"></a>

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

인스턴스에 디렉터리를 추가하는 레시피를 추가하여 쿡북을 업데이트합니다. 이것은 Linux **mkdir** 명령이나 Windows **md** 또는 **mkdir** 명령을 실행하는 것과 비슷합니다.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션에서 다음 코드를 사용하여 `opsworks_cookbook_demo` 디렉터리의 `recipes` 하위 디렉터리에 `create_directory.rb` 파일을 생성합니다. 자세한 정보는 [디렉터리](https://docs.chef.io/resource_directory.html)를 참조하세요.

   ```
   directory "Create a directory" do
     group "root"
     mode "0755"
     owner "ec2-user"
     path "/tmp/create-directory-demo"  
   end
   ```

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::create\$1directory**를 입력합니다.

**레시피를 테스트하려면**

1. 아직 로그인하지 않았다면 인스턴스에 로그인합니다.

1. 명령 프롬프트에서 다음 명령을 실행하여 새 디렉터리가 추가되었는지 확인합니다.

   ```
   ls -la /tmp/create-directory-demo
   ```

   권한, 소유자 이름 및 그룹 이름 등의 정보를 비롯하여 새로 추가된 디렉터리에 대한 정보가 표시됩니다.

   ```
   drwxr-xr-x 2 ec2-user root 4096 Nov 18 00:35 .
   drwxrwxrwt 6 root     root 4096 Nov 24 18:17 ..
   ```

[다음 단계](gettingstarted-cookbooks-create-file.md)에서는 인스턴스에서 파일을 생성하도록 쿡북을 업데이트합니다.

# 8단계: 파일을 생성하고 복사하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-create-file"></a>

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

인스턴스에 2개의 파일을 추가하는 레시피를 추가하여 쿡북을 업데이트합니다. 레시피의 첫 번째 리소스는 순전히 레시피 코드를 사용하여 파일을 생성합니다. 이것은 Linux **cat**, **echo** 또는 **touch** 명령이나 Windows **echo** 또는 **fsutil** 명령을 실행하는 것과 비슷합니다. 이 기법은 소수의 작거나 단순한 파일에 유용합니다. 레시피의 두 번째 리소스는 쿡북의 파일을 인스턴스의 다른 디렉터리에 복사합니다. 이것은 Linux **cp** 명령이나 Windows **copy** 명령을 실행하는 것과 비슷합니다. 이 기법은 다수의 크거나 복잡한 파일에 유용합니다.

이 단계를 시작하기 전에 [7단계: 디렉터리를 생성하도록 쿡북 업데이트](gettingstarted-cookbooks-create-directory.md)를 완료하여 파일의 상위 디렉터리가 이미 존재하는지 확인하세요.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션의 `opsworks_cookbook_demo` 디렉터리에서 하위 디렉터리 `files`를 만듭니다.

1. `files` 하위 디렉터리에 **Hello, World\$1**라는 텍스트가 포함된 `hello.txt` 파일을 만듭니다.

1. 다음 코드를 사용하여 `recipes` 디렉터리의 `opsworks_cookbook_demo` 하위 디렉터리에 `create_files.rb` 파일을 생성합니다. 자세한 정보는 [파일](https://docs.chef.io/resource_file.html) 및 [cookbook\$1file](https://docs.chef.io/resource_cookbook_file.html) 단원을 참조하세요.

   ```
   file "Create a file" do
     content "<html>This is a placeholder for the home page.</html>"
     group "root"
     mode "0755"
     owner "ec2-user"
     path "/tmp/create-directory-demo/index.html"
   end
   
   cookbook_file "Copy a file" do  
     group "root"
     mode "0755"
     owner "ec2-user"
     path "/tmp/create-directory-demo/hello.txt"
     source "hello.txt"  
   end
   ```

   `file` 리소스는 지정된 경로에 파일을 생성합니다. `cookbook_file` 리소스는 쿡북에서 방금 만든 `files` 디렉터리에서(Chef에서는 파일을 복사해 올 표준 이름 하위 디렉터리 `files`를 찾음) 인스턴스의 다른 디렉터리로 파일을 복사합니다.

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::create\$1files**를 입력합니다.

**레시피를 테스트하려면**

1. 아직 로그인하지 않았다면 인스턴스에 로그인합니다.

1. 명령 프롬프트에서 다음 명령을 실행하여 한 번에 하나씩 새 파일이 추가되었는지 확인합니다.

   ```
   sudo cat /tmp/create-directory-demo/index.html
   
   sudo cat /tmp/create-directory-demo/hello.txt
   ```

   파일의 내용이 다음과 같이 표시됩니다.

   ```
   <html>This is a placeholder for the home page.</html>
   
   Hello, World!
   ```

[다음 단계](gettingstarted-cookbooks-run-command.md)에서는 인스턴스에서 명령을 실행하도록 쿡북을 업데이트합니다.

# 9단계: 명령을 실행하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-run-command"></a>

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

인스턴스에서 SSH 키를 생성하는 명령을 실행하는 레시피를 추가하여 쿡북을 업데이트합니다.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션에서 다음 코드를 사용하여 `opsworks_cookbook_demo` 디렉터리의 `recipes` 하위 디렉터리에 `run_command.rb` 파일을 생성합니다. 자세한 정보는 [실행](https://docs.chef.io/resource_execute.html) 단원을 참조하세요.

   ```
   execute "Create an SSH key" do
     command "ssh-keygen -f /tmp/my-key -N fLyC3jbY"
   end
   ```

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::run\$1command**를 입력합니다.

**레시피를 테스트하려면**

1. 아직 로그인하지 않았다면 인스턴스에 로그인합니다.

1. 명령 프롬프트에서 다음 명령을 실행하여 한 번에 하나씩 SSH 키가 생성되었는지 확인합니다.

   ```
   sudo cat /tmp/my-key
   
   sudo cat /tmp/my-key.pub
   ```

   SSH 프라이빗 및 퍼블릭 키의 내용이 표시됩니다.

   ```
   -----BEGIN RSA PRIVATE KEY-----
   Proc-Type: 4,ENCRYPTED
   DEK-Info: AES-128-CBC,DEF7A09C...541583FA
   A5p9dCuo...wp0YYH1c
   -----END RSA PRIVATE KEY-----
   
   ssh-rsa AAAAB3N...KaNogZkT root@cookbooks-demo1
   ```

[다음 단계](gettingstarted-cookbooks-run-script.md)에서는 인스턴스에서 스크립트를 실행하도록 쿡북을 업데이트합니다.

# 10단계: 스크립트를 실행하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-run-script"></a>

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

인스턴스에서 스크립트를 실행하는 레시피를 추가하여 쿡북을 업데이트합니다. 이 레시피는 디렉터리를 생성한 다음 해당 디렉터리에서 파일을 생성합니다. 여러 명령이 포함된 스크립트를 실행하도록 레시피를 작성하는 것이 이러한 명령을 한 번에 하나씩 실행하는 것보다 쉽습니다.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션에서 다음 코드를 사용하여 `opsworks_cookbook_demo` 디렉터리의 `recipes` 하위 디렉터리에 `run_script.rb` 파일을 생성합니다. 자세한 정보는 [스크립트](https://docs.chef.io/resource_script.html)를 참조하세요.

   ```
   script "Run a script" do
     interpreter "bash"
     code <<-EOH
       mkdir -m 777 /tmp/run-script-demo
       touch /tmp/run-script-demo/helloworld.txt
       echo "Hello, World!" > /tmp/run-script-demo/helloworld.txt
     EOH
   end
   ```

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::run\$1script**를 입력합니다.

**레시피를 테스트하려면**

1. 아직 로그인하지 않았다면 인스턴스에 로그인합니다.

1. 명령 프롬프트에서 다음 명령을 실행하여 새 파일이 추가되었는지 확인합니다.

   ```
   sudo cat /tmp/run-script-demo/helloworld.txt
   ```

   파일의 내용이 다음과 같이 표시됩니다.

   ```
   Hello, World!
   ```

[다음 단계](gettingstarted-cookbooks-manage-service.md)에서는 인스턴스에서 서비스를 관리하도록 쿡북을 업데이트합니다.

# 11단계: 서비스를 관리하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-manage-service"></a>

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

인스턴스에서 서비스를 관리하는 레시피를 추가하여 쿡북을 업데이트합니다. 이것은 Linux **service** 명령이나 Windows **net stop**, **net start** 및 유사한 명령을 실행하는 것과 비슷합니다. 이 레시피는 인스턴스에서 **crond** 서비스를 중지합니다.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션에서 다음 코드를 사용하여 `opsworks_cookbook_demo` 디렉터리의 `recipes` 하위 디렉터리에 `manage_service.rb` 파일을 생성합니다. 자세한 정보는 [서비스](https://docs.chef.io/resource_service.html)를 참조하세요.

   ```
   service "Manage a service" do
     action :stop
     service_name "crond"  
   end
   ```

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::manage\$1service**를 입력합니다.

**레시피를 테스트하려면**

1. 아직 로그인하지 않았다면 인스턴스에 로그인합니다.

1. 명령 프롬프트에서 다음 명령을 실행하여 **crond** 서비스가 중지되었는지 확인합니다.

   ```
   service crond status
   ```

   다음과 같이 표시됩니다.

   ```
   crond is stopped
   ```

1. **crond** 서비스를 다시 시작하려면 다음 명령을 실행합니다.

   ```
   sudo service crond start
   ```

   다음과 같이 표시됩니다.

   ```
   Starting crond:  [  OK  ]
   ```

1.  **crond** 서비스가 시작되었는지 확인하려면 다음 명령을 다시 실행합니다.

   ```
   service crond status
   ```

   다음과 유사한 정보가 표시됩니다.

   ```
   crond (pid  3917) is running...
   ```

[다음 단계](gettingstarted-cookbooks-custom-json.md)에서는 인스턴스에 사용자 지정 JSON으로 저장된 정보를 참조하도록 쿡북을 업데이트합니다.

# 12단계: 사용자 지정 JSON을 사용하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-custom-json"></a>

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

인스턴스에 저장된 JSON 단원을 참조하는 레시피를 추가하여 쿡북을 업데이트합니다.

스택을 생성, 업데이트 또는 복제할 때마다 혹은 배포 또는 스택 명령을 실행할 때 사용자 지정 JSON 형식으로 정보를 지정할 수 있습니다. 이것은 예컨대 데이터베이스에서 데이터를 가져오는 대신 데이터 중 작고 변하지 않는 부분을 인스턴스에서 레시피가 사용할 수 있도록 만드는 데 유용합니다. 자세한 내용은 [사용자 지정 JSON 사용](workingstacks-json.md) 단원을 참조하십시오.

이 안내서에서는 사용자 지정 JSON을 사용하여 고객 인보이스에 대한 몇 가지 가상 정보를 제공합니다. 사용자 지정 JSON은 이 단계 뒷부분에서 설명합니다.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션에서 다음 레시피 코드를 사용하여 `recipes` 디렉터리의 `opsworks_cookbook_demo` 하위 디렉터리에 `custom_json.rb` 파일을 생성합니다.

   ```
   Chef::Log.info("********** For customer '#{node['customer-id']}' invoice '#{node['invoice-number']}' **********")
   Chef::Log.info("********** Invoice line number 1 is a '#{node['line-items']['line-1']}' **********")
   Chef::Log.info("********** Invoice line number 2 is a '#{node['line-items']['line-2']}' **********")
   Chef::Log.info("********** Invoice line number 3 is a '#{node['line-items']['line-3']}' **********")
   ```

   이 레시피는 로그에 사용자 지정 JSON의 값에 대한 메시지를 표시합니다.

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::custom\$1json**를 입력합니다. [**고급**]의 [**사용자 지정 Chef JSON**]에는 다음 사용자 지정 JSON을 입력합니다.

   ```
   {
     "customer-id": "0123",
     "invoice-number": "9876",
     "line-items": {
       "line-1": "tractor",
       "line-2": "passenger car",
       "line-3": "trailer"
     }
   }
   ```

**레시피를 테스트하려면**

1. 이전 절차의 [**execute\$1recipes 명령 실행 중**] 페이지가 표시된 상태에서 [**cookbooks-demo1**]의 [**로그**]에 대해 [**표시**]를 선택합니다. [**execute\$1recipes**] 로그 페이지가 표시됩니다.

1. 로그를 아래로 스크롤하면서 다음과 유사한 항목을 찾습니다.

   ```
   [2015-11-14T14:18:30+00:00] INFO: ********** For customer '0123' invoice '9876' **********
   [2015-11-14T14:18:30+00:00] INFO: ********** Invoice line number 1 is a 'tractor' **********
   [2015-11-14T14:18:30+00:00] INFO: ********** Invoice line number 2 is a 'passenger car' **********
   [2015-11-14T14:18:30+00:00] INFO: ********** Invoice line number 3 is a 'trailer' **********
   ```

   이러한 항목에는 [**고급**]의 [**사용자 지정 Chef JSON**] 상자에 입력한 사용자 지정 JSON의 정보가 표시됩니다.

[다음 단계에서](gettingstarted-cookbooks-data-bags.md)는 Stacks가 각 인스턴스에 저장하는 스택 설정 모음인 데이터 백에서 정보를 가져오도록 OpsWorks 쿡북을 업데이트합니다.

# 13단계: 데이터 백을 사용하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-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 팀에 문의하세요.

Stacks가 인스턴스에 데이터 백 세트로 저장하는 스택 설정을 참조하는 레시피를 추가하여 OpsWorks 쿡북을 업데이트합니다. 이 레시피는 인스턴스에 저장된 특정 스택 설정에 대한 메시지를 로그에 표시합니다. 자세한 내용은 [OpsWorks Stacks 데이터 백 참조](data-bags.md) 단원을 참조하십시오.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션에서 다음 코드를 사용하여 `recipes` 디렉터리의 `opsworks_cookbook_demo` 하위 디렉터리에 `data_bags.rb` 파일을 생성합니다.

   ```
   instance = search("aws_opsworks_instance").first
   layer = search("aws_opsworks_layer").first
   stack = search("aws_opsworks_stack").first
   
   Chef::Log.info("********** This instance's instance ID is '#{instance['instance_id']}' **********")
   Chef::Log.info("********** This instance's public IP address is '#{instance['public_ip']}' **********")
   Chef::Log.info("********** This instance belongs to the layer '#{layer['name']}' **********")
   Chef::Log.info("********** This instance belongs to the stack '#{stack['name']}' **********")
   Chef::Log.info("********** This stack gets its cookbooks from '#{stack['custom_cookbooks_source']['url']}' **********")
   ```

   이 레시피는 인스턴스에 저장된 특정 스택 설정에 대한 메시지를 로그에 표시합니다.

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::data\$1bags**를 입력합니다.

**레시피를 테스트하려면**

1. 이전 절차에서 표시된 [**execute\$1recipes 명령 실행 중**] 페이지에서 [**cookbooks-demo1**]의 [**로그**]에 대해 [**표시**]를 선택합니다. [**execute\$1recipes**] 로그 페이지가 표시됩니다.

1. 로그를 아래로 스크롤하면서 다음과 유사한 항목을 찾습니다.

   ```
   [2015-11-14T14:39:06+00:00] INFO: ********** This instance's instance ID is 'f80fa119-81ab-4c3c-883d-6028e52c89EX' **********
   [2015-11-14T14:39:06+00:00] INFO: ********** This instance's public IP address is '192.0.2.0' **********
   [2015-11-14T14:39:06+00:00] INFO: ********** This instance belongs to the layer 'MyCookbooksDemoLayer' **********
   [2015-11-14T14:39:06+00:00] INFO: ********** This instance belongs to the stack 'MyCookbooksDemoStack' **********
   [2015-11-14T14:39:06+00:00] INFO: ********** This stack gets its cookbooks from 'https://s3.amazonaws.com/amzn-s3-demo-bucket/opsworks_cookbook_demo.tar.gz' **********
   ```

   이 레시피는 인스턴스에 저장된 특정 스택 설정에 대한 메시지를 표시합니다.

[다음 단계](gettingstarted-cookbooks-iteration.md)에서는 레시피 코드를 여러 번 실행하도록 쿡북을 업데이트합니다.

# 14단계: 반복을 사용하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-iteration"></a>

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

레시피 코드를 여러 번 반복하는 기법인 *반복*을 사용하는 레시피를 추가하여 쿡북을 업데이트합니다. 이 레시피는 여러 콘텐츠를 포함하는 데이터 백 항목에 대한 메시지를 로그에 표시합니다.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션에서 다음 코드를 사용하여 `recipes` 디렉터리의 `opsworks_cookbook_demo` 하위 디렉터리에 `iteration_demo.rb` 파일을 생성합니다.

   ```
   stack = search("aws_opsworks_stack").first
   Chef::Log.info("********** Content of 'custom_cookbooks_source' **********")
   
   stack["custom_cookbooks_source"].each do |content|
     Chef::Log.info("********** '#{content}' **********")
   end
   ```
**참고**  
이전 레시피 코드를 작성하는 것이 반복을 사용하지 않는 다음 레시피 코드를 작성하는 것보다 더 짧고, 보다 유연하고, 오류 발생 가능성이 더 낮습니다.  

   ```
   stack = search("aws_opsworks_stack").first
   Chef::Log.info("********** Content of 'custom_cookbooks_source' **********")
   
   Chef::Log::info("********** '[\"type\", \"#{stack['custom_cookbooks_source']['type']}\"]' **********")
   Chef::Log::info("********** '[\"url\", \"#{stack['custom_cookbooks_source']['url']}\"]' **********")
   Chef::Log::info("********** '[\"username\", \"#{stack['custom_cookbooks_source']['username']}\"]' **********")
   Chef::Log::info("********** '[\"password\", \"#{stack['custom_cookbooks_source']['password']}\"]' **********")
   Chef::Log::info("********** '[\"ssh_key\", \"#{stack['custom_cookbooks_source']['ssh_key']}\"]' **********")
   Chef::Log::info("********** '[\"revision\", \"#{stack['custom_cookbooks_source']['revision']}\"]' **********")
   ```

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::iteration\$1demo**를 입력합니다.

**레시피를 테스트하려면**

1. 이전 절차의 [**execute\$1recipes 명령 실행 중**] 페이지가 표시된 상태에서 [**cookbooks-demo1**]의 [**로그**]에 대해 [**표시**]를 선택합니다. [**execute\$1recipes**] 로그 페이지가 표시됩니다.

1. 로그를 아래로 스크롤하면서 다음과 유사한 항목을 찾습니다.

   ```
   [2015-11-16T19:56:56+00:00] INFO: ********** Content of 'custom_cookbooks_source' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["type", "s3"]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["url", "https://s3.amazonaws.com/amzn-s3-demo-bucket/opsworks_cookbook_demo.tar.gz"]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["username", "secret-key-value"]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["password", "secret-access-key-value"]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["ssh_key", nil]' **********
   [2015-11-16T19:56:56+00:00] INFO: ********** '["revision", nil]' **********
   ```

   이 레시피는 여러 콘텐츠를 포함하는 데이터 백 항목에 대한 메시지를 로그에 표시합니다. 데이터 백 항목은 `aws_opsworks_stack` 데이터 백에 있습니다. 데이터 백 항목에는`custom_cookbooks_source`라는 콘텐츠가 있습니다. 이 컨텐츠 내에는 `type`, `url`, `username`, `password`, `ssh_key` 및 `revision`라는 6개의 컨텐츠가 있으며 이러한 컨텐츠의 값도 표시됩니다.

[다음 단계](gettingstarted-cookbooks-conditional-logic.md)에서는 특정 조건이 충족되는 경우에만 레시피 코드를 실행하도록 쿡북을 업데이트합니다.

# 15단계: 조건부 논리를 사용하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-conditional-logic"></a>

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

이제 특정 조건이 충족되는 경우에만 코드를 실행하는 기법인 *조건부 논리*를 사용하는 레시피를 추가하여 쿡북을 업데이트합니다. 자세한 정보는 [if 문](https://docs.chef.io/dsl_recipe.html#if-statements)과 [case 문](https://docs.chef.io/dsl_recipe.html#case-statements) 단원을 참조하세요.

이 레시피는 데이터 백 콘텐츠에 기반하여 다음 두 가지를 수행합니다. 인스턴스가 실행되는 운영 체제를 식별하는 메시지를 로그에 표시하고, 운영 체제가 Linux인 경우에만 주어진 Linux 배포에 맞는 패키지 관리자를 사용하여 패키지를 설치합니다. tree로 명명되는 이 패키지는 디렉터리 목록을 시각화하기 위한 간단한 앱입니다.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. 로컬 워크스테이션에서 `opsworks_cookbook_demo directory`의 `recipes` 하위 디렉터리에 다음 코드가 포함된 `conditional_logic.rb` 파일을 생성합니다.

   ```
   instance = search("aws_opsworks_instance").first
   os = instance["os"]
   
   if os == "Red Hat Enterprise Linux 7"
     Chef::Log.info("********** Operating system is Red Hat Enterprise Linux. **********")
   elsif os == "Ubuntu 14.04 LTS" || os == "Ubuntu 16.04 LTS" || os == "Ubuntu 18.04 LTS"
     Chef::Log.info("********** Operating system is Ubuntu. **********") 
   elsif os == "Microsoft Windows Server 2012 R2 Base"
     Chef::Log.info("********** Operating system is Windows. **********")
   elsif os == "Amazon Linux 2015.03" || os == "Amazon Linux 2015.09" || os == "Amazon Linux 2016.03" || os == "Amazon Linux 2016.09" || os == "Amazon Linux 2017.03" || os == "Amazon Linux 2017.09" || os == "Amazon Linux 2018.03" || os == "Amazon Linux 2"
     Chef::Log.info("********** Operating system is Amazon Linux. **********")
   elsif os == "CentOS Linux 7"
     Chef::Log.info("********** Operating system is CentOS 7. **********")
   else
     Chef::Log.info("********** Cannot determine operating system. **********")
   end
   
   case os
   when "Ubuntu 14.04 LTS", "Ubuntu 16.04 LTS", "Ubuntu 18.04 LTS"
     apt_package "Install a package with apt-get" do
       package_name "tree"
     end
   when "Amazon Linux 2015.03", "Amazon Linux 2015.09", "Amazon Linux 2016.03", "Amazon Linux 2016.09", "Amazon Linux 2017.03", "Amazon Linux 2017.09", "Amazon Linux 2018.03", "Amazon Linux 2", "Red Hat Enterprise Linux 7", "CentOS Linux 7"
     yum_package "Install a package with yum" do
       package_name "tree"
     end
   else
     Chef::Log.info("********** Cannot determine operating system type, or operating system is not Linux. Package not installed. **********")
   end
   ```

1. 터미널 또는 명령 프롬프트에서 **tar** 명령을 사용하여 `opsworks_cookbook_demo` 디렉터리와 업데이트된 내용 포함된 `opsworks_cookbook_demo.tar.gz` 파일의 새 버전을 만듭니다.

1. 업데이트된 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::conditional\$1logic**를 입력합니다.

**레시피를 테스트하려면**

1. 이전 절차의 [**execute\$1recipes 명령 실행 중**] 페이지가 표시된 상태에서 [**cookbooks-demo1**]의 [**로그**]에 대해 [**표시**]를 선택합니다. [**execute\$1recipes**] 로그 페이지가 표시됩니다.

1. 로그를 아래로 스크롤하면서 다음과 유사한 항목을 찾습니다.

   ```
   [2015-11-16T19:59:05+00:00] INFO: ********** Operating system is Amazon Linux. **********
   ```

   인스턴스의 운영 체제가 Amazon Linux 2016.09이므로, (레시피 코드의 가능한 5개 항목 중) 이전 항목만 로그에 표시됩니다.

1. 운영 체제가 Linux이므로 레시피가 트리 패키지를 설치합니다. 디렉터리의 내용을 시각화해 살펴보려면 원하는 디렉터리의 명령 프롬프트에서 또는 원하는 디렉터리의 경로를 사용하여 **tree**를 입력합니다(예: `tree /var/chef/runs`).

[다음 단계](gettingstarted-cookbooks-community-cookbooks.md)에서는 Chef 커뮤니티가 제공하는 외부 쿡북의 기능을 사용하도록 쿡북을 업데이트합니다.

# 16단계: 커뮤니티 쿡북을 사용하도록 쿡북 업데이트
<a name="gettingstarted-cookbooks-community-cookbooks"></a>

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

마지막으로 Chef 커뮤니티가 제공하는 외부 쿡북에 있는 기능을 사용하도록 쿡북을 업데이트합니다. 이 안내서에서 사용할 외부 쿡북은 외부 Chef 쿡북에 액세스할 수 있는 인기 있는 위치인 [Chef Supermarket](https://supermarket.chef.io/)을 통해 얻을 수 있습니다. 이 외부 쿡북은 [4단계: 패키지를 설치하도록 쿡북 업데이트](gettingstarted-cookbooks-install-package.md)에서와 비슷하게 애플리케이션을 다운로드하고 설치할 수 있도록 해 주는 사용자 지정 리소스를 제공합니다. 다만 이 리소스는 패키지 외에 웹 애플리케이션과 그 밖의 애플리케이션 유형을 설치할 수 있습니다.

쿡북이 다른 쿡북에 의존하는 경우에는 다른 쿡북에 대한 종속성을 지정해야 합니다. 쿡북 종속성을 선언하고 관리하기 위해서는 Berkshelf라는 도구를 사용하는 것이 좋습니다. 로컬 워크스테이션에서 Berkshelf를 설치하는 방법에 대한 자세한 내용은 Chef 웹 사이트의 [About Berkshelf](https://docs.chef.io/berkshelf.html)를 참조하세요.

Berkshelf를 설치한 후 다음 절차에 따라 쿡북 종속성을 선언한 다음 외부 쿡북의 리소스를 호출하는 레시피를 만듭니다.

**쿡북 종속성을 선언하려면**

1. 로컬 워크스테이션의 `opsworks_cookbook_demo` 디렉터리에서 `metadata.rb` 파일의 끝에 다음 행을 추가합니다.

   ```
   depends "application", "5.0.0"
   ```

   이 행은 `application`, 버전 5.0.0 쿡북에 대한 종속성을 선언합니다.

1. `opsworks_cookbook_demo` 디렉터리의 루트에서 다음 명령을 실행합니다. 명령 끝의 마침표는 의도적인 것입니다.

   ```
   berks init .
   ```

   Berkshelf에서는 이후에 보다 고급 시나리오에 사용할 수 있는 여러 폴더 및 파일을 생성합니다. 이 연습에 필요한 유일한 파일은 `Berksfile`입니다.

1. `Berksfile` 파일 끝부분에서 다음 행을 추가합니다.

   ```
   cookbook "application", "5.0.0"
   ```

   이 행은 Berkshelf에 [애플리케이션 쿡북 버전 5.0.0](https://supermarket.chef.io/cookbooks/application/versions/5.0.0)을 사용하려고 함을 알립니다. Berkshelf는 Chef Supermarket에서 이 버전을 다운로드합니다.

1. 터미널 또는 명령 프롬프트에서 `opsworks_cookbook_demo` 디렉터리의 루트에서 다음 명령을 실행합니다.

   ```
   berks install
   ```

   Berkshelf에서는 사용자 쿡북 및 애플리케이션 쿡북 둘 다에 대한 종속성 목록을 생성합니다. Berkshelf는 다음 절차에서 이 종속성 목록을 사용합니다.

**인스턴스에서 쿡북을 업데이트하고 새 레시피를 실행하려면**

1. `recipes` 디렉터리의 `opsworks_cookbook_demo` 하위 디렉터리에 다음 코드가 포함된 `dependencies_demo.rb` 파일을 생성합니다.

   ```
   application "Install NetHack" do
     package "nethack.x86_64"
   end
   ```

   이 레시피는 애플리케이션 쿡북의 애플리케이션 리소스에 따라 인스턴스에 유명한 텍스트 기반 어드벤처 게임인 NetHack을 설치합니다. 물론, 인스턴스에서 패키지를 패키지 관리자에 쉽게 사용할 수 있는 경우 원하는 다른 패키지 이름으로 대체할 수 있습니다.

1. `opsworks_cookbook_demo` 디렉터리의 루트에서 다음 명령을 실행합니다.

   ```
   berks package
   ```

   Berkshelf에서는 이전 절차에서 생성한 종속성 목록을 사용하여 `cookbooks-timestamp.tar.gz` 파일을 만듭니다. 이 파일에는 `opsworks_cookbook_demo` 디렉터리와 쿡북의 종속 쿡북을 비롯한 업데이트된 콘텐츠가 들어 있습니다. 이 파일의 이름을 `opsworks_cookbook_demo.tar.gz`으로 바꿉니다.

1. 업데이트되어 이름이 바뀐 `opsworks_cookbook_demo.tar.gz` 파일을 S3 버킷에 업로드합니다.

1. [5단계: 인스턴스에서 쿡북을 업데이트하고 레시피 실행](gettingstarted-cookbooks-copy-cookbook.md) 단원의 절차에 따라 인스턴스에서 쿡북을 업데이트하고 레시피를 실행합니다. "레시피 실행" 절차에서 **실행할 레시피**에 **opsworks\$1cookbook\$1demo::dependencies\$1demo**를 입력합니다.

1. 이 레시피를 실행하면 인스턴스에 로그인할 수 있어야 합니다. 그런 다음 명령 프롬프트에 **nethack**을 입력해 실행을 시작합니다. 이 게임에 대한 자세한 정보는 [NetHack](https://en.wikipedia.org/wiki/NetHack) 및 [NetHack 가이드북](http://www.nethack.org/v343/Guidebook.html) 단원을 참조하세요.

[다음 단계에서](gettingstarted-cookbooks-clean-up.md)는이 연습에 사용한 AWS 리소스를 정리할 수 있습니다. 이 다음 단계는 선택 사항입니다. OpsWorks Stacks에 대해 계속 자세히 알아볼 때 이러한 AWS 리소스를 계속 사용할 수 있습니다. 그러나 이러한 AWS 리소스를 주변에 보관하면 AWS 계정에 요금이 계속 부과될 수 있습니다. 나중에 사용할 수 있도록 이러한 AWS 리소스를 계속 유지하려면 이제이 연습을 완료했으며 로 건너뛸 수 있습니다[다음 단계](gettingstarted-cookbooks-next-steps.md).

# 17단계: (선택 사항) 정리
<a name="gettingstarted-cookbooks-clean-up"></a>

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

 AWS 계정에 추가 요금이 발생하지 않도록이 연습에 AWS 사용된 리소스를 삭제할 수 있습니다. 이러한 AWS 리소스에는 S3 버킷, OpsWorks Stacks 스택 및 스택의 구성 요소가 포함됩니다. (자세한 정보는 [AWS OpsWorks 요금](https://aws.amazon.com/opsworks/pricing/) 단원을 참조하세요.) 그러나 Stacks에 대해 OpsWorks 계속 자세히 알아볼 때 이러한 AWS 리소스를 계속 사용하고 싶을 수 있습니다. 이러한 AWS 리소스를 계속 사용하려면 이제이 연습을 완료했으며 로 건너뛸 수 있습니다[다음 단계](gettingstarted-cookbooks-next-steps.md).

이번 연습에서 생성한 리소스에 보관된 콘텐츠는 개인 식별 정보를 포함할 수 있습니다. 이 정보를 AWS에 저장하고 싶지 않다면, 이 주제에서 설명하는 다음 단계를 따르십시오.

**S3 버킷을 삭제하려면**
+ [Amazon S3 버킷 삭제](https://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-cleanup-s3.html)를 참조하세요.

**스택의 인스턴스를 삭제하려면**

1.  OpsWorks Stacks 콘솔의 서비스 탐색 창에서 **인스턴스를** 선택합니다. [**인스턴스**] 페이지가 표시됩니다.

1. [**MyCookbooksDemoLayer**]의 [**cookbooks-demo1**]에 해당하는 [**작업**]에서 [**중지**]를 선택합니다. 확인 메시지가 표시되면 [**중지**]를 선택합니다.

1. 몇 분 동안 아래와 같은 변경이 진행됩니다. 다음 변경 작업이 모두 완료될 때까지 계속 진행하지 마십시오.
   + [**상태**]가 [**온라인**]에서 [**중지 중**]으로 바뀌었다가 마지막으로 [**중지됨**]로 바뀝니다.
   + [**온라인**]이 [**1**]에서 [**0**]으로 바뀝니다.
   + [**종료 중**]이 [**0**]에서 [**1**]로 바뀌었다가 마지막에는 다시 [**0**]으로 바뀝니다.
   + [**중지됨**]가 마지막으로 [**0**]에서 [**1**]로 변경됩니다.

1. **작업**에 대해 **삭제**를 선택합니다. 확인 메시지가 표시되면 **삭제**를 선택합니다. OpsWorks 스택이 인스턴스를 삭제하고 **인스턴스 없음을** 표시합니다.

**스택을 삭제하려면**

1. 서비스 탐색 창에서 [**스택**]을 선택합니다. [**MyCookbooksDemoStack**] 페이지가 표시됩니다.

1. [**스택 삭제**]를 선택합니다. 확인 메시지가 표시되면 **삭제**를 선택합니다. OpsWorks 스택이 스택을 삭제하고 **대시보드** 페이지를 표시합니다.

선택적으로 다른 AWS 서비스 및 EC2 인스턴스에 액세스하는 데 재사용하지 않으려는 경우이 연습에 사용한 IAM 사용자 및 Amazon EC2 키 페어를 삭제할 수 있습니다. 지침은 [IAM 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting) 및 [Amazon EC2 키 페어 및 Linux 인스턴스 삭제](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#delete-key-pair)를 참조하세요.

이제 이 안내서를 성공적으로 완료했습니다. 자세한 내용은 [다음 단계](gettingstarted-cookbooks-next-steps.md) 단원을 참조하십시오.

# 다음 단계
<a name="gettingstarted-cookbooks-next-steps"></a>

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

이제이 연습을 완료했으므로 다음 리소스를 검토하여 Chef OpsWorks 쿡북에 대한 Stacks 지원에 대해 자세히 알아볼 수 있습니다.
+ [쿡북과 레시피](workingcookbook.md) - OpsWorks Stacks가 현재 지원하는 Chef 및 Ruby의 버전을 설명합니다. 또한 인스턴스에서 사용자 지정 쿡북을 설치 및 업데이트하는 방법과 인스턴스에서 레시피를 실행하는 방법도 보여 줍니다.
+ [Learn Chef](https://learn.chef.io/) – Chef 자습서, Chef 스킬 라이브러리, 전체 Chef 설명서, Chef 교육 클래스의 링크를 제공합니다.
+ [All about Chef](https://docs.chef.io/) – 완전한 Chef 설명서를 제공합니다. 특정 관심 주제에는 다음이 포함됩니다.
  + [About Cookbooks](https://docs.chef.io/cookbooks.html) – 속성, 레시피, 파일, 메타데이터, 템플릿 등 주요 쿡북 구성 요소를 설명합니다.
  + [About Recipes](https://docs.chef.io/recipes.html) – 데이터 백 작업 방법, 다른 레시피를 포함시키는 방법, 레시피에서 Ruby 코드를 사용하는 방법 같은 레시피의 기초적 내용을 설명합니다.
  + [리소스](https://docs.chef.io/resources.html#resources) - `apt_package` `cookbook_file`, `directory`, `execute`, `file` 및 `package` 등 모든 내장 Chef 리소스를 사용하는 방법을 설명합니다.
  + [About the Recipe DSL](https://docs.chef.io/dsl_recipe.html) - `if` `case`, `data_bag`, `data_bag_item` 및 `search` 등 Chef 레시피용 코드를 쓰는 방법을 설명합니다.
+ [About Templates](https://docs.chef.io/templates.html) – Embedded Ruby(ERB) 템플릿을 사용하여 구성 파일과 같은 정적 텍스트 파일을 동적으로 생성하는 방법을 설명합니다.
+ [Learning Tracks](https://learn.chef.io/tracks) – Chef를 사용한 인스턴스 관리 방법, 기본적 웹 앱 관리 방법, 인프라 코드 개발 및 테스트 방법, Chef 분석 방법 등을 설명합니다.
+ [http://shop.oreilly.com/product/0636920032397.do](http://shop.oreilly.com/product/0636920032397.do) – Chef를 소개합니다. 발행: O'Reilly Media 
+ [Learning Chef code examples](https://github.com/learningchef/learningchef-code) – O'Reilly Media가 발행한 *Learning Chef* 서적에 포함되는 코드 예제를 제공합니다.