[英]Update an environment variable of an AWS Lambda function in python
[英]Python AWS Lambda Execution New Update
更新
我更改了参数以直接从 JSON 转储接收数据,以查看是否解决了 JSON 加载问题。 收到新错误:
(b'{\n "errorType": "ValidationMetadataException",\n "errorMessage": "The a' b'rgument is null or empty.提供一个不是null或空的参数,然后'b'尝试命令再次。",\n "stackTrace": [\n "at Amazon.Lambda.P' b'owerShellHost.PowerShellFunctionHost.ExecuteFunction(Stream inputStream, ILa' b'mbdaContext context)",\n "at lambda_method1(Closure, Stream , ILambda' b'上下文, Stream )",\n
“在 Amazon.Lambda.RuntimeSupport.Bootstrap.User' b'CodeLoader.Invoke(Stream lambdaData, ILambdaContext lambdaContext, Stream ou' b'tStream) 在 /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/ ' b'serCodeLoader.cs:line 145",\n "at Amazon.Lambda.RuntimeSupport.Handler' b'Wrapper.<>c__DisplayClass8_0.b__0(InvocationRequest invoc' b'ation) 在 /src/Repo/Libraries/src/ Amazon.Lambda.RuntimeSupport/Bootstrap/Han' b'dlerWrapper.cs:line 56",\n "at Amazon.Lambda.RuntimeSupport.LambdaBoot' b'strap.InvokeOnceAsync(CancellationToken cancellationToken) 在 /src/Repo/Libr' b 'aries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/LambdaBootstrap.cs:line 176' b'"\n ]\n}\n')
仍然没有成功传递 lambda 名称。 代码已从上一篇文章更新。
================================================ ============ 原帖
我正在尝试执行 lambda function 到 python。当我对变量进行硬编码时,我可以成功地做到这一点,但是当我替换变量时,我无法处理 lambda。
这是具有硬编码值的工作示例:
params = {"value1": "value1-value", "value2": "value2-value", "value3": "value3-value"}
client = boto3.client('lambda')
response = client.invoke(
FunctionName='MyLambdaFunctionName',
InvocationType='RequestResponse',
Payload=json.dumps(params).encode(),
)
pprint.pp(response['Payload'].read())
失败的部分是当我用变量替换参数时。 计划是将它们传入,正如我所说的值,但现在,我正在测试它并在 function 中设置值。下面列出了变量:
json_data | lambda 名称|
lambdaName = os.getenv('TF_VAR_lambdaName')
value1="value1-value"
value2="value2-value"
value3="value3-value"
data = {"value1": "value1-value", "value2": "value2-value", "value3": "value3-value"}
params = json.dumps(data)
client = boto3.client('lambda')
response = client.invoke(
FunctionName=lambdaName,
InvocationType='RequestResponse',
Payload=json.dumps(params).encode(),
)
pprint.pp(response['Payload'].read())
当我硬编码 JSON 或 Lambda Function 名称时,我得到的错误消失了。
下面列出了我收到的错误日志:
> Traceback (most recent call last): File
> "/Users/go/src/github.com/repo/./cleanup/cleanup.py", line 25, in
> <module>
> response = client.invoke( File "/Users/Library/Python/3.9/lib/python/site-packages/botocore/client.py",
> line 515, in _api_call
> return self._make_api_call(operation_name, kwargs) File "/Users/Library/Python/3.9/lib/python/site-packages/botocore/client.py",
> line 893, in _make_api_call
> request_dict = self._convert_to_request_dict( File "/Users/Library/Python/3.9/lib/python/site-packages/botocore/client.py",
> line 964, in _convert_to_request_dict
> request_dict = self._serializer.serialize_to_request( File "/Users/Library/Python/3.9/lib/python/site-packages/botocore/validate.py",
> line 381, in serialize_to_request
> raise ParamValidationError(report=report.generate_report()) botocore.exceptions.ParamValidationError: Parameter validation failed:
> Invalid type for parameter FunctionName, value: None, type: <class
> 'NoneType'>, valid types: <class 'str'>
我认为您遇到的问题出在 lambda 的定义中:
lambdaName = os.getenv('TF_VAR_lambdaName')
尝试以下:
LAMBDA_NAME = os.environ.get('YOUR_LAMBDA_NAME') // make sure you put the exact name of your lambda in ''
比在您的代码中使用它:
response = client.invoke(
FunctionName=LAMBDA_NAME,
InvocationType='RequestResponse',
Payload=json.dumps(params).encode()
)
社区,感谢您在这里的支持。 在同事的帮助下,我终于弄明白了。
lambdaName = os.getenv('TF_VAR_lambdaName')
奇怪的是它不起作用,因为我已经使用导出了环境变量
export TF_VAR_lambdaName="我的函数名"
我最终使用 print 语句来检查值,但没有结果。 在谷歌上搜索了一下,找到了一篇帖子,其中有人建议重新运行导出以再次设置值,这就成功了。 我确实从 Olgas 的建议中吸取了一些,并按如下方式修改了导出:
LAMBDA_NAME = os.getenv('TF_VAR_lambdaName')
只是让变量全部大写以避免任何问题。
事实证明这是一个简单的修复。 最重要的是我不需要
json.dumps(数据)
数据声明已经以params需要的格式传递。 起作用的只是将参数设置为等于数据,而 lambda 能够处理它。 最终工作代码如下:
#!/usr/bin/env python
import boto3
import json
import pprint
import os
LAMBDA_NAME = os.getenv('TF_VAR_lambdaName')
value1="value1-value"
value2="value2-value"
value3="value3-value"
data = {"value1": value1, "value2": value2 "value3": value3}
params = data
client = boto3.client('lambda')
response = client.invoke(
FunctionName=LAMBDA_NAME,
InvocationType='RequestResponse',
Payload=json.dumps(params).encode(),
)
pprint.pp(response['Payload'].read())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.