LoginSignup
0
0

【AWS】S3 静的ウェブサイトホスティング

Posted at

目的

S3を使って簡単なWEBページを即時インターネット公開する。

手順の流れ

  • S3バケットを作成する

公開したいWEBサイトのHTMLファイル等を格納するバケットを作成する。
バケット名はURLに含まれる。

http://<バケット名>.s3-website-<リージョン名>.amazonaws.com

バケット名は世界で一意となる名前でなければならない。

  • バケットに公開する資材(HTMLファイル等)を格納する
  • バケットのアクセス権を設定する
  • 静的ウェブサイトホスティングを有効にする

コンソールから作成

S3サービス画面から「バケットを作成」をクリックする。

任意のリージョン及びバケット名を指定する。

「パブリックアクセスをすべて ブロック」
のチェックを外し、警告の承認にチェックする。

「バケットを作成」をクリックし作成する。

公開するHTMLファイルを格納する。

タブ「アクセス許可」の「バケットポリシー」セクションを編集して、以下を設定する。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Principal": "*",
			"Effect": "Allow",
			"Action": [
				"s3:GetObject"
			],
			"Resource": "arn:aws:s3:::<バケット名>/*"
		}
	]
}

タブ「プロパティ」の「静的ウェブサイトホスティング」セクションを編集する。

「有効にする」及びインデックスドキュメント名(先ほど配置したHTMLファイル名)を指定して、変更を保存する。

すると、「静的ウェブサイトホスティング」セクションにURLが表示されるのでアクセス確認する。

HTTPでの接続となる。

AWSCLIで作成

同様のことをAWSCLIを使用してやってみる。
※AWSCLIが使用できる環境が整っている前提。
環境はWindows11PCのPowershell。

バケットの作成

aws s3api create-bucket --bucket <バケット名> --create-bucket-configuration LocationConstraint=<リージョン名>
コマンド/オプション 説明
s3api S3の操作を行うためのコマンドセット
create-bucket 新しいS3バケットを作成する
--bucket バケットの名前を指定する
--create-bucket-configuration LocationConstraint バケットを作成するリージョン

実行例

> aws s3api create-bucket --bucket asl-demo-awscli --create-bucket-configuration LocationConstraint=ap-northeast-1
{
    "Location": "http://asl-demo-awscli.s3.amazonaws.com/"
}

バケットに公開する資材(HTMLファイル等)を格納する

aws s3 cp <HTMLファイルなどが格納されているローカルのPATH> s3://<バケット名>/

実行例

> aws s3 cp C:\Users\user1\Desktop\index.html s3://asl-demo-awscli/
upload: .\index.html to s3://asl-demo-awscli/index.html

バケットのアクセス権を設定する

パブリックアクセスブロックの無効化

aws s3api put-public-access-block --bucket <バケット名> `
--public-access-block-configuration "BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false"

バケットポリシーの作成

ちょっと見ずらいが、ダブルクォートをエスケープする必要がある。

> aws s3api put-bucket-policy --bucket <バケット名> --policy `
>> '{\"Version\": \"2012-10-17\",
>>   \"Statement\": [
>>     {
>>       \"Effect\": \"Allow\",
>>       \"Principal\": \"*\",
>>       \"Action\": \"s3:GetObject\",
>>       \"Resource\": \"arn:aws:s3:::<バケット名>/*\"
>>     }
>>   ]
>> }'

静的ウェブサイトホスティングを有効にする

> aws s3api put-bucket-website --bucket asl-demo-awscli --website-configuration `
>> '{
>>   \"IndexDocument\": {
>>     \"Suffix\": \"index.html\"
>>   }
>> }'

動作確認

http://<バケット名>.s3-website-<リージョン名>.amazonaws.com
にアクセスして公開状況を確認します。

実行例 ※curlでもブラウザでもお好きな方法で

> Invoke-WebRequest -Uri "http://asl-demo-awscli.s3-website-ap-northeast-1.amazonaws.com"

StatusCode        : 200
StatusDescription : OK
・・・続く

CloudFormationで作成

上記をCFのテンプレートにすると以下のようになる。
※このケースではHTMLファイルの格納のみCloudFormation実行後に手動となる。

s3create.yaml
AWSTemplateFormatVersion: "2010-09-09"
Resources:
    S3Bucket:
        Type: "AWS::S3::Bucket"
        Properties:
            BucketName: "asl-demo-cf"
            BucketEncryption: 
                ServerSideEncryptionConfiguration: 
                  - 
                    ServerSideEncryptionByDefault: 
                        SSEAlgorithm: "AES256"
                    BucketKeyEnabled: false
            WebsiteConfiguration: 
                IndexDocument: "index.html"
            OwnershipControls: 
                Rules: 
                  - 
                    ObjectOwnership: "BucketOwnerEnforced"
            PublicAccessBlockConfiguration: 
                BlockPublicAcls: false
                BlockPublicPolicy: false
                IgnorePublicAcls: false
                RestrictPublicBuckets: false

    S3BucketPolicy:
        Type: "AWS::S3::BucketPolicy"
        Properties:
            Bucket: !Ref S3Bucket
            PolicyDocument: 
                Version: "2012-10-17"
                Statement: 
                  - 
                    Effect: "Allow"
                    Principal: "*"
                    Action: "s3:GetObject"
                    Resource: !Sub "arn:aws:s3:::${S3Bucket}/*"

このYAMLファイルを使ってコンソールからスタックを作成してもいいし、AWSCLIでコマンド実行してもよい。

AWSCLIを使用する場合の実行例

> aws cloudformation create-stack --stack-name s3websitehosting --template-body file://s3create.yaml
{
    "StackId": "arn:aws:cloudformation:ap-northeast-1:<AWSアカウント>:stack/s3websitehosting/2cd1e820-c57a-11ee-b0c7-0621c375615d"
}

スタックのステータスが「CREATE_COMPLETE」となったら、作成されたバケットにHTMLファイルをアップロードして動作確認を実施する。

コンソールの場合

AWSCLIの場合

> aws cloudformation describe-stacks --stack-name s3websitehosting --query 'Stacks[0].StackStatus' --output json
"CREATE_COMPLETE"

最後に

公開したいWEBページの資材が出来上がっていて、セキュリティもドメインもアクセス負荷も特段要件が無いならば、おそらく3分もあれば公開完了する。

非公開にするのも一瞬で出来るので、本当に一時的な商用PRページとかお知らせレベルのサイトであれば使えるか・・・?

0
0
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
0
0