Amplifyについて「what??」から「soso」になるーアプリケーションの構築とデプロイー

ご挨拶

みなさん、こんにちは。

まだ1年目の佐々木です。

この度Amplifyで提供しているアプリケーションを、別のAWS環境に移行する機会がございましたので、
その際に調べたAmplifyについてのナレッジを共有いたします。

 

この記事で得られること

▷Amplifyのメリットと活かし方

▷Amplifyで頻出するサービスの知識

▷Amplify愛

 

対象とする方

AWSのサービスについて詳しくないが、Amplifyを知りたいという方

▷Amplifyを触ってみたが、結局何がメリットかわからないという方

▷最低限のAWSの知識を持っている方(主なサービス名やその機能など)

 

今回は理解を進めていく上で、AWSのドキュメントをベースに進めていきますが、Amplify周りのいわゆる"Developper"系のサービスについても

併せて簡単に説明できればと思います。

 

1. ドキュメントを読む前に

AWSの公式ドキュメントを読む前に、Amplifyで頻出するサービスについて説明します。
 
AWSCliを用いて、amplify init とすると簡単に以下のようなアーキテクチャを作ることが出来上がります。
(一例であり、Amplifyの機能のうちAuthとAPIを追加したものになります)
 
※amplify cliについてはおまけに書いておきます。
 

CloudFrontとS3

フロントエンドのリソースを静的ホスティングすることができる。
これは、amplify cliで amplify hosting addするだけで手軽に設定が可能です。
静的ホスティングを利用しない場合には、GitHubと連携することもできますが、
試してみたところ、S3に静的ファイルなどは見当たりませんでした。
(設定ファイルなどが配置されている。)
 
そのため、直接Amplifyでホスティングとファイルの管理をしていると思われます。
※静的ホスティングとは…S3上に静的なファイルを配置、静的ホスティングの設定をすることでS3のリンクから直接ページを開くことができる。
 

Cognito

様々な認証基盤を用意に利用できるサービス。
これさえ使えば、認証用にDBを用意する必要はなく、まるでフレームワークの認証基盤を使うかのように
利用することができる。
例)Auth.signIn(~認証情報~)
1. AWSのサービスなので、HTTPでCognitoに認証をリクエス
2. Cognitoで設定してあるサービスを利用可能

AWS AppSync

GraphQLを使ってアプリケーションが必要なデータを正確に取得できるようにするマネージド型サービス
この「正確に取得する」とは何か?
 
それを説明するためには以下の三つの特徴を理解する必要があります。
 

<オフラインでの利用>

オフライン時は、データの更新/削除/作成をキューし、オンラインになった際にこれをデータの整合性が取れるようにAWS AppSyncが更新してくれる。

 

<リアルタイムデータの利用>

GraphQLのSubscriptionによって、データが書き換えられた際にもそれが即時反映される。
※Subsucriptionはデータに変更があったタイミングで、データをクライアントに送信(キャスト)してくれる仕組みです。
 

<コラボレーション>

複数のソースに対してブロードキャストするので、複数人でのリアルタイムデータ共有(共同編集など)に役立ちます。
 
 
上記の通り、「正確に取得する」とは以下のような意味で使われています。
 
  • リアルタイムで正確なデータ
  • オフラインで操作した後でも正確(整合性のとれる)データ
 

まさに、「データのやり取りに革新をもたらすサービス」ですね。

 
 
※Amplifyのメリットは、GraphQLの良さに乗っかっている節があるので、もしご存じでない方は先に「こちらのBlackBelt」を読んだほうが分かり易いかもしれません。
https://d1.awsstatic.com/webinars/jp/pdf/services/20190821_AWS-BlackBelt_AppSync.pdf
 
 

DynamoDB

フルマネージドのNoSQL型DB。
アプリケーションで使用したいデータをここに詰め込んでいく。
 
フルマネージドなので、もちろん容量は無制限。
オートスケーリングも容易です。
 

3. 公式を通してAmplifyの良さを理解する

Amplifyの利点

◇ より幅広く、より深い
◇ どのプラットフォームでも構築可能
◇ データの単純化
◇ オフラインの同期
◇ サーバー管理が不要
◇ きめ細かいセキュリティ管理

AWS公式のAmplifyのページには上記のような利点が書かれています。
これらをより深く理解するために、これまで書いてきたどのサービスがその利点を実現しているのかも併せて説明していこうと思います。
 
 

《より幅広く、より深い》

Amplifyで利用できるサービスが幅広く、スケールが容易です。
▷DynamoDB:容量が無制限
AWS AppSync:多数のリソースにブロードキャスト可能
※各種マネージドサービスを利用するため、スケールも多数のリクエストにも対応が可能になります。
 
《どのプラットフォームでも構築可能》
AmplifyはAndroid/iOSアプリ、ウェブアプリのいずれもAmplifyで開発することが可能です。
フレームワークの選定、デプロイまでのフロー、などについて幅広く用意されている。
先ほども書きましたが、GitHubからのCDもとても簡単に設定することができます。
 
《データの単純化
▷DynamoDB:データ構造が複雑にならない(NoSQLの特徴)
AWS AppSync:GraphQLを用いたことでRESTAPIに比べるとネットワークリクエスト数が抑えられる
 
《オフラインの同期》
▷Amplify特有:Amplifyのローカル(Amplify DataStoreというオンデバイスストレージリポジトリで、スタンドアローンのローカルデータストア)にデータの問い合わせを行う
AWS AppSync:オンラインになった際には、Amplify DataStoreとクラウド上のデータ間で整合性をとる
 
《サーバー管理が不要》
※各種マネージドサービスを利用しているため、サーバーの管理が不要
すなわちサーバーレス(殺し文句)である。
 
《きめ細かいセキュリティ管理》
▷Cognito:認証はCognitoで利用可能な様々な認証方法を利用することができる。
aws.amazon.com
アクセスコントロール⇒ロールを定義してユーザーレベルでリソースへのアクセスを制御する
認証方法⇒多要素認証/GoogleFacebookによるサインイン/SAMLによるActiveDirectoryを介したサインイン

まとめ

以上、Amplifyの利点がどのサービスに基づいたものか理解できたかと存じます。

なかなか一つ一つのサービスだと試しづらいかとは思いますが、Amplifyでは手軽にアプリケーションを作れるので

思い立ったときに試してみてはいかがでしょうか?

 

 

4. おまけ(Amplify Cliの使い方)

コマンドの使い方は非常にGitコマンドに似ている(と思います)。
なので、以下似ているものはGitコマンドと対比しつつ記載いたします。
  • amplify init(≒ git init)
↪ローカルのディレクトリを、リモートに接続する。
(無い場合は作成する)
  • amplify add(≠ git add)
↪アプリケーションにAmplifyの用意している機能を追加する。
例) Cognitoによる認証,AWS AppSyncによるAPI通信, SumerianによるXR(AR,VR,MR)…
  • amplify status(≒ git status)
↪アプリケーションのローカルリソースの状態を表示する。
  • amplify push(≒ git push)
↪バックエンドのリソースをAmplify上に共有する。
  • amplify publish(≒ None)
↪バックエンドだけではなく、フロントエンドのリソースもAmplify上に共有する。
この際、フロントエンドをホスティングするよう要求される。
 
その他、もっとコマンドを知りたいという方はこちらのサイトがリッチなので参照ください。
qiita.com
 

 

 

ブログ著者

 

 

 

アプリケーション開発バナー