「AWS Hands-on for Beginners - AWS 上で静的な Web サイトを公開しよう！」をやってみた

AWS公式のハンズオン 「AWS Hands-on for Beginners - AWS 上で静的な Web サイトを公開しよう！」をやってみたので手順をこちらに載せていきます。
マネジメントコンソールがアップデートされたことで、動画上の画面と異なる部分が多々あるので参考にしていただけますと幸いです。


# S3の静的ホスティングを使ってみる
まず初めにS3の静的ウェブサイトホスティング機能を利用し、簡単なHTMLファイルを公開していきます。

1. まず初めにAWSマネジメントコンソールにログインします。
1. 画面左上の検索欄に「S3」と入力し、表示されたS3をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/bd1f364f-4bb7-81eb-0035-55f8464c2b9a.png)

1. 「バケットを作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/179bd6a3-937a-ea28-f0b0-8c664a0ae875.png)

1. バケット作成画面が表示されるので、「一般的な設定」の「バケット名」に名前を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/630f57ae-9aca-57ad-0ac9-e3bebe870df6.png)
    
    :::note warn
    ※注意※
    バケット名に設定する名前は、グローバルでユニークである必要があります。
    Route53でドメインを取得する場合は、取得するドメイン名とバケット名が一致している必要があります。

1. 「このバケットのブロックパブリックアクセス設定」にて「パブリックアクセスをすべて ブロック」のチェックを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/241f4f95-59bf-5313-2b6e-09a364c90ed6.png)

1. 手順5でチェックを外すと注意事項が表示されるので、クリックしてチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/b5a05f20-6d5e-ecdd-9fe0-851e3e1508fc.png)

1. そのほかの設定はデフォルトのまま、一番下までスクロールし、「バケットを作成」をクリックします。

1. バケット一覧画面に戻るので、バケットが作成されたことを確認し、作成したバケットをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/d5f81100-c17e-da19-f6da-56c8d569d277.png)

1. 「プロパティ」タブを開き、一番下までスクロールして、「静的ウェブサイトホスティング」の「編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/ed640e4d-8bf1-6757-de24-797a9310489b.png)

1. 「静的ウェブサイトホスティングを編集」画面にてそれぞれ以下の項目を選択、入力し「変更の保存」をクリックします。
    | 項目 | 設定値 | 
    |:-----------|:------------|
    | 静的ウェブサイトホスティング       | 有効にする        | 
    | ホスティングタイプ     | 静的ウェブサイトをホストする      | 
    | インデックスドキュメント       | index.html        | 
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/2195fbfe-5b7d-7351-4ff5-299dde35221c.png)


1. 「アクセス許可」タブを開き、「バケットポリシー」の「編集」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/dd2c7489-ff42-a932-0393-29c849e6e2a2.png)

1. 「ポリシー」欄に次の内容をコピーして貼り付け、`xxxxxxxxx`をバケット名に置き換えます。
    ```json
    {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "PublicReadGetObject",
              "Effect": "Allow",
              "Principal": "*",
              "Action": [
                  "s3:GetObject"
              ],
              "Resource": [
                  "arn:aws:s3:::xxxxxxxxx/*"
              ]
          }
      ]
    }
    ```

1. 「変更の保存」をクリックします。
1. 「オブジェクト」タブを開き、「アップロード」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/09442675-7fa9-c23b-113b-0467233accb4.png)

1. 「ファイルとフォルダ」の「ファイルを追加」をクリックすると、エクスプローラがポップアップするので、「index.html」ファイルを選択して、「アップロード」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/14be10dc-0e02-df17-de5f-3c27fa302662.png)
    index.htmlファイルの中身は以下の通りとなります。
    ```html
    <head>
      <meta charset="utf-8">
      <title>はじめての S3 静的 Web サイトホスティング</title>
    </head>
    <body>
      <div>
        <div class="msg">
          Hello, AWS World!!
        </div>
      </div>
    </body>
    </html>
    ```
1. 「閉じる」をクリックし、「プロパティ」タブを開きます。
1. 「静的ウェブサイトホスティング」の「バケットウェブサイトエンドポイント」に記載されているURLをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/25a3353f-26a6-0bb1-d1ff-0b33d326994c.png)
1. ブラウザの新しいタブに以下のような画面が表示されたら、S3を使った静的ウェブサイトの公開が完了となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/00b3fa3e-fdef-6e86-011f-51ee296d4d19.png)

