Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions amplify-migration-apps/mood-board/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -312,11 +312,11 @@ git checkout gen2-main
- // s3Bucket.bucketName = '...';
+ s3Bucket.bucketName = '...';
```
**Edit in `./src/components/SurpriseMeButton.tsx`:**
**Edit in `./src/constants`:**

```diff
- const STREAM_NAME = 'moodboardKinesis-gen2-main';
+ const STREAM_NAME = 'moodboardKinesis-main';
- export const KINESIS_STREAM_NAME = 'moodboardKinesis-gen2-sandbox';
+ export const KINESIS_STREAM_NAME = 'moodboardKinesis-main';
```

```console
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export interface analyticsmoodboardKinesisProps {
}

/**
* {"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.2.5","stackType":"analytics-Kinesis","metadata":{"whyContinueWithGen1":"Prefer not to answer"}}
* {"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.1.0","stackType":"analytics-Kinesis","metadata":{"whyContinueWithGen1":"Prefer not to answer"}}
*/
export class analyticsmoodboardKinesis extends Construct {
public readonly kinesisStreamArn;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ import { data } from './data/resource';
import { storage } from './storage/resource';
import { moodboardGetRandomEmoji } from './function/moodboardGetRandomEmoji/resource';
import { moodboardKinesisReader } from './function/moodboardKinesisReader/resource';
import { readdirSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
import { defineBackend } from '@aws-amplify/backend';
import { defineAnalytics } from './analytics/resource';
import { Duration, aws_iam } from 'aws-cdk-lib';
import * as assets from 'aws-cdk-lib/aws-s3-assets';

const backend = defineBackend({
auth,
Expand All @@ -15,6 +19,44 @@ const backend = defineBackend({
moodboardKinesisReader,
});
const analytics = defineAnalytics(backend);
const cfnGraphqlApi = backend.data.resources.cfnResources.cfnGraphqlApi;
cfnGraphqlApi.additionalAuthenticationProviders = [
{
authenticationType: 'AMAZON_COGNITO_USER_POOLS',
userPoolConfig: {
userPoolId: backend.auth.resources.userPool.userPoolId,
awsRegion: backend.auth.stack.region,
},
},
];
const __dirname = dirname(fileURLToPath(import.meta.url));
const resolversDir = join(__dirname, 'data/resolvers');
const resolverFiles = readdirSync(resolversDir).filter(
(f) => f.endsWith('.req.vtl') || f.endsWith('.res.vtl')
);
for (const file of resolverFiles) {
const parts = file.replace('.req.vtl', '').replace('.res.vtl', '').split('.');
const [typeName, fieldName] = parts;
const isRequest = file.endsWith('.req.vtl');
const functionId = `${typeName}${
fieldName.charAt(0).toUpperCase() + fieldName.slice(1)
}DataResolverFn`;
const pipelineFunction =
backend.data.resources.cfnResources.cfnFunctionConfigurations[functionId];
if (pipelineFunction) {
const templatePath = join(resolversDir, file);
const vtlTemplate = new assets.Asset(backend.data, `VTLTemplate-${file}`, {
path: templatePath,
});
if (isRequest) {
pipelineFunction.requestMappingTemplateS3Location =
vtlTemplate.s3ObjectUrl;
} else {
pipelineFunction.responseMappingTemplateS3Location =
vtlTemplate.s3ObjectUrl;
}
}
}
const cfnUserPool = backend.auth.resources.cfnResources.cfnUserPool;
cfnUserPool.usernameAttributes = ['email'];
cfnUserPool.policies = {
Expand All @@ -36,29 +78,6 @@ userPool.addClient('NativeAppClient', {
disableOAuth: true,
generateSecret: false,
});
const cfnGraphqlApi = backend.data.resources.cfnResources.cfnGraphqlApi;
cfnGraphqlApi.additionalAuthenticationProviders = [
{
authenticationType: 'AMAZON_COGNITO_USER_POOLS',
userPoolConfig: {
userPoolId: backend.auth.resources.userPool.userPoolId,
awsRegion: backend.auth.stack.region,
},
},
];
const s3Bucket = backend.storage.resources.cfnResources.cfnBucket;
// Use this bucket name post refactor
// s3Bucket.bucketName = 'moodboard20e29595008142e3ad16f01c4066e1c41959a-main';
s3Bucket.bucketEncryption = {
serverSideEncryptionConfiguration: [
{
serverSideEncryptionByDefault: {
sseAlgorithm: 'AES256',
},
bucketKeyEnabled: false,
},
],
};
const branchName = process.env.AWS_BRANCH ?? 'sandbox';
backend.moodboardGetRandomEmoji.resources.cfnResources.cfnFunction.functionName = `moodboardGetRandomEmoji-${branchName}`;
backend.moodboardKinesisReader.resources.cfnResources.cfnFunction.functionName = `moodboardKinesisReader-${branchName}`;
Expand All @@ -84,3 +103,16 @@ backend.moodboardKinesisReader.resources.lambda.addToRolePolicy(
resources: [analytics.kinesisStreamArn],
})
);
const s3Bucket = backend.storage.resources.cfnResources.cfnBucket;
// Use this bucket name post refactor
// s3Bucket.bucketName = 'moodboarda9dff0b544a64459b29954a5cab78ace5c190-main';
s3Bucket.bucketEncryption = {
serverSideEncryptionConfiguration: [
{
serverSideEncryptionByDefault: {
sseAlgorithm: 'AES256',
},
bucketKeyEnabled: false,
},
],
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
## [Start] Custom List Request - Override to cap results at 50. **
#set( $args = $util.defaultIfNull($ctx.stash.transformedArgs, $ctx.args) )
#set( $limit = $util.defaultIfNull($args.limit, 50) )
## Cap the limit at 50 to keep the board list manageable
#if( $limit > 50 )
#set( $limit = 50 )
#end
#set( $ListRequest = {
"version": "2018-05-29",
"limit": $limit
} )
#if( $args.nextToken )
#set( $ListRequest.nextToken = $args.nextToken )
#end
#if( !$util.isNullOrEmpty($ctx.stash.authFilter) )
#set( $filter = $ctx.stash.authFilter )
#if( !$util.isNullOrEmpty($args.filter) )
#set( $filter = {
"and": [$filter, $args.filter]
} )
#end
#else
#if( !$util.isNullOrEmpty($args.filter) )
#set( $filter = $args.filter )
#end
#end
#if( !$util.isNullOrEmpty($filter) )
#set( $filterExpression = $util.parseJson($util.transform.toDynamoDBFilterExpression($filter)) )
#if( $util.isNullOrEmpty($filterExpression) )
$util.error("Unable to process the filter expression", "Unrecognized Filter")
#end
#if( !$util.isNullOrBlank($filterExpression.expression) )
#if( $filterExpression.expressionValues.size() == 0 )
$util.qr($filterExpression.remove("expressionValues"))
#end
#set( $ListRequest.filter = $filterExpression )
#end
#end
#if( !$util.isNull($ctx.stash.modelQueryExpression) && !$util.isNullOrEmpty($ctx.stash.modelQueryExpression.expression) )
$util.qr($ListRequest.put("operation", "Query"))
$util.qr($ListRequest.put("query", $ctx.stash.modelQueryExpression))
#if( !$util.isNull($args.sortDirection) && $args.sortDirection == "DESC" )
#set( $ListRequest.scanIndexForward = false )
#else
#set( $ListRequest.scanIndexForward = true )
#end
#else
$util.qr($ListRequest.put("operation", "Scan"))
#end
#if( !$util.isNull($ctx.stash.metadata.index) )
#set( $ListRequest.IndexName = $ctx.stash.metadata.index )
#end
$util.toJson($ListRequest)
## [End] Custom List Request. **
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## [Start] Custom ResponseTemplate - Prepend emoji to board names to prove override is active. **
#if( $ctx.error )
$util.error($ctx.error.message, $ctx.error.type)
#end

