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

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

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

重要

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

注記

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

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

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

Ruby アプリケーションから AWS リソースにアクセスする必要がある場合は、適切なアクセス権限がある AWS の認証情報を提供する必要があります。レシピ用の AWS の認証情報を提供するのに最もお勧めの方法は、AWS Identity and Access Management [(IAM) role] ((IAM) ロール) を使用する方法です。IAM ロールは IAM ユーザーとほぼ同様に機能します。さまざまなAWSサービスを使用するためのアクセス許可を与えるポリシーがアタッチされています。ただし、ロールは個人ではなく 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 スタックによって Windows インスタンスにこの SDK はインストールされないため、レシピの最初の部分で 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 の内容を調べます。