例 7: コマンドとスクリプトの実行 - AWS OpsWorks

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

例 7: コマンドとスクリプトの実行

重要

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

Chef リソースはインスタンスのさまざまタスクを処理できますが、シェルコマンドまたはスクリプトを使用した方がいい場合もあります。たとえば、特定のタスクを実行するスクリプトをすでに使用していて、新しいコードを実装するよりもそれを使い続ける方が簡単な場合もあります。このセクションでは、インスタンスでコマンドまたはスクリプトを実行する方法を説明します。

コマンドの実行

script リソースは、1 つ以上のコマンドを実行します。また、csh、bash、Perl、Python、Ruby のコマンドインタープリターがサポートされているため、適切なインタープリターがインストールされていれば、Linux または Windows のいずれかのシステムで使用できます。このトピックでは、Linux インスタンスで単純な Bash コマンドを実行する方法について説明します。Chef では、powershell_scriptbatch もサポートされており、Windows でのスクリプトの実行に使用できます。詳細については、「Windows PowerShell スクリプトの実行」を参照してください。

開始するには、以下の手順を実行します。
  1. opsworks_cookbooks ディレクトリ内に script という名前のディレクトリを作成し、そのディレクトリに移動します。

  2. script に、次のコンテンツを含む metadata.rb ファイルを追加します。

    name "script" version "0.1.0"
  3. 例 1: パッケージのインストール」の説明に従って Test Kitchen を初期化し設定して、platforms リストから CentOS を削除します。

  4. script 内に、recipesという名前のディレクトリを作成します。

script リソース自体を使用してコマンドを実行することもできますが、Chef はまた、インタープリタ名をつけた一連のリソースのコマンドインタープリタ固有バージョンをサポートします。以下のレシピは bash リソースを使用して、シンプルな 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 ガード属性はファイルがすでに存在する場合はリソースにアクションを取らないよう指示します。

レシピを実行するには
  1. 前述の例のコードを含む default.rb ファイルを作成し、recipes に保存します。

  2. kitchen converge を実行し、その後インスタンスにログインして /tmp にファイルがあることを確認します。

スクリプトの実行

script リソースは、特に 1 つか 2 つのコマンドのみを実行する必要がある場合に便利ですが、ファイルにスクリプトを保存してそのファイルを実行する方がいい場合も多くあります。execute リソースによって、スクリプトファイルなど指定した実行可能ファイルが Linux または Windows で実行されます。このトピックでは、前述の例から script クックブックを変更し、execute を使用して単純なシェルスクリプトを実行します。簡単に例をより複雑なスクリプトや別のタイプの実行ファイルに拡張できます。

スクリプトファイルを設定するには
  1. files サブディレクトリを script に、default サブディレクトリを files に追加します。

  2. 以下を含む 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) を指定します。

レシピを実行するには
  1. recipes/default.rb のコードを前述の例で置き換えます。

  2. kitchen converge を実行し、その後インスタンスにログインして、/tmp にスクリプトファイルが含まれており、モードが 0755 に設定されていて、かつ somefile があることを確認します。

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