翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
スタックの Linux インスタンスでの Ruby AWS OpsWorks SDK用 の使用
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post
このトピックでは、 スタックの Linux AWS OpsWorks インスタンスで SDK for Ruby を使用して Amazon S3 バケットからファイルをダウンロードする方法について説明します。 AWS OpsWorks スタックは、すべての Linux インスタンスに SDK for Ruby を自動的にインストールします。ただし、サービスのクライアントオブジェクトを作成するときは、適切なAWS認証情報のセット、AWS::S3.new
または他のサービスに同等のものを指定する必要があります。
Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、「S3 バケットを空にする方法」または「S3 バケットを削除する方法」を参照してください。
Vagrant インスタンスでの SDK Ruby 用 の使用「」では、認証情報をノードオブジェクトに保存し、レシピコードで属性を参照することによって、認証情報が公開されるリスクを軽減する方法について説明しています。Amazon EC2インスタンスでレシピを実行する場合は、 IAMロールというさらに優れたオプションがあります。
IAM ロールは、IAM ユーザーとほぼ同様に動作します。さまざまな AWSサービスを使用するためのアクセス許可を付与するポリシーがアタッチされています。ただし、ロールは個人ではなく Amazon EC2インスタンスに割り当てます。そのようにすると、そのインスタンスで実行されているアプリケーションは、アタッチされたポリシーによって付与されたアクセス許可を取得できます。ロールを使用することで、認証情報はコード内に出現しなくなります。間接的に出現することもありません。このトピックでは、 IAMロールを使用して Amazon EC2インスタンスVagrant インスタンスでの SDK Ruby 用 の使用で からレシピを実行する方法について説明します。
このレシピは、「例 9: Amazon EC2 インスタンスの使用」で説明したように、kitchen-ec2 ドライバーを使用して Test Kitchen で実行することができます。ただし、Amazon EC2インスタンスに SDK for Ruby をインストールするのは少し複雑であり、 AWS OpsWorks スタックで心配する必要はありません。すべての AWS OpsWorks スタック Linux インスタンスには、デフォルトで SDK for Ruby がインストールされています。したがって、わかりやすくするために、この例では AWS OpsWorks スタックインスタンスを使用します。
最初のステップは、IAM ロールをセットアップすることです。この例では、最もシンプルなアプローチを採用します。つまり、最初のスタックの作成時に AWS OpsWorks スタックが作成する Amazon EC2ロールを使用します。その名前は aws-opsworks-ec2-role
です。ただし、 AWS OpsWorks スタックはそのロールにポリシーをアタッチしないため、デフォルトではアクセス許可を付与しません。
AmazonS3ReadOnlyAccess
ポリシーを aws-opsworks-ec2-role
ロールにアタッチして、適切な権限を付与する必要があります。ロールにポリシーをアタッチする方法の詳細については、「 IAMユーザーガイド」のIAM「ID アクセス許可の追加 (コンソール)」を参照してください。
スタックを作成または更新する際に、ロールを指定します。「Linux インスタンスでのレシピの実行」で説明したように、カスタムレイヤーを持つスタックをセットアップします。ただし、1 つだけ追加の操作があります。スタックの追加ページで、デフォルトのIAMインスタンスプロファイルが aws-opsworks-ec2-role に設定されていることを確認します。その後、 AWS OpsWorks スタックはそのロールをスタックのすべてのインスタンスに割り当てます。
クックブックをセットアップする手順は、「Linux インスタンスでのレシピの実行」で使用した手順に似ています。以下に簡単なまとめを示します。詳細については、例を参照してください。
クックブックをセットアップするには
-
s3bucket_ops
という名前のディレクトリを作成し、そのディレクトリに移動します。 -
以下の内容で
metadata.rb
ファイルを作成し、s3bucket_ops
に保存します。name "s3bucket_ops" version "0.1.0"
-
recipes
内にs3bucket_ops
ディレクトリを作成します。 -
次のレシピで
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
-
s3bucket_ops
の.zip
アーカイブを作成し、アーカイブを Amazon S3 バケットにアップロードします。分かりやすいように、アーカイブを公開してから、URL後で使用するためにアーカイブの を記録します。また、クックブックをプライベート Amazon S3 アーカイブやその他のタイプのリポジトリに保存することもできます。詳細については、「クックブックリポジトリ」を参照してください。
このレシピは、前の例で使用したレシピに似ていますが、以下の点が異なります。
-
スタックは Ruby AWS OpsWorks SDK用の を既にインストールしているため、
chef_gem
リソースは削除されました。 -
レシピが
AWS::S3.new
に認証情報を渡しません。認証情報はインスタンスのロールに基づいてアプリケーションに自動的に割り当てられます。
-
レシピは
Chef::Log.info
を使用して Chef ログにメッセージを追加します。
以下のようにこの例のスタックを作成します。既存の Windows スタックを使用することもできます。後で説明するように、クックブックを更新するだけです。
スタックを作成するには
-
AWS OpsWorks スタックコンソール
を開いて [Add Stack] をクリックします。 -
次の設定を指定し、その他の設定はデフォルト値を受け入れて、[Add Stack] をクリックします。
-
名前 – RubySDK
-
デフォルトSSHキー – Amazon EC2キーペア
Amazon EC2キーペアを作成する必要がある場合は、「Amazon EC2 キーペア」を参照してください。キーペアは、インスタンスと同じAWSリージョンに属している必要があることに注意してください。この例では、デフォルトに米国西部(オレゴン) リージョンを使用します。
-
-
[Add a layer] をクリックし、次の設定を使用してスタックにカスタムレイヤーを追加します。
-
Name (名前) – S3Download
-
Short name (短縮名) – s3download
Linux スタックの場合、どのレイヤータイプでも実際には動作しますが、この例は他のレイヤータイプによってインストールされるパッケージを必要としないので、カスタムレイヤーが最も簡単なアプローチです。
-
-
デフォルト設定でレイヤーに 24/7 インスタンスを追加し、起動します。
これで、レシピをインストールして実行できるようになりました
レシピを実行するには
-
カスタムクックブックを有効にするようにスタックを編集し、以下の設定を指定します。
-
Repository type (リポジトリタイプ) – Http Archive (Http アーカイブ)
-
リポジトリ URL – 前に記録URLしたクックブックのアーカイブ。
その他の設定にはデフォルト値を使用し、[Save] をクリックしてスタック設定を更新します。
-
-
[Update Custom Cookbooks] スタックコマンドを実行します。スタックのインスタンスにあるカスタムクックブックの最新バージョンがインストールされます。以前のバージョンのクックブックがある場合は、このコマンドによって上書きされます。
-
実行するレシピを
s3bucket_ops::default
に設定してレシピの実行スタックコマンドを実行することで、レシピを実行します。このコマンドは、s3bucket_ops::default
から成る実行リストで Chef 実行を開始します。注記
通常 AWS OpsWorks 、 スタックはレシピを適切なライフサイクルイベントに割り当てることで自動的に実行します。このようなレシピは、イベントを手動でトリガーすることによって実行できます。Setup および Configure イベントをトリガーするにはスタックコマンドを使用し、Deploy および Undeploy イベントをトリガーするにはデプロイコマンドを使用できます。
レシピが正常に実行された後で、それを検証できます。
s3bucket_ops を検証するには
-
最初のステップは、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) ...
-
SSH を使用してインスタンスにログインし、 の内容を一覧表示します
/tmp
。