Route53でのドメイン設定前に、S3上で公開用のバケットを作成します。
前提条件
S3への権限
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.10.38
aws --version
aws-cli/1.10.38 Python/2.7.11 Darwin/15.5.0 botocore/1.4.28
ドメインの管理権限 (独自ドメインを利用する場合)
独自ドメインを利用する場合は、そのドメインのNSレコードを変更する権限が必要です。
(一般的にはドメインの管理委託先(レジストラ)のWebサイトで変更ツールを提供しています。)
- 準備
=======
0.1. リージョンの決定
構築するリージョンを決めます。 (カレントユーザが利用するカレントリージョンも切り変わります。)
export AWS_DEFAULT_REGION='ap-northeast-1'
0.2. 変数の確認
プロファイルが想定のものになっていることを確認します。
aws configure list
Name Value Type Location
---- ----- ---- --------
profile administrator-prjz-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region ap-northeast-1 env AWS_DEFAULT_REGION
AssumeRoleを利用している場合はprofileが ''と表示されます。 それ以外のときにprofileが '' と表示される場合は、以下を実行してください。
export AWS_DEFAULT_PROFILE=<IAMユーザ名>
- 事前作業
===========
1.1. ドメイン名
利用するドメイン名を決定します。
DOMAIN_NAME='<管理しているドメインもしくはサブドメイン>'
注釈: ハンズオンでは、下記のようなサブドメインを利用しましょう。
DOMAIN_SUFFIX='<管理しているドメインもしくはサブドメイン>'
DOMAIN_NAME="handson$(date +%Y%m%d).${DOMAIN_SUFFIX}"
2016/6/20開催のハンズオンに限り、独自ドメインを保持していない場合は下記を利用してください。
DOMAIN_SUFFIX='awsz.org'
DOMAIN_PREFIX='<個人を特定する名前>'
DOMAIN_NAME="${DOMAIN_PREFIX}.handson$(date +%Y%m%d).${DOMAIN_SUFFIX}"
cat << ETX
DOMAIN_NAME: ${DOMAIN_NAME}
ETX
1.2. バケット名の指定
S3バケット名を決めます。 (S3上でユニークである必要があります)
独自ドメインで公開したい場合は、そのドメイン名のFQDN(完全ドメイン名)でバケットを作成する必要があります。
(この記事の例では、www.example.jpがFQDNです。)
S3_BUCKET_NAME="www.${DOMAIN_NAME}" \
&& echo "${S3_BUCKET_NAME}"
- コンテンツバケットの作成
===========================
2.1. バケットの作成 (mb)
コンテンツ公開用のS3バケットを作成します。
cat << ETX
AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION}
S3_BUCKET_NAME: ${S3_BUCKET_NAME}
ETX
aws s3 mb s3://${S3_BUCKET_NAME} \
--region ${AWS_DEFAULT_REGION}
make_bucket: s3://www.example.jp/
- コンテンツの転送 (sync)
==========================
3.1. コンテンツの用意
今回のハンズオンでは、こちらで用意したサンプルコンテンツを利用します。
GitHubから取得してクライアントPCに保存してください。
git clone https://github.com/opelab/jawsug-cli-sample-web.git \
&& cd jawsug-cli-sample-web
3.2. コンテンツの同期
クライアントPCに保存してあるサンプルコンテンツを、先程作成したコンテンツ公開用のS3バケットに同期します。
aws s3 sync . "s3://${S3_BUCKET_NAME}/" \
--acl public-read --exclude ".git*"
upload: ./error.html to s3://www.example.jp/error.html
upload: ./index.html to s3://www.example.jp/index.html
upload: ./img.jpg to s3://www.example.jp/img.jpg
- websiteホスティングの設定 (website)
======================================
コンテンツ公開用のS3バケットのwebsiteホスティング設定を行ないます。
cat << ETX
S3_BUCKET_NAME: ${S3_BUCKET_NAME}
ETX
aws s3 website "s3://${S3_BUCKET_NAME}" \
--index-document index.html \
--error-document error.html
(戻り値なし)
今回は、アップロードしたファイルのみ外部からアクセス許可しています。
(後から追加されたファイルは別途アクセス許可の設定が必要になります。)
- 事後作業
===========
アクセス確認
コンテンツ公開用のS3バケットがコンテンツ公開設定になっているか確認します。 この時点ではS3が自動的に付与するURLでアクセスします。
S3_BUCKET_LOCATION=$( \
aws s3api get-bucket-location \
--bucket ${S3_BUCKET_NAME} \
--output text \
) \
&& echo ${S3_BUCKET_LOCATION}
cat << ETX
S3_BUCKET_NAME: ${S3_BUCKET_NAME}
S3_BUCKET_LOCATION: ${S3_BUCKET_LOCATION}
ETX
S3_BUCKET_ENDPOINT="${S3_BUCKET_NAME}.s3-website-${S3_BUCKET_LOCATION}.amazonaws.com" \
&& echo ${S3_BUCKET_ENDPOINT}
www.example.jp.s3-website-ap-northeast-1.amazonaws.com
Webブラウザで EndPoint が開ければOKです。
完了
コンテンツ公開用のS3バケットに独自ドメイン名でアクセスできるように、Route53での作業を行ないます。