Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

Vagrant インスタンスでの SDK for Ruby を使用します - AWS OpsWorks

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

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

Vagrant インスタンスでの SDK for Ruby を使用します

重要

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

このトピックでは、Vagrant インスタンスで実行されているレシピで AWS SDK for Ruby を使用して Amazon S3 からファイルをダウンロードする方法を説明します。開始する前に、レシピが Amazon S3 にアクセスできるようにするアクセスキーとシークレットアクセスキーという AWS 認証情報のセットが必要です。

重要

この目的でルートアカウントの認証情報を使わないことを強くお勧めします。代わりに、適切なポリシーで ユーザーを作成し、レシピにこれらの認証情報を提供します。

認証情報を含むファイルを GitHub や Bitbucket の公開リポジトリにアップロードするなど、認証情報 (IAM ユーザーの認証情報も含む)を一般にアクセス可能な場所に置かないように注意してください。ご自分の認証情報が公開され、アカウントのセキュリティが侵害される恐れがあります。

EC2Amazon EC2 インスタンスで実行されるレシピでは、「スタック Linux インスタンスでの SDK for Ruby AWS OpsWorks の使用」で説明しているように、より便利なアプローチとして IAM ロールを使用できます。

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

まだ適切な ユーザーが存在しない場合は、次のようにして作成できます。詳細については、[IAM とは]を参照してください。

警告

IAM ユーザーは長期認証情報を保有するため、セキュリティ上のリスクが生じます。このリスクを軽減するために、これらのユーザーにはタスクの実行に必要な権限のみを付与し、不要になったユーザーを削除することをお勧めします。

IAM ユーザーを作成するには
  1. にサインイン AWS Management Console し、https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

  2. ナビゲーションペインで ユーザー を選択し、必要に応じて ユーザーの追加 を選択して、新しい管理ユーザーを作成します。

  3. 許可を設定 ページで、ポリシーを直接アタッチする を選択します。

  4. 許可ポリシー の検索ボックスに S3 と入力すると、Amazon S3 のポリシーが表示されます。

    AmazonS3ReadOnlyAccess 必要であれば、[AmazonS3FullAccess] などのより広範なアクセス権限を付与することもできますが、標準的な手法では必要なアクセス権限だけを付与します。この場合、レシピはファイルをダウンロードするだけなので、読み取り専用アクセスで十分です。

  5. [Next (次へ)] を選択します。

  6. ユーザーの作成 を選択します。

  7. 次に、ユーザーのアクセスキーを作成します。IAM アクセスキーの詳細については、「IAM ユーザーガイド」「Managing access keys for IAM users」(IAM ユーザーのアクセスキーの管理) を参照してください。

次に、ダウンロードされるファイルを用意する必要があります。この例では、新たに作成した myfile.txt という名前の S3 バケットに cookbook_bucket という名前のファイルが保存してあることを前提としています。

ダウンロード用ファイルを提供するには
  1. 以下のテキストを持つ myfile.txt という名前のファイルを作成し、ワークステーションの便利な場所に保存します。

    This is the file that you just downloaded from Amazon S3.
  2. Amazon S3 console (Amazon S3 コンソール) で、[Standard] (標準) リージョンに cookbook_bucket という名前のバケットを作成し、バケットに myfile.txt をアップロードします。

