Ent*_*ord 2 python aws-lambda serverless-framework
我正在使用无服务器框架来测试我的 lamdba 函数,但它要求我访问我的 yaml 文件以获取特定变量。为了清楚起见,我将添加文件和下面的代码:
我需要访问的 YAML 变量是 tableName
environment:
tableName: notes_project
Run Code Online (Sandbox Code Playgroud)
这是 lambda 函数:
import json
import boto3
import uuid
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('notes_project')
def lambda_handler(event, context):
data = json.loads(event['body'])
item = {
'user_id': event['requestContext']['identity']['cognitoIdentityId'],
'note_id': str(uuid.uuid1()),
'note_text': data
}
table.put_item( Item = item)
Run Code Online (Sandbox Code Playgroud)
目前,您可以看到表名是硬编码的,但我想避免这种情况。
到目前为止我尝试过的:
我已经查看了在 python中获取 yaml 键值和其他涉及 os.environ 的建议,但如果我要将代码部署到 AWS,我不确定这些是否是正确的选项。我对 lambda 代码在部署后如何访问这些 yaml 变量几乎一无所知。一个解释将不胜感激。
该serverless.yml
不会被上传到lambda函数的代码,所以你就不能访问该文件。
你可以通过几种方式做到这一点,
为 lambda 定义环境变量serverless.yml
。然后您可以访问 lambda 中的环境变量。
#serverless.yml
service: my-service
provider:
name: aws
runtime: python3.8
functions:
hello:
handler: handler.hello
environment:
# store the value directly
deliveryMethod: email
Run Code Online (Sandbox Code Playgroud)
将参数存储在 SSM 参数存储中并在其中引用 serverless.yml
#serverless.yml
service: my-service
provider:
name: aws
runtime: python3.8
functions:
hello:
handler: handler.hello
environment:
# store the value directly
deliveryMethod: ${ssm:/path/to/deliveryMethod}
Run Code Online (Sandbox Code Playgroud)
然后在 lambda 代码中:
# lambda code
def lambda_handler(event, context):
deliveryMethod = os.environ['deliveryMethod']
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
参考:https : //serverless.com/framework/docs/providers/aws/guide/variables/
归档时间: |
|
查看次数: |
1584 次 |
最近记录: |