Amazon Web Services ブログ

Amplifyで生成されたバックエンドリソースをCDKでカスタマイズする新機能 「オーバーライド」のご紹介

この記事は、Override Amplify-generated backend resources using CDKを翻訳したものです。

AWS Amplifyは、開発者がAmplifyで生成されたAWS IAM、Amazon Cognito、Amazon S3、およびAmazon DynamoDBのリソース構成を上書きし、アプリの要件を最適に満たす機能を発表しました。 開発者はAmplifyが提供する標準のリソースを使用してバックエンドを簡単に構成できますが、この新しい “オーバーライド” 機能を用いることでさらに細かいリソースの設定をカスタマイズできます。

AWS Amplifyは、AWS上でモバイルアプリやウェブアプリを構築するための最も速くて簡単な手段を提供するサービスです。 Amplifyは、フロントエンドのウェブ開発者とモバイル開発者がAWSサービスの力を活用して、革新的で機能豊富なアプリケーションを構築できるようにする一連のツールとサービスで構成されています。 AWS Amplify CLIは、フロントエンド開発者がクラウドでアプリバックエンドを簡単に作成できるコマンドラインツールチェーンです。

この記事で学べること:

  • Amplifyで生成されたプロジェクトレベルのIAMロールを上書きする方法
  • Amplifyで生成されたauth(Cognito)リソースを上書きする方法
  • Amplifyで生成されたstorage(S3)リソースを上書きする方法

事前に準備が必要なもの:

  • バージョン7以上の最新のAmplify CLI
    • 最新版をインストールするためにはターミナルでnpm i -g @aws-amplify/cliを実行
  • 設定済みのAmplify CLI

1. Amplifyでプロジェクトを構築

最初に新しいディレクトリを作成し、Amplifyプロジェクトを初期化します。 ターミナルで次のコマンドを実行します。

mkdir override-demo
cd override-demo
amplify init -y

Amplifyプロジェクトは、アプリのバックエンド構築を容易にします。 Amplifyプロジェクトの初期化が完了すると、amplify add authでAuthのバックエンドリソースを、amplify add storage でStorageのバックエンドリソースを簡単に追加できます。

2.Amplifyで生成されたIAMロールをカスタマイズ

Amplifyプロジェクトには、認証済みユーザーと非認証ユーザーのバックエンドリソースへのアクセスを行う2つの “IAMロール” を保有します。 多くの場合、組織には、DevOpsガイドラインを満たすために各アカウントの役割や要件が設定されています。 Amplify CLIは、IAMアクセス権限の委譲などのIAM Roleの権限のカスタマイズ手段などを提供してきましたが、新しい “オーバーライド” 機能を使用することで更に「ロール名」や「ロールパス」などの変更が行えるようになりました。

プロジェクトレベルのIAMロールにオーバーライド機能を使用するのに、次のコマンドを実行します。

amplify override project

このコマンドは、CDKのコンストラクトを提供する “overrides.ts” という名前のTypescriptファイルを生成します。

訳者による補足:overrides.tsamplify/backend/awscloudformation/override.tsに作成されます。amplify override projectの実行時に、エディタで開くことが可能となっています。

このコンストラクタはAmplifyで生成されたIAMロールへのアクセスを含んでおり、resourceパラメータを変更することでロール名やロールパスを変更することができます

例として、IAMのロール名を変更し、ロールパスに “/my-organization/myteam/” を追加してみます。

overrides.ts“ファイルを編集して、オーバーライド機能でリソースのカスタマイズを行います。

import { AmplifyRootStackTemplate } from '@aws-amplify/cli-extensibility-helper';

export function override(resources: AmplifyRootStackTemplate) {
   resources.authRole.roleName = "AmplifyProjectAuthRole"
   resources.authRole.path = "/myorganization/myteam/"
   resources.unauthRole.roleName = "AmplifyProjectUnauthRole"
   resources.unauthRole.path = "/myorganization/myteam/"
}

overrides.tsファイルを正しく編集したら、変更をデプロイします。

amplify push -y

デプロイが完了したら、IAMコンソールにアクセスして、ロールが存在することを確認します。

Screenshot of IAM console

注記:認証済みおよび未認証のユーザーロールに影響が出るので、他のリソースがまだ追加されていないプロジェクトの開始時にのみ、プロジェクトの開始時にのみこれらのリソースを変更することをお勧めします。

3. Amplifyで生成した認証(Cognito)リソースをカスタマイズ

最初に、Amplify authカテゴリを追加します。これにより、開発者は最小限のクラウドの専門知識でユーザーのサインアップとサインインの機能を構成できます。

amplify add auth

(今回はデモ用なので、CLIで発生するインタラクティブな質問は全てデフォルトの指定で大丈夫です。)

