

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

# ステップ 15: クックブックを更新して条件付きロジックを使用する
<a name="gettingstarted-cookbooks-conditional-logic"></a>

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

ここで、*条件付きロジック*を使用するレシピを追加してクックブックを作成します。これは、特定の条件が満たされた場合のみコードを実行する手法です。詳細については、「[if Statements](https://docs.chef.io/dsl_recipe.html#if-statements)」および「[case Statements](https://docs.chef.io/dsl_recipe.html#case-statements)」を参照してください。

このレシピでは、データバッグのコンテンツに基づいて 2 つの処理を実行します。インスタンスが実行されているオペレーティングシステムを識別するメッセージをログに表示し、オペレーティングシステムが Linux である場合のみ、特定の Linux ディストリビューションに対して適切なパッケージマネージャーを使用してパッケージをインストールします。このパッケージは tree という名前であり、ディレクトリリストを視覚化するためのシンプルなアプリケーションです。

**インスタンスのクックブックを更新し、新しいレシピを実行するには**

1. ローカルワークステーションの `opsworks_cookbook_demo directory` にある `recipes` サブディレクトリで、以下のコードを含む `conditional_logic.rb` という名前のファイルを作成します。

   ```
   instance = search("aws_opsworks_instance").first
   os = instance["os"]
   
   if os == "Red Hat Enterprise Linux 7"
     Chef::Log.info("********** Operating system is Red Hat Enterprise Linux. **********")
   elsif os == "Ubuntu 14.04 LTS" || os == "Ubuntu 16.04 LTS" || os == "Ubuntu 18.04 LTS"
     Chef::Log.info("********** Operating system is Ubuntu. **********") 
   elsif os == "Microsoft Windows Server 2012 R2 Base"
     Chef::Log.info("********** Operating system is Windows. **********")
   elsif os == "Amazon Linux 2015.03" || os == "Amazon Linux 2015.09" || os == "Amazon Linux 2016.03" || os == "Amazon Linux 2016.09" || os == "Amazon Linux 2017.03" || os == "Amazon Linux 2017.09" || os == "Amazon Linux 2018.03" || os == "Amazon Linux 2"
     Chef::Log.info("********** Operating system is Amazon Linux. **********")
   elsif os == "CentOS Linux 7"
     Chef::Log.info("********** Operating system is CentOS 7. **********")
   else
     Chef::Log.info("********** Cannot determine operating system. **********")
   end
   
   case os
   when "Ubuntu 14.04 LTS", "Ubuntu 16.04 LTS", "Ubuntu 18.04 LTS"
     apt_package "Install a package with apt-get" do
       package_name "tree"
     end
   when "Amazon Linux 2015.03", "Amazon Linux 2015.09", "Amazon Linux 2016.03", "Amazon Linux 2016.09", "Amazon Linux 2017.03", "Amazon Linux 2017.09", "Amazon Linux 2018.03", "Amazon Linux 2", "Red Hat Enterprise Linux 7", "CentOS Linux 7"
     yum_package "Install a package with yum" do
       package_name "tree"
     end
   else
     Chef::Log.info("********** Cannot determine operating system type, or operating system is not Linux. Package not installed. **********")
   end
   ```

1. ターミナルまたはコマンドプロンプトで、**tar** コマンドを使用して `opsworks_cookbook_demo.tar.gz` というファイルの新しいバージョンを作成します。これには、`opsworks_cookbook_demo` ディレクトリとその更新されたコンテンツが含まれます。

1. 更新済みの `opsworks_cookbook_demo.tar.gz` ファイルを S3 バケットにアップロードします。

1. 「[ステップ 5: インスタンスのクックブックを更新し、レシピを実行する](gettingstarted-cookbooks-copy-cookbook.md)」の手順に従って、インスタンスのクックブックを更新し、レシピを実行します。「レシピを実行するには」の手順の [**Recipes to execute**] に、「**opsworks\$1cookbook\$1demo::conditional\$1logic**」と入力します。

**レシピをテストするには**

1. 前の手順の [**Running command execute\$1recipes**] ページを表示した状態で、[**cookbooks-demo1**]、[**Log**] の [**show**] を選択します。[**execute\$1recipes**] ログページが表示されます。

1. ログを下へスクロールして、次のようなエントリを見つけます。

   ```
   [2015-11-16T19:59:05+00:00] INFO: ********** Operating system is Amazon Linux. **********
   ```

   インスタンスのオペレーティングシステムは Amazon Linux 2016.09 であるため、(レシピのコードの 5 つの可能なエントリのうち)先行するエントリのみがログに表示されます。

1. オペレーティングシステムが Linux の場合、レシピは tree パッケージをインストールします。ディレクトリのコンテンツを視覚的に表示するには、希望するディレクトリまたはそのディレクトリのパス (`tree /var/chef/runs` など) からコマンドプロンプトで「**tree**」と入力します。

[次のステップ](gettingstarted-cookbooks-community-cookbooks.md)では、クックブックを更新して、Chef コミュニティで提供される外部クックブックの機能を使用します。