翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 7: コマンドとスクリプトの実行
重要
- AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 にお問い合わせください。 AWS Support でのチーム AWS re:Post
Chef リソースはインスタンスのさまざまタスクを処理できますが、シェルコマンドまたはスクリプトを使用した方がいい場合もあります。たとえば、特定のタスクを実行するスクリプトをすでに使用していて、新しいコードを実装するよりもそれを使い続ける方が簡単な場合もあります。このセクションでは、インスタンスでコマンドまたはスクリプトを実行する方法を説明します。
コマンドの実行
script
開始するには、以下の手順を実行します。
-
opsworks_cookbooks
ディレクトリ内にscript
という名前のディレクトリを作成し、そのディレクトリに移動します。 -
script
に、次のコンテンツを含むmetadata.rb
ファイルを追加します。name "script" version "0.1.0"
-
「例 1: パッケージのインストール」の説明に従って Test Kitchen を初期化し設定して、
platforms
リストから CentOS を削除します。 -
script
内に、recipes
という名前のディレクトリを作成します。
script
リソース自体を使用してコマンドを実行することもできますが、Chef はまた、インタープリタ名をつけた一連のリソースのコマンドインタープリタ固有バージョンをサポートします。以下のレシピは bash
bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end
bash
リソースは以下のように設定されます。
-
デフォルトのアクション
run
を使用してcode
ブロックでコマンドを実行します。この例では 1 個のコマンド
touch somefile
がありますが、code
ブロックには複数のコマンドを含めることができます。 -
user
属性は、コマンドを実行するユーザーを指定します。 -
cwd
属性は、作業ディレクトリを指定します。この例では、
touch
は/tmp
ディレクトリにファイルを作成します。 -
not_if
ガード属性はファイルがすでに存在する場合はリソースにアクションを取らないよう指示します。
レシピを実行するには
-
前述の例のコードを含む
default.rb
ファイルを作成し、recipes
に保存します。 -
kitchen converge
を実行し、その後インスタンスにログインして/tmp
にファイルがあることを確認します。
スクリプトの実行
script
リソースは、特に 1 つか 2 つのコマンドのみを実行する必要がある場合に便利ですが、ファイルにスクリプトを保存してそのファイルを実行する方がいい場合も多くあります。execute
script
クックブックを変更し、execute
を使用して単純なシェルスクリプトを実行します。簡単に例をより複雑なスクリプトや別のタイプの実行ファイルに拡張できます。
スクリプトファイルを設定するには
-
files
サブディレクトリをscript
に、default
サブディレクトリをfiles
に追加します。 -
以下を含む
touchfile
という名前のファイルを作成し、そのファイルをfiles/default
へ追加します。この例では、一般的な Bash インタプリタラインが使用されています。必要に応じてシェル環境に対応するインタプリタを代入してください。#!/usr/bin/env bash touch somefile
スクリプトファイルには、任意の数のコマンドを含めることができます。わかりやすいように、このスクリプトの例には 1 つの
touch
コマンドのみを使用しています。
以下のレシピはスクリプトを実行します。
cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end
cookbook_file
リソースは /tmp
にスクリプトファイルをコピーし、ファイルを実行可能にするモードを設定します。execute
リソースはその後以下のようにファイルを実行します。
-
user
属性はコマンドのユーザーを指定します (この例ではroot
)。 -
cwd
属性は作業ディレクトリ (この例では/tmp
) を指定します。 -
command
属性は作業ディレクトリにある実行すべきスクリプト (この例ではtouchfile
) を指定します。
レシピを実行するには
-
recipes/default.rb
のコードを前述の例で置き換えます。 -
kitchen converge
を実行し、その後インスタンスにログインして、/tmp
にスクリプトファイルが含まれており、モードが 0755 に設定されていて、かつsomefile
があることを確認します。
完了したら、kitchen destroy
を実行してインスタンスをシャットダウンします。以下のセクションでは新しいクックブックを使用します。