翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Vagrant インスタンスでの SDK Ruby の の使用
重要
- AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 にお問い合わせください。 AWS Support でのチーム AWS re:Post
このトピックでは、Vagrant インスタンスで実行されているレシピが を使用する方法について説明します。 AWS SDK for Ruby Amazon S3 からファイルをダウンロードするには、 にします。開始する前に、まず のセットが必要です。 AWS 認証情報 - アクセスキーとシークレットアクセスキー。レシピが Amazon S3 にアクセスできるようにします。
重要
この目的でルートアカウントの認証情報を使わないことを強くお勧めします。代わりに、適切なポリシーで ユーザーを作成し、レシピにこれらの認証情報を提供します。
認証情報を含むファイルをパブリックリポジトリ GitHub や Bitbucket リポジトリにアップロードするなど、IAMパブリックにアクセス可能な場所に認証情報を含めないように注意してください。ご自分の認証情報が公開され、アカウントのセキュリティが侵害される恐れがあります。
EC2Amazon EC2 インスタンスで実行されているレシピは、「」で説明されているように、さらに優れたアプローチである IAMロールを使用できますでの Ruby SDK用 の使用 AWS OpsWorks スタック Linux インスタンス。
Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、「S3 バケットを空にする方法」または「S3 バケットを削除する方法」を参照してください。
まだ適切な ユーザーが存在しない場合は、次のようにして作成できます。詳細については、「 とはIAM」を参照してください。
警告
IAM ユーザーは長期的な認証情報を持っているため、セキュリティ上のリスクがあります。このリスクを軽減するために、これらのユーザーにはタスクの実行に必要な権限のみを付与し、不要になったユーザーを削除することをお勧めします。
IAM ユーザーを作成するには
にサインインする AWS Management Console でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/
。 -
ナビゲーションペインで ユーザー を選択し、必要に応じて ユーザーの追加 を選択して、新しい管理ユーザーを作成します。
-
許可を設定 ページで、ポリシーを直接アタッチする を選択します。
-
許可ポリシー の検索ボックスに
S3
と入力すると、Amazon S3 のポリシーが表示されます。AmazonS3ReadOnlyAccess を選択します。必要に応じて、AmazonS3FullAccess などのより広範なアクセス許可を付与するポリシーを指定できますが、標準的な方法は、必要なアクセス許可のみを付与することです。この場合、レシピはファイルをダウンロードするだけなので、読み取り専用アクセスで十分です。
-
[Next (次へ)] を選択します。
-
ユーザーの作成 を選択します。
-
次に、ユーザーのアクセスキーを作成します。アクセスキーの作成の詳細については、「 ユーザーガイド」のIAM「ユーザーのアクセスキーの管理IAM」を参照してください。
次に、ダウンロードされるファイルを用意する必要があります。この例では、新たに作成した myfile.txt
という名前の S3 バケットに cookbook_bucket
という名前のファイルが保存してあることを前提としています。
ダウンロード用ファイルを提供するには
-
以下のテキストを持つ
myfile.txt
という名前のファイルを作成し、ワークステーションの便利な場所に保存します。This is the file that you just downloaded from Amazon S3.
-
Amazon S3 console
(Amazon S3 コンソール) で、[Standard] (標準) リージョンに cookbook_bucket
という名前のバケットを作成し、バケットにmyfile.txt
をアップロードします。
クックブックを以下のようにセットアップします。
クックブックをセットアップするには
-
opsworks_cookbooks
内にs3bucket
という名前のディレクトリを作成し、そこに移動します。 -
「例 1: パッケージのインストール」で説明されているとおりに Test Kitchen を初期化および設定します。
-
.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:
-
s3bucket
:recipes
とenvironments
にディレクトリを 2 つ追加します。 -
以下の
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
recipe の最初の部分では、gem パッケージである SDK for Ruby をインストールします。gem_package
注記
インスタンスには 2 つの Ruby インスタンスがあり、このインスタンスは通常バージョンが異なります。1 つは Chef Client によって使用される専用インスタンスです。もう 1 つは、インスタンスで実行されているアプリケーションとレシピによって使用されます。gem パッケージをインストールする際に、この相違点を理解しておくことが重要です。gem をインストールするリソースには、gem_packagegem_package
でインストールします。chef_gem
は、Chef クライアントが使用する gem パッケージに限り使用します。
レシピの残りの部分は、ruby_blockrequire 'aws-sdk'
リソースを実行する前に gem_package
ステートメントを解決しようとします。SDK for Ruby はまだインストールされていないため、コンパイルは失敗します。
ruby_block
リソースのコードは、そのリソースが実行されるまでコンパイルされません。この例では、ruby_block
リソースが Ruby SDK用 のインストールを完了した後にgem_package
リソースが実行されるため、コードは正常に実行されます。
ruby_block
内のコードは、次のように動作します。
-
サービスインターフェイスを提供する、新しい
Aws::S3
オブジェクトを作成します。アクセスキーとシークレットキーは、ノードオブジェクトに保存されている値を参照することによって指定されます。
-
S3
オブジェクトのbucket.objects
アソシエーションを呼び出します。このアソシエーションは、myfile.txt
を表すmyfile
という名前のAws::S3::Object
オブジェクトを返します。 -
Dir.chdir
を使用して、/tmp
に作業ディレクトリを設定します。 -
myfile.txt
という名前のファイルを開き、myfile
の内容を書き込んで、ファイルを閉じます。
レシピを実行するには
-
例のレシピで
default.rb
という名前のファイルを作成し、recipes
ディレクトリに保存します。 -
kitchen converge
を実行します。 -
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
を実行してインスタンスを終了します。