AWSTemplateFormatVersion: '2010-09-09' Outputs: APIHandlerArn: Value: Fn::GetAtt: - APIHandler - Arn APIHandlerName: Value: Ref: APIHandler EndpointURL: Value: Fn::Sub: https://${RestAPI}.execute-api.${AWS::Region}.amazonaws.com/api/ RestAPIId: Value: Ref: RestAPI Globals: Function: Environment: Variables: DYNAMODB_ENDPOINT_URL: null DYNAMODB_TABLE_NAME: testUserTable Resources: APIHandler: Properties: CodeUri: ./app Handler: app.dispatch_request MemorySize: 128 Role: Fn::GetAtt: - DefaultRole - Arn Runtime: python3.8 Timeout: 60 Type: AWS::Serverless::Function APIHandlerInvokePermission: Properties: Action: lambda:InvokeFunction FunctionName: Ref: APIHandler Principal: apigateway.amazonaws.com SourceArn: Fn::Sub: - arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${RestAPIId}/* - RestAPIId: Ref: RestAPI Type: AWS::Lambda::Permission DefaultRole: Properties: AssumeRolePolicyDocument: Statement: - Action: sts:AssumeRole Effect: Allow Principal: Service: lambda.amazonaws.com Sid: '' Version: '2012-10-17' Policies: - PolicyDocument: Statement: - Action: - logs:CreateLogGroup - logs:CreateLogStream - logs:PutLogEvents Effect: Allow Resource: arn:aws:logs:*:*:* Version: '2012-10-17' PolicyName: DefaultRolePolicy Type: AWS::IAM::Role RestAPI: Properties: DefinitionBody: definitions: Empty: title: Empty Schema type: object info: title: hoge version: '1.0' paths: /user: put: consumes: - application/json produces: - application/json responses: '200': description: 200 response schema: $ref: '#/definitions/Empty' x-amazon-apigateway-integration: contentHandling: CONVERT_TO_TEXT httpMethod: POST passthroughBehavior: when_no_match responses: default: statusCode: '200' type: aws_proxy uri: Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${APIHandler.Arn}/invocations /user/{user_id}: delete: consumes: - application/json parameters: - in: path name: user_id required: true type: string produces: - application/json responses: '200': description: 200 response schema: $ref: '#/definitions/Empty' x-amazon-apigateway-integration: contentHandling: CONVERT_TO_TEXT httpMethod: POST passthroughBehavior: when_no_match responses: default: statusCode: '200' type: aws_proxy uri: Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${APIHandler.Arn}/invocations get: consumes: - application/json parameters: - in: path name: user_id required: true type: string produces: - application/json responses: '200': description: 200 response schema: $ref: '#/definitions/Empty' x-amazon-apigateway-integration: contentHandling: CONVERT_TO_TEXT httpMethod: POST passthroughBehavior: when_no_match responses: default: statusCode: '200' type: aws_proxy uri: Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${APIHandler.Arn}/invocations patch: consumes: - application/json parameters: - in: path name: user_id required: true type: string produces: - application/json responses: '200': description: 200 response schema: $ref: '#/definitions/Empty' x-amazon-apigateway-integration: contentHandling: CONVERT_TO_TEXT httpMethod: POST passthroughBehavior: when_no_match responses: default: statusCode: '200' type: aws_proxy uri: Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${APIHandler.Arn}/invocations schemes: - https swagger: '2.0' x-amazon-apigateway-binary-media-types: - application/octet-stream - application/x-tar - application/zip - audio/basic - audio/ogg - audio/mp4 - audio/mpeg - audio/wav - audio/webm - image/png - image/jpg - image/jpeg - image/gif - video/ogg - video/mpeg - video/webm EndpointConfiguration: EDGE StageName: api Type: AWS::Serverless::Api Transform: AWS::Serverless-2016-10-31