ラベル s3 の投稿を表示しています。 すべての投稿を表示
ラベル s3 の投稿を表示しています。 すべての投稿を表示

2015年2月4日水曜日

S3+Rout53+独自ドメインで静的サイトをホスティングする方法

静的なサイトをS3のホスティングと独自ドメインで構築する方法です。
今回は、awsの登録や、ドメインの購入は完了済みということを前提にしています。

また、ドメインは、仮にexample.com としてありますので、ご自分で取得したドメインに読み替えて読み進めてください。

S3 の設定

バケットの作成

ホスティングでメインとなるバケットを作成します。
簡単ですが、作成手順は以下になります。

  • S3 > [Create Bucket] ボタンをクリック
  • Bucket Name に ドメイン名[example.com]を指定して、[Create]ボタンをクリック
Bucket Name: example.com
Region: Tokyo

バケットの設定

上記で、バケットの作成が完了したら、propertyから以下を変更します。

Permissions

Edit bucket policy に以下を追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::example.com/*"
        }
    ]
}

バケットポリシーの詳細はこちらから確認してください。

Static Website Hosting

  • Enable website hosting に チェックをいれます。

表示されるフォームに以下のように設定します。

Index Document: index.html
Error Document: 404.html

Indexページは、たいていindex.htmlになると思いますが、errorページに関しては、error.html 等、自分のサイトのエラーページに合わせて変更してください。

www.examle.comからのリダイレクト

今回は、サブドメインなしの、examle.com でアクセスをすることを想定していますが、
もし、www.examle.com でurlが来た時に、examle.comにリダイレクトするように、別途バケットを作成しておきます。

www.examle.comバケットの作成

examle.comと同様に、
* S3 > [Create Bucket] ボタンをクリック
* Bucket Name に ドメイン名[www.example.com]を指定して、[Create]ボタンをクリック

www.examle.comバケットの設定

上記手順で、バケットの作成が完了したら、propertyから以下を変更します。

Static Website Hostingの設定

Redirect all requests to another host name にチェック。

Redirect all requests to にリダイレクト先のホスト名を入力する。

今回の例では、以下を指定します。

examle.com

以上で、S3でのバケットの設定は終わりになります。

Rout53

続いて、Route53を使って、DNSの設定をしていきます。

Hoste Zoneの設定

  • Rout53 > Hosteed Zone > [Create Hosted Zone]をクリック
  • Domain Name と Comment と Type を入力して [create] ボタンをクリック。

今回 Domain Nameには、example.com を入力。
Commentには任意のコメントを設定してください。

無事に設定が終わると、Name Serversが設定されるので、これを後でレジストラに設定します。

Aレコードを作成

続いて、Aレコードを作成していきます。

  • 今 作成した、HostZoneを選択して、[Go to Record Sets]をクリック
  • [Create Record Set] ボタンをクリック

設定は以下のように行う。

Name: example.com.
Type: A - IPv4 address
Alias: Yes
Alias Target: 作成したS3のバケットを指定
Routing Policy: Simple

サブドメインには、CNAMEレコードを作成

www.example.comを作成した場合、下記のように設定してください。
また、テスト環境 (test.example.com)のような環境を作成した場合も同様の手順で対応可能です。

Name: www.example.com.
Type: CNAME
TTL 300
Value: www.example.com.s3-website-ap-northeast-1.amazonaws.com
Routing Policy: Simple

これで、DNSの設定は以上です。

レジストラの設定

今回、お名前.com での設定になります。
先ほど、生成されたName Serverをレジストラに設定して行きます。

ネームサーバーの変更

  • ドメイン設定タブのネームサーバーの設定 > ネームサーバーの変更
  • 他のネームサーバーを利用タブを選択
  • ネームサーバー情報を入力のフォームが表示されるのでそこに、Route53で生成された、NameServerの宛先を入力して来ます。

以下のような値を一個づつ入力して、確認画面に進む > 登録

ns-9999.awsdns-99.co.uk
ns-999.awsdns-99.com
ns-999.awsdns-99.net
ns-999.awsdns-99.org

確認

example.comのバケットに index.htmlを配置して ブラウザでhttp://example.comでアクセス。
ちゃんと設定できていれば、表示されることを確認してください。

2014年12月24日水曜日

AWS Elastic Beanstalkで作られたS3 のバケットを削除する方法

Elastic Beanstalkを使って、試しの環境を作成して、
使い終わったので、環境を管理コンソールから削除したらS3のバケットだけ残ってしまった。
しかも、手で削除しようとしたら、以下の”パーミッションがない”的なメッセージが出て削除できなかったため、なくなく調べました。

You don't have permissions to delete this bucket. You can check your bucket's permissions within bucket properties

バケットの [Permissions] > [ Edit bucket policy]を開いて以下のように修正。

"Effect": "Deny" => "Effect": "Allow"

設定を保存して、削除すると無事に削除できます。

2014年10月9日木曜日

RailsでCSVを生成して、そのままS3にアップロードする方法

夜間バッチなどで、定期的に外部システム用のCSVをAWSのS3にアップロードすることを想定しています。

作成方法

gemのインストール

まず、gemのインストール。
Gemfileに以下を追加。
# http://aws.amazon.com/sdkforruby/
# https://github.com/aws/aws-sdk-core-ruby
gem 'aws-sdk'
GitHubaws : aws-sdk-core-rubyはこちら。
以下を実行
bundle install

Railsへの実装

前提条件として、S3にbucketが作成済みの想定です。
      require 'csv'

      begin
        users = user.all

        data = CSV.generate do |csv|

          csv << ['id', '氏名']

          users.each do |user|
            raw = []
            raw << user.id
            raw << user.name
            csv << raw
          end
        end

        AWS.config(:access_key_id => 'your-access_key_id',
                   :secret_access_key => 'your-secret_access_key',
                   :region => 'your-bucket_region')

        s3 = AWS::S3.new
        bucket = s3.buckets['your-backet']

        file = data.sjisable.encode(Encoding::SJIS, {:invalid => :replace, :undef => :replace, :replace => '?'})
        file_name = "users.csv"
        file_full_path="user_data/#{file_name}"

        object = bucket.objects[file_full_path]
        object.write(file ,:acl => :public_read)

        puts '全ての処理に成功しました。'
      rescue => e
        puts "error occurred batch : #{Time.now} : #{e.message}"
      end
上記では、全Userのid と 氏名のカラムを持ったCSVを作成して、それを、S3にアップロードすることを想定しています。
途中こちらの部分でS3へのアクセスの設定を行っています。
 AWS.config(:access_key_id => 'your-access_key_id',
                   :secret_access_key => 'your-secret_access_key',
                   :region => 'your-bucket_region')
s3 = AWS::S3.new
bucket = s3.buckets['your-backet']
下記は適宜、自分の環境にあったものを設定してください。
  • your-access_key_id
  • your-secret_access_key
  • your-bucket_region
  • your-backet
頻繁にアクセスが発生する場合は、こちらconfig/initialyzerのしたaws.rb見たいのを作ってそちらで設定してしまってもよいかもしれません。
今回は、単発のバッチということなので、つどつど設定を行っています。

statistics