ステップ 2.5: アプリケーションをデプロイする - AWS OpsWorks

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

ステップ 2.5: アプリケーションをデプロイする

重要

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

IIS のインストールにより、アプリケーションのコードと関連ファイルに使用される C:\inetpub\wwwroot ディレクトリが作成されます。次のステップとして、そのディレクトリにアプリケーションをインストールします。この例では、静的 HTML ホーム ページ default.htmlC:\inetpub\wwwroot にインストールします。一般的なアプローチを簡単に拡張して、ASP.NET アプリケーションなど、より複雑なシナリオを扱うことができます。

アプリケーションのファイルをクックブックに含めて、install.rb がそれらのファイルを C:\inetpub\wwwroot にコピーするようにすることができます。これを行う方法の例については、「例 6: ファイルの作成」を参照してください。ただし、このアプローチは柔軟性や効率性があまり高くないため、通常はクックブック開発をアプリケーション開発と分割することをお勧めします。

推奨される解決策は、リポジトリ (クックブックのリポジトリだけでなく、任意のリポジトリ) からアプリケーションのコードと関連ファイルを取得し、各 IIS サーバーインスタンスにインストールする個別のデプロイレシピを実装することです。このアプローチにより、アプリケーション開発からクックブック開発が分割されるため、アプリケーションを更新する必要があるときは、クックブックを更新しなくてもデプロイレシピだけを再度実行することができます。

このトピックでは、IIS Server に default.htm をデプロイするシンプルなデプロイレシピを実装する方法を説明します。この例は、より複雑なアプリケーションに簡単に拡張できます。

アプリケーションの作成とリポジトリへの保存

アプリケーションにはどのリポジトリでも使用できます。わかりやすいように、この例では default.htm をパブリック S3 バケットに保存します。

アプリケーションを作成するには
  1. ワークステーション上の適切な場所に、iis-application というディレクトリを作成します。

  2. iis-application に、次のコンテンツを含む default.htm ファイルを追加します。

    <!DOCTYPE html> <html> <head> <title>IIS Example</title> </head> <body> <h1>Hello World!</h1> </body> </html>
  3. S3 バケットを作成し、default.htmをバケットにアップロードして、後で使用できるよう URL を記録しておきます。わかりやすいよう、ファイルを公開します。

    注記

    これは、とてもシンプルなアプリケーションですが、基本的な原則を拡張して本稼働レベルのアプリケーションを扱うことができます。

    • 複数のファイルを含むより複雑なアプリケーションの場合、通常は iis-application の .zip アーカイブを作成し、S3 バケットにアップロードした方がシンプルです。

      アップロード後には .zip ファイルをダウンロードし、内容を適切なディレクトリに展開できます。複数のファイルをダウンロードしたり、ディレクトリ構造を作成したりする必要はありません。

    • 本稼働アプリケーションの場合、ファイルを秘密にすることができます。レシピがプライベート S3 バケットからファイルをダウンロードできるようにする方法の例は、「AWS OpsWorks スタックの Windows インスタンスでの SDK for Rubyの使用」を参照してください。

    • アプリケーションは、任意の適切なリポジトリに保存できます。

      通常は、リポジトリのパブリック API を使用してアプリケーションをダウンロードします。この例では、Amazon S3 API を使用します。たとえば、アプリケーションを GitHub に保存した場合、GitHub API を使用できます。

レシピの実装によるアプリケーションのデプロイ

以下のコンテンツを含む deploy.rb という名前のレシピを iis-cookbook recipes ディレクトリに追加します。

chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' #1 # Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt' Aws.use_bundled_cert! #2 query = Chef::Search::Query.new app = query.search(:aws_opsworks_app, "type:other").first s3region = app[0][:environment][:S3REGION] s3bucket = app[0][:environment][:BUCKET] s3filename = app[0][:environment][:FILENAME] #3 s3_client = Aws::S3::Client.new(region: s3region) s3_client.get_object(bucket: s3bucket, key: s3filename, response_target: 'C:\inetpub\wwwroot\default.htm') end action :run end

この例では [SDK for Ruby v2] を使用してファイルをダウンロードします。ただし、AWS OpsWorks スタックはこの SDK を Windows インスタンスにインストールしないため、レシピはそのタスクを処理する chef_gem リソースで始まります。

注記

chef_gem リソースは、gem を Chef の専用 Ruby バージョン (そのレシピが使用するバージョン) にインストールします。システム全体の Ruby バージョンに gem をインストールする場合、gem_package リソースを使用します。

