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 人のデベロッパーが、お互いの環境を乱すことなく、独立してフルスタック機能での作業ができています。

four developers with their own sandboxes

サンドボックスを実行するのに必要なことは、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 !

本番環境では、コンソールから入力します。

Adding a secret in the AWS console

これだけで、コードからシークレットにアクセスできるようになります!

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 に再びマージします。そして、定期的に developmain にマージしてリリースを行います。また、hotfixrelease 用の専用ブランチも導入し、並行して開発している内容を構造的に管理する方法を提供しています。

Amplify の CI/CD システムは、このワークフローと非常に良く機能するように設計されています。すべての Amplify コードとそれに伴うバックエンドおよびクラウドロジックが TypeScript コード内に記述されるため、Git ブランチにはフロントエンドとバックエンドを両方デプロイするのに必要なすべてのソースコードが含まれています。そして、mainおよびdevブランチ用のデプロイ環境を持つことができます。

four developers using git flow with branches for dev and prod deployed to Amplify

フルスタック機能ブランチの自動デプロイ

Amplify コンソールでは、*feature/* などのブランチパターンを定義し、そのパターンに一致するブランチを Amplify に自動デプロイできます。dev から prod への変更の移行は、dev から prod ブランチにマージするだけで簡単に行えます。

edit repository settings with branch autodetection set to all

‘Automatically disconnect branches’ チェックボックスをオンにすると、リポジトリから Git ブランチを削除したときに、Amplify からそのブランチが自動的に切断されます。

カスタムサブドメインの自動設定

カスタムドメインを設定したら、自動デプロイされた開発中の機能ブランチや Pull Request 用のプレビュー環境に覚えやすいサブドメインがほしくなるかもしれません。Amplify で指定したパターンに基づきサブドメインを作成するように設定できます。

GitHub/プルリクエストフロー

別のよく使われるアプローチは、プロダクションのための 1 つの main ブランチを持ち、開発者はそれぞれ、機能をプロダクションに統合するためにフォークを作成し、そのフォークから main ブランチへのプルリクエストを作成することです。このシナリオでは、お客様は Amplify に単一のmainブランチをデプロイし、プルリクエストプレビューを有効にすることで、一時的なプルリクエストデプロイインスタンスを作成しています。

プルリクエストがオープンされると、Amplify は自動的にフルスタックのプルリクエスト用ブランチをデプロイします。これは Amplify 上で一時的な環境で、https://pr-#.mydomain.com でアクセスできます。

Github with aws amplify console web preview added to PR

deployment deploying in aws console

プルリクエストがマージされると、フルスタックのプルリクエストプレビューブランチ全体が破棄されます。

トランクベース開発

トランクベース開発は別のソフトウェア開発戦略で、すべての開発者が単一の共有トランク(または main ブランチ)を作業元とし、変更をトランクへ頻繁に統合します。
トランクへの継続的な統合とコラボレーションは、マージの競合のリスクを減らし、フィードバックのサイクルを早くすることができます。トランクベース開発では、開発者が短期間の機能ブランチを切り出し、できるだけ早くトランクにマージし、パイプラインステージによる自動テストに頼って、コードベースの安定性を確保します。

複数のアカウントにまたがる AWS デプロイ

Amplify は直接パイプラインやステージベースのワークフローを提供していませんが、お客様は AWS CodePipelineAmazon CodeCatalyst などの自身の CI/CD パイプラインを使用して、パイプラインベースのワークフローでフルスタックアプリケーションをデプロイできるようになりました。Amplifyで Amazon CodeCatalystと併用する際にトランクベースの戦略に従うには、このチュートリアルに従ってください。

Dev team with a git repository, custom pipeline, and two aws accounts

モノレポとマルチリポジトリ

Amplify は様々なリポジトリ構成に対応しています。Amplify は、Nx や yarn workspace のようなモノレポツールと 統合 されており、単一のリポジトリで複数のアプリケーションを管理できるようにします。フロントエンドとバックエンドのチームが別々の場合、Amplify はフロントエンドとバックエンドのコードベースで 別々のリポジトリの利用を可能にします。

次のステップ

このブログ記事では、チームが Amplify を活用して、規模に関わらずフルスタックアプリケーションを開発およびデプロイする方法を紹介しました。クイックスタートチュートリアルに従って Amplify を始めましょう!

本記事は、New in AWS Amplify: Expanded Fullstack Deployment Capabilities for Teams of All Sizes を翻訳したものです。翻訳は Solutions Architect の髙柴が担当しました。