

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

# Linux スタックでの検索の使用
<a name="cookbooks-101-opsworks-opsworks-stack-config-search-linux"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

この例は、1 つの PHP アプリケーションサーバーが属する Linux スタックに基づいています。Chef の検索を使用してサーバーのパブリック IP アドレスを取得し、アドレスを `/tmp` ディレクトリのファイルに保存します。基本的には「[属性値の直接取得](cookbooks-101-opsworks-opsworks-stack-config-node.md)」と同じ情報をノードオブジェクトから取得しますが、コードは大幅に簡素になり、スタック設定およびデプロイ属性の構造の詳細に依存しません。

以下に、この例のスタックを作成する方法を簡単に示します。詳細については、「[新しいスタックを作成する](workingstacks-creating.md)」を参照してください。

**注記**  
 OpsWorks スタックインスタンスでカスタムレシピを実行したことがない場合は、まずこの[Linux インスタンスでのレシピの実行](cookbooks-101-opsworks-opsworks-instance.md)例を実行する必要があります。

**Stack を作成する**

1. [OpsWorks スタックコンソール](https://console.aws.amazon.com/opsworks/)を開いて [**Add Stack**] をクリックします。

1. 次の設定を指定し、その他の設定はデフォルト値を受け入れて、[**Add Stack**] をクリックします。
   + **Name** (名前) – SearchJSON
   + **Default SSH key** (デフォルト SSH キー) - Amazon EC2 キーペア

   Amazon EC2 キーペアの作成が必要な場合は、[「Amazon EC2 Key Pairs」](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)(Amazon EC2 キーペア) を参照してください。キーペアがインスタンスと同じ AWS リージョンに属している必要があることに注意してください。この例では、米国西部 (オレゴン) リージョンを使用します。

1. **[Add a layer]** (レイヤーの追加) をクリックし、デフォルト設定でスタックに [[add a PHP App Server layer]](workinglayers-custom.md) (PHP アプリケーションサーバーレイヤー) を追加します。

1. デフォルト設定でレイヤーに [24/7 インスタンスを追加](workinginstances-add.md)し、[起動](workinginstances-starting.md)します。

**クックブックをセットアップするには**

1. `opsworks_cookbooks` 内に `searchjson` という名前のディレクトリを作成し、そこに移動します。

1. 以下の内容で `metadata.rb` ファイルを作成し、`opstest` に保存します。

   ```
   name "searchjson"
   version "0.1.0"
   ```

1. `recipes` 内に `searchjson` ディレクトリを作成します。

1. 次のレシピで `default.rb` ファイルを作成し、`recipes` ディレクトリに保存します。

   ```
   phpserver = search(:node, "layers:php-app").first
   Chef::Log.info("**********The public IP address is: '#{phpserver[:ip]}'**********")
   
   file "/tmp/ip_addresses" do
     content "#{phpserver[:ip]}"
     mode 0644
     action :create
   end
   ```

   Linux スタックの場合、`node` 検索インデックスがサポートされています。レシピによって、このインデックスが使用されて、`php-app` レイヤーのインスタンスのリストが取得されます。レイヤーのインスタンスは 1 つのみであることがわかっているため、レシピによって最初のインスタンスが `phpserver` に渡されます。レイヤーに複数のインスタンスがある場合は、それらのインスタンスのリストを取得して、必要な情報を得ることができます。リストの各オブジェクトは、インスタンスの属性のセットが保存されているハッシュテーブルです。`ip` 属性をインスタンスのパブリック IP アドレスに設定しているため、以降のレシピコードではそのアドレスを `phpserver[:ip]` として参照できます。

   Chef ログへのメッセージの追加後、レシピによって [https://docs.chef.io/chef/resources.html#file](https://docs.chef.io/chef/resources.html#file) リソースが使用されて、`ip_addresses` という名前のファイルが作成されます。`content` 属性は `phpserver[:ip]` の文字列表現で設定します。Chef によって `ip_addresses` が作成されるとき、その文字列がファイルに追加されます。

1. `opsworks_cookbooks` の `.zip` アーカイブを作成して [[アーカイブを Amazon S3 バケットにアップロードし](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html)、[アーカイブを公開](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)して、アーカイブの URL を記録しておきます。クックブックリポジトリの詳細については、「[クックブックリポジトリ](workingcookbook-installingcustom-repo.md)」を参照してください。

   Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、[「S3 バケットを空にする方法」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)または[「S3 バケットを削除する方法」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)を参照してください。

これで、クックブックをインストールし、レシピを実行できるようになりました。

**レシピを実行するには**

1. [カスタムクックブックを有効にするようにスタックを編集](workingcookbook-installingcustom-enable.md)し、以下の設定を指定します。
   + **Repository type** (リポジトリタイプ) – **Http Archive** (Http アーカイブ)
   + **Repository URL** (リポジトリの URL) - 前の手順で記録したクックブックアーカイブ URL

   その他の設定にはデフォルト値を使用し、[**Save**] をクリックしてスタック設定を更新します。

1. カスタムレイヤー設定を編集し、レイヤーのセットアップイベントに を[割り当て`searchjson::default`](workingcookbook-assigningcustom.md)ます。 OpsWorks スタックは、インスタンスの起動後、またはセットアップイベントを明示的にトリガーした場合にレシピを実行します。

1. [[Update Custom Cookbooks] スタックコマンドを実行](workingstacks-commands.md)します。スタックのインスタンスにあるカスタムクックブックリポジトリの最新バージョンがインストールされます。以前のバージョンのリポジトリがある場合は、このコマンドによって上書きされます。

1. **Setup** スタックコマンドを実行してレシピを実行します。このコマンドによってインスタンスの Setup イベントがトリガーされ、`searchjson::default` が実行されます。[**Running command setup page**] を開いたままにしておきます。

レシピが正常に実行された後で、それを検証できます。

**searchjson を検証するには**

1. 最初のステップは、最新の Setup イベントの [Chef ログ](troubleshoot-debug-log.md)を調べることです。**[Running command setup page]** (コマンドセットアップを実行ページ) で、php-app1 インスタンスの **[Log]** (ログ) 列の **[show]** (表示) をクリックすると、ログが表示されます。下にスクロールすると、中央近くに次のようなログメッセージが表示されます。

   ```
   ...
   [2014-09-05T17:08:41+00:00] WARN: Previous bash[logdir_existence_and_restart_apache2]: ...
   [2014-09-05T17:08:41+00:00] WARN: Current  bash[logdir_existence_and_restart_apache2]: ...
   [2014-09-05T17:08:41+00:00] INFO: **********The public IP address is: '192.0.2.0'**********
   [2014-09-05T17:08:41+00:00] INFO: Processing directory[/etc/sysctl.d] action create (opsworks_initial_setup::sysctl line 1)
   ...
   ```

1. [SSH を使用してインスタンスにログインし](workinginstances-ssh.md)、`/tmp` の内容を一覧表示します。この一覧には、IP アドレスが含まれている `ip_addresses` という名前のファイルがあるはずです。