翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 6: ファイルの作成
重要
- AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 にお問い合わせください。 AWS Support でのチーム AWS re:Post
ディレクトリを作成したら、多くの場合設定ファイルやデータファイルなどを配置する必要があります。このトピックでは、インスタンスにファイルをインストールする 2 とおりの方法を説明します。
クックブックからのファイルのインストール
インスタンスにファイルをインストールする最も簡単な方法は、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 を削除します。 -
createfile
にrecipes
サブディレクトリを追加します。
インストールするファイルには、次の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" }
通常、テンプレートリソースは属性ファイルとともに使用します。例では以下の値を定義するために 1 つ使用しています。
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" の値がクックブックの属性ファイルからの属性値の 1 つを表すプレースホルダーです。
-
<%=@...%>
はすでに説明したようにテンプレートリソースで定義されている変数の値を示します。
テンプレートファイルを作成するには
-
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
属性は、インストールされているファイルのモードを指定します。 -
リソースは、2 つの変数
a_boolean_var
とa_string_var
を定義します。リソースが
example_data.json
を作成する際、テンプレートのプレースホルダーをリソースの対応する値で上書きします。 -
only_if
ガード属性は['createfile']['install_file']
がtrue
に設定されている時のみファイルを作成するようにリソースに指示します。
レシピを実行するには
-
kitchen destroy
を実行して新しいインスタンスで開始できるようにします。 -
recipes/default.rb
のコードを前述の例で置き換えます。 -
kitchen converge
を実行し、その後インスタンスにログインしてファイルが/srv/www/shared
に存在し内容が正しいことを確認します。
完了したら、kitchen destroy
を実行してインスタンスをシャットダウンします。以下のセクションでは新しいクックブックを使用します。