예제 7: 명령 및 스크립트 실행 - AWS OpsWorks

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

예제 7: 명령 및 스크립트 실행

중요

이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두 사용할 수 없게 되었습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 AWS re:Post 또는 Premium AWS Support를 통해 AWS Support 팀에 문의하세요.

Chef 리소스는 인스턴스에서 다양한 작업을 처리할 수 있지만 경우에 따라 셸 명령이나 스크립트를 사용하는 것이 좋습니다. 예를 들어 특정 작업을 수행하는 데 사용하는 스크립트가 이미 있고 새 코드를 구현하는 것보다 이 스크립트를 계속 사용하는 것이 더 쉬울 수 있습니다. 이 섹션에서는 인스턴스에서 명령 또는 스크립트를 실행하는 방법을 살펴봅니다.

명령 실행

script 리소스는 하나 이상의 명령을 실행합니다. 이 리소스는 csh, bash, Perl, Python 및 Ruby 명령 인터프리터를 지원하므로 적절한 인터프리터가 설치되어 있다면 Linux 또는 Windows 시스템에서 사용할 수 있습니다. 이 주제에서는 Linux 인스턴스에서 간단한 bash 명령을 실행하는 방법을 살펴봅니다. Chef는 Windows에서 스크립트를 실행하기 위해 powershell_scriptbatch 리소스도 지원합니다. 자세한 내용은 윈도우 PowerShell 스크립트 실행 섹션을 참조하세요.

시작하기
  1. opsworks_cookbooks 디렉터리 안에 script 하위 디렉터리를 만들고 그 디렉터리로 이동합니다.

  2. script에 다음 콘텐츠가 포함된 metadata.rb 파일을 추가합니다.

    name "script" version "0.1.0"
  3. 예제 1: 패키지 설치 단원에서 설명하는 대로 Test Kitchen을 초기화 및 구성하고 platforms 목록에서 CentOS를 제거합니다.

  4. script 안에 recipes 디렉터리를 만듭니다.

script 리소스 자체를 사용하여 명령을 실행할 수도 있지만 Chef는 인터프리터에 대해 명명되는 리소스의 명령 인터프리터별 버전 집합도 지원합니다. 다음 레시피는 bash 리소스를 사용하여 간단한 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 속성은 이 파일이 이미 존재하는 경우, 리소스에게 아무 작업도 하지 말라고 명령합니다.

레시피를 실행하려면
  1. 이전 예제 코드가 포함된 default.rb 파일을 만든 다음 이 파일을 recipes에 저장합니다.

  2. kitchen converge를 실행한 다음 인스턴스에 로그인하여 /tmp 디렉터리에 이 파일이 포함되어 있는지 확인합니다.

스크립트 실행

script 리소스는 특히 하나 또는 두 개의 명령만 실행해야 하는 경우에 편리하지만 대체로 스크립트를 파일에 저장하고 파일을 실행하는 것이 더 좋습니다. execute 리소스는 Linux 또는 Windows에서 스크립트 파일을 포함한 지정된 실행 파일을 실행합니다. 이 주제에서는 script를 사용하여 간단한 셸 스크립트를 실행하도록 앞의 예제의 execute 쿡북을 수정합니다. 더 복잡한 스크립트나 다른 실행 파일 유형까지 예제를 쉽게 확장할 수 있습니다.

스크립트 파일을 설정하려면
  1. files 하위 디렉터리는 script에, default 하위 디렉터리는 files에 추가합니다.

  2. 다음 코드가 포함된 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)를 지정합니다.

레시피를 실행하려면
  1. recipes/default.rb의 코드를 이전 예제로 바꿉니다.

  2. kitchen converge를 실행한 다음 인스턴스에 로그인하여 /tmp 디렉터리에 모드가 0755로 설정된 스크립트 파일과 somefile 디렉터리 파일이 있는지 확인합니다.

다 마치면 kitchen destroy를 실행해 인스턴스를 종료하세요. 다음 섹션에서는 새 쿡북을 사용합니다.