0

尝试为 AWS Lamdba 函数运行 python 测试。测试代码将不会运行并输出此错误

Traceback (most recent call last):
  line 4, in <module>
  File "/home/ordep81/Documents/cloud-challenge/Lambda/app.py", line 7, in <module>
    region_name = os.environ['REGION_NAME']
  File "/usr/lib/python3.8/os.py", line 673, in __getitem__
  raise KeyError(key) from None

这是初始化变量 app.py 的代码:

import boto3
import json
import os

# create the client outside of the handler
region_name = os.environ['REGION_NAME']
dynamo = boto3.client('dynamodb')
table_name = os.environ['TABLE_NAME']

运行测试 test_app.py 的代码

import boto3
import os
import unittest
from app import lambda_handler
from moto import mock_lambda
4

3 回答 3

1

环境变量中的正确名称是AWS_REGION,因此您应该将行更改为

region_name = os.environ['AWS_REGION']

此外,由于您可能会在大多数时候在项目/应用程序/产品中使用“默认”区域,因此习惯上使用此表单

DEFAULT_REGION = "us-east-1"
region_name = os.environ.get("AWS_REGION", DEFAULT_REGION)
于 2020-07-31T03:39:04.643 回答
1

出现错误是因为环境变量在处理器脚本上不可用。为了可视化这一点,您可以简单地输出 os.environ 并查看您的变量是否出现在那里。

print(os.environ)

如果未出现,则表示该变量未加载到脚本中,因此会引发错误 'os.environ. getitem 从 None 引发KeyError '

假设您在 .evn 文件中定义了变量(键值对),以便在 LOCAL 机器上进行测试时将它们导入脚本,您可以使用dotenv 库

首先安装依赖:

pip install python-dotenv

在脚本中:

from dotenv import load_dotenv
load_dotenv()
print(os.environ['FOO'])

我也在这里写了一篇关于同一主题的文章

于 2021-11-02T04:16:09.827 回答
0

lambda 的区域名称在AWS_REGION环境变量中。来自文档

AWS_REGION – 执行 Lambda 函数的 AWS 区域。

因此,而不是

region_name = os.environ['REGION_NAME']

你应该使用

region_name = os.environ['AWS_REGION']

在 Lambda 控制台中,您可以提供TABLE_NAME如下屏幕截图所示的值:

在此处输入图像描述

要为测试设置环境变量,您可以在访问它们之前执行以下操作:

os.environ['AWS_REGION'] = 'us-east-1'
os.environ['TABLE_NAME'] = 'my-table'
于 2020-07-31T03:34:38.530 回答