## Add a pin emoji prefix to each board name so it's visible on the frontend
#foreach( $item in $ctx.result.items )
#if( !$item.name.startsWith("📌 ") )
$util.qr($item.put("name", "📌 $item.name"))
#end
#end

$util.toJson($ctx.result)
## [End] Custom ResponseTemplate. **
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ export const data = defineData({
//The "branchname" variable needs to be the same as your deployment branch if you want to reuse your Gen1 app tables
branchName: 'main',
modelNameToTableNameMapping: {
MoodItem: 'MoodItem-vsozkn3hbzdjppzyf7xtf2f4sy-main',
Board: 'Board-vsozkn3hbzdjppzyf7xtf2f4sy-main',
MoodItem: 'MoodItem-qy2hodyasjgidjuruysadaqj5a-main',
Board: 'Board-qy2hodyasjgidjuruysadaqj5a-main',
},
},
],
authorizationModes: {
defaultAuthorizationMode: 'apiKey',
apiKeyAuthorizationMode: {
expiresInDays: 365,
description: 'moodBoard API Key',
description: 'moodboard apiKey',
},
},
schema,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { defineStorage } from '@aws-amplify/backend';
const branchName = process.env.AWS_BRANCH ?? 'sandbox';

export const storage = defineStorage({
name: `moodboard20e29595008142e3ad16f01c4066e1c41959a-${branchName}`,
name: `moodboarda9dff0b544a64459b29954a5cab78ace5c190-${branchName}`,
access: (allow) => ({
'public/*': [
allow.guest.to(['read']),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "@amplify-migration-apps/mood-board-app-snapshot",
"name": "@amplify-migration-apps/mood-board-snapshot",
"private": true,
"version": "0.0.1",
"type": "module",
Expand All @@ -10,9 +10,18 @@
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"configure": "./configure.sh",
"configure": "./backend/configure.sh",
"sanitize": "tsx ../sanitize.ts",
"typecheck": "cd _snapshot.post.generate/amplify && npx tsc --noEmit"
"typecheck": "cd _snapshot.post.generate/amplify && npx tsc --noEmit",
"test:gen1": "APP_CONFIG_PATH=${APP_CONFIG_PATH:-src/amplifyconfiguration.json} NODE_OPTIONS='--experimental-vm-modules' jest --verbose",
"test:gen2": "APP_CONFIG_PATH=${APP_CONFIG_PATH:-amplify_outputs.json} NODE_OPTIONS='--experimental-vm-modules' jest --verbose",
"test:e2e": "cd ../../packages/amplify-gen2-migration-e2e-system && npx tsx src/cli.ts --app mood-board --profile ${AWS_PROFILE:-default}",
"pre-push": "true",
"post-generate": "npx tsx migration/post-generate.ts",
"post-refactor": "npx tsx migration/post-refactor.ts",
"post-sandbox": "true",
"pre-sandbox": "true",
"post-push": "true"
},
"dependencies": {
"@aws-amplify/ui-react": "^6.10.1",
Expand All @@ -24,7 +33,9 @@
"@aws-amplify/backend": "^1.18.0",
"@aws-amplify/backend-cli": "^1.8.0",
"@aws-amplify/backend-data": "^1.6.2",
"@aws-sdk/client-cognito-identity-provider": "^3.936.0",
"@types/aws-lambda": "^8.10.92",
"@types/jest": "^29.5.14",
"@types/node": "*",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
Expand All @@ -34,6 +45,8 @@
"ci-info": "^4.3.1",
"constructs": "^10.0.0",
"esbuild": "^0.27.0",
"jest": "^29.7.0",
"ts-jest": "^29.3.4",
"tsx": "^4.20.6",
"typescript": "^5.5.3",
"vite": "^5.4.2"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"Source": {
"StackName": "amplify-d2y1hd6iycv4j0-gen2main-branch-91af8367fe-analytics5794DE4A-3N60XHVAOPX7",
"LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047"
},
"Destination": {
"StackName": "amplify-d2y1hd6iycv4j0-gen2main-branch-91af8367fe-analytics5794DE4A-3N60XHVAOPX7-holding",
"LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047"
}
}
]
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.0\",\"stackType\":\"custom\",\"metadata\":{}}",
"Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.22.0\",\"stackType\":\"custom\",\"metadata\":{}}",
"Resources": {
"moodboardKinesisCognitoAuthPolicyB69F4FA6": {
"Type": "AWS::IAM::Policy",
Expand All @@ -13,19 +13,19 @@
"kinesis:PutRecord",
"kinesis:PutRecords"
],
"Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main"
"Resource": "arn:aws:kinesis:us-east-1:615368094448:stream/moodboardKinesis-gen2-main"
}
]
},
"PolicyName": "moodboardKinesis-auth-policy-gen2-main",
"Roles": [
{
"Ref": "referencetoamplifymoodboardgen2mainbranchf7e4caeabbauthNestedStackauthNestedStackResource8240BFF9Outputsamplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthauthenticatedUserRole0AA19633Ref"
"Ref": "referencetoamplifyd2y1hd6iycv4j0gen2mainbranch91af8367feauthNestedStackauthNestedStackResourceC05563C6Outputsamplifyd2y1hd6iycv4j0gen2mainbranch91af8367feauthamplifyAuthauthenticatedUserRole136A40AFRef"
}
]
},
"Metadata": {
"aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/analytics/moodboardKinesis/CognitoAuthPolicy"
"aws:cdk:path": "amplify-d2y1hd6iycv4j0-gen2main-branch-91af8367fe/analytics/moodboardKinesis/CognitoAuthPolicy"
}
},
"moodboardKinesisCognitoUnauthPolicyC4CE1D44": {
Expand All @@ -40,44 +40,44 @@
"kinesis:PutRecord",
"kinesis:PutRecords"
],
"Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main"
"Resource": "arn:aws:kinesis:us-east-1:615368094448:stream/moodboardKinesis-gen2-main"
}
]
},
"PolicyName": "moodboardKinesis-unauth-policy-gen2-main",
"Roles": [
{
"Ref": "referencetoamplifymoodboardgen2mainbranchf7e4caeabbauthNestedStackauthNestedStackResource8240BFF9Outputsamplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthunauthenticatedUserRoleBEC4D39ARef"
"Ref": "referencetoamplifyd2y1hd6iycv4j0gen2mainbranch91af8367feauthNestedStackauthNestedStackResourceC05563C6Outputsamplifyd2y1hd6iycv4j0gen2mainbranch91af8367feauthamplifyAuthunauthenticatedUserRoleDFF7305BRef"
}
]
},
"Metadata": {
"aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/analytics/moodboardKinesis/CognitoUnauthPolicy"
"aws:cdk:path": "amplify-d2y1hd6iycv4j0-gen2main-branch-91af8367fe/analytics/moodboardKinesis/CognitoUnauthPolicy"
}
},
"CDKMetadata": {
"Type": "AWS::CDK::Metadata",
"Properties": {
"Analytics": "v2:deflate64:H4sIAAAAAAAA/yXHwQqDMAwA0G/x3mZadtjd+zbmB0jWRoi1dZh0MsR/F9np8Ry4awN1hatYH6Kd+A3bnUQpdIo+Glyl3yJnEhZoh9zpQpgMYzr3nCf2v920Q34U/RTdTZ4DwSiXr3PQ3KCuRmG2S8nKieD19wCgungydwAAAA=="
"Analytics": "v2:deflate64:H4sIAAAAAAAA/yXMMQ7CMAxA0bOwJwYiBvbugOgBKpO4kpvGRbVDhareHVVMX2/5AcLlCqcDLupjyn7kF6w3UqPUGsbscNFuzSykrND00tpMWBxj2fWYRo7fzTW93Ku9q21OpkQw6PETApz39aDMfq5iXAie//4AKixDBHcAAAA="
},
"Metadata": {
"aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/analytics/CDKMetadata/Default"
"aws:cdk:path": "amplify-d2y1hd6iycv4j0-gen2main-branch-91af8367fe/analytics/CDKMetadata/Default"
},
"Condition": "CDKMetadataAvailable"
}
},
"Outputs": {
"kinesisStreamArn": {
"Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main"
"Value": "arn:aws:kinesis:us-east-1:615368094448:stream/moodboardKinesis-gen2-main"
},
"kinesisStreamId": {
"Value": "moodboardKinesis-gen2-main"
},
"kinesisStreamShardCount": {
"Value": "1"
},
"amplifymoodboardgen2mainbranchf7e4caeabbanalyticsmoodboardKinesisKinesisStreamBD82380AArn": {
"Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main"
"amplifyd2y1hd6iycv4j0gen2mainbranch91af8367feanalyticsmoodboardKinesisKinesisStream9A121783Arn": {
"Value": "arn:aws:kinesis:us-east-1:615368094448:stream/moodboardKinesis-gen2-main"
}
},
"Conditions": {
Expand Down Expand Up @@ -347,10 +347,10 @@
}
},
"Parameters": {
"referencetoamplifymoodboardgen2mainbranchf7e4caeabbauthNestedStackauthNestedStackResource8240BFF9Outputsamplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthauthenticatedUserRole0AA19633Ref": {
"referencetoamplifyd2y1hd6iycv4j0gen2mainbranch91af8367feauthNestedStackauthNestedStackResourceC05563C6Outputsamplifyd2y1hd6iycv4j0gen2mainbranch91af8367feauthamplifyAuthauthenticatedUserRole136A40AFRef": {
"Type": "String"
},
"referencetoamplifymoodboardgen2mainbranchf7e4caeabbauthNestedStackauthNestedStackResource8240BFF9Outputsamplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthunauthenticatedUserRoleBEC4D39ARef": {
"referencetoamplifyd2y1hd6iycv4j0gen2mainbranch91af8367feauthNestedStackauthNestedStackResourceC05563C6Outputsamplifyd2y1hd6iycv4j0gen2mainbranch91af8367feauthamplifyAuthunauthenticatedUserRoleDFF7305BRef": {
"Type": "String"
}
}
Expand Down
Loading
Loading