8
7

More than 5 years have passed since last update.

# travis-ciからAmazon S3へファイルをデプロイする

Posted at

背景、目的

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をダウンロードすること。これを忘れると再度ユーザーを作りなおすことになる。ユーザーを作ったら先ほど作ったグループのメンバーにする。

fig1.PNG

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:::/*

fig2.PNG

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へファイルが展開されるのを確認する。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7