🛠️

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