AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > Example REST API Simple blog API written in API Gateway # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: ProxyAPIFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: app/ Handler: api.handler Runtime: python3.8 PackageType: Zip Events: ProxyApi: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /{proxy+} Method: any Environment: Variables: BASE_PATH: blog BLOG_TABLE: !Ref BlogTable BLOG_TABLE_ENTITY_INDEX: EntityType-CreatedAt-Index BLOG_TABLE_AUTHOR_INDEX: AuthorEmail_EntityType-CreatedAt-IndexV2 Policies: - DynamoDBCrudPolicy: TableName: !Ref BlogTable BlogTable: Type: AWS::DynamoDB::Table Properties: TableName: BlogV2 BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: PK AttributeType: S - AttributeName: SK AttributeType: S - AttributeName: EntityType AttributeType: S - AttributeName: CreatedAt AttributeType: S - AttributeName: AuthorEmail_EntityType AttributeType: S KeySchema: #required - AttributeName: PK KeyType: HASH - AttributeName: SK KeyType: RANGE GlobalSecondaryIndexes: - IndexName: EntityType-CreatedAt-Index KeySchema: - AttributeName: EntityType KeyType: HASH - AttributeName: CreatedAt KeyType: RANGE Projection: ProjectionType: INCLUDE NonKeyAttributes: - PK - SK - Slug - Title - Comment - UpdatedAt - AuthorEmail - FirstName - LastName - Role - IndexName: AuthorEmail_EntityType-CreatedAt-IndexV2 KeySchema: - AttributeName: AuthorEmail_EntityType KeyType: HASH - AttributeName: CreatedAt KeyType: RANGE Projection: ProjectionType: INCLUDE NonKeyAttributes: - PK - SK - Slug - Title - Comment - UpdatedAt - AuthorEmail Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api BlogApi: Description: "Swagger page for Prod stage for blog API" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/swagger" ProxyAPIFunction: Description: "API Lambda Function ARN" Value: !GetAtt ProxyAPIFunction.Arn ProxyAPIFunctionIamRole: Description: "Implicit IAM Role created for API function" Value: !GetAtt ProxyAPIFunctionRole.Arn