AWS SDK for Ruby
開発者ガイド

Amazon S3 バケットを使用してウェブサイトをホストする

この例では、AWS SDK for Ruby を使用して以下を行う方法を示しています。

  1. Amazon S3 バケットを作成します。

  2. バケットウェブサイトの設定を取得します。

  3. バケットにオブジェクトを追加します。

  4. バケットウェブサイト設定を設定します。

  5. バケットウェブサイトのドキュメントにアクセスします。

  6. バケットウェブサイトを削除します。

  7. バケットを削除します。

バケットウェブサイトのホスティングについての詳細は、Amazon S3 Developer Guideの「バケットをウェブサイトホスティング用に設定」を参照してください。

この例の完全なコードについては、完全な例を参照してください。

前提条件タスク

この例をセットアップして実行するには、まず以下の条件を満たす必要があります。

  1. AWS SDK for Ruby をインストールします。詳細については、「AWS SDK for Ruby のインストール」を参照してください。

  2. AWS のサービスおよびリソースへのアクセスを確認するために AWS SDK for Ruby が使用する、AWS アクセス認証情報を設定します。詳細については、「AWS SDK for Ruby の設定」を参照してください。

AWS 認証情報が、この例で説明されている AWS のアクションおよびリソースへのアクセス権を持つ AWS Identity and Access Management (IAM) のエンティティにマッピングされることを確認してください。

この例では、認証情報が AWS 認証情報プロファイルのファイル、またはローカルシステムの AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY 環境変数で設定されていることを前提としています。

SDK を設定する

この例では、AWS SDK for Ruby for Amazon S3 により提供されるクラスとメソッドを使用できるように、require ステートメントを追加します。その後、バケットと指定の AWS プロファイルを作成する AWS リージョンに Aws::S3::Client オブジェクトを作成します。このコードは、us-east-2 リージョンに Aws::S3::Client オブジェクトを作成します。

追加変数は、この例で使用されるバケットにも宣言されます。バケット名がすべての AWS のアカウントで一意であることを確認するために、追加の require ステートメントが追加され、SecureRandom モジュールの uuid メソッドが呼び出されて一意の識別子が生成されます。この識別名は、このサンプルの後半に作成されるバケット名に挿入されます。

require 'aws-sdk' # Using Random UUIDs to Avoid Collisions when Testing require 'securerandom' bucket = "example-test-bucket-#{SecureRandom.uuid}" # Setup s3 = Aws::S3::Client.new(region: "us-west-2")

バケットの作成

create_bucket メソッドを呼び出して、作成するバケット名を指定します。

s3.create_bucket(bucket: bucket)

バケットウェブサイト設定の取得

get_bucket_website メソッドを呼び出して、バケット名を指定します。デフォルトでは、バケットはウェブサイトとして設定されていません。この動作を確認するには、get_bucket_website メソッドを呼び出します。バケットのウェブサイト設定がないため、エラーが返されます。

begin s3.get_bucket_website(bucket: bucket) rescue Aws::S3::Errors::NoSuchWebsiteConfiguration puts "No bucket website configuration present." end

バケットにオブジェクトを追加

put_object メソッドを呼び出して、バケットおよびオブジェクトの名前、オブジェクトの内容、およびオブジェクトのアクセス権限の設定を指定します。この例では、2 つのウェブページにバケットを追加します。

s3.put_object( bucket: bucket, key: "index.html", body: "Hello, Amazon S3!", acl: "public-read" ) s3.put_object( bucket: bucket, key: "error.html", body: "Page not found!", acl: "public-read" )

バケットウェブサイト設定の設定

put_bucket_cors メソッドを呼び出して、バケット名およびウェブサイトの設定を指定します。ウェブサイトの設定では、Aws::S3::Types::WebsiteConfiguration ハッシュを使用して、ウェブサイトのインデックスおよびエラーウェブページを指定します。

s3.put_bucket_website( bucket: bucket, website_configuration: { index_document: { suffix: "index.html" }, error_document: { key: "error.html" } } )

バケットウェブサイトのドキュメントにアクセス

Ruby の Net::HTTP.get メソッドを呼び出して、バケットウェブサイトのドキュメントにアドレスを指定します。

index_path = "http://#{bucket}.s3-website-us-west-2.amazonaws.com/" error_path = "http://#{bucket}.s3-website-us-west-2.amazonaws.com/nonexistant.html" puts "Index Page Contents:\n#{Net::HTTP.get(URI(index_path))}\n\n" puts "Error Page Contents:\n#{Net::HTTP.get(URI(error_path))}\n\n"

バケットウェブサイトの削除

delete_bucket_website メソッドを呼び出して、バケット名を指定します。

s3.delete_bucket_website(bucket: bucket)

バケットの削除

Aws::S3::Resource オブジェクトの bucket メソッドを呼び出して、バケット名を指定します。これにより、Aws::S3::Bucket オブジェクトが返されます。次に、Aws::S3::Bucket オブジェクトの delete メソッドを呼び出します。

b = Aws::S3::Resource.new(region: "us-west-2").bucket(bucket) b.delete! # Recursively deletes objects as well.

完全な例

この例の完全なコードを次に示します。

require 'aws-sdk' # Using Random UUIDs to Avoid Collisions when Testing require 'securerandom' bucket = "example-test-bucket-#{SecureRandom.uuid}" # Setup s3 = Aws::S3::Client.new(region: "us-west-2") s3.create_bucket(bucket: bucket) # When Bucket Has No Website Configuration begin s3.get_bucket_website(bucket: bucket) rescue Aws::S3::Errors::NoSuchWebsiteConfiguration puts "No bucket website configuration present." end # Adding Simple Pages & Website Configuration s3.put_object( bucket: bucket, key: "index.html", body: "Hello, Amazon S3!", acl: "public-read" ) s3.put_object( bucket: bucket, key: "error.html", body: "Page not found!", acl: "public-read" ) s3.put_bucket_website( bucket: bucket, website_configuration: { index_document: { suffix: "index.html" }, error_document: { key: "error.html" } } ) # Accessing as a Website index_path = "http://#{bucket}.s3-website-us-west-2.amazonaws.com/" error_path = "http://#{bucket}.s3-website-us-west-2.amazonaws.com/nonexistant.html" puts "Index Page Contents:\n#{Net::HTTP.get(URI(index_path))}\n\n" puts "Error Page Contents:\n#{Net::HTTP.get(URI(error_path))}\n\n" # Removing Website Configuration s3.delete_bucket_website(bucket: bucket) # Cleanup b = Aws::S3::Resource.new(region: "us-west-2").bucket(bucket) b.delete! # Recursively deletes objects as well.