--- AWSTemplateFormatVersion: "2010-09-09" Description: Lambda function to process data stream from Activity table and update User Aggregate table Parameters: APIName: Type: String Description: "Name of the API, to generate names for resources" MinLength: 3 MaxLength: 20 AllowedPattern: '^[a-zA-Z][a-zA-Z0-9_]*$' Default: caltrack S3BucketName: AllowedPattern: ^[0-9a-zA-Z]+([0-9a-zA-Z-]*[0-9a-zA-Z])*$ ConstraintDescription: S3 bucket name can include numbers, lowercase letters, uppercase letters, and hyphens (-). It cannot start or end with a hyphen (-). Description: "S3 bucket where all the templates, assets and other artifacts are \ \ stored. The bucket name can include numbers, lowercase letters, uppercase \ \ letters, and hyphens, but should not start or end with a hyphen." Type: String Default: reinvent-calorie-tracker-workshop S3KeyPrefix: AllowedPattern: ^[0-9a-zA-Z-_/]*$ ConstraintDescription: "Key prefix can include numbers, lowercase letters, uppercase letters, hyphens (-), and forward slash (/)." Description: "S3 key prefix for the workshop assets. Key prefix can include numbers, lowercase letters, uppercase letters, hyphens (-), underscore (_) and forward slash (/)." Type: String Default: 2_APPSYNC/ Resources: DynamoDBStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Sub 'https://${S3BucketName}.s3.amazonaws.com/${S3KeyPrefix}templates/dynamodb-tables.yaml' Parameters: APIName: !Ref 'APIName' LambdaFunctionStack: Type: AWS::CloudFormation::Stack DependsOn: - DynamoDBStack Properties: TemplateURL: !Sub 'https://${S3BucketName}.s3.amazonaws.com/${S3KeyPrefix}templates/lambda.yaml' Parameters: DynamoDBActivityTableArn: !GetAtt 'DynamoDBStack.Outputs.ActivityTableArn' DynamoDBActivityTableStreamArn: !GetAtt 'DynamoDBStack.Outputs.ActivityTableStreamARN' DynamoDBUserCaloriesAggTableName: !GetAtt 'DynamoDBStack.Outputs.UserCaloriesAggregateTable' DynamoDBUserCaloriesAggTableArn: !GetAtt 'DynamoDBStack.Outputs.UserCaloriesAggregateTableArn' AppSyncAPIStack: Type: AWS::CloudFormation::Stack DependsOn: - DynamoDBStack Properties: TemplateURL: !Sub 'https://${S3BucketName}.s3.amazonaws.com/${S3KeyPrefix}templates/appsync.yaml' Parameters: APIName: !Ref 'APIName' DynamoDBUserTableName: !GetAtt 'DynamoDBStack.Outputs.UserTable' DynamoDBUserTableArn: !GetAtt 'DynamoDBStack.Outputs.UserTableArn' DynamoDBActivityTableName: !GetAtt 'DynamoDBStack.Outputs.ActivityTable' DynamoDBActivityTableArn: !GetAtt 'DynamoDBStack.Outputs.ActivityTableArn' DynamoDBActivityCategoryTableName: !GetAtt 'DynamoDBStack.Outputs.ActivityCategoryTable' DynamoDBActivityCategoryTableArn: !GetAtt 'DynamoDBStack.Outputs.ActivityCategoryTableArn' DynamoDBUserCaloriesAggTableName: !GetAtt 'DynamoDBStack.Outputs.UserCaloriesAggregateTable' DynamoDBUserCaloriesAggTableArn: !GetAtt 'DynamoDBStack.Outputs.UserCaloriesAggregateTableArn' GraphQlSchemaS3DescriptionLocation: !Sub 's3://${S3BucketName}/${S3KeyPrefix}assets/schema.graphql' AppSyncResolverStack: Type: AWS::CloudFormation::Stack DependsOn: - DynamoDBStack - AppSyncAPIStack Properties: TemplateURL: !Sub 'https://${S3BucketName}.s3.amazonaws.com/${S3KeyPrefix}templates/appsync-resolvers.yaml' Parameters: AppSyncAPIId: !GetAtt 'AppSyncAPIStack.Outputs.AppSyncApiId' UserTableDataSourceName: !GetAtt 'AppSyncAPIStack.Outputs.AppSyncUserTableDataSourceName' ActivityTableDataSourceName: !GetAtt 'AppSyncAPIStack.Outputs.AppSyncActivityTableDataSourceName' ActivityCategoryTableDataSourceName: !GetAtt 'AppSyncAPIStack.Outputs.AppSyncActivityCategoryTableDataSourceName' UserAggTableDataSourceName: !GetAtt 'AppSyncAPIStack.Outputs.AppSyncUserAggTableDataSourceName' Outputs: AppSyncApp: Value: !Join - '' - - 'https://console.aws.amazon.com/appsync/home?region=' - !Sub '${AWS::Region}' - '#/' - !GetAtt 'AppSyncAPIStack.Outputs.AppSyncApiId' - '/v1/home' Description: AWS console URL to AppSync application