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