예제 8: 서비스 관리 - AWS OpsWorks

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

예제 8: 서비스 관리

중요

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

애플리케이션 서버와 같은 패키지에는 일반적으로 시작, 중지, 재시작해야 하는 연결된 서비스가 있습니다. 예를 들어 패키지를 설치한 후 또는 인스턴스 부팅이 완료된 후에 Tomcat 서비스를 시작하고 구성 파일을 수정할 때마다 서비스를 다시 시작해야 합니다. 이 주제에서는 Tomcat 애플리케이션 서버를 예제로 사용하여 Linux 인스턴스에서 서비스를 관리하는 방법의 기초를 살펴봅니다. 서비스 리소스는 Windows 인스턴스에서와 거의 비슷한 방식으로 작동하지만 세부적으로는 몇 가지 차이점이 있습니다. 자세한 정보는 service을 참조하세요.

참고

예제에서는 service 리소스 사용 방법의 기초를 보여 주기에 충분한 정도로만 Tomcat을 최소 설치합니다. 기능이 더 많은 Tomcat 서버를 위한 레시피 구현 방법의 예제는 사용자 지정 Tomcat 서버 계층 생성 단원을 참조하세요.

서비스 정의 및 시작

이 섹션에서는 서비스를 정의하고 시작하는 방법의 기초를 살펴봅니다.

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

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

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

  4. recipes 하위 디렉터리를 tomcat에 추가합니다.

service 리소스를 사용하여 서비스를 관리합니다. 다음의 기본 레시피는 Tomcat을 설치하고 서비스를 시작합니다.

execute "install_updates" do command "apt-get update" end package "tomcat7" do action :install end include_recipe 'tomcat::service' service 'tomcat' do action :start end

이 레시피는 다음 작업을 수행합니다.

  • execute 리소스는 apt-get update를 실행하여 최신 시스템 업데이트를 설치합니다.

    이 예제에서 사용하는 Ubuntu 인스턴스의 경우, Tomcat을 설치하기 전에 업데이트를 설치해야 합니다. 다른 시스템은 요구 사항이 다를 수 있습니다.

  • package 리소스는 Tomcat 7을 설치합니다.

  • 포함된 tomcat::service 레시피는 서비스를 정의하며, 나중에 설명합니다.

  • service 리소스는 Tomcat 서비스를 시작합니다.

    이 리소스를 사용하여 서비스 중단 및 재시작 같은 다른 명령을 실행할 수도 있습니다.

다음 예제는 tomcat::service 레시피를 보여 줍니다.

service 'tomcat' do service_name "tomcat7" supports :restart => true, :reload => false, :status => true action :nothing end

이 레시피는 다음과 같이 Tomcat 서비스 정의를 생성합니다.

  • 리소스 이름인 tomcat은 다른 레시피가 서비스를 참조하는 데 사용합니다.

    예를 들어 default.rb는 서비스를 시작하기 위해 tomcat 단원을 참조합니다.

  • service_name 리소스는 서비스 이름을 지정합니다.

    인스턴스에서 서비스를 나열할 때 Tomcat 서비스는 tomcat7으로 명명됩니다.

  • supports는 Chef가 서비스의 restart, reloadstatus 명령을 관리하는 방법을 지정합니다.

    • true는 Chef가 init 스크립트 또는 그 밖의 서비스 공급자를 사용하여 명령을 실행할 수 있음을 나타냅니다.

    • false는 Chef가 다른 수단을 사용하여 명령을 실행하려 시도해야 함을 나타냅니다.

action:nothing으로 설정되어 있어 아무 작업도 하지 말라고 리소스에게 명령한다는 점에 유의하세요. 서비스 리소스는 startrestart와 같은 작업을 지원합니다. 하지만 이 쿡북은 아무 작업도 하지 않는 서비스 정의를 사용하고 다른 곳에서 서비스를 시작하거나 다시 시작하는 표준 관행에 따릅니다. 서비스를 시작하거나 다시 시작하는 각각의 레시피는 먼저 서비스를 정의해야 하므로 가장 간단한 방법은 서비스 정의를 별도의 레시피에 넣고 필요에 따라 다른 레시피에 포함시키는 것입니다.

참고

간단히 하기 위해 이 예제의 기본 레시피는 서비스 정의를 실행한 후 service 리소스를 사용하여 서비스를 시작합니다. 프로덕션 구현은 일반적으로 뒤에서 설명하는 것처럼 notifies를 사용하여 서비스를 시작하거나 다시 시작합니다.

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

  2. 서비스 정의 예제가 포함된 service.rb 파일을 만든 다음 이 파일을 recipes에 저장합니다.

  3. kitchen converge를 실행한 다음 인스턴스에 로그인하고 다음 명령을 실행해서 서비스가 실행 중인지 확인하세요.

    sudo service tomcat7 status
참고

