Aws Amplifyって何者?導入経験者がそのメリット・認証周りの特徴について触れた!

Aws Amplifyって何者?導入経験者がそのメリット・認証周りの特徴について触れた!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんちには!

前回の Aws サミットでは大々的に AWS Amplify が挙げられていました。わたしたちも非常に多くの案件で採用事例のある画期的なフレームワークです。

本記事では AWS Amplify をご紹介します。

想定する読者

  • AWS でのサーバーレス開発に興味のあるヒト
  • AWS Amplify の概要を知りたいヒト
  • AWS Amplify で新規事業開発を考えているヒト

Amplify とは何者?

一言で言えば、「バックエンド構築からフロントエンド開発までカバーするオールインワンの開発フレームワーク」です。

まず、わたしたちが案件で実用してきた所感から、魅力的なところをご紹介します。

  • 対話式のバックエンド構築を提供する CLI が便利
  • 複雑化しやすい認証の仕組みを超簡単に構築可能
  • 各種バックエンドのリソースアクセスをセキュアにする仕組みが存在
  • ウェブ、iOS、Android ライブラリ全てへ対応可能なフレームワーク
  • React、React Native、Angular、Ionic、Vue 用のフレームワーク固有のUIコンポーネントライブラリの提供
  • スキーマ定義から各インフラを自動的に構築
  • デプロイがとても簡単

どれも素晴らしい特徴ですが、目玉なのは「認証と認可の提供」ではないでしょうか。開発プロジェクトで最も複雑化しやすいのは認証と認可の仕組みは、グループ権限や個人データへのアクセス権限など考えることが盛り沢山です。

そんな複雑化しやすい認証周りを AWS Amplfiy ではシンプルに実現可能です。

Amplify は認証・認可を最短30分程度で構築可能

例えば、EC サイトでの商品作成と購入を考えてみましょう。

管理者は商品情報を作成し、カスタマーは商品情報を読み込み表示します。

一般的な EC サイトでは、カスタマーが商品情報を更新することはまずありません。(商品に対するコメントなどは追加更新あり得ると考えます)

ここで必要になる認可(権限)は下記になります。

  • 商品マスターに対して自由な操作を行える権限
  • 商品マスターに対してリードオンリーな権限

これを、管理者ユーザー及びカスタマーに対してそれぞれ設定する実装が必要です。Laravel などのフレームワークを用いて構築すればある程度楽はできますが、自前で実装が必要な部分はまだまだ多いですね。

AWS Amplify では、認証・認可に必要な AWS のインフラを対話式の CLI による自動構築提供してくれる上に、SDK による認証ハンドリングまで提供してくれています。

NuxtJS などの場合には、Middleware に Amplify の認証チェックを1行仕込むだけで、簡単に認証状態を確認することが可能です。

Amplify は、コマンドラインで設問に回答するだけでバックエンドが構築される

AWS Amplify の認証・認可では、下記の図のような AWS アーキテクチャーを提供してくれています。

Aws Amplifyにって何者?次世代のフルスタックエンジニアのフレームワークを簡単に説明!
Amplifyの認証・認可の概要図

繰り返しになりますが、この AWS インフラを、対話式の CLI の質問に答えるだけで、構築することが可能です。( SNS 認証で必要な認証アプリ作成、アクセストークン設定は別途取得作業が必要になることがあります)

AWS Amplify が自動構築する認証に関するバックエンドの構成は、AWS の提唱する Cognito を用いた AWS サービスの認証・認可のベストプラクティスを用いるので、スケーラブルでかつ将来的な保守運用も安心です。

DB のレコード単位でのアクセス制御も簡単に実現可能

レコード単位のアクセス制御は実装しようとすると面倒なもので、実現しようとするなら ORM に Middleware をかませるなどを検討しないといけません。

Amplifyでは、スキーマ定義の「Owner Authorization」機能を用いて実現可能です。

type Post @model @auth(rules: [{allow: owner}]) {
  id: ID!
  title: String!
}

type Post
  @model
  @auth(
    rules: [
      {allow: owner, ownerField: "owner", operations: [create, update, delete, read]},
    ])
{
  id: ID!
  title: String!
  owner: String
}

@auth ディレクティブで、owner フィールドに設定されている ID を検証し、ログインしているユーザーが操作可能なレコードか否かを検証することが可能です。

これを応用すると、「ログインしているユーザのプロフィールの更新はログインしているユーザのみ行える」という仕様があっという間に実現可能です。このようなセキュリティの仕組みも、Amplify の魅力的なところだと感じますね。

まとめ

まだまだ紹介したいことは盛りだくさんですが、徐々にブログを通じてお伝えしたいと思います。

AWS Amplify の利点としては、わたし達も採用事例の多い GraphQL を容易に扱えるということもあり、今後目が離せないフレームワークです。

AWS Amplify、GraphQL に関する開発はお気軽にご相談ください。