diff --git a/api/envoy/config/filter/http/aws_lambda/v2/aws_lambda.proto b/api/envoy/config/filter/http/aws_lambda/v2/aws_lambda.proto index 70130ca03..8ce89dc83 100644 --- a/api/envoy/config/filter/http/aws_lambda/v2/aws_lambda.proto +++ b/api/envoy/config/filter/http/aws_lambda/v2/aws_lambda.proto @@ -16,7 +16,7 @@ import "validate/validate.proto"; message AWSLambdaPerRoute { // The name of the function string name = 1 [ (validate.rules).string.min_bytes = 1 ]; - // The qualifier of the function (defualts to $LATEST if not specified) + // The qualifier of the function (defaults to $LATEST if not specified) string qualifier = 2; // Invocation type - async or regular. @@ -33,7 +33,18 @@ message AWSLambdaProtocolExtension { // The region for this cluster string region = 2 [ (validate.rules).string.min_bytes = 1 ]; // The access_key for AWS this cluster - string access_key = 3 [ (validate.rules).string.min_bytes = 1 ]; + string access_key = 3; // The secret_key for AWS this cluster - string secret_key = 4 [ (validate.rules).string.min_bytes = 1 ]; + string secret_key = 4; } + +message AWSLambdaConfig { + // Use AWS default credentials chain to get credentials. + // This will search environment variables, ECS metadata and instance metadata + // to get the credentials. credentials will be rotated automatically. + // + // If credentials are provided on the cluster (using the + // AWSLambdaProtocolExtension), it will override these credentials. This + // defaults to false, but may change in the future to true. + google.protobuf.BoolValue use_default_credentials = 1; +} \ No newline at end of file diff --git a/e2e/extensions/filters/http/aws_lambda/BUILD b/e2e/extensions/filters/http/aws_lambda/BUILD index ea56630a5..a250cd41a 100644 --- a/e2e/extensions/filters/http/aws_lambda/BUILD +++ b/e2e/extensions/filters/http/aws_lambda/BUILD @@ -2,10 +2,8 @@ licenses(["notice"]) # Apache 2 load( "@envoy//bazel:envoy_build_system.bzl", - "envoy_cc_binary", - "envoy_cc_library", - "envoy_cc_test", "envoy_package", + "envoy_sh_test", ) envoy_package() @@ -18,5 +16,6 @@ sh_test( data = [ "//:envoy", "//e2e/extensions/filters/http/aws_lambda:create_config.sh", + "//e2e/extensions/filters/http/aws_lambda:create_config_env.sh", ], ) diff --git a/e2e/extensions/filters/http/aws_lambda/create_config_env.sh b/e2e/extensions/filters/http/aws_lambda/create_config_env.sh new file mode 100755 index 000000000..1fdb94a8e --- /dev/null +++ b/e2e/extensions/filters/http/aws_lambda/create_config_env.sh @@ -0,0 +1,107 @@ +#!/bin/bash +# + +set -e + +# # create function if doesnt exist +# aws lambda create-function --function-name captialize --runtime nodejs +# invoke +# aws lambda invoke --function-name uppercase --payload '"abc"' /dev/stdout + + +# prepare envoy config file. + +cat > envoy_env.yaml << EOF +admin: + access_log_path: /dev/stdout + address: + socket_address: + address: 127.0.0.1 + port_value: 19001 +static_resources: + listeners: + - name: listener_0 + address: + socket_address: { address: 127.0.0.1, port_value: 10001 } + filter_chains: + - filters: + - name: envoy.http_connection_manager + config: + stat_prefix: http + codec_type: AUTO + route_config: + name: local_route + virtual_hosts: + - name: local_service + domains: ["*"] + routes: + - match: + prefix: /echo + route: + cluster: postman-echo + prefix_rewrite: /post + - match: + prefix: /lambda + route: + cluster: aws-us-east-1-lambda + per_filter_config: + io.solo.aws_lambda: + name: uppercase + qualifier: "1" + - match: + prefix: /latestlambda + route: + cluster: aws-us-east-1-lambda + per_filter_config: + io.solo.aws_lambda: + name: uppercase + qualifier: "%24LATEST" + - match: + prefix: /contact-empty-default + route: + cluster: aws-us-east-1-lambda + per_filter_config: + io.solo.aws_lambda: + name: uppercase + qualifier: "1" + empty_body_override: "\"default-body\"" + - match: + prefix: /contact + route: + cluster: aws-us-east-1-lambda + per_filter_config: + io.solo.aws_lambda: + name: contact-form + qualifier: "3" + http_filters: + - name: io.solo.aws_lambda + config: + use_default_credentials: true + - name: envoy.router + clusters: + - connect_timeout: 5.000s + hosts: + - socket_address: + address: postman-echo.com + port_value: 443 + name: postman-echo + type: LOGICAL_DNS + tls_context: {} + - connect_timeout: 5.000s + hosts: + - socket_address: + address: lambda.us-east-1.amazonaws.com + port_value: 443 + name: aws-us-east-1-lambda + type: LOGICAL_DNS + dns_lookup_family: V4_ONLY + tls_context: {} + extension_protocol_options: + io.solo.aws_lambda: + host: lambda.us-east-1.amazonaws.com + region: us-east-1 +EOF + + +export AWS_ACCESS_KEY_ID=$(grep aws_access_key_id ~/.aws/credentials | head -1 | cut -d= -f2 |tr -d '[:space:]') +export AWS_SECRET_ACCESS_KEY=$(grep aws_secret_access_key ~/.aws/credentials | head -1 | cut -d= -f2 |tr -d '[:space:]') \ No newline at end of file diff --git a/e2e/extensions/filters/http/aws_lambda/e2e2e_test.sh b/e2e/extensions/filters/http/aws_lambda/e2e2e_test.sh index 2fb9bdf96..a6c01196a 100755 --- a/e2e/extensions/filters/http/aws_lambda/e2e2e_test.sh +++ b/e2e/extensions/filters/http/aws_lambda/e2e2e_test.sh @@ -12,7 +12,7 @@ set -e ENVOY=${ENVOY:-envoy} -$ENVOY -c ./envoy.yaml --log-level debug & +$ENVOY --disable-hot-restart -c ./envoy.yaml --log-level debug & sleep 5 @@ -27,4 +27,20 @@ curl localhost:10000/contact |grep '