Forked from ericsalesdeandrade-zz/lambda_apigateway_cft.json
Last active
May 5, 2021 10:26
-
-
Save leny/092122d854a82fbd3d1f6bbdeedad197 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "Resources": { | |
| "IAMLambdaServiceRole": { | |
| "Type": "AWS::IAM::Role", | |
| "Properties": { | |
| "RoleName": "LambdaServiceRole", | |
| "AssumeRolePolicyDocument": { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Sid": "", | |
| "Effect": "Allow", | |
| "Principal": { | |
| "Service": "lambda.amazonaws.com" | |
| }, | |
| "Action": "sts:AssumeRole" | |
| } | |
| ] | |
| }, | |
| "ManagedPolicyArns": [ | |
| "arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs" | |
| ], | |
| "Policies": [ | |
| { | |
| "PolicyName": "LambdaServiceRolePolicy", | |
| "PolicyDocument": { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Action": [ | |
| "s3:Get*", | |
| "s3:List*" | |
| ], | |
| "Resource": "*", | |
| "Effect": "Allow" | |
| } | |
| ] | |
| } | |
| } | |
| ] | |
| } | |
| }, | |
| "IAMAPIServiceRole": { | |
| "Type": "AWS::IAM::Role", | |
| "Properties": { | |
| "RoleName": "LambdaAPIServiceRole", | |
| "AssumeRolePolicyDocument": { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Sid": "", | |
| "Effect": "Allow", | |
| "Principal": { | |
| "Service": "apigateway.amazonaws.com" | |
| }, | |
| "Action": "sts:AssumeRole" | |
| } | |
| ] | |
| }, | |
| "ManagedPolicyArns": [ | |
| "arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs" | |
| ], | |
| "Policies": [ | |
| { | |
| "PolicyName": "API_Service_Role_Policy", | |
| "PolicyDocument": { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Action": "lambda:InvokeFunction", | |
| "Resource": { | |
| "Fn::GetAtt": [ | |
| "APIFunction", | |
| "Arn" | |
| ] | |
| }, | |
| "Effect": "Allow" | |
| } | |
| ] | |
| } | |
| } | |
| ] | |
| } | |
| }, | |
| "APIFunction": { | |
| "Type": "AWS::Lambda::Function", | |
| "Properties": { | |
| "FunctionName": "GetVehicle", | |
| "Description": "Function to Get Vehicle Image from S3 Bucket", | |
| "Code": { | |
| "S3Bucket": "car-images-hd", | |
| "S3Key": "Get_Car.zip" | |
| }, | |
| "Handler": "Get_Car.get_car", | |
| "Runtime": "python3.6", | |
| "MemorySize": 1024, | |
| "Role": { | |
| "Fn::GetAtt": [ | |
| "IAMLambdaServiceRole", | |
| "Arn" | |
| ] | |
| }, | |
| "Timeout": 60 | |
| } | |
| }, | |
| "RestAPI": { | |
| "Type": "AWS::ApiGateway::RestApi", | |
| "Properties": { | |
| "Description": "API to get Car Image", | |
| "Name": "Get_Car API", | |
| "EndpointConfiguration": { | |
| "Types": [ | |
| "REGIONAL" | |
| ] | |
| }, | |
| "Body": { | |
| "swagger": "2.0", | |
| "info": { | |
| "description": "API to return Car Image", | |
| "version": "1.0.0", | |
| "title": "Get_Car API" | |
| }, | |
| "schemes": [ | |
| "https" | |
| ], | |
| "paths": { | |
| "/": {}, | |
| "/get_car": { | |
| "post": { | |
| "produces": [ | |
| "application/json", | |
| "application/customer-error", | |
| "application/api_not_found", | |
| "application/no_record", | |
| "application/api_error" | |
| ], | |
| "responses": { | |
| "200": { | |
| "description": "200 response", | |
| "schema": { | |
| "$ref": "#/definitions/Empty" | |
| } | |
| }, | |
| "201": { | |
| "description": "201 response" | |
| }, | |
| "204": { | |
| "description": "204 response" | |
| }, | |
| "230": { | |
| "description": "230 response" | |
| }, | |
| "231": { | |
| "description": "231 response" | |
| }, | |
| "232": { | |
| "description": "232 response" | |
| }, | |
| "233": { | |
| "description": "233 response" | |
| } | |
| }, | |
| "security": [ | |
| { | |
| "sigv4": [] | |
| } | |
| ], | |
| "x-amazon-apigateway-integration": { | |
| "responses": { | |
| "default": { | |
| "statusCode": "200" | |
| } | |
| }, | |
| "uri": { | |
| "Fn::Join": [ | |
| ":", | |
| [ | |
| "arn:aws:apigateway", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| "lambda:path/2015-03-31/functions/arn:aws:lambda", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| { | |
| "Ref": "AWS::AccountId" | |
| }, | |
| "function", | |
| { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| { | |
| "Ref": "APIFunction" | |
| }, | |
| "/invocations" | |
| ] | |
| ] | |
| } | |
| ] | |
| ] | |
| }, | |
| "passthroughBehavior": "when_no_match", | |
| "httpMethod": "POST", | |
| "contentHandling": "CONVERT_TO_TEXT", | |
| "credentials": { | |
| "Fn::GetAtt": [ | |
| "IAMAPIServiceRole", | |
| "Arn" | |
| ] | |
| }, | |
| "type": "aws" | |
| } | |
| } | |
| } | |
| }, | |
| "securityDefinitions": { | |
| "sigv4": { | |
| "type": "apiKey", | |
| "name": "Authorization", | |
| "in": "header", | |
| "x-amazon-apigateway-authtype": "awsSigv4" | |
| } | |
| }, | |
| "definitions": { | |
| "Empty": { | |
| "type": "object", | |
| "title": "Empty Schema" | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| "RestAPICaller": { | |
| "Type": "AWS::IAM::User", | |
| "Properties": { | |
| "UserName": "Get_Car_Caller" | |
| } | |
| }, | |
| "RestAPICallerManagedPolicy": { | |
| "Type": "AWS::IAM::ManagedPolicy", | |
| "DependsOn": [ | |
| "RestAPI", | |
| "APIFunction", | |
| "RestAPICaller" | |
| ], | |
| "Properties": { | |
| "Description": "Get_Car API Caller", | |
| "PolicyDocument": { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Sid": "RestAPICaller001", | |
| "Effect": "Allow", | |
| "Action": "execute-api:Invoke", | |
| "Resource": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "arn:aws:execute-api:", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| ":", | |
| { | |
| "Ref": "AWS::AccountId" | |
| }, | |
| ":", | |
| { | |
| "Ref": "RestAPI" | |
| }, | |
| "/*/POST/*" | |
| ] | |
| ] | |
| } | |
| }, | |
| { | |
| "Sid": "RestAPICaller002", | |
| "Effect": "Allow", | |
| "Action": "lambda:InvokeFunction", | |
| "Resource": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "arn:aws:lambda:", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| ":", | |
| { | |
| "Ref": "AWS::AccountId" | |
| }, | |
| ":function:", | |
| { | |
| "Ref": "APIFunction" | |
| } | |
| ] | |
| ] | |
| } | |
| }, | |
| { | |
| "Sid": "RestAPICaller003", | |
| "Effect": "Allow", | |
| "Action": "s3:GetObject", | |
| "Resource": "arn:aws:s3:::car-images-hd/*" | |
| } | |
| ] | |
| }, | |
| "Users": [ | |
| "Get_Car_Caller" | |
| ], | |
| "ManagedPolicyName": "API_Caller_Policy" | |
| } | |
| }, | |
| "LambdaPermissions": { | |
| "Type": "AWS::Lambda::Permission", | |
| "DependsOn": [ | |
| "APIFunction" | |
| ], | |
| "Properties": { | |
| "Action": "lambda:Invoke", | |
| "FunctionName": { | |
| "Ref": "APIFunction" | |
| }, | |
| "Principal": "apigateway.amazonaws.com", | |
| "SourceArn": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "arn:aws:execute-api:", | |
| { | |
| "Ref": "AWS::Region" | |
| }, | |
| ":", | |
| { | |
| "Ref": "AWS::AccountId" | |
| }, | |
| ":", | |
| { | |
| "Ref": "RestAPI" | |
| }, | |
| "/*/POST/get_car" | |
| ] | |
| ] | |
| } | |
| } | |
| }, | |
| "GetCarLogGroup": { | |
| "Type": "AWS::Logs::LogGroup", | |
| "DependsOn": "APIFunction", | |
| "Properties": { | |
| "LogGroupName": { | |
| "Fn::Join": [ | |
| "", | |
| [ | |
| "/aws/lambda/", | |
| { | |
| "Ref": "APIFunction" | |
| } | |
| ] | |
| ] | |
| } | |
| } | |
| }, | |
| "ApiGatewayCloudWatchLogsRole": { | |
| "Type": "AWS::IAM::Role", | |
| "Properties": { | |
| "AssumeRolePolicyDocument": { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Effect": "Allow", | |
| "Principal": { | |
| "Service": [ | |
| "apigateway.amazonaws.com" | |
| ] | |
| }, | |
| "Action": [ | |
| "sts:AssumeRole" | |
| ] | |
| } | |
| ] | |
| }, | |
| "Policies": [ | |
| { | |
| "PolicyName": "API_GW_Logs_Policy", | |
| "PolicyDocument": { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Effect": "Allow", | |
| "Action": [ | |
| "logs:CreateLogGroup", | |
| "logs:CreateLogStream", | |
| "logs:DescribeLogGroups", | |
| "logs:DescribeLogStreams", | |
| "logs:PutLogEvents", | |
| "logs:GetLogEvents", | |
| "logs:FilterLogEvents" | |
| ], | |
| "Resource": "*" | |
| } | |
| ] | |
| } | |
| } | |
| ] | |
| } | |
| }, | |
| "BucketPolicy": { | |
| "Type": "AWS::S3::BucketPolicy", | |
| "Properties": { | |
| "Bucket": "car-images-hd", | |
| "PolicyDocument": { | |
| "Version": "2012-10-17", | |
| "Statement": [ | |
| { | |
| "Effect": "Allow", | |
| "Action": [ | |
| "s3:GetObject" | |
| ], | |
| "Resource": "arn:aws:s3:::car-images-hd/*", | |
| "Condition": {}, | |
| "Principal": { | |
| "AWS": [ | |
| { | |
| "Fn::Join": [ | |
| ":", | |
| [ | |
| "arn:aws:iam:", | |
| { | |
| "Ref": "AWS::AccountId" | |
| }, | |
| "user/Get_Car_Caller" | |
| ] | |
| ] | |
| } | |
| ] | |
| } | |
| } | |
| ] | |
| } | |
| } | |
| }, | |
| "ApiGatewayAccount": { | |
| "Type": "AWS::ApiGateway::Account", | |
| "Properties": { | |
| "CloudWatchRoleArn": { | |
| "Fn::GetAtt": [ | |
| "ApiGatewayCloudWatchLogsRole", | |
| "Arn" | |
| ] | |
| } | |
| } | |
| }, | |
| "RestAPIStage": { | |
| "Type": "AWS::ApiGateway::Stage", | |
| "DependsOn": [ | |
| "ApiGatewayAccount" | |
| ], | |
| "Properties": { | |
| "DeploymentId": { | |
| "Ref": "RestAPIDeployment" | |
| }, | |
| "MethodSettings": [ | |
| { | |
| "DataTraceEnabled": true, | |
| "HttpMethod": "*", | |
| "LoggingLevel": "INFO", | |
| "ResourcePath": "/*" | |
| } | |
| ], | |
| "RestApiId": { | |
| "Ref": "RestAPI" | |
| }, | |
| "StageName": "dev" | |
| } | |
| }, | |
| "RestAPIDeployment": { | |
| "Type": "AWS::ApiGateway::Deployment", | |
| "DependsOn": [ | |
| "RestAPI" | |
| ], | |
| "Properties": { | |
| "RestApiId": { | |
| "Ref": "RestAPI" | |
| }, | |
| "StageName": "dummy" | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment