🥄

5分でAWS Amplifyを分かった気になりたい

2023/04/26に公開

まずは結論

Amplify は様々な AWS サービスをそれぞれ抽象化し、Amplify でその抽象化した AWS サービスをアプリケーションに統合してくれるもの

これがしっくりこなかった方は、この先の記事を読む事をおすすめします。

背景

  • Amplify は、モバイルアプリ、ウェブアプリをより速く開発するためのフレームワークということは知っているが、正直なところあまりピンとこない、、😓
  • 「爆速でアプリを作れる」とだけで説明したくない

ざっくり AWS Amplify とは?

Amplify は主に以下 3 つの構成からなります

  • Amplify CLI
    • コマンドで AWS のバックエンドを構築出来る
  • Amplify Framework
    • Amplify CLI と一緒に使うことで、バックエンドとアプリケーションを連携出来る
  • Amplify Console
    • CI/CD の運用を自動化出来る
    • Web アプリをデプロイ、ホスティング出来る

また、Amplify を使ったアプリケーション開発の流れは大体以下の 3 つです。 1. Amplify CLIを用いてバックエンドを構築する 2. Amplify Framework でアプリケーションの実装をする 3. デプロイ

今回はこの 3 つの中から、Amplify CLI の概要について見ていきます。

なぜ Amplify?

アプリ開発には、本来のビジネスロジックの他に、以下の画像にあるような技術要素を構築する必要があります。

aws-fragments
技術要素

  • アプリケーション開発に必要な一般的な技術要素をゼロから構築するのはきつい
    • AWS では上記の各要素を構築するためのサービスを提供しているが、全て 0 から勉強して、構築はなるべくしたくない、、

その問題を解決するのが、Amplify であり、Amplify CLI を用いることで、バックエンドをコマンドラインで操作、管理できる

  • 本来のアプリケーションのロジック開発に注力出来る!
  • AWS サービスを詳しく知らなくても、サービスを使い、連携が出来る
    • 勿論、細かく設定したい場合には詳細を知る必要はありますが

amplify-cli-build

Amplify CLI を用いたバックエンドの構築イメージ

Amplify では何ができるのか?

  • Amplify CLI を使うことで、AWS のサーバーレス構成を対話形式で自動でセットアップ出来ます
    • Amplify ではカテゴリという概念がある
      • api、auth、function などのカテゴリが用意されており、amplify add <カテゴリ名>と記述することで機能を追加できます
      • 例 ) amplify add authを実行することで Cognito の認証機能を追加することができます

簡単に Amplify で構築可能な機能(カテゴリ)一覧を作成してみました

機能 出来ること 関連する AWS サービス 備考
API(GraphQL/REST) エンドポイントを作って、CRUD 操作を可能にする AWS AppSync , DynamoDB, API Gateway , AWS Lambda -
Authentication ユーザー認証 Amazon Cognito ソーシャルログインもサポートしている
Storage 外部ストレージを作成、利用できる S3 コンテンツを public/protected/private で管理できる
Functions CLI を使用して、関数(Lambda)実行ロールポリシーを更新して、CLI で生成/管理される他のリソースにアクセスすることを可能にする Lambda -
Hosting CloudFront または S3 を使用し、アプリのデプロイ、ホストを行う CloudFront , S3 -
... ... ... ...

他にも、Analytics(ウェブサイト分析)、Noifications(モバイルへの通知)、Amplify Studio 経由で DynamoDB + S3 などの既存リソースを Amplify プロジェクトに統合などたくさんのことが出来ます。

どうやって Amplify が構築されている?

Amplify CLI を使うことで、各機能を構築、追加出来ることはわかりました。
しかし、実際内部では、どのように実装、構築されているのでしょうか。

結論、CloudFormationを利用して実装されています。

Amplify CLI を使用して機能を設定すると、内部で必要な AWS サービスがCloudFormationに自動的に保持されます
Amplify CLI は内部的に CloudFormation のファイルを作成し、それをバックエンドに反映してくれます

  • 簡単にCloudFormationとは
    • AWS クラウド環境内の全インフラリソースを記述し、テンプレート化して展開する環境自動設定サービス
      • JSON/YAML 形式で記述
      • AWS リソースの構築を効率化したい
      • 開発/テスト/本番環境を利用するインフラを標準化したい

なので、Amplify CLI を利用しなくても、バックエンドを構築することは可能ではあります。
しかし、利用しないと CloudFormation のテンプレートを手動で記述してモデル化をして構築しなくてはなりません。(私の場合、そもそも CloudFormation の書き方が分からないです、、)

また、Amplify CLI は CloudFormation のテンプレートファイルを境界に AWS のバックエンドと疎結合になっているため、一般的な構成は Amplify CLI で構築し、Amplify CLI で対応できない要件に対しては AWS CDK や手書きの CloudFormation を使用し、柔軟に構築することが可能になります。

amplify
Amplify CLI を用いたバックエンドの構築イメージ

まとめ

  • Amplify は 3 つの構成要素からなる
  • AWS サービスを詳しく知らなくても、サービスを使い、連携が出来る
  • Amplify CLI を使うことで、対話形式で AWS のサーバーレス構成を対話形式で自動でセットアップ出来る
  • 内部では CloudFormation で構成されている

所感

個人的には、Amplify は様々な AWS サービスをそれぞれ抽象化し、Amplify でその抽象化した AWS サービスをアプリケーションに統合してくれるものだと理解しました。
まだ AWS サービスや、バックエンドについての知識が浅い自分にはとてもとっつきやすいサービスだなと感じました。
ただ、深く理解するためには各 AWS サービスについての知識が前提になるのでひたすらインプットが必要です。
今回は概要について書きましたが、今度は実際に 0 から自分で Amplify を使ってみてもっと深めメリットやデメリットを共有できたらな思います。

おまけ

Amplify CLI を使ったバックエンド構築の流れ(Amplify CLI Get Started)

  1. Amplify CLI のインストール
    • ローカルに Amplify CLI をインストール
      • npm install -g @aws-amplify/cli
    • Amplify CLI の初期セットアップ
      • amplify configure
        • CLI から設定する情報
          • リージョン
          • ユーザーの認証情報
  2. プロジェクトに Amplify を導入する
    • amplify init
    • CLI から設定する情報
      • プロジェクト名
      • 環境(prod , staging , dev など)
      • 開発する言語、フレームワーク
      • 使用するエディタ
      • など
  3. 機能(カテゴリ)の設定
    • amplify add <カテゴリ名>
      • カテゴリ名
        • auth
        • storage
        • function
        • api
        • など
    • 例 ) 認証機能を追加したい時は、amplify add auth を実行
  4. バックエンドの構築
    • amplify push
      • 作成したバックエンドを反映する

参考

Amplify Docs
Amplify Features
スタートアップが AWS Amplify を使うべき 3 つの理由

Discussion