diff --git a/amplify-migration-apps/backend-only/_snapshot.post.generate/amplify/function/quotegeneratorbe/resource.ts b/amplify-migration-apps/backend-only/_snapshot.post.generate/amplify/function/quotegeneratorbe/resource.ts index 42cb3e6e835..14d1fdab1ca 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.generate/amplify/function/quotegeneratorbe/resource.ts +++ b/amplify-migration-apps/backend-only/_snapshot.post.generate/amplify/function/quotegeneratorbe/resource.ts @@ -8,10 +8,14 @@ export const quotegeneratorbe = defineFunction({ name: `quotegeneratorbe-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); export function applyEscapeHatches(backend: Backend) { backend.quotegeneratorbe.resources.cfnResources.cfnFunction.functionName = `quotegeneratorbe-${branchName}`; + backend.quotegeneratorbe.addEnvironment( + 'REGION', + backend.quotegeneratorbe.stack.region + ); } diff --git a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/activityTrigger/resource.ts b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/activityTrigger/resource.ts index 54da2dfcc7c..ae24651533b 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/activityTrigger/resource.ts +++ b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/activityTrigger/resource.ts @@ -11,7 +11,7 @@ export const activityTrigger = defineFunction({ name: `activityTrigger-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -29,6 +29,10 @@ export function applyEscapeHatches(backend: Backend, activity: Table) { 'STORAGE_ACTIVITY_NAME', activity.tableName ); + backend.activityTrigger.addEnvironment( + 'REGION', + backend.activityTrigger.stack.region + ); activity.grant( backend.activityTrigger.resources.lambda, 'dynamodb:Put*', diff --git a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/fetchuseractivity/resource.ts b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/fetchuseractivity/resource.ts index 8664bdc4c12..833fad3401a 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/fetchuseractivity/resource.ts +++ b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/fetchuseractivity/resource.ts @@ -9,7 +9,7 @@ export const fetchuseractivity = defineFunction({ name: `fetchuseractivity-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -27,6 +27,10 @@ export function applyEscapeHatches(backend: Backend, activity: Table) { 'STORAGE_ACTIVITY_NAME', activity.tableName ); + backend.fetchuseractivity.addEnvironment( + 'REGION', + backend.fetchuseractivity.stack.region + ); activity.grant( backend.fetchuseractivity.resources.lambda, 'dynamodb:Get*', diff --git a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/recorduseractivity/resource.ts b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/recorduseractivity/resource.ts index a562bc46144..ec3470b7c78 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/recorduseractivity/resource.ts +++ b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/function/recorduseractivity/resource.ts @@ -11,7 +11,7 @@ export const recorduseractivity = defineFunction({ name: `recorduseractivity-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -29,6 +29,10 @@ export function applyEscapeHatches(backend: Backend, activity: Table) { 'STORAGE_ACTIVITY_NAME', activity.tableName ); + backend.recorduseractivity.addEnvironment( + 'REGION', + backend.recorduseractivity.stack.region + ); activity.grant( backend.recorduseractivity.resources.lambda, 'dynamodb:Put*', diff --git a/amplify-migration-apps/finance-tracker/_snapshot.post.generate/amplify/function/financetracker/resource.ts b/amplify-migration-apps/finance-tracker/_snapshot.post.generate/amplify/function/financetracker/resource.ts index b0f87d33f02..a0654cf52fb 100644 --- a/amplify-migration-apps/finance-tracker/_snapshot.post.generate/amplify/function/financetracker/resource.ts +++ b/amplify-migration-apps/finance-tracker/_snapshot.post.generate/amplify/function/financetracker/resource.ts @@ -10,7 +10,6 @@ export const financetracker = defineFunction({ memoryMB: 128, environment: { ENV: `${branchName}`, - REGION: 'us-east-1', BUDGET_ALERT_TOPIC_ARN: 'arn:aws:sns:us-east-1:123456789012:amplify-financetracker-x-x-customcustomfinance-x-BudgetAlertTopicF20DF526-DFMxF2RX1UKQ', MONTHLY_REPORT_TOPIC_ARN: @@ -33,6 +32,10 @@ export function applyEscapeHatches(backend: Backend) { 'API_FINANCETRACKER_TRANSACTIONTABLE_NAME', backend.data.resources.tables['Transaction'].tableName ); + backend.financetracker.addEnvironment( + 'REGION', + backend.financetracker.stack.region + ); backend.data.resources.tables['Transaction'].grant( backend.financetracker.resources.lambda, 'dynamodb:Put*', diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/admin/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/admin/resource.ts index 2284bf6f866..5f9a8b8f6b1 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/admin/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/admin/resource.ts @@ -9,7 +9,7 @@ export const admin = defineFunction({ name: `admin-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -19,6 +19,7 @@ export function applyEscapeHatches(backend: Backend) { 'AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID', backend.auth.resources.userPool.userPoolId ); + backend.admin.addEnvironment('REGION', backend.admin.stack.region); new aws_iam.Policy( backend.admin.resources.lambda, 'UnmappedCognitoActionsPolicy', diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/fitnesstracker33f5545533f55455PreSignup/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/fitnesstracker33f5545533f55455PreSignup/resource.ts index 9e9aca66e92..30adf971a04 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/fitnesstracker33f5545533f55455PreSignup/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/fitnesstracker33f5545533f55455PreSignup/resource.ts @@ -11,7 +11,6 @@ export const fitnesstracker33f5545533f55455PreSignup = defineFunction({ environment: { ENV: `${branchName}`, MODULES: 'email-filter-allowlist', - REGION: 'us-east-1', DOMAINALLOWLIST: 'amazon.com', DOMAINBLACKLIST: '', }, @@ -20,4 +19,8 @@ export const fitnesstracker33f5545533f55455PreSignup = defineFunction({ export function applyEscapeHatches(backend: Backend) { backend.fitnesstracker33f5545533f55455PreSignup.resources.cfnResources.cfnFunction.functionName = `fitnesstracker33f5545533f55455PreSignup-${branchName}`; + backend.fitnesstracker33f5545533f55455PreSignup.addEnvironment( + 'REGION', + backend.fitnesstracker33f5545533f55455PreSignup.stack.region + ); } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/lognutrition/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/lognutrition/resource.ts index f91b15e0335..8e0721201ec 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/lognutrition/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/function/lognutrition/resource.ts @@ -8,7 +8,7 @@ export const lognutrition = defineFunction({ name: `lognutrition-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -26,6 +26,10 @@ export function applyEscapeHatches(backend: Backend) { 'API_FITNESSTRACKER_MEALTABLE_NAME', backend.data.resources.tables['Meal'].tableName ); + backend.lognutrition.addEnvironment( + 'REGION', + backend.lognutrition.stack.region + ); backend.data.resources.tables['Meal'].grant( backend.lognutrition.resources.lambda, 'dynamodb:Put*', diff --git a/amplify-migration-apps/imported-resources/_snapshot.post.generate/amplify/function/importedresourcequotegenerator/resource.ts b/amplify-migration-apps/imported-resources/_snapshot.post.generate/amplify/function/importedresourcequotegenerator/resource.ts index 307ff1daa50..e77f16a584c 100644 --- a/amplify-migration-apps/imported-resources/_snapshot.post.generate/amplify/function/importedresourcequotegenerator/resource.ts +++ b/amplify-migration-apps/imported-resources/_snapshot.post.generate/amplify/function/importedresourcequotegenerator/resource.ts @@ -8,10 +8,14 @@ export const importedresourcequotegenerator = defineFunction({ name: `importedresourcequotegenerator-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); export function applyEscapeHatches(backend: Backend) { backend.importedresourcequotegenerator.resources.cfnResources.cfnFunction.functionName = `importedresourcequotegenerator-${branchName}`; + backend.importedresourcequotegenerator.addEnvironment( + 'REGION', + backend.importedresourcequotegenerator.stack.region + ); } diff --git a/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/addusertogroup/resource.ts b/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/addusertogroup/resource.ts index 11412e7bd42..6bda1e3dd06 100644 --- a/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/addusertogroup/resource.ts +++ b/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/addusertogroup/resource.ts @@ -9,7 +9,7 @@ export const addusertogroup = defineFunction({ name: `addusertogroup-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -19,6 +19,10 @@ export function applyEscapeHatches(backend: Backend) { 'AUTH_MEDIAVAULT1F08412D_USERPOOLID', backend.auth.resources.userPool.userPoolId ); + backend.addusertogroup.addEnvironment( + 'REGION', + backend.addusertogroup.stack.region + ); new aws_iam.Policy( backend.addusertogroup.resources.lambda, 'UnmappedCognitoActionsPolicy', diff --git a/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/removeuserfromgroup/resource.ts b/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/removeuserfromgroup/resource.ts index cd3b74d82c4..74623940e84 100644 --- a/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/removeuserfromgroup/resource.ts +++ b/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/removeuserfromgroup/resource.ts @@ -9,7 +9,7 @@ export const removeuserfromgroup = defineFunction({ name: `removeuserfromgroup-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -19,6 +19,10 @@ export function applyEscapeHatches(backend: Backend) { 'AUTH_MEDIAVAULT1F08412D_USERPOOLID', backend.auth.resources.userPool.userPoolId ); + backend.removeuserfromgroup.addEnvironment( + 'REGION', + backend.removeuserfromgroup.stack.region + ); new aws_iam.Policy( backend.removeuserfromgroup.resources.lambda, 'UnmappedCognitoActionsPolicy', diff --git a/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/thumbnailgen/resource.ts b/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/thumbnailgen/resource.ts index ab621943884..1bd897ee92b 100644 --- a/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/thumbnailgen/resource.ts +++ b/amplify-migration-apps/media-vault/_snapshot.post.generate/amplify/function/thumbnailgen/resource.ts @@ -8,7 +8,7 @@ export const thumbnailgen = defineFunction({ name: `thumbnailgen-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -18,4 +18,8 @@ export function applyEscapeHatches(backend: Backend) { 'STORAGE_MEDIAVAULT_BUCKETNAME', backend.storage.resources.bucket.bucketName ); + backend.thumbnailgen.addEnvironment( + 'REGION', + backend.thumbnailgen.stack.region + ); } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardGetRandomEmoji/resource.ts b/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardGetRandomEmoji/resource.ts index f1196ea8fe6..470a5dd200e 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardGetRandomEmoji/resource.ts +++ b/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardGetRandomEmoji/resource.ts @@ -8,10 +8,14 @@ export const moodboardGetRandomEmoji = defineFunction({ name: `moodboardGetRandomEmoji-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); export function applyEscapeHatches(backend: Backend) { backend.moodboardGetRandomEmoji.resources.cfnResources.cfnFunction.functionName = `moodboardGetRandomEmoji-${branchName}`; + backend.moodboardGetRandomEmoji.addEnvironment( + 'REGION', + backend.moodboardGetRandomEmoji.stack.region + ); } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardKinesisReader/resource.ts b/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardKinesisReader/resource.ts index ad79e142c29..cc2c709ad05 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardKinesisReader/resource.ts +++ b/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardKinesisReader/resource.ts @@ -10,7 +10,7 @@ export const moodboardKinesisReader = defineFunction({ name: `moodboardKinesisReader-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -23,6 +23,10 @@ export function applyEscapeHatches( 'ANALYTICS_MOODBOARDKINESIS_KINESISSTREAMARN', analytics.kinesisStreamArn ); + backend.moodboardKinesisReader.addEnvironment( + 'REGION', + backend.moodboardKinesisReader.stack.region + ); backend.moodboardKinesisReader.resources.lambda.addToRolePolicy( new aws_iam.PolicyStatement({ actions: [ diff --git a/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardKinesisTrigger/resource.ts b/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardKinesisTrigger/resource.ts index 0a275cc4282..8402d39180c 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardKinesisTrigger/resource.ts +++ b/amplify-migration-apps/mood-board/_snapshot.post.generate/amplify/function/moodboardKinesisTrigger/resource.ts @@ -12,7 +12,7 @@ export const moodboardKinesisTrigger = defineFunction({ name: `moodboardKinesisTrigger-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -33,6 +33,10 @@ export function applyEscapeHatches( 'API_MOODBOARD_GRAPHQLAPIIDOUTPUT', backend.data.apiId ); + backend.moodboardKinesisTrigger.addEnvironment( + 'REGION', + backend.moodboardKinesisTrigger.stack.region + ); backend.data.resources.graphqlApi.grantMutation( backend.moodboardKinesisTrigger.resources.lambda ); diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.generate/amplify/function/S3Trigger1ef46783/resource.ts b/amplify-migration-apps/product-catalog/_snapshot.post.generate/amplify/function/S3Trigger1ef46783/resource.ts index f8dc77387ba..d0047ca3d85 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.generate/amplify/function/S3Trigger1ef46783/resource.ts +++ b/amplify-migration-apps/product-catalog/_snapshot.post.generate/amplify/function/S3Trigger1ef46783/resource.ts @@ -8,7 +8,7 @@ export const S3Trigger1ef46783 = defineFunction({ name: `S3Trigger1ef46783-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); @@ -26,6 +26,10 @@ export function applyEscapeHatches(backend: Backend) { 'API_PRODUCTCATALOG_GRAPHQLAPIIDOUTPUT', backend.data.apiId ); + backend.S3Trigger1ef46783.addEnvironment( + 'REGION', + backend.S3Trigger1ef46783.stack.region + ); backend.data.resources.graphqlApi.grantMutation( backend.S3Trigger1ef46783.resources.lambda ); diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.generate/amplify/function/lowstockproducts/resource.ts b/amplify-migration-apps/product-catalog/_snapshot.post.generate/amplify/function/lowstockproducts/resource.ts index 1f940607d11..c3d64297e01 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.generate/amplify/function/lowstockproducts/resource.ts +++ b/amplify-migration-apps/product-catalog/_snapshot.post.generate/amplify/function/lowstockproducts/resource.ts @@ -10,7 +10,6 @@ export const lowstockproducts = defineFunction({ memoryMB: 128, environment: { ENV: `${branchName}`, - REGION: 'us-east-1', LOW_STOCK_THRESHOLD: '5', PRODUCT_CATALOG_SECRET: '/amplify/productcatalog/x/AMPLIFY_lowstockproducts_PRODUCT_CATALOG_SECRET', @@ -32,6 +31,10 @@ export function applyEscapeHatches(backend: Backend) { 'API_PRODUCTCATALOG_GRAPHQLAPIIDOUTPUT', backend.data.apiId ); + backend.lowstockproducts.addEnvironment( + 'REGION', + backend.lowstockproducts.stack.region + ); backend.data.resources.graphqlApi.grantQuery( backend.lowstockproducts.resources.lambda ); diff --git a/amplify-migration-apps/project-boards/_snapshot.post.generate/amplify/function/quotegenerator/resource.ts b/amplify-migration-apps/project-boards/_snapshot.post.generate/amplify/function/quotegenerator/resource.ts index 4e265c41dc9..fe45212a378 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.generate/amplify/function/quotegenerator/resource.ts +++ b/amplify-migration-apps/project-boards/_snapshot.post.generate/amplify/function/quotegenerator/resource.ts @@ -8,10 +8,14 @@ export const quotegenerator = defineFunction({ name: `quotegenerator-${branchName}`, timeoutSeconds: 25, memoryMB: 128, - environment: { ENV: `${branchName}`, REGION: 'us-east-1' }, + environment: { ENV: `${branchName}` }, runtime: 22, }); export function applyEscapeHatches(backend: Backend) { backend.quotegenerator.resources.cfnResources.cfnFunction.functionName = `quotegenerator-${branchName}`; + backend.quotegenerator.addEnvironment( + 'REGION', + backend.quotegenerator.stack.region + ); } diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/function/storelocator41a9495f41a9495fPostConfirmation/resource.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/function/storelocator41a9495f41a9495fPostConfirmation/resource.ts index 1dbc4562961..a17c06c39a7 100644 --- a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/function/storelocator41a9495f41a9495fPostConfirmation/resource.ts +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/function/storelocator41a9495f41a9495fPostConfirmation/resource.ts @@ -11,7 +11,6 @@ export const storelocator41a9495f41a9495fPostConfirmation = defineFunction({ environment: { ENV: `${branchName}`, MODULES: 'add-to-group', - REGION: 'us-east-1', GROUP: 'storeLocatorAdmin', }, runtime: 22, @@ -19,4 +18,8 @@ export const storelocator41a9495f41a9495fPostConfirmation = defineFunction({ export function applyEscapeHatches(backend: Backend) { backend.storelocator41a9495f41a9495fPostConfirmation.resources.cfnResources.cfnFunction.functionName = `storelocator41a9495f41a9495fPostConfirmation-${branchName}`; + backend.storelocator41a9495f41a9495fPostConfirmation.addEnvironment( + 'REGION', + backend.storelocator41a9495f41a9495fPostConfirmation.stack.region + ); } diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/data/data.generator.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/data/data.generator.test.ts index cb53c3c2c13..ce0e2e352b0 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/data/data.generator.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/data/data.generator.test.ts @@ -583,6 +583,7 @@ describe('DataGenerator', () => { expect(writtenFile('resource.ts')).toMatchInlineSnapshot(` "import { defineData } from '@aws-amplify/backend'; import type { Backend } from '../backend'; + import { myAuthFn } from '../function/myAuthFn/resource'; const schema = \`type Todo @model { id: ID! }\`; diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/function/function.generator.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/function/function.generator.test.ts index e777b4b24a9..788cd7b904b 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/function/function.generator.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/function/function.generator.test.ts @@ -1237,6 +1237,44 @@ describe('FunctionGenerator', () => { expect(output).toContain('KinesisEventSource'); }); + it('moves REGION from literal env vars to dynamic addEnvironment using stack.region', async () => { + const gen1App = await createGen1App({ + providers: { awscloudformation: { StackName: 'amplify-test-main-123456', Region: 'us-east-1' } }, + function: { + myFunc: { + service: 'Lambda', + output: { Name: 'myFunc-main-abc', Arn: 'arn:aws:lambda:us-east-1:123:function:myFunc-main-abc' }, + }, + }, + }); + jest.spyOn(gen1App, 'resourceMetaOutput').mockReturnValue('myFunc-main-abc'); + jest.spyOn(gen1App, 'json').mockReturnValue({ Resources: {} }); + jest.spyOn(gen1App, 'file').mockReturnValue('{}'); + jest.spyOn(gen1App, 'fileExists').mockReturnValue(false); + jest.spyOn(gen1App.aws, 'fetchFunctionConfig').mockResolvedValue({ + FunctionName: 'myFunc-main-abc', + Handler: 'index.handler', + Timeout: 3, + MemorySize: 128, + Runtime: 'nodejs18.x', + Environment: { Variables: { REGION: 'us-east-1', MY_VAR: 'hello' } }, + }); + jest.spyOn(gen1App.aws, 'fetchFunctionSchedule').mockResolvedValue(undefined); + + const generator = createFunctionGenerator({ gen1App, backendGenerator, packageJsonGenerator, outputDir }); + const ops = await generator.plan(); + await ops[0].execute(); + + const output = writtenFile('resource.ts'); + + // REGION should NOT appear as a literal environment variable + expect(output).not.toMatch(/environment:.*REGION/); + // MY_VAR should still be a literal env var + expect(output).toContain("MY_VAR: 'hello'"); + // REGION should be set dynamically via addEnvironment using the stack region token + expect(output).toContain("backend.myFunc.addEnvironment('REGION', backend.myFunc.stack.region)"); + }); + it('throws for non-nodejs runtime', async () => { const gen1App = await createGen1App({ providers: { awscloudformation: { StackName: 'amplify-test-main-123456', Region: 'us-east-1' } }, diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts index 754537b3ae2..2cc44452e31 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts @@ -9,7 +9,7 @@ import { AmplifyMigrationOperation } from '../../../_common/operation'; import { BackendGenerator } from '../backend.generator'; import { Gen1App, DiscoveredResource } from '../../../_common/gen1-app'; import { TS } from '../../ts'; -import { DataRenderer } from './data.renderer'; +import { DataRenderer, LambdaAuthFunctionRef } from './data.renderer'; import { SpinningLogger } from '../../../_common/spinning-logger'; // ── Resolver Utility Types ───────────────────────────────────────────── @@ -170,6 +170,7 @@ export class DataGenerator implements Planner { graphqlApi.additionalAuthenticationProviders !== undefined && graphqlApi.additionalAuthenticationProviders.length > 0; const hasAuth = this.gen1App.categoryMeta('auth') !== undefined; const authorizationModes = supplementOidcConfig(this.gen1App.resourceMetaOutput(this.resource, 'authConfig'), graphqlApi); + const lambdaAuthFunction = extractLambdaAuthFunction(authorizationModes); const hasIamAuth = this.detectIamAuth(authorizationModes, graphqlApi); const vtlFiles = this.findResolverVtlFiles(this.resource.resourceName); const hasResolvers = vtlFiles.length > 0; @@ -191,6 +192,7 @@ export class DataGenerator implements Planner { hasAuth, apiId, classifiedResolvers, + lambdaAuthFunction, }); const content = TS.printNodes(nodes); @@ -314,3 +316,43 @@ function supplementOidcConfig(authConfig: any, graphqlApi: GraphqlApi): any { return result; } + +/** + * Extracts the Lambda authorizer function reference from the authConfig. + * Searches both defaultAuthentication and additionalAuthenticationProviders. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any -- untyped authConfig from amplify-meta.json +function extractLambdaAuthFunction(authorizationModes: any): LambdaAuthFunctionRef | undefined { + if (!authorizationModes) return undefined; + + const lambdaFunctionName = + findLambdaFunctionName(authorizationModes.defaultAuthentication) ?? + findLambdaFunctionNameInProviders(authorizationModes.additionalAuthenticationProviders); + + if (!lambdaFunctionName) return undefined; + + return { + name: lambdaFunctionName, + importPath: `../function/${lambdaFunctionName}/resource`, + }; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any -- untyped authConfig provider +function findLambdaFunctionName(provider: any): string | undefined { + if (provider?.authenticationType === 'AWS_LAMBDA' && provider.lambdaAuthorizerConfig?.lambdaFunction) { + return provider.lambdaAuthorizerConfig.lambdaFunction; + } + return undefined; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any -- untyped authConfig providers array +function findLambdaFunctionNameInProviders(providers: any[] | undefined): string | undefined { + if (!providers) return undefined; + // AppSync supports only one Lambda authorizer per API, but we iterate defensively + // in case the config structure has multiple providers listed + for (const provider of providers) { + const name = findLambdaFunctionName(provider); + if (name) return name; + } + return undefined; +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.renderer.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.renderer.ts index 25cb6aa94b1..993cdb45946 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.renderer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.renderer.ts @@ -201,6 +201,15 @@ export function computeSpliceIndexes( * Options for rendering a defineData() resource file. */ /* eslint-disable @typescript-eslint/no-explicit-any -- authorizationModes is untyped JSON */ +/** + * Describes a Lambda authorizer function that needs to be imported + * into data/resource.ts for the lambdaAuthorizationMode config. + */ +export interface LambdaAuthFunctionRef { + readonly name: string; + readonly importPath: string; +} + export interface DataRenderOptions { readonly schema: string; readonly tableMappings: Record; @@ -209,6 +218,7 @@ export interface DataRenderOptions { readonly hasAuth?: boolean; readonly apiId?: string; readonly classifiedResolvers?: ClassifiedVtlFiles; + readonly lambdaAuthFunction?: LambdaAuthFunctionRef; } /* eslint-enable @typescript-eslint/no-explicit-any */ @@ -241,6 +251,10 @@ export class DataRenderer { const nodes: ts.Node[] = [this.renderNamedImport('defineData', '@aws-amplify/backend'), this.renderBackendTypeImport()]; + if (opts.lambdaAuthFunction) { + nodes.push(this.renderNamedImport(opts.lambdaAuthFunction.name, opts.lambdaAuthFunction.importPath)); + } + const escapeHatchResult = this.renderApplyEscapeHatches(opts); for (const imp of escapeHatchResult.additionalImports) { nodes.push(imp); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts index 6a38bafc61b..8d2ae7ffc34 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts @@ -78,6 +78,19 @@ export class FunctionGenerator implements Planner { const entry = TS.extractFilePathFromHandler(config.Handler ?? 'index.js'); const { literalEnvVars, dynamicEnvVars } = classifyEnvVars(config.Environment?.Variables ?? {}); + // REGION should resolve dynamically to the deployment region rather than + // being hardcoded. Move it from retained env vars to an escape hatch that + // uses the CDK stack region token. + const finalLiteralEnvVars = { ...literalEnvVars }; + const finalDynamicEnvVars = [...dynamicEnvVars]; + if ('REGION' in finalLiteralEnvVars) { + delete finalLiteralEnvVars.REGION; + finalDynamicEnvVars.push({ + name: 'REGION', + expression: TS.propAccess('backend', this.resource.resourceName, 'stack', 'region'), + }); + } + const dynamoActions = this.extractDynamoActions(); const kinesisActions = this.extractKinesisActions(); const appSyncPermissions = this.extractAppSyncPermissions(); @@ -97,8 +110,8 @@ export class FunctionGenerator implements Planner { memoryMB: config.MemorySize, runtime, schedule, - literalEnvVars, - dynamicEnvVars, + literalEnvVars: finalLiteralEnvVars, + dynamicEnvVars: finalDynamicEnvVars, dynamoActions, appSyncPermissions, dataTriggerModels,