スタートアップCTOがAmplifyのカスタマイズの自由度を調査!Amplifyの技術選定を考える🤔

スタートアップCTOがAmplifyのカスタマイズの自由度を調査!Amplifyの技術選定を考える🤔

こんにちは!

今回は、Amplify の自由度および拡張性について考えていきます。Amplify はいろいろ自動化してくれますが、それ以外のところを機能追加したい場合などに参考になるかと思います。

想定する読者

  • Amplify に興味があるヒト
  • Amplify の拡張性に興味があるヒト
  • これから Amplify を導入したいヒト

はじめに

Amplify のメリットには、バックエンドの構成を開発者が選択するだけで自動的に AWS リソースを用いたインフラ部分を作成してくれるという点があります。このメリットは、開発者の負担を減らすことに繋がるので存分に恩恵を受けた方がよいかと思います。

しかし Amplify が自動的に作成した部分を把握していなければ、アーキテクチャに対する「なぜここはこういう風になっているの?」という説明をすることができず、なんとなくでインフラを作ってしまっている状況になってしまいます。

このような状況を打破するためには、Amplify が何をどこまでできるのか、Amplify で作成したアプリケーションに Amplify 以外のアプローチでどう機能追加していくのか、そういった基礎的な知識や拡張性について認知しておくことが重要です。

今回は、Amplify の拡張性についてお話ししていきます。

※執筆時点での Amplify のバージョンは 5.1.0 です。

Amplify は何を作成してくれるのか?

まずは Amplify が何を作成してくれるのかを把握しましょう。自動的に作成してくれるのは以下のようなものになります。

機能AWSリソースコマンド
APIAPI Gateway, AppSyncamplify add api
認証Cognitoamplify add auth
分析Pinpoint, Kinesisamplify add analytics
chatbotLexamplify add interactions
機械学習Polly, Transcribe, Rekognition, Comprehendamplify add predictions
ストレージS3, DynamoDBamplify add storage

これらは代表的な Amplify で構築できる機能になります。

どこまでカスタマイズできるか?

それでは Amplify をどこまでカスタマイズできるのか確認していきましょう。また何が Amplify に管理できないのかも見ていき Amplify の勘所を掴みましょう。

サーバーレス以外は管理できない

Amplify は AWS のサーバーレスリソースをこちらの指示で生成してくれます。では EC2 などの IaaS 製品などは作成できないのでしょうか?

結論、できません。データベースでいえば RDSも利用できないので、Amplify 側でリレーショナルデータベースを利用したい場合は、手動で Aurora Serverless や RDS Proxy を作成して Amplify と連携させる必要があります。こちらにご興味がある方は、下記を参考にしてみてください。

つまり、EC2 や RDS が必要なアーキテクチャの場合、手動で作成したのちに Amplify で作成したリソースとの連携が必要になります。

コンテナサービスは Fargate のみ利用可能

AWS のコンテナサービスには、ECS(EC2上の)、Fargate、EKS とありますが、Amplify では Fargate のみが利用可能です。

Amplify 側で作成する際、自動的に CI/CD パイプライン・VPC関連が併せて作成されるため、かなり容易に Fargate まわりの環境を構築できます。

ただしここで作成されたものは Amplify で細かくコントロールできないため、CodeBuild や CodePipeline 、ALB などのパラメータを変更したい場合は手動での修正が必要となります。)

追加リソースは Amplify との親和性を考慮する

Amplify で管理できないもので、Amplify のリソースと依存関係がないものについては CloudFormation や Serverless Framework などの IaC ツールで管理していきましょう。

依存関係があるものに関してはこちらのドキュメントを参考に、Amplify にカスタムリソースを追加していきましょう。Amplify において作成されたリソースに対しては手動で変更されるべきではありませんので、ご紹介した資料のようなアプローチでリソースを追加していくことがベストプラクティスとなります。

つまりAmplify で生成されたリソースを参照したい、もしくは Amplify に対してリソースを追加したい場合は、Amplify のカスタムリソースを利用してください。

既存リソースを Amplify に組み込むのは難しい

以前、Amplify で、既存の Cognito のインポートは可能?🤔コードを交えて解説します👍 という記事を書きましたが、とうとう Cognito インポート機能がサポートされました。

Amplify Admin UI から簡単に 作成済みである Cognito を追加できるようになりました。

しかしそもそも既存リソースを Amplify に追加していくことは難しいです。例えば API などの場合は手動でセットアップしなければならないため、 ある程度時間がかかることは頭に入れて Amplify での開発をする必要があります。

ただ Amplify の進化は早いので、Cognito のインポート機能がサポートされたように、様々な既存リソースを Amplify に追加できることになるでしょう。こちらは今後に期待です。

関連記事

まとめ

Amplify は Architecture as Code (AaC) 、コードでアーキテクチャを管理するという概念のもと作られています。

それを前提に考えると部分的に利用するのは本来の使い方ではないので、サーバーレスなバックエンドを爆速で構築する目的で利用するのがよいでしょう。そのために本記事を参考にしていただき、現在の要件に適しているのか判断していただければ幸いです。

このブログでは、AWS の記事をどんどん公開しておりますので、ご興味のある方は他の記事もご覧いただければと思います。

AWS に関する開発は、お気軽にお問い合わせください。