

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

# スタック Windows インスタンスでの SDK for Ruby OpsWorks の使用
<a name="cookbooks-101-opsworks-s3-windows"></a>

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

**注記**  
この例では、「[Windows インスタンスでのレシピの実行](cookbooks-101-opsworks-opsworks-windows.md)」の例を実行済みであることを前提としています。実行済みでない場合は、最初にその例を実行する必要があります。特に、インスタンスへの RDP アクセスを有効にする方法について説明しています。  
Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、[「S3 バケットを空にする方法」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)または[「S3 バケットを削除する方法」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)を参照してください。

このトピックでは、 スタックの Windows OpsWorks インスタンス[AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/)で を使用して S3 バケットからファイルをダウンロードする方法について説明します。

Ruby アプリケーションから AWS リソースにアクセスする必要がある場合は、適切なアクセス権限がある AWS の認証情報を提供する必要があります。レシピの場合、AWS 認証情報を提供する最適なオプションは、 AWS Identity and Access Management ([IAM) ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を使用することです。IAM ロールは、さまざまな AWS サービスを使用するアクセス許可を付与するポリシーがアタッチされている IAM ユーザーとよく似ています。ただし、ロールは個人ではなく Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに割り当てます。そのようにすると、そのインスタンスで実行されているアプリケーションは、アタッチされたポリシーによって付与されたアクセス許可を取得できます。ロールを使用することで、認証情報はコード内に出現しなくなります。間接的に出現することもありません。

最初のステップは、IAM ロールをセットアップすることです。この例では、最も簡単なアプローチを取ります。つまり、最初のスタックの作成時に OpsWorks スタックが作成する Amazon EC2 ロールを使用します。その名前は `aws-opsworks-ec2-role` です。ただし、 OpsWorks スタックはそのロールにポリシーをアタッチしないため、デフォルトではアクセス許可を付与しません。

`AmazonS3ReadOnlyAccess` ポリシーを `aws-opsworks-ec2-role` ロールにアタッチして、適切な権限を付与する必要があります。ポリシーを IAM エンティティにアタッチする方法の詳細については、IAM ユーザーガイドの[「IAM ID アクセス許可の追加 (コンソール)」](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)を参照してください。

スタックを作成または更新する際に、ロールを指定します。「[Windows インスタンスでのレシピの実行](cookbooks-101-opsworks-opsworks-windows.md)」で説明したように、カスタムレイヤーを持つスタックをセットアップします。ただし、1 つだけ追加の操作があります。**スタックの追加**ページで、**デフォルトの IAM インスタンスプロファイル**が **aws-opsworks-ec2-role** に設定されていることを確認します。その後、 OpsWorks スタックはそのロールをスタックのすべてのインスタンスに割り当てます。

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

**クックブックをセットアップするには**

1. `s3bucket_ops` という名前のディレクトリを作成し、そのディレクトリに移動します。

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

   ```
   name "s3download"
   version "0.1.0"
   ```

1. `recipes` 内に `s3download` ディレクトリを作成します。

1. 以下のレシピで `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
   ```

1. `s3download` の `.zip` アーカイブを作成し、ファイルを S3 バケットにアップロードします。そのファイルを公開し、後で使用できるようにその URL を記録します。

1. `myfile.txt` という名前のテキストファイルを作成し、S3 バケットにアップロードします。これは、レシピによってダウンロードされるファイルであるため、便利なバケットを使用できます。

このレシピによって以下のタスクが実行されます。

1: SDK for Ruby v2 をインストールします。  
この例では、SDK for Ruby を使用してオブジェクトをダウンロードします。ただし、 OpsWorks スタックはこの SDK を Windows インスタンスにインストールしないため、レシピの最初の部分では[https://docs.chef.io/chef/resources.html#chef-gem](https://docs.chef.io/chef/resources.html#chef-gem)リソースを使用してそのタスクを処理します。このリソースを使用して、レシピを含む gem が Chef 用にインストールされるようにします。

2: ファイルをダウンロードする。  
レシピの 3 番目の部分で、[https://docs.chef.io/chef/resources.html#ruby-block](https://docs.chef.io/chef/resources.html#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 を作成する**

1. [OpsWorks スタックコンソール](https://console.aws.amazon.com/opsworks/)を開いて [**Add Stack**] を選択します。以下の設定を指定し、その他の設定はデフォルト値を受け入れて、[**Add Stack**] を選択します。
   + **Name** (名前) – S3Download
   + **リージョン** – 米国西部 (オレゴン)

     この例はいずれのリージョンでも動作しますが、チュートリアルでは米国西部 (オレゴン) を使用することをお勧めします。
   + **Default operating system** (デフォルトのオペレーティングシステム) – Microsoft Windows Server 2012 R2

1. [**Add a layer**] を選択し、以下の設定を使用してスタックに[カスタムレイヤーを追加](workinglayers-custom.md)します。
   + **Name** (名前) – S3Download
   + **Short name** (短縮名) – s3download

1. デフォルト設定で S3Downloadレイヤーに [24/7 インスタンスを追加](workinginstances-add.md)し、[起動](workinginstances-starting.md)します。

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

**レシピを実行するには**

1. [カスタムクックブックを有効にするようにスタックを編集](workingcookbook-installingcustom-enable.md)し、以下の設定を指定します。
   + **Repository type** (リポジトリタイプ) – **S3 Archive** (アーカイブ)
   + **Repository URL** (リポジトリの URL) – 前の手順で記録したクックブックのアーカイブ の URL。

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

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

1. **実行するレシピ**を **s3download::default** に設定して**レシピの実行**スタックコマンドを実行することで、レシピを実行します。このコマンドは、`s3download::default` から成る実行リストで Chef 実行を開始します。
**注記**  
通常 OpsWorks 、 スタックは[適切なライフサイクルイベントに割り当てることでレシピを自動的に実行します](workingcookbook-assigningcustom.md)。このようなレシピは、イベントを手動でトリガーすることでも実行できます。Setup および Configure イベントをトリガーするにはスタックコマンドを使用し、Deploy および Undeploy イベントをトリガーするには[デプロイコマンド](workingapps-deploying.md)を使用できます。

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

**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) 
   ...
   ```

1. [RDP を使用してインスタンスにログイン](workinginstances-rdp.md)し、`c:\chef` の内容を調べます。