ステップ 15: クックブックを更新して条件付きロジックを使用する - AWS OpsWorks

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

ステップ 15: クックブックを更新して条件付きロジックを使用する

重要

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

ここで、条件付きロジックを使用するレシピを追加してクックブックを作成します。これは、特定の条件が満たされた場合のみコードを実行する手法です。詳細については、「if Statements」および「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
  2. ターミナルまたはコマンドプロンプトで、tar コマンドを使用して opsworks_cookbook_demo.tar.gz というファイルの新しいバージョンを作成します。これには、opsworks_cookbook_demo ディレクトリとその更新されたコンテンツが含まれます。

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

  4. ステップ 5: インスタンスのクックブックを更新し、レシピを実行する」の手順に従って、インスタンスのクックブックを更新し、レシピを実行します。「レシピを実行するには」の手順の [Recipes to execute] に、「opsworks_cookbook_demo::conditional_logic」と入力します。

レシピをテストするには
  1. 前の手順の [Running command execute_recipes] ページを表示した状態で、[cookbooks-demo1]、[Log] の [show] を選択します。[execute_recipes] ログページが表示されます。

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

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

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

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

次のステップでは、クックブックを更新して、Chef コミュニティで提供される外部クックブックの機能を使用します。