Amazon Web Services ブログ
AWS Amplify でのフルスタックデプロイ機能が拡張: あらゆる規模のチームに対応
本日、AWS Amplify Gen 2 での新しいチームコラボレーションワークフローを発表できることを喜ばしく思います。
私たちは、チームコラボレーションを次の 3 つの方法で改善しました。1/ 開発ライフサイクルをより高速で強力にする、2/ プラットフォームのコア機能を改善する、3/ Amplify を既存のデプロイ環境に柔軟に統合できるようにする、の3つです。これにより、Amplify を使って、アーリーステージのスタートアップのチームでも大企業のチームでも、フルスタックアプリを簡単にデプロイできるようにしました。
このブログでは、最新版の Amplify が提供する、さまざまなチームのワークフローと開発環境の改善点について詳しく説明します。最新の Amplify について詳細を学びたい場合や、サンプルコードをなぞってみたい場合は、最初にフルスタック TypeScript : AWS Amplify を再び紹介を確認してから、このライフサイクル改善に関する記事を読み進めてください。
開発プロセス
Amplify には、開発体験を向上させる 3 つの新機能があります。アプリ作成プロセス中の反復をスピードアップするための開発者ごとのクラウド環境サンドボックス、シークレット管理、さらに AWS Cloud Development Kit (AWS CDK) 統合による、より柔軟なカスタマイズ機能です。
開発者ごとのクラウドサンドボックス
Amplify を使っているすべてのチームが、新しい 1 人 1 人のデベロッパー用のサンドボックス環境の恩恵を受けられます。ローカル開発専用のクラウドサンドボックス環境では、開発中に利用できる、本番環境に忠実な AWS バックエンドがデプロイされます。これによりバックエンドロジックのイテレーションを素早く回せるようになります。コードを保存するたびに、変更したコードに基づいてサンドボックスが必要なクラウドリソースを再デプロイします。たとえば、Amplify データスキーマを更新すると、サンドボックスが自動的にデータベースを変更し、アプリでロジックをテストできるようになります。各開発者は独立したサンドボックス環境で作業するため、素早いイテレーションを重ねても他の開発者の環境に影響を与えることはありません。次の図では、4 人のデベロッパーが、お互いの環境を乱すことなく、独立してフルスタック機能での作業ができています。
サンドボックスを実行するのに必要なことは、Amplify Gen 2 アプリを開き、ターミナルで次のコマンドを実行するだけです。
cd my-app
npx ampx sandbox
クラウドのサンドボックスは一時的なものです。開発が終了したら、そのサンドボックスを破棄し、次に必要になったら新しいサンドボックスを作成してください!
AWS CDK との統合
ビジネス要件が変化していくにつれて、開発者は Amplify に組み込みで用意されているユースケースを超えるユースケースを追加する必要が生じるかもしれません。最新の Amplify は AWS CDK 上に構築されており、カスタムリソースの追加や Amplify が利用するリソースのオーバーライドがシームレスに行えるようになりました。例えば、開発者は AWS CDK を使って Redis キャッシュを接続したり、カスタムセキュリティルールを実装したり、AWS Fargate 上にコンテナをデプロイしたり、AI/ML 用に Amazon Bedrock に接続したりできます。AWS CDK のコードで定義されたインフラストラクチャは、すべての git push
で Amplify アプリのバックエンドとともにデプロイされます。つまり、Amplify の使いやすさと単純さを活かしつつ、ビジネス要件の進化に合わせて、必要なリソースを追加していけます。
カスタムの削除ポリシーを Amplify でプロビジョニングされた認証インスタンスに設定したい場合は、例えば backend.ts
ファイルに次のコードを追加することができます。
import { defineBackend } from '@aws-amplify/backend';
import { auth } from './auth/resource';
import { UserPool } from 'aws-cdk-lib/aws-cognito';
import { RemovalPolicy } from 'aws-cdk-lib';
const backend = defineBackend({
auth
});
const userPool = backend.auth.resources.userPool as UserPool ;
userPool.applyRemovalPolicy(RemovalPolicy.RETAIN_ON_UPDATE_OR_DELETE);
シークレットの管理
Amplify Gen 2 は、シークレットと環境変数の中央集中管理機能を提供しています。シークレットにより、アプリケーションが必要とするソーシャル サインインキー、関数の環境変数、関数のシークレット、その他の機密データなどの環境固有の値を、環境を超えて安全に構成できます。これらのシークレットは、すべてのデプロイ済みブランチだけでなく、特定のブランチにもスコープを設定できます。たとえば、ローカルのサンドボックスでもシークレットを設定できます。
npx ampx sandbox secret set fb-client-id
? Enter secret value: ### Done ! >
npx ampx sandbox secret set fb-client-secret
? Enter secret value: ### Done !
本番環境では、コンソールから入力します。
これだけで、コードからシークレットにアクセスできるようになります!
import { defineAuth, secret } from "@aws-amplify/backend";
export const auth = defineAuth({
loginWith: {
email: true,
externalProviders: {
facebook: {
clientId: secret("fb-client-id"),
clientSecret: secret("fb-client-secret"),
},
},
},
});
デプロイ
Amplify には、どんな開発ワークフローを採用しているかに関わらず、チーム全員で開発したアプリを本番環境にデプロイできる新機能があります。Git flow、GitHub/プルリクエストフロー、トランクベース デプロイメントの 3 つの異なるデプロイ戦略の Amplify のワークフローを見ていきましょう。また、リポジトリと秘密情報の管理に関する新機能についても説明します。
Git flow
Git flow とは、2 つの主要なブランチ: プロダクションリリース用の main
ブランチと機能統合用の develop
ブランチを利用するブランチモデルです。開発者は develop
ブランチから feature
ブランチを作成し、完了後に develop
に再びマージします。そして、定期的に develop
を main
にマージしてリリースを行います。また、hotfix
と release
用の専用ブランチも導入し、並行して開発している内容を構造的に管理する方法を提供しています。
Amplify の CI/CD システムは、このワークフローと非常に良く機能するように設計されています。すべての Amplify コードとそれに伴うバックエンドおよびクラウドロジックが TypeScript コード内に記述されるため、Git ブランチにはフロントエンドとバックエンドを両方デプロイするのに必要なすべてのソースコードが含まれています。そして、main
およびdev
ブランチ用のデプロイ環境を持つことができます。
フルスタック機能ブランチの自動デプロイ
Amplify コンソールでは、*
や feature/*
などのブランチパターンを定義し、そのパターンに一致するブランチを Amplify に自動デプロイできます。dev から prod への変更の移行は、dev
から prod
ブランチにマージするだけで簡単に行えます。
‘Automatically disconnect branches’ チェックボックスをオンにすると、リポジトリから Git ブランチを削除したときに、Amplify からそのブランチが自動的に切断されます。
カスタムサブドメインの自動設定
カスタムドメインを設定したら、自動デプロイされた開発中の機能ブランチや Pull Request 用のプレビュー環境に覚えやすいサブドメインがほしくなるかもしれません。Amplify で指定したパターンに基づきサブドメインを作成するように設定できます。
GitHub/プルリクエストフロー
別のよく使われるアプローチは、プロダクションのための 1 つの main
ブランチを持ち、開発者はそれぞれ、機能をプロダクションに統合するためにフォークを作成し、そのフォークから main
ブランチへのプルリクエストを作成することです。このシナリオでは、お客様は Amplify に単一のmain
ブランチをデプロイし、プルリクエストプレビューを有効にすることで、一時的なプルリクエストデプロイインスタンスを作成しています。
プルリクエストがオープンされると、Amplify は自動的にフルスタックのプルリクエスト用ブランチをデプロイします。これは Amplify 上で一時的な環境で、https://pr-#.mydomain.com
でアクセスできます。
プルリクエストがマージされると、フルスタックのプルリクエストプレビューブランチ全体が破棄されます。
トランクベース開発
トランクベース開発は別のソフトウェア開発戦略で、すべての開発者が単一の共有トランク(または main
ブランチ)を作業元とし、変更をトランクへ頻繁に統合します。
トランクへの継続的な統合とコラボレーションは、マージの競合のリスクを減らし、フィードバックのサイクルを早くすることができます。トランクベース開発では、開発者が短期間の機能ブランチを切り出し、できるだけ早くトランクにマージし、パイプラインステージによる自動テストに頼って、コードベースの安定性を確保します。
複数のアカウントにまたがる AWS デプロイ
Amplify は直接パイプラインやステージベースのワークフローを提供していませんが、お客様は AWS CodePipeline や Amazon CodeCatalyst などの自身の CI/CD パイプラインを使用して、パイプラインベースのワークフローでフルスタックアプリケーションをデプロイできるようになりました。Amplifyで Amazon CodeCatalystと併用する際にトランクベースの戦略に従うには、このチュートリアルに従ってください。
モノレポとマルチリポジトリ
Amplify は様々なリポジトリ構成に対応しています。Amplify は、Nx や yarn workspace のようなモノレポツールと 統合 されており、単一のリポジトリで複数のアプリケーションを管理できるようにします。フロントエンドとバックエンドのチームが別々の場合、Amplify はフロントエンドとバックエンドのコードベースで 別々のリポジトリの利用を可能にします。
次のステップ
このブログ記事では、チームが Amplify を活用して、規模に関わらずフルスタックアプリケーションを開発およびデプロイする方法を紹介しました。クイックスタートチュートリアルに従って Amplify を始めましょう!
本記事は、New in AWS Amplify: Expanded Fullstack Deployment Capabilities for Teams of All Sizes を翻訳したものです。翻訳は Solutions Architect の髙柴が担当しました。