# Cloud9環境を立ち上げて静的コンテンツを開発する + AWS CLIでS3にファイルをアップロードする
続いて、統合開発環境としてCloud9を利用し、Cloud9上で編集したファイルをS3へアップロードしていきます。

1. 画面左上の検索欄に「cloud9」と入力し、表示されたcloud9をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/931c445a-566c-9c40-417e-0d7d4cce42f8.png)

1. 「Create environment」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/b53b4760-7da2-dbf9-4eec-39a8839e9f22.png)

1. Nameに任意の名前を入力し、その他の項目が以下の通りであることを確認して、「Create」をクリックします。※記載のない項目はデフォルトのままで問題ありません。
    | 項目 | 設定値 | 
    |:-----------|:------------|
    | Environment type       | New EC2 instance        | 
    | Instance type     | t2.micro(1 GiB RAM + 1 vCPU)      | 
    | Platform       | Amazon Linux 2        | 
    | Timeout       | 30 minutes        | 
  
1. 作成したCloud9の「Open」をクリックします。立ち上がりに少々時間がかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/3b3d1262-8de7-cd79-4b7a-5693a371a0f0.png)

1. cloud9が起動したら、画面下のターミナルに以下のコマンドを入力し、作業ディレクトリを作成して作成したディレクトリに移動します。
    ```
     $ mkdir my-webpage && cd my-webpage
    ```
1. cloud9にもS3にアップロードしたindex.htmlファイルをアップロードします。
まず、画面左側のフォルダツリーにて先ほど作成した「my-webpage」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/d81c317b-ca87-c0b9-1b54-641552df6f7f.png)

1. 画面上部の「File」タブを選択し、「Upload Local Files..」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/ad3bfffe-89fc-742b-286c-e1fd5cf015bc.png)

1. 「Select files」をクリックし、エクスプローラで先ほどアップロードした「index.html」を選択すると、Cloud9にファイルがアップロードされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/f61a5f00-aad0-c239-3559-6d706230baa8.png)
1. index.htmlをダブルクリックで開き、中身を一部変更して保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/57e55542-b7d8-0bf2-294c-eaec5afbdaab.png)

1. 上の手順で編集したindex.htmlファイルを以下のコマンドを実行して、S3にアップロードします。
<バケット名>の部分は作成したS3バケットの名前に置き換えてください。
    ```
     $ aws s3 cp index.html s3://<バケット名>
    ```
1. アップロードが完了したら、以下のバケットウェブサイトエンドポイントのURLへアクセスします。
<バケット名>の部分は作成したS3バケットの名前に置き換えてください。
http://<バケット名>.s3-website-ap-northeast-1.amazonaws.com/
手順9で変更した内容が表示されていれば、アップロードは成功です。


# 続・静的コンテンツの開発 + AWS CLIでS3に複数のファイルを一括アップロードする

1. 続いてcloud9で以下の3つのコマンドを実行して、ディレクトリとファイルを作成します。
    ```
    $  mkdir img
    $  mkdir css
    $  touch css/style.css
    ```
    <現在のフォルダ構成>
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/60a7c3cf-4ac7-1feb-ba5c-5007b4580a62.png)

1. フォルダツリー上でimgフォルダを選択した状態で、画面上部の「File」タブを選択し、「Upload Local Files..」をクリックします。
1. 画像ファイルを選択してアップロードします。
<現在のフォルダ構成>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/5e74d169-af0d-1be2-2bdf-249d49c77f3d.png)


1. フォルダツリー上でmy-webpageフォルダを選択した状態で、画面上部の「File」タブを選択し、「Upload Local Files..」をクリックします。
1. ファビコン用ファイルを選択してアップロードします。
<現在のフォルダ構成>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/3b445326-1fa9-db8f-9827-f09b6a65773d.png)

1. 続いてindex.htmlを修正して保存します。修正内容は以下の通りです。

    ```html
    <!DOCTYPE html>
    
    <html lang="ja">
    <head>
      <meta charset="utf-8">
      <title>はじめての AWS</title>
      <link rel="icon" href="favicon.ico"> <!-- 追加 -->
      <link rel="stylesheet" href="css/styles.css"> <!-- 追加 -->
    </head>
    <body>
      <div>
        <div class="icon"> <!--追加: ここから-->
          <img src="img/lambda.png">
        </div> <!--追加: ここまで-->
        <div class="msg">
          このページでは、AWS について学んだことを書いていきます。
        </div>
      </div>
    </body>
    </html>
    ```
