AWS AmplifyのチュートリアルでJavascript(React)の環境を構築する

いつも忘れないように、コンセプトから。

###コンセプト
・お金かけてまでやりたくないのでほぼ無料でAWSを勉強する
　→ちょっとしたサービスを起動すると結構高額になりやすい。
・高いレベルのセキュリティ確保を目指す
　→アカウントを不正に使われるととんでもない額を請求されるので防ぐ

前回は[「AWSサーバーレスのWebアプリケーションをもっと勉強する」](https://qiita.com/auf/items/f3a84ae3bbf0a3b5cbec)でいろいろ考察してみました。実際に触って試していきたいと思います。

###まずはクライアントサイドから
実際に触って確認していくのですが、クライアントサイドの実装を選択します。前回も書きましたが、Angular、React、Vue.jsから選択します。
https://note.com/erukiti/n/na654ad7bd9bb
↑のサイトが参考になりましたが、Angularって下火になっているんですね。Google＝偉いみたいなイメージがあるので、有力候補になりそうな気がしますけど、今はReactが良さそうです。そもそもJavascriptの経験は無いのでどれでもいいのですが、長い物には巻かれろの精神？でReactを選択します。

じゃあReactにするとして、どうやって勉強するか、なんですが、Amplifyなるものを見つけました。あまり知らなかったのですが、モバイル用のサービスかと思ってましたがWeb系もいけるんですね。チュートリアルもあるようなので、これがちょうどいいのでは？と思いました。ちなみに、よくよく考えると今更Web系ってのもどうなのかな？と思います。実際にサービスを利用する時にブラウザー経由で何かするよりも、アプリを利用することのほうが増えたと思います。なので、本来ならモバイル用のアプリを勉強すべきか？とも思ってしまったのですが、ぶれてしまうのでやめます。

###Amplifyのチュートリアルを開始（事前準備）

以下のURLにアクセスしてチュートリアルを進めましょう。基本的にチュートリアルが良くできているので、私のスクリーンショットは補足的に使って頂けるとといかと思います。
https://docs.amplify.aws/start

Reactを選択します。結構いろいろなチュートリアルがあるんですね。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/7c983f67-0eae-6b37-9463-4b741bcf69ff.png)

ここはそのままスタートするだけです。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/2a968760-f38b-7fca-6b11-c551caca7e7c.png)

nodeを持っていないので落としてきます。インストールは全部デフォルトです。バージョンは最新のものを持ってきました。要件もクリアしているので問題無いですね。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/f4e40cd8-d888-137e-ed7b-8615b109886a.png)

バージョンを確認します。オッケー。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/49ba8bd6-135b-dc50-44a5-9b5d180c3cf5.png)

次にGitも持っていないので落としてきます。ここも同じように最新のものを使います。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/cf08e9be-8f56-4908-ce78-3806922b9a1d.png)

Gitもバージョン確認します。オッケー。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/614a5e69-e7fe-7484-ad62-0861dd112d26.png)

AWSアカウントは持っているので省略します。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/01b9ff89-9e1c-8c23-dbd1-1180a2e2525d.png)


###Amplifyのインストール（事前準備その２）：Option 2: Follow the instructions

以下の２つを行っていきます。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/d9b2b2be-601e-5a09-0f7e-2df3f1860d41.png)


npm installします。下の画面のようにいくつかワーニングが出てますが、スルーしました。ちょっと見てみましたが、よくわからなかったです。。。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/99e36dcd-7c87-e898-04ef-0bcf3d823fbc.png)


amplifyの設定を行います。チュートリアルを読めばわかりますが、マネジメントコンソールで実行していくので注意しましょう。そこまで複雑なことはないですが。。。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/a0e1f740-505a-9375-1068-a260fb0f8434.png)




###Reactの新しいアプリケーションを作る：Create a new React App

Reactの設定を行っていきます。ここも指示通り実行していきます。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/73110a56-7f47-ac1d-a6e6-a1bc45d57351.png)


こんな感じの画面で終了します。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/fc0eb80c-2d13-2c1c-3a76-50c893bf4d4e.png)


Reactの設定がうまくいきました。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/dfe589e4-1ff2-71bb-b81b-cd8667130224.png)


このまま何か進めるのかと思って、言語設定を日本語に変えてみましたが、ただ起動確認するだけだったので、これ以上は何もしません。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/33f93f8e-4109-1f90-5734-826cd7febcb3.png)


###バックエンドを初期化する：Initialize a new backend
続いてバックエンドの設定です。Apnlifyの初期化を行っていきます。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/33485ff3-31ff-ea84-d7f2-c9ec26bf9bb2.png)

設定項目だけ入れると、後は勝手にやってくれます。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/a4fa56c4-d6a4-4d99-4da9-a4888898a9ce.png)




###ライブラリをインストールする：Install Amplify libraries

ライブラリを追加します。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/fa76d4d6-9ef9-0258-e522-879238757b7a.png)

###フロントエンドをセットアップする：Set up frontend
ここもいくつかワーニングが出てましがスルーしました。１つだけ、優先度は低めですが脆弱性の情報が出てたので、指示通りコマンド実行しましたがうまくいきませんでした。コード見て修正する感じだったので諦めます。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/a1b6339d-4471-1838-f796-a91ea776ae9f.png)

index.jsを開いて追記します。が、この記載は間違っています。後になって気づきましたが、プログラミング経験者ならこんな素人っぽいミスをする人はいないでしょう。。。まぁ素人なんです。
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/ef6f6c6c-16ac-245d-aeea-61a736b83a1a.png)

###APIとデータベース接続：Create a GraphQL API and database
データベースに接続していきます。
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/e351071a-a434-bfa0-206f-d30529bc64c3.png)

ここも指示通りAPIを追加していきます。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/7d5680c7-268f-d8a2-5665-6cb786e8db35.png)

###APIのデプロイ：Deploying the API
APIのデプロイです。Reactの初期設定やAnplifyの初期化に比べるとこの辺はわかりやすいです。
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/1cac8ebe-229a-8d58-a5ab-79de4ab068e2.png)

APIキーが取得できて終わりになります。
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/56e9d777-d984-a725-7612-c3b381555c69.png)

ここは確認です。consoleコマンドでマネジメントコンソールが起動するので、そこで設定されているかが確認できます。設定項目を自分で作ったわけではないので、できているのを眺める程度です。
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/81bdf25f-f671-3d7a-443c-8ac41512b9b9.png)

###フロントエンドの設定：Connect frontend to API
フロントエンドの設定を行います。エディタを開いてコピペします。
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/1eb43e0d-db9a-3436-aa8f-985e4665703e.png)

###ローカル環境で実行：Run locally
npm startを行って起動します。先ほど間違っていたところでコンパイルエラーが発生しています。エディタで開いて修正したら勝手にコンパイルされました。標準エディタでATOMを指定したので、ファイル保存が検知されてコンパイルされるんですかね。便利。
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/d76e5990-1c4a-a9d2-b4f1-cff748e12814.png)

画面が起動して終了です。NameとDescriptionに値を入れると下に追加されていきます。
![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480659/c99a6cac-3389-03e5-09e5-c567d8748866.png)


この後、「Add authentication」と「Deploy and host app」が残っていますが、今日はここまで。簡単に環境が作れると言えばそうですが、Amplifyを使いこなすにはもうちょっと勉強しないと厳しいですね。どのコマンドと設定で何が作られていくのかはもうちょっと理解する必要がありそうです。

-----

（追記）後日作成したものをマネジメントコンソール確認しました。
https://qiita.com/auf/items/3cd250f353d3687c28bc