如何从 AWS Lambda 函数访问 YAML 文件中的变量?

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 变量几乎一无所知。一个解释将不胜感激。

Aru*_*han 5

serverless.yml不会被上传到lambda函数的代码,所以你就不能访问该文件。

你可以通过几种方式做到这一点,

将值直接存储在 serverless.yml 中作为环境变量

为 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 存储中

将参数存储在 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/