{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "API Gateway resource stack creation using Amplify CLI", "Parameters": { "authRoleName": { "Type": "String" }, "unauthRoleName": { "Type": "String" }, "env": { "Type": "String" }, "functionauthFunctionName": { "Type": "String", "Default": "functionauthFunctionName" }, "functionauthFunctionArn": { "Type": "String", "Default": "functionauthFunctionArn" } }, "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ { "Ref": "env" }, "NONE" ] } }, "Resources": { "auth": { "Type": "AWS::ApiGateway::RestApi", "Properties": { "Description": "", "Name": "auth", "Body": { "swagger": "2.0", "info": { "version": "2018-05-24T17:52:00Z", "title": "auth" }, "host": { "Fn::Join": [ "", [ "apigateway.", { "Ref": "AWS::Region" }, ".amazonaws.com" ] ] }, "basePath": { "Fn::If": [ "ShouldNotCreateEnvResources", "/Prod", { "Fn::Join": [ "", [ "/", { "Ref": "env" } ] ] } ] }, "schemes": [ "https" ], "paths": { "/auth": { "options": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "responses": { "200": { "description": "200 response", "headers": { "Access-Control-Allow-Origin": { "type": "string" }, "Access-Control-Allow-Methods": { "type": "string" }, "Access-Control-Allow-Headers": { "type": "string" } } } }, "x-amazon-apigateway-integration": { "responses": { "default": { "statusCode": "200", "responseParameters": { "method.response.header.Access-Control-Allow-Methods": "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent'", "method.response.header.Access-Control-Allow-Origin": "'*'" } } }, "requestTemplates": { "application/json": "{\"statusCode\": 200}" }, "passthroughBehavior": "when_no_match", "type": "mock" } }, "x-amazon-apigateway-any-method": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "body", "name": "RequestSchema", "required": false, "schema": { "$ref": "#/definitions/RequestSchema" } } ], "responses": { "200": { "description": "200 response", "schema": { "$ref": "#/definitions/ResponseSchema" } } }, "x-amazon-apigateway-integration": { "responses": { "default": { "statusCode": "200" } }, "uri": { "Fn::Join": [ "", [ "arn:aws:apigateway:", { "Ref": "AWS::Region" }, ":lambda:path/2015-03-31/functions/", { "Ref": "functionauthFunctionArn" }, "/invocations" ] ] }, "passthroughBehavior": "when_no_match", "httpMethod": "POST", "type": "aws_proxy" } } }, "/auth/{proxy+}": { "options": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "responses": { "200": { "description": "200 response", "headers": { "Access-Control-Allow-Origin": { "type": "string" }, "Access-Control-Allow-Methods": { "type": "string" }, "Access-Control-Allow-Headers": { "type": "string" } } } }, "x-amazon-apigateway-integration": { "responses": { "default": { "statusCode": "200", "responseParameters": { "method.response.header.Access-Control-Allow-Methods": "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent'", "method.response.header.Access-Control-Allow-Origin": "'*'" } } }, "requestTemplates": { "application/json": "{\"statusCode\": 200}" }, "passthroughBehavior": "when_no_match", "type": "mock" } }, "x-amazon-apigateway-any-method": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "in": "body", "name": "RequestSchema", "required": false, "schema": { "$ref": "#/definitions/RequestSchema" } } ], "responses": { "200": { "description": "200 response", "schema": { "$ref": "#/definitions/ResponseSchema" } } }, "x-amazon-apigateway-integration": { "responses": { "default": { "statusCode": "200" } }, "uri": { "Fn::Join": [ "", [ "arn:aws:apigateway:", { "Ref": "AWS::Region" }, ":lambda:path/2015-03-31/functions/", { "Ref": "functionauthFunctionArn" }, "/invocations" ] ] }, "passthroughBehavior": "when_no_match", "httpMethod": "POST", "type": "aws_proxy" } } } }, "securityDefinitions": { "sigv4": { "type": "apiKey", "name": "Authorization", "in": "header", "x-amazon-apigateway-authtype": "awsSigv4" } }, "definitions": { "RequestSchema": { "type": "object", "required": [ "request" ], "properties": { "request": { "type": "string" } }, "title": "Request Schema" }, "ResponseSchema": { "type": "object", "required": [ "response" ], "properties": { "response": { "type": "string" } }, "title": "Response Schema" } } }, "FailOnWarnings": true } }, "functionauthFunctionPermissionauth": { "Type": "AWS::Lambda::Permission", "Properties": { "FunctionName": { "Ref": "functionauthFunctionName" }, "Action": "lambda:InvokeFunction", "Principal": "apigateway.amazonaws.com", "SourceArn": { "Fn::Join": [ "", [ "arn:aws:execute-api:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "auth" }, "/*/*/*" ] ] } } }, "DeploymentAPIGWauth": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", "StageName": { "Fn::If": [ "ShouldNotCreateEnvResources", "Prod", { "Ref": "env" } ] }, "RestApiId": { "Ref": "auth" } } } }, "Outputs": { "RootUrl": { "Description": "Root URL of the API gateway", "Value": {"Fn::Join": ["", ["https://", {"Ref": "auth"}, ".execute-api.", {"Ref": "AWS::Region"}, ".amazonaws.com/", {"Fn::If": ["ShouldNotCreateEnvResources","Prod", {"Ref": "env"} ]}]]} }, "ApiName": { "Description": "API Friendly name", "Value": "auth" }, "ApiId": { "Description": "API ID (prefix of API URL)", "Value": {"Ref": "auth"} } } }