クックブックを以下のようにセットアップします。

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

  2. 例 1: パッケージのインストール」で説明されているとおりに Test Kitchen を初期化および設定します。

  3. .kitchen.yml のテキストを以下に置き換えます。

    --- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-14.04 suites: - name: s3bucket provisioner: solo_rb: environment: test run_list: - recipe[s3bucket::default] attributes:
  4. s3bucket: recipesenvironments にディレクトリを 2 つ追加します。

  5. 以下の default_attributes セクションを持つ test.json という名前の環境ファイルを作成し、access_key および secret_keyの値をユーザーの対応するキーに置き換えます。クックブックの environments フォルダにファイルを保存します。

    { "default_attributes" : { "cookbooks_101" : { "access_key": "AKIAIOSFODNN7EXAMPLE", "secret_key" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }

インスタンスで実行されているレシピに認証情報を提供するには、さまざまな方法があります。重要な注意点は、誤ってキーを公開し、アカウントのセキュリティが侵害される可能性を減らす必要があることです。そのため、コードで明示的なキー値を使用することはお勧めできません。例では、代わりにキー値をノードオブジェクトに保存します。その場合、レシピはリテラル値を公開せずに、ノード構文を使用してキー値を参照できます。ノードオブジェクトにアクセスするには、ルート権限が必要です。そのため、キーが公開される可能性を制限できます。詳細については、「AWS アクセスキーを管理するためのベストプラクティス」を参照してください。

注記

例では入れ子になった属性 (最初の要素は cookbooks_101) が使用されていることに注意してください。これにより、ノードオブジェクト内に他の access_key または secret_key 属性がある場合に、名前の競合の可能性が制限されます。

次のレシピは、myfile.text バケットから cookbook_bucket をダウンロードします。

gem_package "aws-sdk ~> 3" do action :install end ruby_block "download-object" do block do require 'aws-sdk' s3 = Aws::S3::Client.new( :access_key_id => "#{node['cookbooks_101']['access_key']}", :secret_access_key => "#{node['cookbooks_101']['secret_key']}") myfile = s3.bucket['cookbook_bucket'].objects['myfile.txt'] Dir.chdir("/tmp") File.open("myfile.txt", "w") do |f| f.write(myfile.read) f.close end end action :run end

レシピの最初の部分では、gem パッケージである SDK for Ruby をインストールします。gem_package リソースは、レシピや他のアプリケーションによって使用される gem をインストールします。

注記

インスタンスには 2 つの Ruby インスタンスがあり、このインスタンスは通常バージョンが異なります。1 つは Chef Client によって使用される専用インスタンスです。もう 1 つは、インスタンスで実行されているアプリケーションとレシピによって使用されます。gem パッケージをインストールする際に、この相違点を理解しておくことが重要です。gem をインストールするリソースには、gem_packagechef_gem という 2 つの種類があるためです。アプリケーションまたはレシピが gem パッケージを使用する場合には、gem_package でインストールします。chef_gem は、Chef クライアントが使用する gem パッケージに限り使用します。

レシピの残りの部分は、ruby_block リソースです。これには、ファイルをダウンロードする Ruby コードが含まれています。レシピは Ruby アプリケーションであるため、コードをレシピに直接記述できると考えられがちです。しかし、Chef 実行はリソースを実行する前にすべてのコードをコンパイルします。例のコードをレシピに直接記述すると、Ruby は require 'aws-sdk' リソースを実行する前に gem_package ステートメントを解決しようとします。SDK for Ruby はまだインストールされていないため、コンパイルは失敗します。

ruby_block リソースのコードは、そのリソースが実行されるまでコンパイルされません。この例では、ruby_block リソースが SDK for Ruby のインストールを終了した後で、gem_package リソースが実行されます。そのため、コードが正常に実行されます。

ruby_block 内のコードは、次のように動作します。

  1. サービスインターフェイスを提供する、新しい Aws::S3 オブジェクトを作成します。

    アクセスキーとシークレットキーは、ノードオブジェクトに保存されている値を参照することによって指定されます。

  2. S3 オブジェクトの bucket.objects アソシエーションを呼び出します。このアソシエーションは、myfile.txt を表す myfile という名前のAws::S3::Object オブジェクトを返します。

  3. Dir.chdir を使用して、/tmp に作業ディレクトリを設定します。

  4. myfile.txt という名前のファイルを開き、myfile の内容を書き込んで、ファイルを閉じます。

レシピを実行するには
  1. 例のレシピで default.rb という名前のファイルを作成し、recipes ディレクトリに保存します。

  2. kitchen converge を実行します。

  3. kitchen login を実行してインスタンスにログインし、ls /tmp を実行します。いくつかの Test Kitchen ファイルおよびディレクトリと共に、myfile.txt が表示されるはずです。

    vagrant@s3bucket-ubuntu-1204:~$ ls /tmp install.sh kitchen myfile.txt stderr

    ファイルの内容が正しいことを検証するために、cat /tmp/myfile.txt を実行することもできます。

完了したら、kitchen destroy を実行してインスタンスを終了します。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.