기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
예제 6: 파일 생성
중요
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에 대해 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 AWS re:Post
디렉터리를 생성한 후 구성 파일, 데이터 파일 등으로 디렉터리를 채워야 하는 경우가 많습니다. 이 주제에서는 인스턴스에 파일을 설치하는 두 가지 방법을 살펴봅니다.
쿡북에서 파일 설치
인스턴스에 파일을 설치하는 가장 간단한 방법은 cookbook_file/srv/www/shared에 추가합니다. 다음은 참조용 원래 레시피입니다.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
쿡북을 설정하려면
-
opsworks_cookbooks디렉터리 안에createfile하위 디렉터리를 만들고 그 디렉터리로 이동합니다. -
createfile에 다음 콘텐츠가 포함된metadata.rb파일을 추가합니다.name "createfile" version "0.1.0" -
예제 1: 패키지 설치 단원에서 설명하는 대로 Test Kitchen을 초기화 및 구성하고
platforms목록에서 CentOS를 제거합니다. -
recipes하위 디렉터리를createfile에 추가합니다.
설치할 파일에는 다음 JSON 데이터가 포함됩니다.
{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
데이터 파일을 설정하려면
-
files하위 디렉터리는createfile에,default하위 디렉터리는files에 추가합니다.cookbook_file을 사용하여 설치한 모든 파일은files의 하위 디렉터리에 있어야 하며, 예를 들어 이 예에서는files/default입니다.참고
시스템마다 다른 파일을 지정하려면 시스템의 이름을 딴 하위 폴더(예:
files/ubuntu)에 각 시스템별 파일을 저장할 수 있습니다.cookbook_file리소스는 해당하는 시스템별 파일이 있는 경우 복사하고 없는 경우default파일을 사용합니다. 자세한 정보는 cookbook_file단원을 참조하세요. -
이전 예제의 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을 사용하세요.
레시피를 실행하려면
-
kitchen destroy를 실행하여 깨끗한 인스턴스로 시작합니다. -
이전 레시피가 포함된
default.rb파일을 만든 다음 이 파일을recipes에 저장합니다. -
kitchen converge를 실행한 다음 인스턴스에 로그인하여/srv/www/shared디렉터리에example_data.json이 포함되어 있는지 확인합니다.
템플릿에서 파일 생성
cookbook_file 리소스는 일부 목적에는 유용하지만 쿡북에 있는 파일이라면 무엇이든 설치합니다. template
이 예제는 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
쿡북을 설정하려면
-
createfile쿡북의files디렉터리와 포함된 내용을 모두 삭제합니다. -
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" 값은 쿡북 속성 파일의 속성 값 중 하나를 나타내는 자리 표시자입니다.
-
<%=@...%>는 간략히 설명한 것처럼 템플릿 리소스에서 정의되는 변수의 값을 나타냅니다.
템플릿 파일을 생성하려면
-
templates하위 디렉터리는createfile쿡북에,default하위 디렉터리는templates에 추가합니다.참고
templates디렉터리는files디렉터리처럼 작동합니다. 시스템별 템플릿은 시스템 이름을 딴 하위 디렉터리(예:ubuntu)에 저장할 수 있습니다.template리소스는 해당하는 시스템별 템플릿이 있는 경우 사용하고 없는 경우default템플릿을 사용합니다. -
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_var와a_string_var라는 두 가지 변수를 정의합니다.리소스는
example_data.json을 생성할 때 템플릿의 변수 자리 표시자를 리소스의 해당 값으로 덮어씁니다. -
only_ifguard 속성은['createfile']['install_file']이true로 설정되는 경우에만 파일을 생성하라고 리소스에 명령합니다.
레시피를 실행하려면
-
kitchen destroy를 실행하여 깨끗한 인스턴스로 시작합니다. -
recipes/default.rb의 코드를 이전 예제로 바꿉니다. -
kitchen converge를 실행한 다음 인스턴스에 로그인하여 파일이/srv/www/shared디렉터리에 있고 올바른 콘텐츠를 포함하고 있는지 확인합니다.
다 마치면 kitchen destroy를 실행해 인스턴스를 종료하세요. 다음 섹션에서는 새 쿡북을 사용합니다.