AWS Amplify Consoleを使って楽々デプロイ

# はじめに
Vue.jsを勉強するにあたり、自己紹介サイトを作成してみました。
今回は、作成したサイトの公開方法になります。

# 用意するもの
- AWSのアカウント
- SPA(Vue.js)

# AWS Amplify Consoleを使う
### AWS Amplify Consoleとは
サーバーレスバックエンドを持つ静的ウェブサイトあるいは単一ページのウェブアプリケーションの開発、デプロイ、ホスティングのための詳細なワークフローを提供してくれるサービス。

#実践
今回はAmplifyを使わない公開方法とAmplifyを使った方法、両方を実践していきます。

## 手動でデプロイし、ブラウザからアクセスする
- ローカルPCでビルドして静的ファイルを作成する
    - 対象ディレクトリで
    - ```$ yarn build```
    - ディレクトリ内に「<font color="Red">dist</font>」があり、中に静的ファイルが生成されていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/24ef712d-18f7-59a5-5119-724197342b53.png)
- s3バケットを作成し、静的サイトとして公開する。
    - AWS Consoleから「S3」を検索。
    - 任意の名前でバケットを作成。
    - プロパティのStatic website hostingを選択。
    - 「このバケットを使用してウェブサイトをホストする」を選択。
    - <font color="Red">インデックスドキュメントを設定</font>して保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/cfeac61d-f17f-9506-dc45-a6f98907ca91.png)

    - デフォルトではパブリックアクセスをブロックするので設定を変更する。
        - 「アクセス管理」を選択。
        - 「編集」を選択し、「<font color="Red">パブリックアクセスをすべてブロック</font>」のチェックを外して保存。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/c471e853-dd16-b1ce-2d47-61f3070703dc.png)

    - バケットポリシーを追加。
        - 「アクセス管理」を選択。
        - 「バケットポリシー」を選択。
        - 下記<font color="Red">ポリシーエディタ</font>を入力して保存。

>
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::{{s3のバケット名}}.com/*"
            ]
        }
    ]
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/18335bb3-6df4-4dc7-a9f7-ea69288e1f24.png)

- 作成したバケットにdistファイル内をアップロード
- [静的ウェブサイトホスティング用に S3 バケットを設定する方法](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/static-website-hosting.html)
- プロパティのStatic website hostingにあるエンドポイントにアクセス
- サイトが開いたら成功です。

以上が__Amplifyを使わず手動でデプロイしアクセスする__方法になります。

##Amplify Consoleを使ってデプロイする。

- CodeCommitに自分のリポジトリを作成する。
    - AWS Consoleのサービスから「CodeCommit」を検索。
    - 右上の「リポジトリを作成」をクリック。
    - リポジトリ名を入力して「作成」をクリック。

　これでCodeCommitに自分のリポジトリを作成できました。

- 作成したSPAを自分のリポジトリに1stコミットする。
    - 先ほど作成したリポジトリを任意の場所にクローンします。
    - ```$ git clone ssh://git-codecommit.xxxxxx.amazonaws.com/xxxxx```
    - cloneしてきたディレクトリに作成したSPAを入れる(※ディレクトリを丸ごと入れないこと)
    - 対象ディレクトリで
    - ```$ git add .```
    - ```$ git commit -m "{{任意のメッセージ}}"```
    - ```$ git push origin master```
- CodeCommitでpushされているかを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/2fbe1c41-8cc2-4a9f-f120-5ac11fc0ac4f.png)

- AWS Consoleで「AWS Amplify」を検索。
- 「Deploy with the Amplify Console」の「<font color="Red">GET STARTED</font>」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/6a52ccf4-1862-7702-0b81-c6f251970349.png)
- From your existing codeでは、先ほど<font color="Red">CodeCommit</font>にcodeをpushしたので選択し、Continueをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/14dca5ad-3664-9ec4-b79c-4ccb1a7d2ece.png)
- 自分の作成したリポジトリとブランチ「master」を選択し、次へをクリック
- 任意のアプリの名前を入力し、<font color="Red">ビルドの設定を以下に書き換えます</font>。
>
```
version: 1
frontend:
  phases:
    preBuild:
      commands:
        - nvm install v12.16.2
        - nvm use v12.16.2
        - npm install -g yarn
        - yarn install
        - node -v
    build:
      commands:
        - yarn run build
  artifacts:
    baseDirectory: dist/
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*
```

- Roleを新規作成して>次へをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/ed77df0c-ce36-e07c-0278-2d37f499491d.png)

- 保存してデプロイをクリック
- Amplifyがプロビジョン,ビルド,デプロイ,検証を自動で進めていくの完了するまで待ちます。
- 成功するとプロビジョン~デプロイにチェックマークが付きます。
- ドメインのURLをクリックして画面が表示できれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/a6691173-ae3f-38a0-f14a-18610f858af2.png)

###公開したサイトに変更を加える
>
Amplify Consoleではコードがコミットされるたびにフロントエンドとバックエンドが単一のワークフローにデプロイされます。
これにより、アプリケーションのフロントエンドとバックエンドの間の矛盾は解消され、デプロイが正常に完了した場合にのみ、ウェブアプリケーションが更新されます。

AWSのユーザーガイドにこのような記載があります。
今回は変更を加えてコミットすることで、実際に更新されるか確認していきます。

- masterブランチしか存在しないので新しいブランチを作成し、移動します。
    - ```$ git branch develop origin/master```
    - ```$ git checkout develop```
- developに移動したのでソースコードを変更し、コミット,プッシュします。
    - ```$ git add .```
    - ```$ git commit -m 'commit'```
    - ```$ git push origin develop```
- AWS Consoleで確認すると、ブランチに「develop」が追加されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/5ddba6e1-9f4a-7fd7-815a-17e71a14d751.png)

- AWS Consoleでプルリクエストの作成をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/6db20b48-b5c1-3444-9d2d-d20e2810e860.png)

- ターゲットに「master」,ソースに「develop」を選択して比較をクリック。
- 画面下に変更内容が表示されるので、間違いなければタイトルを入力して「プルリクエストを作成」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/9111542e-6c71-f84e-e2d1-feec4c56554e.png)

- プルリクエストの画面に先ほど自分で作成したプルリクエストがあるのでクリック。
- 右上の「マージ」をクリックすると下記のような画面が表示されるので、「プルリクエストのマージ」をクリック。(※ブランチを残したい場合は削除のチェックを外す)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696789/76f4716e-0663-5af3-e9a9-a1e0e7044acb.png)

- Amplify Consoleで自動的にビルド・デプロイが走ります。
- 最後に画面を更新して、変更されていれば成功です。

もし、変更の一連の流れをAmplifyなしで行おうとすると
1. ソースコードを変更後に手動でビルドを行う
2. 公開しているs3に更新したdistをアップロードする
といった手順が必要になります。

###自動デプロイのメリット
- 自動化することで履歴が残る
- 戻り先を指定してロールバックできる