Как получить доступ к переменной внутри файла YAML из AWS лямбда-функции? - PullRequest
2 голосов
/ 13 января 2020

Я использую Serverless Framework для тестирования моей функции lamdba, но для этого требуется доступ к файлу yaml, чтобы получить указанную переменную c. Я добавлю файл и код ниже для ясности:

Переменная YAML, к которой мне нужно обратиться, это tableName

environment:
  tableName: notes_project

Вот лямбда-функция:

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)

В данный момент вы можете видеть, что имя таблицы жестко закодировано, но я хочу этого избежать.

То, что я пробовал до сих пор:

Я смотрел на Получить значение ключа yaml в python и другие предложения, касающиеся os.environ, но я не уверен, что это правильные варианты, если я собираюсь развернуть код на AWS. Я в основном не знаю, как лямбда-код будет обращаться к этим переменным yaml после их развертывания. Объяснение будет с благодарностью.

1 Ответ

3 голосов
/ 13 января 2020

serverless.yml не будет загружен в код лямбда-функции, поэтому у вас не будет доступа к этому файлу.

Вы можете сделать это несколькими способами,

Сохранить значение в качестве переменной среды непосредственно в serverless.yml

Определите переменные среды для лямбды в serverless.yml. затем вы можете получить доступ к переменным окружения в лямбде.

#serverless.yml
service: my-service

provider:
  name: aws
  runtime: python3.8

functions:
  hello:
    handler: handler.hello
    environment:
      # store the value directly
      deliveryMethod: email

сохранить параметр в хранилище 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}

Тогда в лямбда-коде:

# lambda code
def lambda_handler(event, context):
    deliveryMethod = os.environ['deliveryMethod']

Надеюсь, это поможет.

Ссылка: https://serverless.com/framework/docs/providers/aws/guide/variables/

...