こんにちは、最近サーバレスにハマるサーバエンジニアのSRE課栩野です。
目次
AWS Amplify を使ってみた (Reactアプリの開発環境作成まで)
今回の題材は AWS Amplify てことで、普段は運用業務がメインなので
アプリケーションの開発に関わることはないのですが、個人的にサーバレス周りの
AWSサービスが気になっているので、 Amplify について色々調べて触ってみました。
Amplifyとはなんだ?
どれくらい料金かかるの?
どうやって使うの?
みたいな部分について調べて、最終的には初期状態のReactアプリケーションを
Amplify にデプロイして公開するところまでやっていきます。
Amplify が気になっている方や、ちょうど Amplify で React の開発環境作りたかった
みたいな方の参考になれればと思います。
AWS Amplify とは...?
実際に触って行く前に、そもそも Amplify とはどんなサービスなのか?
色々調べてみました。
Amplifyのサービスページから説明を抜粋すると
AWS Amplify は、モバイルとウェブのフロントエンドデベロッパーが
安全でスケーラブルなフルスタックアプリケーションを構築しデプロイ
できるようにする、AWS による製品およびツールのセットです。Amplify
を使用すれば、アプリケーションのバックエンドを数分で設定し、わずか
数行のコードでそれをアプリケーションに接続できます。そして、3 ステップ
で静的なウェブアプリケーションをデプロイできます。AWS Amplify で迅速な
市場投入を実現しましょう。
とりあえず書いてる内容の雰囲気的としては
静的なウェブアプリケーションをバックエンド込みで
安全でスケーラブル
そして簡単
しかも迅速
にデプロイできるツールのセット
更に詳しく AWS のソリューションアーキテクトの方のブログに説明があったので...
Amplify とはサーバーレスなバックエンドをセットアップするための
CLI、フロントエンドで利用できる UI コンポーネント、CI/CD やホスティングのための
コンソールを含む Web およびモバイルアプリ開発のためのフレームワーク
サーバレスで AWS のバックエンドを構成しつつ、良い感じにアプリを
開発を進めるためのフレームワークで、以下の3つの構成要素が存在するとのこと
Amplify CLI
Amplify Framework
Amplify Console
・Amplify CLI
AWS のバックエンドをコマンドで構築するためのインターフェース
コマンドから対話式で簡単にバックエンドの構築ができて設定ファイルなんかも自動生成してくれる
・Amplify Framework
Amplify CLI で作成したバックエンド環境との連携処理を数行で記述できるフレームワーク
iOS や Android、JS 系のフレームワークに最適化されたインターフェースが提供されてる
・Amplify Console
アプリのホスティングや CI/CD での運用を自動化したりしてくれるマネージドサービス
GitHub 等のソースリポジトリと連携できたり、柔軟な開発を可能にしてくれる
詳しく知りたい方は下記リンクのブログで確認していただければです。
参考:スタートアップが AWS Amplify を使うべき 3 つの理由
Amplify の利用料金について
Amplify がどんなものか少し分かったところで
実際使うとなれば気になってしょうがない利用料金について調べました。
実際に利用して料金が発生するのは以下
・Amplify フレームワーク
Amplify フレームワークの使用自体には料金が発生しませんが
実際にバックエンドで使用する AWS サービスの使用料金は発生します。
・静的ウェブホスティング
Amplify Console ではビルドとデプロイ、ホスティング機能に対して従量課金が発生します。
- ビルド&デプロイ費用 : ビルド 1 分あたり 0.01USD
- ストレージ費用 1GB あたり : 0.023USD/月
- ホスティングサービス 1GB あたり : 0.15USD
これだけではあまり費用感が分からないので
上記リンク内にあった実際に発生する料金パターンの一例を紹介します。
まず Amplify の1ヵ月あたりの利用料金算出計算式が以下のようで...
▼ 1ヶ月あたりのビルド&デプロイ費用の計算式
1ヵ月の合計ビルド時間 = 開発者数 x 1日あたりのコミット回数 x 業務日数 x 平均ビルド時間(分)
1ヵ月あたり料金は... 1ヵ月の合計ビルド時間 x 0.01USD
▼ 1ヶ月あたりのストレージ費用の計算式
1ヵ月あたりのストレージ (GB) = ウェブアプリケーションのサイズ(GB) x 月間ビルド数
1ヵ月あたり料金は... 1ヵ月あたりのストレージ (GB) x 0.023USD
▼ 1 ヶ月あたりのホスティング費用の計算式
1ヵ月あたりのホスティング (GB) = 1日あたりのアクティブユーザ数 x 平均ページサイズ(GB) x 日数
1ヵ月あたり料金は... 1ヵ月あたりのホスティング (GB) x 0.15USD
これら3つの合計金額 + バックエンドの AWS サービスの利用料金が
実際に発生する1ヶ月分の利用料金となります。
この計算式に以下の開発パターンを当てはめてみると...
- 1 日あたり 300 のアクティブユーザーを持つアプリケーション
- 開発者 5 人でコードを 1 日 1 人あたり 2 回コミット
- 平均ビルド時間 3 分の業務日数が 月 20 日
- アプリケーションのサイズは 25MB、リクエストされるページの平均サイズは 1.5 MB
ビルド&デプロイ(6USD) + ストレージ(1.97USD) + ホスティング(0.11USD)
= 8.08USD/月
ここにバックエンドで使うサービス料金が少し乗っかる形になります。
個人で開発する分にはもっともっと安くなるので、正直あまり費用は気にすることなく
触ることができると思います。
実際に Amplify を使ってみる
どんなサービスか、また費用はどれくらいかかるのか
その辺が分かって安心できたところで、実際に Amplify を触っていきます。
冒頭でも軽く触れた通り初期状態のReactアプリケーションをとりあえずは
Amplifyにデプロイして公開
といったところまでをやっていきたいと思います。
必要な環境
以下環境が整っている程で進めていくので
整っていない方は環境作成からお願いします。
- AWS アカウントの取得済み
- Node.js バージョン 10 以上
- npm バージョン 5.6 以上
React プロジェクトの作成
まずはローカルPC 上で React プロジェクトを作成します。
ここからはコマンドラインで操作を進めていきます。
以下コマンドでtest-appという名前のReactプロジェクトを作成する
(npxを頭につけるとパッケージをインストールせずに実行できる)
$ npx create-react-app test-app
プロジェクトディレクトリの配下に移動
$ cd test-app
ローカルPCで動作確認
$ npm start
もしくはyarnがインストールされている場合は
$ yarn start
localhost:3000 で React の初期画面がたちがることを確認します。
Amplify CLI の設定
次に Amplify CLI をインストールして使える状態に設定していきます。
Amplify CLIをグローバルインストール
$ sudo npm install -g @aws-amplify/cli
続いて Amplify CLI を使用するための初期設定を進めていきます。
以下コマンドで初期設定開始
$ amplify configure
すると AWS アカウントへのサインイン画面がブラウザで立ち上がるので
Administrator 権限のある自分の AWS アカウントでサインインします。
サインインできたら、コマンドライン側に「Press Enter to continue」
と表示されているので、Enter キーを叩きます。
これでアカウントの認証ができました。
引き続きここから対話式で初期設定を行っていきます。
どこのリージョンを使うか聞かれてるので
東京リージョン(ap-northeast-1)にカーソルを合わせてEnter
Specify the AWS Region
? region: (Use arrow keys)
us-east-1
us-east-2
us-west-2
eu-west-1
eu-west-2
eu-central-1
❯ ap-northeast-1
(Move up and down to reveal more choices)
Amplify CLIを操作するためのIAMユーザを作成するので任意のユーザ名を入力してEnter
(※もし既存のユーザを使う場合は既存のIAMユーザの名前を入力してEnter)
Specify the username of the new IAM user:
? user name: tochino
するとブラウザで IAM ユーザの作成画面が立ち上がるので、とりあえずは
そのままデフォルト状態で[次のステップ:アクセス権限] [次のステップ:タグ] [次のステップ:確認]
とクリックして、[ユーザの作成]をクリックします。
ユーザを作成したら、アクセスキーとシークレットアクセスキーが表示されるのでコピーしておきます。
(.csv のダウンロードから認証情報が記載された csvファイルをダウンロードして大事に保管)
※もし既存のユーザ情報を使う場合は、IAMユーザの作成はせず、画面を閉じてコマンドラインに戻ります。
コマンドラインに戻ると「Press Enter to continue」と表示されているので Enter
するとまた対話の続きを...
先ほど作成したユーザもしくは既存ユーザのアクセスキー情報を入力
Enter the access key of the newly created user:
? accessKeyId: AKIA6GEFMYUJ********
続けてシークレットアクセスキーを同様に入力
? secretAccessKey: ViGO4rI0xoMPbjX509PzuDQR****************
作成するプロファイルネームを聞かれるので、IAMユーザ名と一緒の名前を入力してEnter
(既に既存のユーザ情報が存在する場合は上書きされます。)
? Profile Name: tochino
ちなみにプロファイルとは Amplify CLI を実行する際に必要な認証情報が記載された
設定ファイルで、ユーザのホームディレクトリ配下に以下のファイル名で保存されます。
.aws/config
.aws/credentials
これで Amplify CLI の初期設定も完了です!
React プロジェクトの初期設定
作成した React プロジェクトを Amplify に持っていくための初期設定を行います。
先ほど作成したプロジェクトディレクトリ test-app 配下にいる状態で以下コマンドを叩きます。
$ amplify init
対話式でヒアリングがはじまるので回答していきます。
プロジェクト名を聞かれるので、デフォルトのままEnter
? Enter a name for the project (test-app)
開発環境の名前を聞かれるので、とりあえずはそのまま dev でEnter
? Enter a name for the environment (dev)
エディター何使ってるの?って聞かれるので正直に答える
? Choose your default editor: (Use arrow keys)
❯ Visual Studio Code
Atom Editor
Sublime Text
IntelliJ IDEA
Vim (via Terminal, Mac OS only)
Emacs (via Terminal, Mac OS only)
None
言語は何使ってる?って聞かれるので javascript
? Choose the type of app that you're building (Use arrow keys)
android
flutter
ios
❯ javascript
フレームワークは何使ってる?って聞かれてるので react
? What javascript framework are you using (Use arrow keys)
angular
ember
ionic
❯ react
react-native
vue
none
ソースディレクトリはデフォの src のままEnter
? Source Directory Path: (src)
ビルドファイルのディレクトリもデフォの build のままEnter
? Distribution Directory Path: (build)
BuildコマンドもデフォのままEnter
? Build Command: (npm run-script build)
StartコマンドもデフォのままEnter
? Start Command: (npm run-script start)
AWSプロファイル使う?って聞かれるのでYes
? Do you want to use an AWS profile? (Y/n)
先ほど作成したプロファイル名を選択
? Please choose the profile you want to use (Use arrow keys)
❯ tochino
全ての入力が完了すると裏で CloudFormation が走り出して
良い感じに必要な設定をしてくれます。
少し待って
Initialized your environment successfully.
が表示されたら React プロジェクトでの初期設定も完了です。
これで Amplify 上にもプロジェクトが作成されました。
アプリケーションを Amplify にデプロイ
準備が整ったので Amplify上にアプリケーションをデプロイしていきます。
Amplify にデプロイする時は amplify add
コマンドを使います。
amplify add で hosting を追加する
$ amplify add hosting
するとまたまた対話式になるので...
どの方法でデプロイするか聞かれるので、今回は「Hosting with Amplify Console」を選択
? Select the plugin module to execute (Use arrow keys)
❯ Hosting with Amplify Console (Managed hosting with custom domains, Continuous deployment)
Amazon CloudFront and S3
GitHub等ソースリポジトリと連携してCI/CD環境を作成する場合は「Continuous deployment」を
選択しますが、今回はとりあえずCLIからデプロイだけ行うので「Manual deployment」を選択
? Choose a type (Use arrow keys)
Continuous deployment (Git-based deployments)
❯ Manual deployment
Learn more
入力を終えて少し待つと
You can now publish your app using the following command:
Command: amplify publish
と表示されるので。指示にしたがってamplify publish
コマンドを叩きます。
$ amplify publish
反映する設定の確認が表示され、OperationがCreateなら新規作成なのでYes
✔ Successfully pulled backend environment dev from the cloud.
Current Environment: dev
| Category | Resource name | Operation | Provider plugin |
| -------- | -------------- | --------- | ----------------- |
| Hosting | amplifyhosting | Create | awscloudformation |
? Are you sure you want to continue? (Y/n)
ちなみに publish は CLI からアプリケーションをデプロイする際のコマンドで
内部的には CloudFront や S3 を使ってアプリケーションがデプロイされます。
また裏で良い感じに CloudFormation が走り出して各種リソースを設定してくれます。
React のビルドも良い感じに実行されて最後に URL が発行されます。
✔ Zipping artifacts completed.
✔ Deployment complete!
https://dev.dcww7chw0t0hj.amplifyapp.com
発行された URL にブラウザからアクセスすると...
無事 React の初期画面が表示されました!
アプリのソースを書き換えた際は再度「amplify publish」を実行すると
再デプロイされ修正内容が反映されます。
これで無事 React アプリをデプロイして公開することができました!
作成した環境の削除
最後に作成した環境の削除は簡単で...
以下コマンドをプロジェクトディレクトリで配下で実行
$ amplify delete
元に戻せないけどほんまにええんやな? みたいなことを聞かれるのでYes
? Are you sure you want to continue? This CANNOT be undone. (This would delete all the environments of the pro
ject from the cloud and wipe out all the local files created by Amplify CLI) (y/N) y
裏で CloudFormation さんが綺麗に掃除して関連するリソースを全て削除してくれます。
あとがき
Amplify 触ってるとお手軽すぎてサーバエンジニアの仕事が...
引き続き Amplify 関連の記事を上げていく予定なので次回は以降は
・CI/CD 環境の作成と独自ドメインの割り当て
・Cognito を使った認証設定とカスタマイズ
・AppSync を使った簡単なチャット機能の作成
とかこの辺について書いていこうと思ってます。
最後までありがとうございました。
参考
AWS Amplify
スタートアップが AWS Amplify を使うべき 3 つの理由
AWS Amplify ドキュメント
AWS Black Belt Online Seminar AWS Amplify
運用サービス課 課長
運用・監視の設計から導入まで、運用サービスを担当してます。
運用監視やセキュリティ関連の話題に興味があるので、そのあたりのブログを多めで投稿していきたいと思ってます。
LINK
クラウドベリージャム:プロフィールページ