

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

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

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

このトピックでは、 スタックの Linux OpsWorks インスタンスで SDK for Ruby を使用して Amazon S3 バケットからファイルをダウンロードする方法について説明します。 OpsWorks スタックは、すべての Linux インスタンスに SDK for Ruby を自動的にインストールします。ただし、サービスのクライアントオブジェクトを作成するときは、AWS の一連の認証情報 `AWS::S3.new` または他のサービスの同等の情報を指定する必要があります。

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)を参照してください。

 [Vagrant インスタンスでの SDK for Ruby を使用します](cookbooks-101-opsworks-s3-vagrant.md)「」では、認証情報をノードオブジェクトに保存し、レシピコードで属性を参照することによって、認証情報が公開されるリスクを軽減する方法について説明しています。Amazon EC2 インスタンスでレシピを実行する場合は、[[IAM ロール]](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) の使用をお勧めします。

IAM ロールは、IAM ユーザーとほぼ同様に動作します。さまざまな AWS サービスを使用するためのアクセス許可を与えるポリシーがアタッチされています。ただし、ロールは個人ではなく Amazon EC2 インスタンスに割り当てます。そのようにすると、そのインスタンスで実行されているアプリケーションは、アタッチされたポリシーによって付与されたアクセス許可を取得できます。ロールを使用することで、認証情報はコード内に出現しなくなります。間接的に出現することもありません。このトピックでは、IAM ロールを使用して Amazon EC2 インスタンスで「[Vagrant インスタンスでの SDK for Ruby を使用します](cookbooks-101-opsworks-s3-vagrant.md)」のレシピを実行する方法について説明します。

このレシピは、「[例 9: Amazon EC2 インスタンスの使用](cookbooks-101-basics-ec2.md)」で説明したように、kitchen-ec2 ドライバーを使用して Test Kitchen で実行することができます。ただし、Amazon EC2 インスタンスに SDK for Ruby OpsWorks をインストールするのは少し複雑であり、 スタックで心配する必要はありません。すべての OpsWorks スタック Linux インスタンスには、デフォルトで SDK for Ruby がインストールされています。したがって、わかりやすくするために、この例では OpsWorks スタックインスタンスを使用します。

最初のステップは、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)を参照してください。

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

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

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

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

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

   ```
   name "s3bucket_ops"
   version "0.1.0"
   ```

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

1. 次のレシピで `default.rb` ファイルを作成し、`recipes` ディレクトリに保存します。

   ```
   Chef::Log.info("******Downloading a file from Amazon S3.******")
   
   ruby_block "download-object" do
     block do
       require 'aws-sdk'
   
       s3 = AWS::S3.new
   
       myfile = s3.buckets['cookbook_bucket'].objects['myfile.txt']
       Dir.chdir("/tmp")
       File.open("myfile.txt", "w") do |f|
         f.syswrite(myfile.read)
         f.close
       end
     end
     action :run
   end
   ```

1. `s3bucket_ops` の `.zip` アーカイブを作成し、アーカイブを Amazon S3 バケットにアップロードします。わかりやすいよう、[アーカイブを公開](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)し、後で使用できるようアーカイブの URL を記録しておきます。また、クックブックをプライベート Amazon S3 アーカイブやその他のタイプのリポジトリに保存することもできます。詳細については、「[クックブックリポジトリ](workingcookbook-installingcustom-repo.md)」を参照してください。

このレシピは、前の例で使用したレシピに似ていますが、以下の点が異なります。
+  OpsWorks スタックは既に SDK for Ruby をインストールしているため、`chef_gem`リソースは削除されました。
+ レシピが `AWS::S3.new` に認証情報を渡しません。

  認証情報はインスタンスのロールに基づいてアプリケーションに自動的に割り当てられます。
+ レシピは `Chef::Log.info` を使用して Chef ログにメッセージを追加します。

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

**スタックを作成するには**

1. [OpsWorks スタックコンソール](https://console.aws.amazon.com/opsworks/)を開いて [**Add Stack**] をクリックします。

1. 次の設定を指定し、その他の設定はデフォルト値を受け入れて、[**Add Stack**] をクリックします。
   + **Name** (名前) – RubySDK
   + **Default SSH key** (デフォルト SSH キー) - Amazon EC2 キーペア

   Amazon EC2 キーペアの作成が必要な場合は、[「Amazon EC2 Key Pairs」](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)(Amazon EC2 キーペア) を参照してください。キーペアがインスタンスと同じ AWS リージョンに属している必要があることに注意してください。この例では、デフォルトに米国西部(オレゴン) リージョンを使用します。

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

   Linux スタックの場合、どのレイヤータイプでも実際には動作しますが、この例は他のレイヤータイプによってインストールされるパッケージを必要としないので、カスタムレイヤーが最も簡単なアプローチです。

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

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

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

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

   その他の設定にはデフォルト値を使用し、[**Save**] をクリックしてスタック設定を更新します。

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

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

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

**s3bucket\$1ops を検証するには**

1. 最初のステップは、Chef ログを調べることです。スタックに、opstest1 という名前の 1 つのインスタンスがあるはずです。**[Instances]** (インスタンス) ページで、インスタンスの **[Log]** (ログ) 列の **[show]** (表示) をクリックして、Chef ログを表示します。下へスクロールすると、下部にログメッセージが表示されます。

   ```
   ...
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache.
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache.
   [2014-07-31T17:01:46+00:00] INFO: ******Downloading a file from Amazon S3.******
   [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3)
   ...
   ```

1. [SSH を使用してインスタンスにログインし](workinginstances-ssh.md)、`/tmp` の内容を一覧表示します。