レシピの大部分は ruby_block リソースで、SDK for Ruby を使用して default.htm をダウンロードする Ruby コードのブロックを実行します。ruby_block 内のコードは以下のセクションに分割できます。それぞれ、コード例の番号付きコメントに対応します。

1: 証明書バンドルの指定

Amazon S3 は SSL を使用するため、S3 バケットからオブジェクトをダウンロードするために適切な証明書が必要です。SDK for Ruby v2 には証明書バンドルは含まれていないため、証明書バンドルを指定し、その証明書バンドルを使用するように SDK for Ruby を設定する必要があります。AWS OpsWorksスタックは、証明書バンドルを直接インストールしませんが、証明書バンドル (curl-ca-bundle.crt) が含まれている Git はインストールします。便宜上、この例では Git の証明書バンドルを SSL に使用するように SDK for Ruby を設定します。独自のバンドルをインストールして、それに応じて SDK を設定することもできます。

2: リポジトリデータの取得

Amazon S3 からオブジェクトをダウンロードするには、AWS のリージョン、バケット名、キー名が必要です。後で説明するように、この例では、一連の環境変数をアプリと関連付けることでこの情報を提供します。アプリケーションをデプロイすると、AWS OpsWorks スタックによりインスタンスのノードオブジェクトに一連の属性が追加されます。これらの属性は本質的に、アプリケーションの設定 (環境変数など) を含むハッシュテーブルです。このアプリケーションのアプリケーション属性は、次のようになります (JSON 形式)。

{ "app_id": "8f71a9b5-de7f-451c-8505-3f35086e5bb3", "app_source": { "password": null, "revision": null, "ssh_key": null, "type": "other", "url": null, "user": null }, "attributes": { "auto_bundle_on_deploy": true, "aws_flow_ruby_settings": {}, "document_root": null, "rails_env": null }, "data_sources": [{"type": "None"}], "domains": ["iis_example_app"], "enable_ssl": false, "environment": { "S3REGION": "us-west-2", "BUCKET": "windows-example-app", "FILENAME": "default.htm" }, "name": "IIS-Example-App", "shortname": "iis_example_app", "ssl_configuration": { "certificate": null, "private_key": null, "chain": null }, "type": "other", "deploy": true }

アプリケーションの環境変数は、[:environment] 属性に保存されます。環境変数を取得するには、Chef 検索クエリを使用してアプリケーションのハッシュテーブルを取得します。このテーブルは、aws_opsworks_app ノード配下にあります。このアプリは、other タイプとして定義されるため、クエリはそのタイプのアプリケーションを検索します。レシピは、このインスタンスにはアプリケーションが 1 つしかないという事実を利用しているため、対象となるハッシュテーブルは app[0] だけです。便宜上の理由で、レシピはその後リージョン、バケット、ファイル名を変数に割り当てます。

Chef 検索の使用方法の詳細については、「Chef の検索での属性値の取得」を参照してください。

3: ファイルのダウンロード

レシピの 3 番目の部分では、S3 クライアントオブジェクトが作成され、その get_object メソッドを使用して default.htm がインスタンスの C:\inetpub\wwwroot ディレクトリにダウンロードされます。

注記

レシピは Ruby アプリケーションであるため、Ruby コードは必ずしも ruby_block に存在する必要はありません。ただし、レシピの本文のコードが最初に実行され、その後リソースが順番に実行されます。この例では、レシピ本文にダウンロードコードを配置しようとすると、chef_gem リソースによりまだ SDK for Ruby がインストールされていないため失敗します。chef_gem リソースが SDK for Ruby をインストールした後、そのリソースが実行される際に ruby_block リソース内のそのコードが実行されます。

インスタンスのクックブックの更新

AWS OpsWorks スタックにより、新しいインスタンスにカスタムクックブックが自動的にインストールされます。ただし、既存のインスタンスを使用しているため、クックブックを手動で更新する必要があります。

インスタンスのクックブックを更新するには
  1. iis-cookbook.zip アーカイブを作成し、S3 バケットにアップロードします。

    これにより既存のクックブックが上書きされますが、URL は変更されないため、スタック設定の更新は不要です。

  2. インスタンスがオンラインでない場合は再起動してください。

  3. インスタンスがオンラインになったら、ナビゲーションペインで [Stack] を選択し、[Run Command] を選択します。

  4. [Command] で、[Update Custom Cookbooks] を選択します。このコマンドを実行すると、更新されたクックブックがインスタンスにインストールされます。

  5. [Update Custom Cookbooks] を選択します。コマンドの実行完了までには数分かかることがあります。

