例 6: ファイルの作成 - AWS OpsWorks

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

例 6: ファイルの作成

重要

AWS OpsWorks Stacks は新規顧客を受け付けなくなりました。既存のお客様は、2024 年 5 月 26 日までは、通常どおり OpsWorks コンソール、API、CLI、および CloudFormation リソースを使用できます。その時点で廃止されます。この移行に備えて、できるだけ早くスタックを AWS Systems Manager に移行することをおすすめします。詳細については、「AWS OpsWorks Stacks サポート終了に関する FAQ」および「AWS Systems Manager アプリケーションマネージャへの AWS OpsWorks Stacks アプリケーションの移行」を参照してください。

ディレクトリを作成したら、多くの場合設定ファイルやデータファイルなどを配置する必要があります。このトピックでは、インスタンスにファイルをインストールする 2 とおりの方法を説明します。

クックブックからのファイルのインストール

インスタンスにファイルをインストールする最も簡単な方法は、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. createfilerecipes サブディレクトリを追加します。

インストールするファイルには以下の 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/sharedexample_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" }

通常、テンプレートリソースは属性ファイルとともに使用します。例では以下の値を定義するために 1 つ使用しています。

default['createfile']['my_name'] = 'myname' default['createfile']['your_name'] = 'yourname' default['createfile']['install_file'] = true
クックブックをセットアップするには
  1. createfile クックブックの files ディレクトリおよびそのコンテンツを削除します。

  2. attributescreatefile サブディレクトリを追加し、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 つを表すプレースホルダーです。

  • <%=@...%> はすでに説明したようにテンプレートリソースで定義されている変数の値を示します。

テンプレートファイルを作成するには
  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 属性は、インストールされているファイルのモードを指定します。

  • リソースは、2 つの変数 a_boolean_vara_string_var を定義します。

    リソースが example_data.json を作成する際、テンプレートのプレースホルダーをリソースの対応する値で上書きします。

  • only_if ガード属性は ['createfile']['install_file']true に設定されている時のみファイルを作成するようにリソースに指示します。

レシピを実行するには
  1. kitchen destroy を実行して新しいインスタンスで開始できるようにします。

  2. recipes/default.rb のコードを前述の例で置き換えます。

  3. kitchen converge を実行し、その後インスタンスにログインしてファイルが /srv/www/shared に存在し内容が正しいことを確認します。

完了したら、kitchen destroy を実行してインスタンスをシャットダウンします。以下のセクションでは新しいクックブックを使用します。