1. style.cssも修正して保存します。記載内容は以下の通りです。
    
    ```
    body {
      width: 300px;
      margin-left: auto;
      margin-right: auto;
    }
    .icon img {
      padding-top: 16px;
      padding-bottom: 16px;
    }
    ```
1. cloud9で編集したファイルを一括でS3にアップロードするために以下のコマンドを実行します。
<バケット名>の部分は作成したS3バケットの名前に置き換えてください。
    ```
    $  aws s3 cp . s3://<バケット名> --recursive
    ```
1. アップロードが完了すると、S3のバケットにフォルダ、ファイルがアップロードされていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/9d043bf2-d7ab-1485-b0b6-3b91fd79c346.png)

1. 以下のバケットウェブサイトエンドポイントのURLへアクセスします。
<バケット名>の部分は作成したS3バケットの名前に置き換えてください。
http://<バケット名>.s3-website-ap-northeast-1.amazonaws.com/
ファビコンや画像が表示されていれば、正常にアップロードできたことが確認できます。
ファビコンが表示されない場合は、キャッシュクリアなどで解消されることがあります。

# CloudFrontを使って、画像をキャッシュさせる

1. 画面左上の検索欄に「cloudfront」と入力し、表示されたcloudfrontをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/8be0c41f-9145-19ac-95ed-bca846c44677.png)

1. 「CloudFrontディストリビューションを作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/d71feeb4-2c48-0290-0e63-90aabc8ca485.png)

1. オリジンドメインをクリックするとプルダウン表示されるので、作成したS3バケットを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/68441798-f77d-7f59-4211-5ff93f717331.png)

1. S3バケットを表示すると次のような項目が表示されるので「Webサイトのエンドポイントを使用」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/8d9c799b-8265-61d2-1324-4193d06fd5db.png)


1. その他の設定はデフォルトのまま「ディストリビューションを作成」をクリックします。

1. 作成が完了するとディストリビューションの一覧に作成したディストリビューションが追加されます。
　ドメイン名をコピーして、ブラウザの別タブに貼り付けて開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/8b2e6aae-6dad-72aa-61ef-9498044d0304.png)
cloudfrontのURLで次のようにページが開けたら、設定完了です。
※httpsではなく、httpとなるので注意してください。
　また、初回は画面の読み込みに時間がかかる場合があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/fa78e9a9-748e-e91f-3d0f-fa4421480325.png)



# 作成したリソースの削除
cloudfrontの削除
1. ディストリビューション一覧にて、削除するディストリビューションにチェックを入れ、「無効」をクリックします。ポップアップが表示されるので、「無効」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/e59b3836-aa9e-ad2a-318e-d91a3dcdd8c4.png)

1. 「削除」ボタンが押せるようになるまで少し時間がかかります。
1. ディストリビューション一覧にて、削除するディストリビューションにチェックを入れ、「削除」をクリックします。ポップアップが表示されるので「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/4feb1327-df88-a680-b095-a181ff0e6f8d.png)
1. 一覧からなくなっていることを確認し、CloudFrontの削除は完了です。



S3の削除
1. バケット一覧にて削除するS3を選択し、「空にする」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/beb62ac0-2d1d-e5a7-2e8e-69880d8637f4.png)

1. 「完全に削除」と入力し、「空にする」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/a8262853-9426-121a-a254-5de7bfee4c55.png)

1. バケット一覧にて削除するS3を選択し、「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/f1f17c3e-4b9d-fbf0-10d1-cccb6d00ad94.png)

1. バケット名を入力し、「バケットを削除」クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/722d7cbc-b5c5-097e-c279-dc136c6c399c.png)

1. 一覧からなくなっていることを確認し、S3の削除は完了です。

cloud9の削除
1. Cloud9の環境一覧にて、削除する環境を選択し、「Delete」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/c86fcbd4-c7da-5990-1f57-0841eb5e67d9.png)

1. ポップアップが表示されるので「Delete」と入力し、「Delete」クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638091/f2e401b2-d842-8ef1-b735-b96879ff3308.png)

1. 一覧からなくなっていることを確認し、Cloud9の削除は完了です。