注 1: ホストされた対話型デモは次のとおりです:demo.saasconstruct.com
注 2: 各 SaaS セットアップの月額請求額は月額 3 ~ 5 ドルで、ほとんどが CI/CD コストです。
注 3: テンプレートはここにあります: saasconstruct.com.
私は AWS で AI の PoC と MVP をいくつか行ってきました。それはいつも似たようなことです:
そこで、AWS 上でそのようなものをブートストラップするためのシンプルなソリューションを構築しようと考えました。そしてそれについてブログ投稿を書いてください。
Stripe 支払い (消費税や VAT を心配したくない場合は LemonSqueezy 支払い) や支払い管理、認証、交通警報などの機能を追加することにしました。また、より長いタスクのために API Gateway と AWS Lambda を ELB と ECS に置き換えるなど、構成可能にする必要があるとも考えました。
まず、一般的に言われている最も簡単なフレームワークを選択しました。これは Vue で、私が理解している限り、2 番目に人気のあるフレームワークです。これを選んだのは、最も簡単なだけでなく、ある程度の経験もあったからです。
この Web サイトは、構築ツールとして Vite を使用した標準 SPA アプリケーションです。スタイル設定には、Bootstrap を使用します。Bootstrap は非常に扱いやすく、フロントエンド フレームワークのあるバージョンから別のバージョンに移行するときに大きな苦痛を引き起こさないからです。
2 つのオプションがあります:
フロントエンド ホスティング ソリューションにおける AWS の主な焦点として Amplify Hosting を選択しました。これは、セットアップやドメインの接続などが簡単であるためです。
従量課金制なので、トラフィック アラームを設定しました。10 秒あたりのヒット数が一定数を超えると、通知が届きます。
バックエンドは、レート制限を行う API ゲートウェイ と、ビジネスおよび一般的なロジックを行う AWS Lambda (Python) です。
Cognito でサインアップした後にデータベースにユーザーを作成する別の AWS Lambda 関数もあります。
電子メールなどの共有機能を追加する共有ユーティリティがあります。また、ログ機能もあります。たとえば、支払いエラーがあった場合にメールが送信されます。
認証が面倒なのはわかっていますが、サードパーティのサービスは使いたくありませんでした。そこで私は AWS Cognito を使い続けました。かなり安いですね。
AWS Amplify Auth (AWS Cognito のラッパー) を使用するだけだと言えますが、それにはいくつか問題がありました。 Reddit にも投稿しました:
認証用の Amplify に関する問題のリスト
そして、イライラしたユーザーによるさらに大きなリストを含む別の投稿もあります (古い投稿ですが)。
ここ
さらに、Amplify のみを使用すると、何かを変更する機会がなく、エコシステム全体に行き詰まってしまいます。たとえば、CloudFront ディストリビューションにアクセスしたい場合 (たとえば、特定の地域を地理的にブロックしたい場合)、残念なことに、Amplify Hosting ではそれを表示できません。他にも問題がありました。その例の 1 つは、Amplify リソースからの CDK の作成であり、これが私にとって苦痛な点でした。
そこで私がやったのは、ハイブリッド アプローチです (Reddit によると、これはある程度人気があるそうです)。AWS Amplify JS ライブラリを使用すると、ユーザー プールなど、自分で作成したクラウド リソースをインポートできるため、それらを作成しました。 CDK を使用し、認証に Amplify JS ライブラリを使用しました。
この場合、いつでも好きなように変更でき、クラウド リソースを交換できます (たとえば、CloudFront ディストリビューションにアクセスする必要がある場合は、Amplify Hosting から CloudFront S3 に移動できます)。
AWS SES。これは、AWS の主要な電子メール サービスです。 Cognito 認証メール、お問い合わせフォームからのリクエストなど、すべてを送信します。理解する必要がある唯一のことは、開発用 AWS アカウントで、送信できるようにするには最初に検証済みの ID を作成する必要があるということです (私はこれを次の方法で自動化しました) IaC)、実稼働 AWS アカウントでは、実稼働アクセスをリクエストする必要があります (数回クリックするだけです)。
AWS SES を使用すると、次のシナリオで電子メール通知が送信されます:
DynamoDB。簡単、迅速、そして管理可能。はい、アクセス パターンについて考える必要がありましたが、一般的に、これは作業に適しており、検証/構築中に費用もかかりません。複数の製品に取り組む予定で、それらを分離しておきたいため、RDS/DocumentDB をプロジェクトごとに開発アカウントと製品アカウントに配置することはできません (コストが高すぎます)。
2 つの支払いシステムを追加しました。同様に機能するため、どちらを使用するかを選択できます:
Stripe/LemonSqueezy Webhook 用に私が作成したエンドポイントがあり、すべてのロジックを処理します。
選択肢はたくさんあります:
私が AWS CDK を選択した理由は次のとおりです:
Terraform を選択しなかった理由は、CDK の方が簡単だからです。少なくとも私の意見では、リソースを簡単な方法で作成できます。私は OOP が好きで、それに合わせてクラウド インフラストラクチャを構築しようとしています。大きな利点は、CI/CD (CDK パイプライン) が含まれているため、それを発明する必要がないことです。
私が CDK パイプラインを選んだのは、やはり簡単だからです。パイプラインを GitHub リポジトリに接続するだけで準備完了です。開発ブランチに Git プッシュ -> 開発アカウントにロールアウトされます。 Git をメイン (またはプル リクエスト) にプッシュ -> 運用ロールアウト。
API ゲートウェイを介したスパム送信を防ぐためにレート制限を設定しました。 2 つの CloudWatch アラーム:
を設定しましたまた、使いすぎそうになった場合に通知する請求アラームも設定しました。
CloudWatch はイベントをログに記録します。イベントは AWS コンソールと拡張機能を介して IDE で直接確認できます。
OpenAI (GPT モデルを使用) または AWS Bedrock (Claude モデルを使用) のいずれかを使用するかの選択でした。 AWS Bedrock with Claude は AWS と簡単に統合できますが、OpenAI の方が一般的に使用されているため、この決定は困難でした。両社は最高レベルの AI モデルを提供しています。今のところ、AWS Bedrock を使い続けることにしました。将来的には変わるかもしれませんが、今のところはシンプルさが気に入っています。ベクトル データベースには、サーバーレス インデックスを備えた Pinecone を使用します。
ここで構築した AI アプリケーションの例は RAG システム です。これは基本的に、データに基づいて質問に答えることができるチャットボットです。情報をベクトル データベースに保存し、クエリに対して類似性検索を実行し、LLM を使用してその検索結果に基づいて回答を与えるだけです。現在、コストを避けるためにシンプルなモデルを使用していますが、別のモデルに切り替えるのはコード行を変更するのと同じくらい簡単です。
私は最初は Java 開発者でしたが、機械学習と深層学習のサービスを開発したため、その後 Python 開発者になりました。その分野のほとんどのライブラリは Python で開発されているか、Python ラッパーを備えています。さらに、Python は、AWS Lambda (例: AWS Lambda Powertools ライブラリの使用) または CDK のいずれであっても、AWS とシームレスに統合します。したがって、最終的には、バックエンドとクラウド インフラストラクチャ (CDK 経由) の両方が Python で実装されます。
フロントエンド フレームワークで人気があるため、私の第 2 言語は TypeScript です。以前は JavaScript を使用していましたが、コードベースが大きくなるにつれて、型がないことが混乱を招くことに気づきました。 TypeScript の静的型付けは、開発中に、特に大規模なプロジェクトで必要とされる明確さと安全性を提供します。
トラフィック負荷が高くないため、AWS のコストは非常に低く、主に CI/CD 費用により通常 月額 3~5 ドルです。
セットアップには、CDN (Amplify Hosting によって提供される) と AWS Lambda 内の小さなキャッシュ層が含まれます。さらに、一部のサービスは AWS 無料利用枠 に該当し、コストがさらに削減されます。
製品がスケールし、より多くのユーザーを獲得するにつれて、プロビジョニングされた DynamoDB に切り替え、DAX (DynamoDB Accelerator) を実装することでリソースを最適化することが必要になる場合があります。ただし、今のところ、このセットアップは完全に機能します。
このソリューションは私の現在のニーズを効率的に満たします。
この技術スタック全体を、SaaSConstruct の AWS テンプレート に ボイラープレート (積極的に開発および更新しています) として含めました。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3