カスタム IISレイヤーへのレシピの追加

install.rb と同様、デプロイを処理するには、deploy.rb を適切なライフサイクルイベントに割り当てることをお勧めします。通常は、Deploy イベントにデプロイレシピを割り当てます。それらは、まとめて Deploy レシピと呼ばれます。レシピを Deploy イベントに割り当ててもイベントはトリガーされません。代わりに、次のようになります。

  • 新しいインスタンスでは、Setup レシピが完了した後、AWS OpsWorks スタックにより Deploy レシピが自動的に実行されるため、新しいインスタンスが自動的に現在のアプリケーションバージョンになります。

  • オンラインインスタンスでは、デプロイコマンドを使用して新しいアプリケーションまたは更新されたアプリケーションを手動でインストールします。

    このコマンドはスタックのインスタンスで Deploy イベントをトリガーし、これによって Deploy レシピが実行されます。

レイヤーの Deploy イベントに deploy.rb を割り当てるには
  1. ナビゲーションペインで[レイヤー]を選択し、続いて[レイヤーのIISExample][レシピ]を選択します。

  2. [Custom Chef Recipes] で、[ iis-cookbook::deploy] を [デプロイ] レシピボックスに追加し、[+] を選択してレシピをレイヤーに追加します。

  3. [Save] を選択して新しい設定を保存します。カスタム Deploy レシピに iis-cookbook::deploy が含まれるようになります。

アプリケーションの追加

最後のタスクは、アプリケーションをスタックに追加し、AWS OpsWorks スタック環境にアプリケーションが表示されるようにするタスクです。アプリケーションには、アプリケーションの表示名などのメタデータと、リポジトリからアプリケーションをダウンロードするのに必要なデータが含まれます。

アプリケーションをスタックに追加するには
  1. ナビゲーションペインで [Apps] を選択し、[Add an app] を選択します。

  2. 以下の設定を使用してアプリケーションを設定します。

    • [Name] (名前) - I IIS-Example-App

    • [Repository Type] (リポジトリタイプ) - [Other] (その他)

    • [Environment Variables] (環境変数) 以下の3つの環境変数を追加します。

      • S3REGION - バケットのリージョン (この場合は us-west-1)。

      • BUCKET - バケット名 (windows-example-app など)。

      • FILENAME - ファイル名 (default.htm)。

  3. 残りの設定はデフォルト値をそのまま使い、[Add App] を選択してアプリケーションをスタックに追加します。

注記

この例では、ダウンロードデータを提供するために環境変数を使用します。代わりに、S3 アーカイブリポジトリタイプを使用してファイルの URL を指定することもできます。AWS OpsWorksスタックが、AWS 認証情報などのオプションデータとともに情報をアプリケーションの app_source 属性に追加します。デプロイしたレシピは、URL をアプリケーション属性から取得して解析し、リージョン、バケット名およびファイル名を抽出できなければなりません。

アプリケーションのデプロイとアプリケーションの実行

AWS OpsWorks スタックは、アプリケーションを自動的に新しいインスタンスにデプロイしますが、オンラインインスタンスにはデプロイしません。インスタンスは既に実行されているため、アプリケーションを手動でデプロイする必要があります。

アプリケーションをデプロイするには
  1. ナビゲーションペインで「アプリケーション」を選択し、続いてアプリの「アクション」列で「デプロイ」を選択します。

  2. [Command][Deploy] に設されていなければなりません。[Deploy App] (デプロイアプリケーション) ページの右下で [Deploy] (デプロイ) を選択します。コマンドの実行完了までには数分かかることがあります。

    デプロイメントが完了したら、[Apps] ページに戻ります。[Status] インジケータには緑で [successful] と表示され、アプリケーション名の横には、デプロイメントの正常終了を示す緑のチェックマークが表示されます。

注記

Windows アプリケーションは常に [Other] アプリケーションタイプのため、アプリケーションをデプロイすると次の処理が実行されます。

  • 前述のとおり、アプリケーションのデータが、スタック設定とデプロイ属性に追加されます。

  • カスタム Deploy レシピを実行する Deploy イベントがスタックのインスタンスでトリガーされます。

注記

失敗したデプロイまたはアプリケーションをトラブルシューティングする方法についての詳細は、レシピのデバッグ を参照してください。

アプリケーションがインストールされます。[Navigation] (ナビゲーション) ペインで [Instances] (インスタンス) を選択し、続いてインスタンスのパブリック IP アドレスを選択することで開くことができます。これにより、HTTP リクエストがインスタンスに送信され、ブラウザに次のように表示されます。