背景、目的
Amazon S3はクラウドスレージとしてのみだけでなく、静的なWEBコンテンツの配信元としても利用できる。Amazon S3へファイルをアップロードするツールは数あるが、コンテンツのバージョン管理としてGithubを利用している場合、ファイル配置とバージョンの紐付けを行う必要性が生じうる。今回は、CIサービスのtravis-ciを利用してこれを実現する。
|source| -> |github| -> |travis-ci| -> |S3|
手順
- AWSにデプロイ用アカウントの作成
 - S3にバケットの作成、権限の編集
 - 
travis.ymlの設定 
デプロイ用アカウントの作成
travis-ciからのデプロイは、専用ユーザーを作成しそのユーザーアカウントを利用してtravis-ciがAWSのAPIを叩く。まずは、AWSコンソールのIAMからグループを作成する。アクセス許可を設定し、S3へファイルのアップロードができるようにする。本当は細かく設定するべきだろうけど、今回はAmazonS3FullAccessにした。
つぎにユーザーを作成する。適当な名前でユーザーを作ったら「認証情報のダウンロード」から、アクセスキーが書かれたCSVをダウンロードすること。これを忘れると再度ユーザーを作りなおすことになる。ユーザーを作ったら先ほど作ったグループのメンバーにする。
S3にバケットを作る
静的なWEBコンテンツを配信し、DNSで名前解決するときはバケット名をFQDNにするのが良いっぽい。バケットを作ったらプロパティから「静的ウェブサイトホスティング」を有効にする。また、アクセス許可から「認証済みユーザー」の「アップロード/削除」にチェックを入れる。これでデプロイはできる。
配信されたコンテンツを得Tランできるようにするには、別途バケットポリシーを編集する必要がある。AWS Policy Generatorから次の様に設定をすることですべての人に公開されたコンテンツとすることができる。
- Select Type of Policy : S3 Bucket Policy
 - Principal : *
 - AWS Service : Amazon S3
 - Actions : GetObjet
 - ARN : arn:aws:s3:::/*
 
travis.ymlの作成
リポジトリのルートディレクトリにtravis.ymlを作る。
language: bash
script: echo "do nothing"
deploy:
  provider: s3
  bucket: bucket_name
  access_key_id: "YOUR AWS ACCESS KEY"
  endpoint: s3-ap-northeast-1.amazonaws.com
  region: ap-northeast-1
  on:
    branches: master
バケット名やリージョン、ブランチなどは適宜読み替えること。詳細はリファレンスを見た方がいい。最後にシークレットキーを暗号化して挿入する。事前にtravis.rbを入れておく。
travis encrypt --add deploy.secret_access_key
標準入力にシークレットキーを貼り付ける。あとは、masterブランチへpushしたらS3へファイルが展開されるのを確認する。