Amplifyは、メールアドレスを使ったサインアップ、多要素認証、認証チャレンジなど、さまざまな基本的な認証機能から高度な認証機能を提供します。 一方で、ユーザーが最初にアプリに招待されたときに自動で送付する一時的なパスワードの有効日を設定するなど、Amplify CLIが標準で提供していない設定項目がいくつかあります。 このようなカスタマイズを行うのに、次のコマンドを実行します。

amplify override auth

プロジェクトのオーバーライドと同様に、このコマンドは “overrides.ts” という名前のTypescriptファイルを生成します。

訳者による補足:amplify/backend/auth/<リソース名>/override.tsに生成されます。

このファイルは、CDKコンストラクトを提供し、Amplifyで生成されたCognitoリソースへのアクセスが可能です。 パスワードの一時的な有効日の変更と、ユーザー名で大文字と小文字を区別を行うカスタマイズを行ってみます。 リソースパラメータを介して必要な変更を適用します。 (ヒント:”resource” と入力すると、IDEによってドキュメントのリンクとともに、使用可能なオプションのコード補完が表示することもできます。)

import { AmplifyAuthCognitoStackTemplate } from '@aws-amplify/cli-extensibility-helper';

export function override(resources: AmplifyAuthCognitoStackTemplate) {
  resources.userPool.policies = {
    passwordPolicy: {
      ...resources.userPool.policies["passwordPolicy"], // 現在の設定を展開
      temporaryPasswordValidityDays: 2 // 「一時的なパスワードの有効日」の設定を上書き
    }
  }
  
  resources.userPool.usernameConfiguration = {
    caseSensitive: true
  } 
}

(備考:Cognitoは、初期設定で変更できる設定を制限しています。エラーを防ぐために、初期デプロイ後に変更した設定を必ず検証してください。)

overrides.tsファイルを正しく編集したら、変更をデプロイします。

amplify push -y

デプロイが完了したら、Cognitoユーザープールのコンソールにアクセスして、ユーザー名の大文字小文字の区別と一時的に発行したパスワードの有効期限が2日になっていることを確認します。

Screenshot of Cognito user pool console

Screenshot of Cognito user pool console

この記事は、リソースのバックエンド構成の変更のみに焦点を当てて紹介していますが、ウェブまたはモバイルアプリをAmplifyで生成されたリソースに接続する方法については、Amplifyライブラリのドキュメントを確認してください。

4.Amplifyで生成されたS3バケット構成をカスタマイズ

まず、Amplifyストレージカテゴリを追加します。以下のコマンドによりAmazonS3に基づくファイルストレージを構築できます。

amplify add storage
❯ Content (Images, audio, video, etc.)

(今回はデモ用なので、CLIで発生するインタラクティブな質問は全てデフォルトの指定で大丈夫です。)

Amplify CLIでは、1)バケット名 2) 認証されたユーザーと認証されていないユーザーにアクセス許可 の設定を行えます。追加で、バージョニングの有効化など、S3バケット設定をさらにカスタマイズするのに次のコマンドを実行します。

amplify override storage

authやprojectのoverrideと同様に、このコマンドは “overrides.ts” という名のTypescriptファイルを生成します。

訳者による補足:amplify/backend/storage/<リソース名>/override.tsに生成されます。

このファイルは、Amplifyで生成されたS3バケットと関連するポリシーをカスタマイズ可能なCDKコンストラクトを提供します。

import { AmplifyS3ResourceTemplate } from '@aws-amplify/cli-extensibility-helper';

export function override(resources: AmplifyS3ResourceTemplate) {
   resources.s3Bucket.versioningConfiguration = {
     status: "Enabled"
   } 
}

overrides.tsファイルを正しく編集したら、変更をデプロイします。

amplify push -y

デプロイが完了したら、Amazon S3コンソールにアクセスして、バケットのバージョニングが有効化されていることを確認します。

Screenshot of S3 console

🥳 完成!

この記事では、Amplifyで生成されたプロジェクトレベルのIAMロール、認証(Cognito)、およびストレージ(S3)のリソースをカスタマイズする方法を紹介しました。 Amplify CLIは、amplify add storageによって追加されたDynamoDBテーブルのリソースのオーバーライドもサポートしています。 次にサポートしてほしいカテゴリがあればAmplifyのGitHubリポジトリでリクエストをお願いします。

さらなる詳細については以下のドキュメントを確認してください

Amplifyプロジェクトをカスタマイズして楽しんでください!

翻訳はDeveloper Relations Engineer(Mobile/Web)のDaijiro Wachiが担当し、ISV/SaaS Solutions ArchitectのKoya KimuraとStartup Solutions ArchitectのDaisuke Nagayamaが監訳しました。