151 lines
6.4 KiB
Lua
151 lines
6.4 KiB
Lua
local typedefs = require "kong.db.schema.typedefs"
|
|
|
|
return {
|
|
name = "aws-lambda",
|
|
fields = {
|
|
{ protocols = typedefs.protocols_http },
|
|
{ config = {
|
|
type = "record",
|
|
fields = {
|
|
{ timeout = {
|
|
type = "number",
|
|
required = true,
|
|
default = 60000,
|
|
description = "An optional timeout in milliseconds when invoking the function.",
|
|
} },
|
|
{ keepalive = {
|
|
type = "number",
|
|
required = true,
|
|
default = 60000,
|
|
description = "An optional value in milliseconds that defines how long an idle connection lives before being closed.",
|
|
} },
|
|
{ aws_key = {
|
|
type = "string",
|
|
encrypted = true, -- Kong Enterprise-exclusive feature, does nothing in Kong CE
|
|
referenceable = true,
|
|
description = "The AWS key credential to be used when invoking the function.",
|
|
} },
|
|
{ aws_secret = {
|
|
type = "string",
|
|
encrypted = true, -- Kong Enterprise-exclusive feature, does nothing in Kong CE
|
|
referenceable = true,
|
|
description = "The AWS secret credential to be used when invoking the function. ",
|
|
} },
|
|
{ aws_assume_role_arn = { description = "The target AWS IAM role ARN used to invoke the Lambda function.", type = "string",
|
|
encrypted = true, -- Kong Enterprise-exclusive feature, does nothing in Kong CE
|
|
referenceable = true,
|
|
} },
|
|
{ aws_role_session_name = { description = "The identifier of the assumed role session.", type = "string",
|
|
default = "kong"
|
|
} },
|
|
{ aws_sts_endpoint_url = typedefs.url },
|
|
{ aws_region = typedefs.host },
|
|
{ function_name = {
|
|
type = "string",
|
|
required = false,
|
|
description = "The AWS Lambda function to invoke. Both function name and function ARN (including partial) are supported."
|
|
} },
|
|
{ qualifier = {
|
|
type = "string",
|
|
description = "The qualifier to use when invoking the function."
|
|
} },
|
|
{ invocation_type = {
|
|
description = "The InvocationType to use when invoking the function. Available types are RequestResponse, Event, DryRun.",
|
|
type = "string",
|
|
required = true,
|
|
default = "RequestResponse",
|
|
one_of = { "RequestResponse", "Event", "DryRun" }
|
|
} },
|
|
{ log_type = {
|
|
description = "The LogType to use when invoking the function. By default, None and Tail are supported.",
|
|
type = "string",
|
|
required = true,
|
|
default = "Tail",
|
|
one_of = { "Tail", "None" }
|
|
} },
|
|
{ host = typedefs.host },
|
|
{ port = typedefs.port { default = 443 }, },
|
|
{ disable_https = { type = "boolean", default = false }, },
|
|
{ unhandled_status = {
|
|
description = "The response status code to use (instead of the default 200, 202, or 204) in the case of an Unhandled Function Error.",
|
|
type = "integer",
|
|
between = { 100, 999 },
|
|
} },
|
|
{ forward_request_method = {
|
|
description = "An optional value that defines whether the original HTTP request method verb is sent in the request_method field of the JSON-encoded request.",
|
|
type = "boolean",
|
|
default = false,
|
|
} },
|
|
{ forward_request_uri = {
|
|
description = "An optional value that defines whether the original HTTP request URI is sent in the request_uri field of the JSON-encoded request.",
|
|
type = "boolean",
|
|
default = false,
|
|
} },
|
|
{ forward_request_headers = {
|
|
description = "An optional value that defines whether the original HTTP request headers are sent as a map in the request_headers field of the JSON-encoded request.",
|
|
type = "boolean",
|
|
default = false,
|
|
} },
|
|
{ forward_request_body = {
|
|
description = "An optional value that defines whether the request body is sent in the request_body field of the JSON-encoded request. If the body arguments can be parsed, they are sent in the separate request_body_args field of the request. ",
|
|
type = "boolean",
|
|
default = false,
|
|
} },
|
|
{ is_proxy_integration = {
|
|
description = "An optional value that defines whether the response format to receive from the Lambda to this format.",
|
|
type = "boolean",
|
|
default = false,
|
|
} },
|
|
{ awsgateway_compatible = {
|
|
description = "An optional value that defines whether the plugin should wrap requests into the Amazon API gateway.",
|
|
type = "boolean",
|
|
default = false,
|
|
} },
|
|
{ proxy_url = typedefs.url },
|
|
{ skip_large_bodies = {
|
|
description = "An optional value that defines whether Kong should send large bodies that are buffered to disk",
|
|
type = "boolean",
|
|
default = true,
|
|
} },
|
|
{ base64_encode_body = {
|
|
description = "An optional value that Base64-encodes the request body.", type = "boolean",
|
|
default = true,
|
|
} },
|
|
{ aws_imds_protocol_version = {
|
|
description = "Identifier to select the IMDS protocol version to use: `v1` or `v2`.", type = "string",
|
|
required = true,
|
|
default = "v1",
|
|
one_of = { "v1", "v2" }
|
|
} },
|
|
{ empty_arrays_mode = { -- TODO: this config field is added for backward compatibility and will be removed in next major version
|
|
description = "An optional value that defines whether Kong should send empty arrays (returned by Lambda function) as `[]` arrays or `{}` objects in JSON responses. The value `legacy` means Kong will send empty arrays as `{}` objects in response",
|
|
type = "string",
|
|
required = true,
|
|
default = "legacy",
|
|
one_of = { "legacy", "correct" }
|
|
} },
|
|
}
|
|
},
|
|
} },
|
|
entity_checks = {
|
|
{ mutually_required = { "config.aws_key", "config.aws_secret" } },
|
|
{ custom_entity_check = {
|
|
field_sources = { "config.proxy_url" },
|
|
fn = function(entity)
|
|
local proxy_url = entity.config and entity.config.proxy_url
|
|
|
|
if type(proxy_url) == "string" then
|
|
local scheme = proxy_url:match("^([^:]+)://")
|
|
|
|
if scheme and scheme ~= "http" then
|
|
return nil, "proxy_url scheme must be http"
|
|
end
|
|
end
|
|
|
|
return true
|
|
end,
|
|
}
|
|
},
|
|
}
|
|
}
|