Open2
Amplify Custom Plugin
AmplifyのCustom Pluginを自作し、Amplifyリソースを設定する際に良く使う機能の設定を自動化する。
Amplifyのoverride機能を擬似的に利用し各カテゴリの設定変更については、overrideからアクセスする事で実装。そのための前提条件として、
amplify add auth
amplify add api
を適当なデフォルト設定で事前に追加しておく。
期待する動作としては、
amplify add <plugin-name>
を実行する事で、必要なアップデートリソースを選択し、選択された内容に応じて必要な設定をアップデートさせる。
今回はマルチテナントに関するユーザーテーブルの拡張サポートとSocialProviderのサポートを自動化の実装を目指す。
auth カテゴリーのoverrideリソースのサンプル
import { AmplifyAuthCognitoStackTemplate} from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyAuthCognitoStackTemplate) {
const cfnUserPool = resources.userPool;
// username Attributesはemailで固定
cfnUserPool.usernameAttributes = ['email'];
resources.addCfnResource(
{
type: 'AWS::Cognito::UserPoolIdentityProvider',
properties: {
AttributeMapping: {
email: 'email',
name: 'name',
picture: 'picture',
username: 'sub'
},
ProviderDetails: {
client_id: '<google-client-id>.apps.googleusercontent.com',
client_secret: '<google-client-secret>',
authorize_scopes: "openid email profile",
},
ProviderName: "Google",
ProviderType: "Google",
UserPoolId: {
Ref: 'UserPool',
},
},
},
'googgle-social-provider'
);
const cfnUserPoolClient = resources.userPoolClientWeb;
cfnUserPoolClient.allowedOAuthFlowsUserPoolClient = true;
cfnUserPoolClient.callbackUrLs = ['https://ed31effbc481783d.ngrok.app/'];
cfnUserPoolClient.logoutUrLs = ['https://ed31effbc481783d.ngrok.app/'];
cfnUserPoolClient.allowedOAuthScopes = ['phone', 'email', 'openid', 'profile', 'aws.cognito.signin.user.admin'];
cfnUserPoolClient.allowedOAuthFlows = ['code'];
const cfnIdentityPool = resources.identityPool;
// SocialProviderとの紐づけが済んでいるかどうかをログイン前に確認する為の設定
// IAM認証のpublicアクセス(unauth)で api で追加するSocialProvider用のアカウント
// 情報へ接続できるようにidentityPoolのallowUnauthenticatedIdentitiesをtrueに
// 設定しておく
cfnIdentityPool.allowUnauthenticatedIdentities = true;
client_idとclient_secretはpluginの追加時のworkthroughで指定できるようにする
一旦固定値で実装を進める。