翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 3: ディレクトリの作成
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、AWS re:Post
インスタンスにパッケージをインストールするとき、多くの場合は設定ファイルを作成して適切なディレクトリに配置する必要があります。しかし、ディレクトリがまだない場合があります。また、データやログファイル用のディレクトリを作成する必要がある場合もあります。例えば、ほとんどの例で使用する Ubuntu システムを最初に起動しますが、/srv ディレクトリにはサブディレクトリがありません。アプリケーションサーバーをインストールする際に、/srv/www/ ディレクトリや場合によってはデータファイルやログなどのためにサブディレクトリが必要になるかもしれません。以下のレシピはインスタンスで /srv/www/ を作成します。
directory "/srv/www/" do mode 0755 owner 'root' group 'root' action :create end
directory resourcepath 属性のデフォルト値であるため、例では /srv/www/ を作成し、mode、owner、および group プロパティを指定します。
レシピを実行するには
-
opsworks_cookbooks内にcreatedirという名前のディレクトリを作成し、そのディレクトリに移動します。 -
「例 1: パッケージのインストール」の説明に従って Test Kitchen を初期化、設定し、
recipes内にcreatedirディレクトリを追加します。 -
レシピコードの
default.rbファイルをクックブックのrecipesサブディレクトリに追加します。 -
kitchen convergeを実行してレシピを実行します。 -
kitchen loginを実行して/srvに移動し、wwwサブディレクトリがあることを確認します。 -
exitを実行して、インスタンスを実行したままワークステーションに戻ります。
注記
インスタンスのホームディレクトリに関連するディレクトリを作成するには、ホームディレクトリを示すために #{ENV['HOME']} を使用します。たとえば、以下は ~/shared ディレクトリを作成します。
directory "#{ENV['HOME']}/shared" do ... end
/srv/www/shared のようにさらに多層のディレクトリを作成したい時があるかもしれません。前述のレシピを以下のように変更できます。
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' action :create end
レシピを実行するには
-
default.rbのコードを前述のレシピで置き換えます。 -
kitchen convergeディレクトリからcreatedirを実行します。 -
ディレクトリが実際に作成されたことを確認するには、
kitchen loginを実行して/srv/wwwに移動し、そこにsharedサブディレクトリが含まれていることを確認します。 -
kitchen destroyを実行してインスタンスをシャットダウンします。
kitchen converge コマンドがはるかに高速に実行されたことがわかります。これはインスタンスがすでに実行中であり、インスタンスの起動や Chef のインストールなどが必要ないためです。Test Kitchen は更新されたクックブックをインスタンスにコピーし、Chef の実行を開始するだけでいいのです。
ここで再び kitchen converge を実行して、新しいインスタンスでレシピを実行します。以下のような結果になるはずです。
Chef Client failed. 0 resources updated in 1.908125788 seconds [2014-06-20T20:54:26+00:00] ERROR: directory[/srv/www/shared] (createdir::default line 1) had an error: Chef::Exceptions::EnclosingDirectoryDoesNotExist: Parent directory /srv/www does not exist, cannot create /srv/www/shared [2014-06-20T20:54:26+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) >>>>>> Converge failed on instance <default-ubuntu-1204>. >>>>>> Please see .kitchen/logs/default-ubuntu-1204.log for more details >>>>>> ------Exception------- >>>>>> Class: Kitchen::ActionFailed >>>>>> Message: SSH exited (1) for command: [sudo -E chef-solo --config /tmp/kitchen/solo.rb --json-attributes /tmp/kitchen/dna.json --log_level info] >>>>>> ----------------------
何が起きたのか。問題は、デフォルトでは directory リソースは一度に 1 個のディレクトリしか作成できないことです。ディレクトリのチェーンは作成できません。前のレシピがうまくいった理由は、インスタンスで最初に実行したレシピですでに /srv/www が作成されていたため、/srv/www/shared の作成ではサブディレクトリが 1 個つだけ作成されためです。
注記
kitchen converge を実行する場合は、レシピを実行するインスタンスが新規なのか既存のものなのかを確認してください。結果が異なる場合があります。
サブディレクトリのチェーンを作成するには、recursive 属性を directory に追加して、それを true に設定します。以下のレシピは、新しいインスタンスに /srv/www/shared を直接作成します。
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end