【AWS Amplify Gen2】sandboxで生成される、amplifyconfigure.jsonについて-PMLinc
What is amplifyconfigure.json??
amplify Gen2では、npx amplify sandbox
とすると、amplifyの個人用検証環境用のbackendが作成されます。※個人用検証環境は、Ctl+C
とすると、個人開発環境を削除してリソースを削除されます。
Gen2の初回キャッチアップはこちら
npx amplify sandbox
としたときに、amplify backendがdeployされて、amplifyconfigure.json
が生成されるようになります。
amplifyconfigure.json
は、backendとfrontendのconfigのやりとりをしてくれる大事なファイルになります。
ちなみに従来のamplifyの書き方でいう、amplify/backend/backend-config.json
です。
実際に、npx amplfiy sandbox
がsuccessになった時のログ
今回は、amplifyconfigure.json
について色々調べてわかったことをまとめていきたいと思います。
Hello! Purpom Media Lab
Purpom Media Lab incでは、AWS Amplifyや、LambdaなどのServerless Stackを中心とした高速MVP構築及びサービス価値の検証を行っています。
また、MVPを構築するだけではなく、AWS Amplifyを中心としたオープンソースの機能改善なども行っています。
🎉 Tips 🎉
npx amplify sandbox
で個人環境をdeployした際に、なんらかの原因で、Failedになってしまったときに原因特定するときにdebug
コマンドを使うと何のリソースで落ちたのかを調べやすくなるので、便利
amplifyconfigure.jsonのtypeが知りたい。
amplify/backend.ts
にある、defineBackend
が鍵になります。defineBackend
にamplifyのGen2ライフサイクルでDeployされるリソースが定義されてます。
(ex. auth/
やdata/
など)
import { defineBackend } from '@aws-amplify/backend';
import { auth } from './auth/resource';
import { data } from './data/resource';
//NOTE: これがamplify Gen2のライフサイクルで動くバックエンドリソースを束ねる親玉
const backend = defineBackend({
auth,
data,
});
話が脱線するのですが、そもそものGen2のソースコードでは、monorepo管理されていて、
packages/
配下に、コアのコードが書かれています。
このコアコードがどうやって連携して動いてるのか社内でまとめていて(今のところ)
packages/backend
が全ての起点になって、package/backend-xxxx
が動いてるそうです。
ネコで表すとこんな感じ。そのうちgen2自体がどうゆうふうに動いてるのかをまとめます。
amplifyconfigure.json
で生成される型は、下記になることがわかりました。
export type ClientConfig = Partial<AnalyticsClientConfig & AuthClientConfig & GeoClientConfig & GraphqlClientConfig & NotificationsClientConfig & StorageClientConfig & PlatformClientConfig & CustomClientConfig>;
実際に以下のTypeがPartial
されて、amplifyconfigure.json
が生成されるようになります。
export type AnalyticsClientConfig = {
Analytics?: {
AWSPinpoint: {
appId: string;
region: string;
};
};
};
export type AuthClientConfig = {
aws_cognito_region: string;
aws_user_pools_id?: string;
aws_user_pools_web_client_id?: string;
aws_cognito_identity_pool_id?: string;
aws_mandatory_sign_in?: string;
aws_cognito_username_attributes?: string[];
aws_cognito_signup_attributes?: string[];
aws_cognito_mfa_configuration?: string;
aws_cognito_mfa_types?: string[];
aws_cognito_password_protection_settings?: {
passwordPolicyMinLength?: number;
passwordPolicyCharacters?: string[];
};
aws_cognito_verification_mechanisms?: string[];
aws_cognito_social_providers?: string[];
allowUnauthenticatedIdentities?: string;
oauth?: {
domain?: string;
scope?: string[];
redirectSignIn?: string;
redirectSignOut?: string;
clientId?: string;
responseType?: string;
};
};
export type GeoClientConfig = {
geo?: {
amazon_location_service: {
region: string;
maps?: {
items: Record<string, {
style: string;
}>;
default: string;
};
search_indices?: {
items: Array<string>;
default: string;
};
geofenceCollections?: {
items: Array<string>;
default: string;
};
};
};
};
export type GraphqlClientConfig = {
aws_appsync_region: string;
aws_appsync_graphqlEndpoint: string;
aws_appsync_authenticationType: string;
aws_appsync_additionalAuthenticationTypes?: string;
aws_appsync_conflictResolutionMode?: string;
aws_appsync_apiKey?: string;
modelIntrospection?: unknown;
};
export type NotificationsClientConfig = {
Notifications?: {
SMS?: {
AWSPinpoint: {
appId: string;
region: string;
};
};
EMAIL?: {
AWSPinpoint: {
appId: string;
region: string;
};
};
APNS?: {
AWSPinpoint: {
appId: string;
region: string;
};
};
FCM?: {
AWSPinpoint: {
appId: string;
region: string;
};
};
InAppMessaging?: {
AWSPinpoint: {
appId: string;
region: string;
};
};
};
};
export type StorageClientConfig = {
aws_user_files_s3_bucket_region: string;
aws_user_files_s3_bucket: string;
};
export type PlatformClientConfig = {
aws_project_region: string;
};
export type CustomClientConfig = {
custom: Record<string, string>;
};
【課題】amplifyconfigure.jsonに、自身で定義したkey:valueを定義したいがどうやってやる??
実際にGen2は今2024-02
現在でPreviewなので、後々改善Gen2自体がされていくと思うのですが、
カスタムCDKでDeployしたリソース(ex. lambda関数のendpointなど)は、amplifyconfigure.json
で生成されないので追加したいということが発生しました。
調べた結果上記で説明した、typeの下記を利用します。
export type CustomClientConfig = {
custom: Record<string, string>;
};
backend.addOutput
でcustomに追加できることが可能です。
import { defineBackend } from '@aws-amplify/backend';
import { auth } from './auth/resource';
import { data } from './data/resource';
const backend = defineBackend({
auth,
data,
});
//NOTE: addOutputで追加できる
backend.addOutput({
custom: {
"mamushi": "neko"
}
})
ちなみにamplifyconfigure.json
は、
amplify-backend/packages/client-config/src/paths/get_client_config_path.ts
あたりで生成される。
Discussion