AWS OpsWorks スタックの Windows インスタンスでの SDK for Ruby の使用 - AWS OpsWorks

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

AWS OpsWorks スタックの Windows インスタンスでの SDK for Ruby の使用

重要

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

注記

この例では、「Windows インスタンスでのレシピの実行」の例を実行済みであることを前提としています。実行済みでない場合は、最初にその例を実行する必要があります。特に、インスタンスへの RDP アクセスを有効にする方法について説明しています。

Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、「S3 バケットを空にする方法」または「S3 バケットを削除する方法」を参照してください。

このトピックでは、 AWS OpsWorks スタックの Windows インスタンスAWS SDK for Rubyで を使用して S3 バケットからファイルをダウンロードする方法について説明します。

Ruby アプリケーションから AWS リソースにアクセスする必要がある場合は、適切なアクセス権限がある AWS の認証情報を提供する必要があります。recipe の場合、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 ロール に設定されていることを確認します。その後、 AWS OpsWorks スタックはそのロールをスタックのすべてのインスタンスに割り当てます。

クックブックをセットアップする手順は、「Linux インスタンスでのレシピの実行」で使用した手順に似ています。以下に簡単なまとめを示します。詳細については、例を参照してください。

クックブックをセットアップするには
  1. s3bucket_ops という名前のディレクトリを作成し、そのディレクトリに移動します。

  2. 以下の内容で metadata.rb ファイルを作成し、s3bucket_ops に保存します。

    name "s3download" version "0.1.0"
  3. recipes 内に s3download ディレクトリを作成します。

  4. 以下のレシピで 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
  5. s3download.zip アーカイブを作成し、ファイルを S3 バケットにアップロードします。そのファイルを公開し、後で使用できるようにその URL を記録します。

  6. 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-cookbooksmyfile.txt を含むバケットの名前に変更します。

注記

レシピは Ruby アプリケーションであるため、Ruby コードをレシピの本文内に記述できます。ruby_block リソース内に記述する必要はありません。しかし、Chef によってレシピの本文内の Ruby のコードが最初に実行され、その後、各リソースが順番に実行されます。例えば、レシピの本文内に記述したダウンロードコードは失敗します。そのコードが SDK for Ruby に依存しており、SDK をインストールする chef_gem リソースがまだ実行されていないためです。ruby_block リソース内のコードが実行されるのは、chef_gem リソースによって SDK for Ruby がインストールされた後に発生します。

以下のようにこの例のスタックを作成します。既存の Windows スタックを使用することもできます。後で説明するように、クックブックを更新するだけです。

Stack を作成する
  1. AWS OpsWorks スタックコンソールを開いて [Add Stack] を選択します。以下の設定を指定し、その他の設定はデフォルト値を受け入れて、[Add Stack] を選択します。

    • Name (名前) – S3Download

    • リージョン – 米国西部 (オレゴン)

      この例はいずれのリージョンでも動作しますが、チュートリアルでは米国西部 (オレゴン) を使用することをお勧めします。

    • Default operating system (デフォルトのオペレーティングシステム) – Microsoft Windows Server 2012 R2

  2. [Add a layer] を選択し、以下の設定を使用してスタックにカスタムレイヤーを追加します。

    • Name (名前) – S3Download

    • Short name (短縮名) – s3download

  3. デフォルト設定で S3Downloadレイヤーに 24/7 インスタンスを追加し、起動します。

これで、レシピをインストールして実行できるようになりました

レシピを実行するには
  1. カスタムクックブックを有効にするようにスタックを編集し、以下の設定を指定します。

    • Repository type (リポジトリタイプ) – S3 Archive (アーカイブ)

    • Repository URL (リポジトリの URL) – 前の手順で記録したクックブックのアーカイブ の URL。

    その他の設定ではデフォルト値を受け入れ、[Save] を選択してスタック設定を更新します。

  2. [Update Custom Cookbooks] スタックコマンドを実行します。スタックのオンラインインスタンスにカスタムクックブックの最新バージョンがインストールされます。以前のバージョンのクックブックがある場合は、このコマンドによって上書きされます。

  3. 実行するレシピs3download::default に設定してレシピの実行スタックコマンドを実行することで、レシピを実行します。このコマンドは、s3download::default から成る実行リストで Chef 実行を開始します。

    注記

    通常、 AWS OpsWorks スタックはレシピを適切なライフサイクルイベントに割り当てることで自動的に実行します。このようなレシピは、イベントを手動でトリガーすることでも実行できます。Setup および Configure イベントをトリガーするにはスタックコマンドを使用し、Deploy および Undeploy イベントをトリガーするにはデプロイコマンドを使用できます。

レシピが正常に実行された後で、それを検証できます。

s3download を検証するには
  1. 最初のステップは、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) ...
  2. RDP を使用してインスタンスにログインし、c:\chef の内容を調べます。