Merge pull request #2669 from bblommers/lambda-return-output-only
AWS Lambda - Return response only, and skip log/print statements
This commit is contained in:
commit
4335f1d3dd
@ -53,9 +53,6 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
from backports.tempfile import TemporaryDirectory
|
from backports.tempfile import TemporaryDirectory
|
||||||
|
|
||||||
# The lambci container is returning a special escape character for the "RequestID" fields. Unicode 033:
|
|
||||||
# _stderr_regex = re.compile(r"START|END|REPORT RequestId: .*")
|
|
||||||
_stderr_regex = re.compile(r"\033\[\d+.*")
|
|
||||||
_orig_adapter_send = requests.adapters.HTTPAdapter.send
|
_orig_adapter_send = requests.adapters.HTTPAdapter.send
|
||||||
docker_3 = docker.__version__[0] >= "3"
|
docker_3 = docker.__version__[0] >= "3"
|
||||||
|
|
||||||
@ -385,7 +382,7 @@ class LambdaFunction(BaseModel):
|
|||||||
try:
|
try:
|
||||||
# TODO: I believe we can keep the container running and feed events as needed
|
# TODO: I believe we can keep the container running and feed events as needed
|
||||||
# also need to hook it up to the other services so it can make kws/s3 etc calls
|
# also need to hook it up to the other services so it can make kws/s3 etc calls
|
||||||
# Should get invoke_id /RequestId from invovation
|
# Should get invoke_id /RequestId from invocation
|
||||||
env_vars = {
|
env_vars = {
|
||||||
"AWS_LAMBDA_FUNCTION_TIMEOUT": self.timeout,
|
"AWS_LAMBDA_FUNCTION_TIMEOUT": self.timeout,
|
||||||
"AWS_LAMBDA_FUNCTION_NAME": self.function_name,
|
"AWS_LAMBDA_FUNCTION_NAME": self.function_name,
|
||||||
@ -453,14 +450,9 @@ class LambdaFunction(BaseModel):
|
|||||||
if exit_code != 0:
|
if exit_code != 0:
|
||||||
raise Exception("lambda invoke failed output: {}".format(output))
|
raise Exception("lambda invoke failed output: {}".format(output))
|
||||||
|
|
||||||
# strip out RequestId lines (TODO: This will return an additional '\n' in the response)
|
# We only care about the response from the lambda
|
||||||
output = os.linesep.join(
|
# Which is the last line of the output, according to https://github.com/lambci/docker-lambda/issues/25
|
||||||
[
|
output = output.splitlines()[-1]
|
||||||
line
|
|
||||||
for line in self.convert(output).splitlines()
|
|
||||||
if not _stderr_regex.match(line)
|
|
||||||
]
|
|
||||||
)
|
|
||||||
return output, False
|
return output, False
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
@ -58,8 +58,7 @@ def lambda_handler(event, context):
|
|||||||
volume_id = event.get('volume_id')
|
volume_id = event.get('volume_id')
|
||||||
vol = ec2.Volume(volume_id)
|
vol = ec2.Volume(volume_id)
|
||||||
|
|
||||||
print('get volume details for %s\\nVolume - %s state=%s, size=%s' % (volume_id, volume_id, vol.state, vol.size))
|
return {{'id': vol.id, 'state': vol.state, 'size': vol.size}}
|
||||||
return event
|
|
||||||
""".format(
|
""".format(
|
||||||
base_url="motoserver:5000"
|
base_url="motoserver:5000"
|
||||||
if settings.TEST_SERVER_MODE
|
if settings.TEST_SERVER_MODE
|
||||||
@ -181,27 +180,9 @@ if settings.TEST_SERVER_MODE:
|
|||||||
Payload=json.dumps(in_data),
|
Payload=json.dumps(in_data),
|
||||||
)
|
)
|
||||||
result["StatusCode"].should.equal(202)
|
result["StatusCode"].should.equal(202)
|
||||||
msg = "get volume details for %s\nVolume - %s state=%s, size=%s\n%s" % (
|
actual_payload = json.loads(result["Payload"].read().decode("utf-8"))
|
||||||
vol.id,
|
expected_payload = {"id": vol.id, "state": vol.state, "size": vol.size}
|
||||||
vol.id,
|
actual_payload.should.equal(expected_payload)
|
||||||
vol.state,
|
|
||||||
vol.size,
|
|
||||||
json.dumps(in_data).replace(
|
|
||||||
" ", ""
|
|
||||||
), # Makes the tests pass as the result is missing the whitespace
|
|
||||||
)
|
|
||||||
|
|
||||||
log_result = base64.b64decode(result["LogResult"]).decode("utf-8")
|
|
||||||
|
|
||||||
# The Docker lambda invocation will return an additional '\n', so need to replace it:
|
|
||||||
log_result = log_result.replace("\n\n", "\n")
|
|
||||||
log_result.should.equal(msg)
|
|
||||||
|
|
||||||
payload = result["Payload"].read().decode("utf-8")
|
|
||||||
|
|
||||||
# The Docker lambda invocation will return an additional '\n', so need to replace it:
|
|
||||||
payload = payload.replace("\n\n", "\n")
|
|
||||||
payload.should.equal(msg)
|
|
||||||
|
|
||||||
|
|
||||||
@mock_logs
|
@mock_logs
|
||||||
|
Loading…
Reference in New Issue
Block a user