service.rbdefault.rb와 별도로 실행한 경우, .kitchen.yml을 편집하여 tomcat::service를 실행 목록에 추가해야 합니다. 다만 레시피를 포함시키면 레시피가 실행되기 전에 그 코드가 상위 레시피에 통합됩니다. 따라서 service.rbdefault.rb의 일부이며 별도의 실행 목록 항목이 필요하지 않습니다.

notifies를 사용하여 서비스 시작 또는 재시작

프로덕션 구현은 일반적으로 서비스를 시작하거나 다시 시작하는 데 service를 사용하지 않습니다. 그 대신 몇몇 리소스에 notifies를 추가합니다. 예를 들어 구성 파일을 수정한 후 서비스를 다시 시작하려면 연결된 notifies 리소스에 template를 포함시킵니다. notifies를 사용하면 service 리소스를 사용하여 명시적으로 서비스를 다시 시작하는 방법에 비해 다음과 같은 장점이 있습니다.

  • notifies 요소는 연결된 구성 파일이 변경된 경우에만 서비스를 다시 시작하므로 불필요한 서비스 재시작을 초래할 위험이 없습니다.

  • Chef는 실행에 얼마나 많은 notifies가 포함되는지에 상관없이 각 실행이 끝날 때 많아야 한 번 서비스를 다시 시작합니다.

    예를 들어 Chef 실행에는 각각 서로 다른 구성 파일을 수정하고 파일이 변경된 경우 서비스를 다시 시작해야 하는 여러 개의 템플릿 리소스가 포함될 수 있습니다. 하지만 사용자는 일반적으로 Chef 실행이 끝날 때 한 번만 서비스를 다시 시작하려 합니다. 그렇지 않다면 이전의 재시작으로 완전히 작동하지 않아 오류를 발생시킬 수 있는 서비스를 다시 시작하려 시도할 수 있습니다.

이 예제는 tomcat::default를 사용하여 서비스를 다시 시작하는 template 리소스를 포함하도록 notifies를 수정합니다. 현실적 예에서는 Tomcat 구성 파일 중 하나의 사용자 지정 버전을 생성하는 템플릿 리소스를 사용하겠지만 과정이 길고 복잡합니다. 간단히 하기 위해 이 예제는 템플릿에서 파일 생성의 템플릿 리소스를 사용합니다. 이 리소스는 Tomcat과 아무 관련이 없지만 notifies 사용 방법을 간단히 보여 줍니다. 템플릿을 사용해 Tomcat 구성 파일을 생성하는 방법의 예제는 설정 레시피 단원을 참조하세요.

쿡북을 설정하려면
  1. templates 하위 디렉터리는 tomcat에, default 하위 디렉터리는 templates에 추가합니다.

  2. example_data.json.erb 쿡북에서 createfile 디렉터리로 templates/default 템플릿을 복사합니다.

  3. attributestomcat 하위 디렉터리를 추가합니다.

  4. default.rb 쿡북에서 createfile 디렉터리로 attributes 속성 파일을 복사합니다.

다음 레시피는 notifies를 사용하여 Tomcat 서비스를 다시 시작합니다.

execute "install_updates" do command "apt-get update" end package "tomcat7" do action :install end include_recipe 'tomcat::service' service 'tomcat' do action :enable end directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} notifies :restart, resources(:service => 'tomcat') end

이 예제는 템플릿에서 파일 생성의 레시피를 이전 섹션의 레시피에 병합하며, 다음과 같은 두 가지 중요한 변경이 있습니다.

  • service 리소스는 그대로 있지만 이제는 약간 다른 용도로 사용됩니다.

    :enable 작업은 부팅 시 Tomcat 서비스를 활성화합니다.

  • 이제 템플릿 리소스에는 notifies이 변경된 경우, Tomcat 서비스를 다시 시작하는 example_data.json가 포함됩니다.

    이로써 서비스는 Tomcat이 처음 설치될 때 시작되고 구성 파일 변경 후마다 다시 시작됩니다.

레시피를 실행하려면
  1. kitchen destroy를 실행하여 깨끗한 인스턴스로 시작합니다.

  2. default.rb의 코드를 이전 예제로 바꿉니다.

  3. kitchen converge를 실행한 다음 인스턴스에 로그인하여 서비스가 실행 중인지 확인합니다.

참고

서비스를 다시 시작하고 싶지만 레시피에 templatenotifies를 지원하는 리소스가 없는 경우, 그 대신 더미 execute 리소스를 사용할 수 있습니다. 예

execute 'trigger tomcat service restart' do command 'bin/true' notifies :restart, resources(:service => 'tomcat') end

execute 리소스는 command를 실행하는 방법으로만 사용한다 하더라도 notifies 속성이 있어야 합니다. 이 예제에서는 단순히 성공 코드를 반환하는 셸 명령인 /bin/true를 실행함으로써 이러한 요구를 해결합니다.