翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 6: ファイルの作成
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、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 を実行してインスタンスをシャットダウンします。以下のセクションでは新しいクックブックを使用します。