翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ステップ 2.5: アプリケーションをデプロイする
重要
- AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 にお問い合わせください。 AWS サポート でのチーム AWS re:Post
IIS インストールにより、アプリケーションのコードと関連ファイルのC:\inetpub\wwwroot
ディレクトリが作成されます。次のステップとして、そのディレクトリにアプリケーションをインストールします。この例では、静的HTMLホームページ を default.html
にインストールしますC:\inetpub\wwwroot
。一般的なアプローチを簡単に拡張して、 アプリケーションなど、より複雑なシナリオに対応できますASP。NET
アプリケーションのファイルをクックブックに含めて、install.rb
がそれらのファイルを C:\inetpub\wwwroot
にコピーするようにすることができます。これを行う方法の例については、「例 6: ファイルの作成」を参照してください。ただし、このアプローチは柔軟性や効率性があまり高くないため、通常はクックブック開発をアプリケーション開発と分割することをお勧めします。
推奨される解決策は、クックブックリポジトリだけでなく、任意のリポジトリであるリポジトリからアプリケーションのコードと関連ファイルを取得し、各IISサーバーインスタンスにインストールする個別のデプロイレシピを実装することです。このアプローチにより、アプリケーション開発からクックブック開発が分割されるため、アプリケーションを更新する必要があるときは、クックブックを更新しなくてもデプロイレシピだけを再度実行することができます。
このトピックでは、default.htm
IISサーバーにデプロイするシンプルなデプロイレシピを実装する方法を示します。この例は、より複雑なアプリケーションに簡単に拡張できます。
トピック
アプリケーションの作成とリポジトリへの保存
アプリケーションにはどのリポジトリでも使用できます。わかりやすいように、この例では default.htm
をパブリック S3 バケットに保存します。
アプリケーションを作成するには
-
ワークステーション上の適切な場所に、
iis-application
というディレクトリを作成します。 -
iis-application
に、次のコンテンツを含むdefault.htm
ファイルを追加します。<!DOCTYPE html> <html> <head> <title>IIS Example</title> </head> <body> <h1>Hello World!</h1> </body> </html>
-
S3 バケット を作成し、バケット
default.htm
にアップロードして、URL後で使用するために を記録します。わかりやすいよう、ファイルを公開します。注記
これは、とてもシンプルなアプリケーションですが、基本的な原則を拡張して本稼働レベルのアプリケーションを扱うことができます。
-
複数のファイルを含むより複雑なアプリケーションの場合、通常は
iis-application
の .zip アーカイブを作成し、S3 バケットにアップロードした方がシンプルです。アップロード後には .zip ファイルをダウンロードし、内容を適切なディレクトリに展開できます。複数のファイルをダウンロードしたり、ディレクトリ構造を作成したりする必要はありません。
-
本稼働アプリケーションの場合、ファイルを秘密にすることができます。レシピがプライベート S3 バケットからファイルをダウンロードできるようにする方法の例は、「スタックの Windows インスタンスでの Ruby AWS OpsWorks SDK用 の使用」を参照してください。
-
アプリケーションは、任意の適切なリポジトリに保存できます。
通常、リポジトリのパブリック を使用してアプリケーションをダウンロードします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
この例では、SDKRuby v2 の を使用して ファイルをダウンロードします。ただし、 AWS OpsWorks スタックはこれを Windows インスタンスSDKにインストールしないため、レシピはそのタスクを処理する chef_gem
注記
chef_gem
リソースは、gem を Chef の専用 Ruby バージョン (そのレシピが使用するバージョン) にインストールします。システム全体の Ruby バージョンに gem をインストールする場合、gem_package
recipe の大部分はruby_block
default.htm
。ruby_block
内のコードは以下のセクションに分割できます。それぞれ、コード例の番号付きコメントに対応します。
- 1: 証明書バンドルの指定
-
Amazon S3 は を使用するためSSL、S3 バケットからオブジェクトをダウンロードするには適切な証明書が必要です。SDK for Ruby v2 には証明書バンドルが含まれていないため、証明書バンドルを指定し、Ruby SDKが証明書バンドルを使用するには を設定する必要があります。 AWS OpsWorks スタックは、証明書バンドルを直接インストールしませんが、証明書バンドル (
curl-ca-bundle.crt
) が含まれている Git はインストールします。便宜上、この例では、 SDKの Git 証明書バンドルを使用するように Ruby の を設定しますSSL。独自のバンドルをインストールし、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
リソースが Ruby SDK用の をまだインストールしていないため失敗します。ruby_block
リソース内のコードは、リソースが Ruby SDKの をインストールした後、chef_gem
リソースの実行時に実行されます。
インスタンスのクックブックの更新
AWS OpsWorks スタックは、新しいインスタンスにカスタムクックブックを自動的にインストールします。ただし、既存のインスタンスを使用しているため、クックブックを手動で更新する必要があります。
インスタンスのクックブックを更新するには
-
iis-cookbook
の.zip
アーカイブを作成し、S3 バケットにアップロードします。これにより既存のクックブックが上書きされますが、 は同じURLままになるため、スタック設定を更新する必要はありません。
-
インスタンスがオンラインでない場合は再起動してください。
-
インスタンスがオンラインになったら、ナビゲーションペインで [Stack] を選択し、[Run Command] を選択します。
-
[Command] で、[Update Custom Cookbooks] を選択します。このコマンドを実行すると、更新されたクックブックがインスタンスにインストールされます。
-
[Update Custom Cookbooks] を選択します。コマンドの実行完了までには数分かかることがあります。
レシピをカスタムIISレイヤーに追加する
install.rb
と同様、デプロイを処理するには、deploy.rb
を適切なライフサイクルイベントに割り当てることをお勧めします。通常は、Deploy イベントにデプロイレシピを割り当てます。それらは、まとめて Deploy レシピと呼ばれます。レシピを Deploy イベントに割り当ててもイベントはトリガーされません。代わりに、次のようになります。
-
新しいインスタンスの場合、 AWS OpsWorks スタックは Setup レシピの完了後、Deploy レシピを自動的に実行するため、新しいインスタンスは自動的に現在のアプリケーションバージョンになります。
-
オンラインインスタンスでは、デプロイコマンドを使用して新しいアプリケーションまたは更新されたアプリケーションを手動でインストールします。
このコマンドはスタックのインスタンスで Deploy イベントをトリガーし、これによって Deploy レシピが実行されます。
レイヤーの Deploy イベントに deploy.rb を割り当てるには
-
ナビゲーションペインで「レイヤー」を選択し、「レイヤーIISExample」の下にある「レシピ」を選択します。
-
[Custom Chef Recipes] で、[
iis-cookbook::deploy
] を [デプロイ] レシピボックスに追加し、[+] を選択してレシピをレイヤーに追加します。 -
[Save] を選択して新しい設定を保存します。カスタム Deploy レシピに
iis-cookbook::deploy
が含まれるようになります。
アプリケーションの追加
最後のタスクは、スタックにアプリケーションを追加して、 内のアプリケーションを表すことです。 AWS OpsWorks スタック環境。アプリケーションには、アプリケーションの表示名などのメタデータと、リポジトリからアプリケーションをダウンロードするのに必要なデータが含まれます。
アプリケーションをスタックに追加するには
-
ナビゲーションペインで [Apps] を選択し、[Add an app] を選択します。
-
以下の設定を使用してアプリケーションを設定します。
-
[Name] (名前) - I
IIS-Example-App
-
[Repository Type] (リポジトリタイプ) - [Other] (その他)
-
[Environment Variables] (環境変数) 以下の3つの環境変数を追加します。
-
S3REGION
- バケットのリージョン (この場合はus-west-1
)。 -
BUCKET
- バケット名 (windows-example-app
など)。 -
FILENAME
- ファイル名 (default.htm
)。
-
-
-
残りの設定はデフォルト値をそのまま使い、[Add App] を選択してアプリケーションをスタックに追加します。
注記
この例では、ダウンロードデータを提供するために環境変数を使用します。別の方法は、S3 Archive リポジトリタイプを使用し、ファイルの を提供することですURL。 AWS OpsWorks スタックは、AWS認証情報などのオプションデータとともに情報をアプリケーションの app_source
属性に追加します。デプロイレシピは、アプリケーション属性URLから を取得し、それを解析してリージョン、バケット名、ファイル名を抽出する必要があります。
アプリケーションのデプロイとアプリケーションの実行
AWS OpsWorks スタックは、アプリケーションを自動的に新しいインスタンスにデプロイしますが、オンラインインスタンスにはデプロイしません。インスタンスは既に実行されているため、アプリケーションを手動でデプロイする必要があります。
アプリケーションをデプロイするには
-
ナビゲーションペインで「アプリケーション」を選択し、続いてアプリの「アクション」列で「デプロイ」を選択します。
-
[Command] は [Deploy] に設されていなければなりません。[Deploy App] (デプロイアプリケーション) ページの右下で [Deploy] (デプロイ) を選択します。コマンドの実行完了までには数分かかることがあります。
デプロイメントが完了したら、[Apps] ページに戻ります。[Status] インジケータには緑で [successful] と表示され、アプリケーション名の横には、デプロイメントの正常終了を示す緑のチェックマークが表示されます。
注記
Windows アプリケーションは常に [Other] アプリケーションタイプのため、アプリケーションをデプロイすると次の処理が実行されます。
-
前述のとおり、アプリケーションのデータが、スタック設定とデプロイ属性に追加されます。
-
カスタム Deploy レシピを実行する Deploy イベントがスタックのインスタンスでトリガーされます。
注記
失敗したデプロイまたはアプリケーションをトラブルシューティングする方法についての詳細は、レシピのデバッグ を参照してください。
アプリケーションがインストールされます。[Navigation] (ナビゲーション) ペインで [Instances] (インスタンス) を選択し、続いてインスタンスのパブリック IP アドレスを選択することで開くことができます。これにより、インスタンスにHTTPリクエストが送信され、ブラウザに次のような内容が表示されます。
![Text displaying "Hello World!" in large, bold font against a white background.](images/windows-iis-app.png)