翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 3: ディレクトリの作成
重要
AWS OpsWorks Stacks は新規顧客を受け付けなくなりました。既存のお客様は、2024 年 5 月 26 日までは、通常どおり OpsWorks コンソール、API、CLI、および CloudFormation リソースを使用できます。その時点で廃止されます。この移行に備えて、できるだけ早くスタックを AWS Systems Manager に移行することをおすすめします。詳細については、「AWS OpsWorks Stacks サポート終了に関する FAQ」および「AWS Systems Manager アプリケーションマネージャへの AWS OpsWorks Stacks アプリケーションの移行」を参照してください。
インスタンスにパッケージをインストールするとき、多くの場合は設定ファイルを作成して適切なディレクトリに配置する必要があります。しかし、ディレクトリがまだない場合があります。また、データやログファイル用のディレクトリを作成する必要がある場合もあります。例えば、ほとんどの例で使用する 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