AWS

Amazon S3 で静的コンテンツを表示する

先日、AWSのハンズオンにいってきたんです。

AWSの東京リージョンにはエリアリージョンってのが2つあって

  • 東陽町
  • 多摩

にあるんだって。

ハンズオンでは

VPCでネットワーク作る → サブネットふたつ作る → EC2立てる → EC2にWordPress入れる → GW作ってVPCとアタッチする → セキュリティグループ(FireWall)作る → ElasticIPってのでパグリックIPを固定化する(AWSのグローバルIPはインスタンスが再起動するたびに変わってしまうから) → ロードバランサーを設定する

てことを、だいたい1時間半くらいでやったんですが、サクッとできて、かなりビビりました

むかーしFireWall製品のサポートしてた時に、ロードバランサーとか数千万円でベンターにお願いしてたりとかしてたのに、今や個人でこんな簡単にできてしまうとは・・衝撃的でした。

 

昨日、AWSにMongoちゃんがないない!!ってさわいでいたら

「DynamoDBがモンゴだよ・・」

と言われて、ちょっぴりハズカシイ思いをしました。

PythonでDynamoDBを操作するチュートリアルをしたのですが、案外簡単にできてしまいました。

今日は

AWS Fargate、Lambda、DynamoDB を使って、最新のウェブアプリケーションを構築する

というチュートリアルのモジュール1にチャレンジしたのでした↓

Amazon S3

S3(Simple Storage Service)とは

静的コンテンツ(html, js, css, メディアコンテンツ)をホスティングするストレージサービス。

各オブジェクトをHTTPで提供可能にする。

 

S3 バケットを作成する
$ aws s3 mb s3://mikkegt
make_bucket: mikkegt

Amazon S3 は、GET、PUT、LIST、DELETE のオペレーションに重点を置いている。

大文字やアンダースコアを含むバケット名はサポートしてない(いまんとこ)

https://mikkegt.s3.amazonaws.com

とかできるようになる。

 

バケットを静的ウェブサイトホスティングに使用できるようにする
$ aws s3 website s3://mikkegt --index-document index.html
$

バケット用に登録されているパブリック DNS 名を使用して、そのバケット内のオブジェクトをリクエストできるようになる。指定したウェブサイトのホームページ (ほとんどの場合、index.html) を、DNS 名のベースパスに対するサイトリクエストの参照先にすることができる。

 

バケットポリシーを作成しパブリックにする

バケットポリシーが書いてあるJSONファイルを開く

~/environment/aws-modern-application-workshop/module-1/aws-cli/website-bucket-policy.json

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mikkegt/*"
        }
    ]
}

2箇所書き換える。

arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity REPLACE_ME_CLOUDFRONT_ORIGIN_ACCESS_IDENTITY_ID

*

REPLACE_ME_BUCKET_NAME

mikkegt

 

ウェブサイトにパブリックバケットポリシーを追加。

$ aws s3api put-bucket-policy --bucket mikkegt --policy file://~/environment/aws-modern-application-workshop/module-1/aws-cli/website-bucket-policy.json
$

 

ホームページの初回のイテレーションをバケットに追加する

(本来なら自分で作った)index.html を S3バケットにコピーする

$ aws s3 cp ~/environment/aws-modern-application-workshop/module-1/web/index.html s3://mikkegt/index.html
upload: module-1/web/index.html to s3://mikkegt/index.html
$

で、リージョンがシンガポールなので「ap-southeast-1」を使う。

↓課金されちゃうから、後で消すけど

http://mikkegt.s3-website-ap-southeast-1.amazonaws.com

http://mikkegt.s3-website.ap-southeast-1.amazonaws.com

でアクセスすると

おぉぉ〜

でけた。

なんかGAEみたいだな〜とか思いなから作業したのでした。

続きはまた明日〜。明日?

明日はですね、FirebaseとかでSNOWみたいな画像認識アプリを作るハンズオンにいってくる〜。

AWS、ほっとくと課金されちゃうかもなので、さっさと終わらせねば。

今回のチュートリアルはPythonでやっていくのですが、GOバージョンもあるので、そっちまで手がまわるといいな。

 

-AWS