翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
スタックの Windows インスタンスでの SDK for Ruby AWS OpsWorks の使用
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post
注記
この例では、「Windows インスタンスでのレシピの実行」の例を実行済みであることを前提としています。実行済みでない場合は、最初にその例を実行する必要があります。特に、インスタンスへの RDP アクセスを有効にする方法について説明しています。
Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、「S3 バケットを空にする方法」または「S3 バケットを削除する方法」を参照してください。
このトピックでは、 スタックの Windows AWS OpsWorks インスタンスAWS SDK for Rubyで を使用して S3 バケットからファイルをダウンロードする方法について説明します。
Ruby アプリケーションから AWS リソースにアクセスする必要がある場合は、適切なアクセス権限がある AWS の認証情報を提供する必要があります。レシピの場合、AWS 認証情報を提供する最適なオプションは、 AWS Identity and Access Management (IAM) ロールを使用することです。IAM ロールは、さまざまな AWS サービスを使用するアクセス許可を付与するポリシーがアタッチされている IAM ユーザーとほぼ同じように機能します。ただし、ロールは個人ではなく Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに割り当てます。そのようにすると、そのインスタンスで実行されているアプリケーションは、アタッチされたポリシーによって付与されたアクセス許可を取得できます。ロールを使用することで、認証情報はコード内に出現しなくなります。間接的に出現することもありません。
最初のステップは、IAM ロールをセットアップすることです。この例では、最も簡単なアプローチを採用します。つまり、最初のスタックの作成時に AWS OpsWorks スタックが作成する Amazon EC2 ロールを使用します。その名前は aws-opsworks-ec2-role
です。ただし、 AWS OpsWorks スタックはそのロールにポリシーをアタッチしないため、デフォルトではアクセス許可を付与しません。
AmazonS3ReadOnlyAccess
ポリシーを aws-opsworks-ec2-role
ロールにアタッチして、適切な権限を付与する必要があります。ポリシーを IAM エンティティにアタッチする方法の詳細については、IAM ユーザーガイドの「IAM ID アクセス許可の追加 (コンソール)」を参照してください。
スタックを作成または更新する際に、ロールを指定します。「Windows インスタンスでのレシピの実行」で説明したように、カスタムレイヤーを持つスタックをセットアップします。ただし、1 つだけ追加の操作があります。スタックの追加ページで、デフォルトの IAM インスタンスプロファイルが aws-opsworks-ec2-role に設定されていることを確認します。その後、 AWS OpsWorks スタックはそのロールをスタックのすべてのインスタンスに割り当てます。
クックブックをセットアップする手順は、「Linux インスタンスでのレシピの実行」で使用した手順に似ています。以下に簡単なまとめを示します。詳細については、例を参照してください。
クックブックをセットアップするには
-
s3bucket_ops
という名前のディレクトリを作成し、そのディレクトリに移動します。 -
以下の内容で
metadata.rb
ファイルを作成し、s3bucket_ops
に保存します。name "s3download" version "0.1.0"
-
recipes
内にs3download
ディレクトリを作成します。 -
以下のレシピで
default.rb
ファイルを作成し、recipes
ディレクトリに保存します。windows-cookbooks
を、ダウンロードするファイルの保存に使用する S3 バケットの名前に置き換えます。Chef::Log.info("******Downloading an object from S3******") chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' Aws.use_bundled_cert! s3_client = Aws::S3::Client.new(region:'us-west-2') s3_client.get_object(bucket: 'windows-cookbooks', key: 'myfile.txt', response_target: '/chef/myfile.txt') end action :run end
-
s3download
の.zip
アーカイブを作成し、ファイルを S3 バケットにアップロードします。そのファイルを公開し、後で使用できるようにその URL を記録します。 -
myfile.txt
という名前のテキストファイルを作成し、S3 バケットにアップロードします。これは、レシピによってダウンロードされるファイルであるため、便利なバケットを使用できます。
このレシピによって以下のタスクが実行されます。
- 1: SDK for Ruby v2 をインストールします。
-
この例では、SDK for Ruby を使用してオブジェクトをダウンロードします。ただし、 AWS OpsWorks スタックはこの SDK を Windows インスタンスにインストールしないため、レシピの最初の部分では
chef_gem
リソースを使用してそのタスクを処理します。このリソースを使用して、レシピを含む gem が Chef 用にインストールされるようにします。 - 2: ファイルをダウンロードする。
-
レシピの 3 番目の部分で、
ruby_block
リソースを使用して、SDK for Ruby v2 コードを実行します。このコードを使用して、 myfile.txt
という名前の S3 バケットからインスタンスの
ディレクトリにwindows-cookbooks
/chef
をダウンロードします。
をwindows-cookbooks
myfile.txt
を含むバケットの名前に変更します。
注記
レシピは Ruby アプリケーションであるため、Ruby コードをレシピの本文内に記述できます。ruby_block
リソース内に記述する必要はありません。しかし、Chef によってレシピの本文内の Ruby のコードが最初に実行され、その後、各リソースが順番に実行されます。例えば、レシピの本文内に記述したダウンロードコードは失敗します。そのコードが SDK for Ruby に依存しており、SDK をインストールする chef_gem
リソースがまだ実行されていないためです。ruby_block
リソース内のコードが実行されるのは、chef_gem
リソースによって SDK for Ruby がインストールされた後に発生します。
以下のようにこの例のスタックを作成します。既存の Windows スタックを使用することもできます。後で説明するように、クックブックを更新するだけです。
Stack を作成する
-
AWS OpsWorks スタックコンソール
を開いて [Add Stack] を選択します。以下の設定を指定し、その他の設定はデフォルト値を受け入れて、[Add Stack] を選択します。 -
Name (名前) – S3Download
-
リージョン – 米国西部 (オレゴン)
この例はいずれのリージョンでも動作しますが、チュートリアルでは米国西部 (オレゴン) を使用することをお勧めします。
-
Default operating system (デフォルトのオペレーティングシステム) – Microsoft Windows Server 2012 R2
-
-
[Add a layer] を選択し、以下の設定を使用してスタックにカスタムレイヤーを追加します。
-
Name (名前) – S3Download
-
Short name (短縮名) – s3download
-
-
デフォルト設定で S3Downloadレイヤーに 24/7 インスタンスを追加し、起動します。
これで、レシピをインストールして実行できるようになりました
レシピを実行するには
-
カスタムクックブックを有効にするようにスタックを編集し、以下の設定を指定します。
-
Repository type (リポジトリタイプ) – S3 Archive (アーカイブ)
-
Repository URL (リポジトリの URL) – 前の手順で記録したクックブックのアーカイブ の URL。
その他の設定ではデフォルト値を受け入れ、[Save] を選択してスタック設定を更新します。
-
-
[Update Custom Cookbooks] スタックコマンドを実行します。スタックのオンラインインスタンスにカスタムクックブックの最新バージョンがインストールされます。以前のバージョンのクックブックがある場合は、このコマンドによって上書きされます。
-
実行するレシピを
s3download::default
に設定してレシピの実行スタックコマンドを実行することで、レシピを実行します。このコマンドは、s3download::default
から成る実行リストで Chef 実行を開始します。注記
通常 AWS OpsWorks 、 スタックはレシピを適切なライフサイクルイベントに割り当てることで自動的に実行します。このようなレシピは、イベントを手動でトリガーすることでも実行できます。Setup および Configure イベントをトリガーするにはスタックコマンドを使用し、Deploy および Undeploy イベントをトリガーするにはデプロイコマンドを使用できます。
レシピが正常に実行された後で、それを検証できます。
s3download を検証するには
-
最初のステップは、Chef ログを調べることです。スタックに s3download1 という名前の 1 つのインスタンスがあります。Instances ページで、インスタンスの ログ 列の 表示 を選択すると、Chef のログが表示されます。下にスクロールすると、末尾近くに以下のようなログメッセージが見つかります。
... [2015-05-01T21:11:04+00:00] INFO: Loading cookbooks [s3download@0.0.0] [2015-05-01T21:11:04+00:00] INFO: Storing updated cookbooks/s3download/recipes/default.rb in the cache. [2015-05-01T21:11:04+00:00] INFO: ******Downloading an object from S3****** [2015-05-01T21:11:04+00:00] INFO: Processing chef_gem[aws-sdk] action install (s3download::default line 3) [2015-05-01T21:11:05+00:00] INFO: Processing ruby_block[download-object] action run (s3download::default line 8) ...
-
RDP を使用してインスタンスにログインし、
c:\chef
の内容を調べます。