![](/img/trans.png)
[英]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.