예제 6: 파일 생성 - AWS OpsWorks

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

예제 6: 파일 생성

중요

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

디렉터리를 생성한 후 구성 파일, 데이터 파일 등으로 디렉터리를 채워야 하는 경우가 많습니다. 이 주제에서는 인스턴스에 파일을 설치하는 두 가지 방법을 살펴봅니다.

쿡북에서 파일 설치

인스턴스에 파일을 설치하는 가장 간단한 방법은 cookbook_file 리소스를 사용하는 것입니다. 이 방법은 Linux와 Windows 시스템 모두 쿡북에서 파일을 인스턴스의 지정된 위치로 복사합니다. 이 예제는 예제 3: 디렉터리 생성 단원의 레시피를 확장해 디렉터리 생성 후 데이터 파일을 /srv/www/shared에 추가합니다. 다음은 참조용 원래 레시피입니다.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
쿡북을 설정하려면
  1. opsworks_cookbooks 디렉터리 안에 createfile 하위 디렉터리를 만들고 그 디렉터리로 이동합니다.

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

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

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

설치할 파일에는 다음 JSON 데이터가 포함됩니다.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
데이터 파일을 설정하려면
  1. files 하위 디렉터리는 createfile에, default 하위 디렉터리는 files에 추가합니다. cookbook_file을 사용하여 설치한 모든 파일은 files의 하위 디렉터리에 있어야 하며, 예를 들어 이 예에서는 files/default입니다.

    참고

    시스템마다 다른 파일을 지정하려면 시스템의 이름을 딴 하위 폴더(예: files/ubuntu)에 각 시스템별 파일을 저장할 수 있습니다. cookbook_file 리소스는 해당하는 시스템별 파일이 있는 경우 복사하고 없는 경우 default 파일을 사용합니다. 자세한 정보는 cookbook_file 단원을 참조하세요.

  2. 이전 예제의 JSON을 사용하여 example_data.json 파일을 만들어 files/default에 추가합니다.

다음 레시피는 example_data.json을 지정된 위치로 복사합니다.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end

디렉터리 리소스가 /srv/www/shared를 생성한 후 cookbook_file 리소스가 example_data.json을 해당 디렉터리로 복사하고 파일의 사용자, 그룹, 모드도 설정합니다.

참고

cookbook_file 리소스는 create_if_missing이라는 새로운 작업을 도입합니다. create 작업도 사용할 수 있지만 이 작업은 기존 파일을 덮어씁니다. 아무것도 덮어쓰지 않으려면 아직 존재하지 않는 경우에 한해 create_if_missing을 설치하는 example_data.json을 사용하세요.

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

  2. 이전 레시피가 포함된 default.rb 파일을 만든 다음 이 파일을 recipes에 저장합니다.

  3. kitchen converge를 실행한 다음 인스턴스에 로그인하여 /srv/www/shared 디렉터리에 example_data.json이 포함되어 있는지 확인합니다.

템플릿에서 파일 생성

cookbook_file 리소스는 일부 목적에는 유용하지만 쿡북에 있는 파일이라면 무엇이든 설치합니다. template 리소스는 템플릿에서 동적으로 파일을 생성함으로써 Windows 또는 Linux 인스턴스에 파일을 설치하는 보다 유연한 방법을 제공합니다. 그러면 실행 시간에 파일의 콘텐츠의 세부 정보를 확인하고 필요에 따라 변경할 수 있습니다. 예를 들어 인스턴스를 시작할 때는 구성 파일이 특정 설정을 갖고 나중에 스택에 더 많은 인스턴스를 추가할 때 이 설정을 수정하기를 원할 수 있습니다.

이 예제는 createfile 리소스를 사용하여 약간 수정된 template 버전을 설치하도록 example_data.json 쿡북을 수정합니다.

설치된 파일은 다음과 같이 보입니다.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true, "a_string" : "some string", "platform" : "ubuntu" }

템플릿 리소스는 일반적으로 속성 파일과 함께 사용되므로 예제에서는 속성 파일을 사용하여 다음 값을 지정합니다.

default['createfile']['my_name'] = 'myname' default['createfile']['your_name'] = 'yourname' default['createfile']['install_file'] = true
쿡북을 설정하려면
  1. createfile 쿡북의 files 디렉터리와 포함된 내용을 모두 삭제합니다.

  2. attributes 하위 디렉터리를 createfile에 추가하고, default.rb 파일을 이전 속성 정의가 포함된 attributes에 추가합니다.

템플릿은 기본적으로 콘텐츠 일부가 자리 표시자에 의해 표시되는 최종 파일의 사본인 .erb 파일입니다. template 리소스는 파일을 생성할 때 템플릿의 콘텐츠를 지정된 파일에 복사하고 자리 표시자를 할당된 값으로 덮어씁니다. 다음은 example_data.json에 대한 템플릿입니다.

{ "my_name" : "<%= node['createfile']['my_name'] %>", "your_name" : "<%= node['createfile']['your_name'] %>", "a_number" : 42, "a_boolean" : <%= @a_boolean_var %>, "a_string" : "<%= @a_string_var %>", "platform" : "<%= node['platform'] %>" }

<%=...%> 값은 자리 표시자입니다.

  • <%=node[...]%>은 노드 속성 값을 나타냅니다.

    이 예제에서 "your_name" 값은 쿡북 속성 파일의 속성 값 중 하나를 나타내는 자리 표시자입니다.

  • <%=@...%>는 간략히 설명한 것처럼 템플릿 리소스에서 정의되는 변수의 값을 나타냅니다.

템플릿 파일을 생성하려면
  1. templates 하위 디렉터리는 createfile 쿡북에, default 하위 디렉터리는 templates에 추가합니다.

    참고

    templates 디렉터리는 files 디렉터리처럼 작동합니다. 시스템별 템플릿은 시스템 이름을 딴 하위 디렉터리(예: ubuntu)에 저장할 수 있습니다. template 리소스는 해당하는 시스템별 템플릿이 있는 경우 사용하고 없는 경우 default 템플릿을 사용합니다.

  2. example_data.json.erb라는 파일을 만들어 templates/default 디렉터리에 저장합니다. 템플릿 이름은 임의적이지만 일반적으로 파일 이름에 확장명을 포함해 .erb를 추가하여 템플릿 이름을 생성합니다.

다음 레시피는 template 리소스를 사용하여 /srv/www/shared/example_data.json을 생성합니다.

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']} end

template 리소스는 템플릿에서 example_data.json을 생성하여 /srv/www/shared에 설치합니다.

  • 템플릿 이름 /srv/www/shared/example_data.json은 설치된 파일의 경로와 이름을 지정합니다.

  • source 속성은 파일 생성에 사용되는 템플릿을 지정합니다.

  • mode 속성은 설치된 파일의 모드를 지정합니다.

  • 리소스는 a_boolean_vara_string_var라는 두 가지 변수를 정의합니다.

    리소스는 example_data.json을 생성할 때 템플릿의 변수 자리 표시자를 리소스의 해당 값으로 덮어씁니다.

  • only_if guard 속성은 ['createfile']['install_file']true로 설정되는 경우에만 파일을 생성하라고 리소스에 명령합니다.

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

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

  3. kitchen converge를 실행한 다음 인스턴스에 로그인하여 파일이 /srv/www/shared 디렉터리에 있고 올바른 콘텐츠를 포함하고 있는지 확인합니다.

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