기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
예제 7: 명령 및 스크립트 실행
중요
The AWS OpsWorks Stacks 서비스 수명이 2024년 5월 26일에 종료되었으며 신규 및 기존 고객 모두 사용할 수 없습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 다음 연락처로 문의하십시오. AWS Support 팀 구성: AWS re:포스트 포스트
Chef 리소스는 인스턴스에서 다양한 작업을 처리할 수 있지만 경우에 따라 셸 명령이나 스크립트를 사용하는 것이 좋습니다. 예를 들어 특정 작업을 수행하는 데 사용하는 스크립트가 이미 있고 새 코드를 구현하는 것보다 이 스크립트를 계속 사용하는 것이 더 쉬울 수 있습니다. 이 섹션에서는 인스턴스에서 명령 또는 스크립트를 실행하는 방법을 살펴봅니다.
명령 실행
script
시작하기
-
opsworks_cookbooks
디렉터리 안에script
하위 디렉터리를 만들고 그 디렉터리로 이동합니다. -
script
에 다음 콘텐츠가 포함된metadata.rb
파일을 추가합니다.name "script" version "0.1.0"
-
예제 1: 패키지 설치 단원에서 설명하는 대로 Test Kitchen을 초기화 및 구성하고
platforms
목록에서 CentOS를 제거합니다. -
script
안에recipes
디렉터리를 만듭니다.
script
리소스 자체를 사용하여 명령을 실행할 수도 있지만 Chef는 인터프리터에 대해 명명되는 리소스의 명령 인터프리터별 버전 집합도 지원합니다. 다음 레시피는 bash
bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end
bash
리소스는 다음과 같이 구성됩니다.
-
bash 리소스는
code
블록에서 명령을 실행하는 기본 작업인run
을 사용합니다.이 예제에는
touch somefile
이라는 명령 하나만 있지만code
블록에는 여러 명령이 포함될 수 있습니다. -
user
속성은 명령을 실행하는 사용자를 지정합니다. -
cwd
속성은 작업 디렉터리를 지정합니다.이 예제에서는
touch
가/tmp
디렉터리에 파일을 생성합니다. -
not_if
guard 속성은 이 파일이 이미 존재하는 경우, 리소스에게 아무 작업도 하지 말라고 명령합니다.
레시피를 실행하려면
-
이전 예제 코드가 포함된
default.rb
파일을 만든 다음 이 파일을recipes
에 저장합니다. -
kitchen converge
를 실행한 다음 인스턴스에 로그인하여/tmp
디렉터리에 이 파일이 포함되어 있는지 확인합니다.
스크립트 실행
script
리소스는 특히 하나 또는 두 개의 명령만 실행해야 하는 경우에 편리하지만 대체로 스크립트를 파일에 저장하고 파일을 실행하는 것이 더 좋습니다. execute
script
를 사용하여 간단한 셸 스크립트를 실행하도록 앞의 예제의 execute
쿡북을 수정합니다. 더 복잡한 스크립트나 다른 실행 파일 유형까지 예제를 쉽게 확장할 수 있습니다.
스크립트 파일을 설정하려면
-
files
하위 디렉터리는script
에,default
하위 디렉터리는files
에 추가합니다. -
다음 코드가 포함된
touchfile
이라는 파일을 만들어files/default
에 추가합니다. 이 예제에서는 일반적인 Bash 인터프리터 라인이 사용되지만 필요한 경우 사용자의 셸 환경에서 작동하는 인터프리터를 대체합니다.#!/usr/bin/env bash touch somefile
스크립트 파일은 명령을 제한 없이 포함할 수 있습니다. 편의를 위해 이 예제 스크립트에는
touch
명령만 있습니다.
다음 레시피는 스크립트를 실행합니다.
cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end
cookbook_file
리소스는 스크립트 파일을 /tmp
에 복사하고 파일을 실행 파일로 만들도록 모드를 설정합니다. 그런 다음 execute
리소스가 다음과 같이 파일을 실행합니다.
-
user
속성은 명령의 사용자(이 예제에서는root
)를 지정합니다. -
cwd
속성은 작업 디렉터리(이 예제에서는/tmp
)를 지정합니다. -
command
속성은 작업 디렉터리에 위치한 실행할 스크립트(이 예제에서는touchfile
)를 지정합니다.
레시피를 실행하려면
-
recipes/default.rb
의 코드를 이전 예제로 바꿉니다. -
kitchen converge
를 실행한 다음 인스턴스에 로그인하여/tmp
디렉터리에 모드가 0755로 설정된 스크립트 파일과somefile
디렉터리 파일이 있는지 확인합니다.
다 마치면 kitchen destroy
를 실행해 인스턴스를 종료하세요. 다음 섹션에서는 새 쿡북을 사용합니다.