我正在尝试实现一个自定义的AWS Lambda层,以便在我的函数中使用它。
它应该是一个简单的层,它从ssm获取一些参数并初始化puresec的function_shield
以保护我的服务。
代码看起来不像这样:
import os
import boto3
import function_shield as shield
STAGE = os.environ['stage']
REGION = os.environ['region']
PARAMETERS_PREFIX = os.environ['parametersPrefix']
class ParameterNotFoundException(Exception):
pass
session = boto3.session.Session(region_name=REGION)
ssm = session.client('ssm')
# function_shield config
parameter_path = f"/{PARAMETERS_PREFIX}/{STAGE}/functionShieldToken"
try:
shield_token = ssm.get_parameter(
Name=parameter_path,
WithDecryption=True,
)['Parameter']['Value']
except Exception:
raise ParameterNotFoundException(f'Parameter {parameter_path} not found.')
policy = {
"outbound_connectivity": "block",
"read_write_tmp": "block",
"create_child_process": "block",
"read_handler": "block"
}
def configure(p):
"""
update function_shield policy
:param p: policy dict
:return: null
"""
policy.update(p)
shield.configure({"policy": policy, "disable_analytics": True, "token": shield_token})
configure(policy)
我希望能够将此层链接到我的函数,以便在运行时保护它。
我使用的是serverless框架,看起来我的层部署得很好,就像我的示例函数一样。此外,AWS控制台还向我显示,该层在我的函数中是链接的。在
我将图层命名为“shield”,并尝试在测试函数中按其名称导入:
^{pr2}$理想情况下,我应该在CloudWatch上得到并出错,告诉我function_shield
阻止了{
我错过了什么? 除了numpy、scipy、二进制文件等,我找不到任何用于层的自定义代码示例
我很抱歉我的愚蠢…
谢谢你的好意!在
看看这里。我已经描述了在lambda上设置或调用自定义lambda层函数的所有必要步骤。在
https://medium.com/@nimesh.kumar031/how-to-set-up-layers-python-in-aws-lambda-functions-1355519c11ed?source=friends_link&sk=af4994c28b33fb5ba7a27a83c35702e3
您还需要将层中的文件命名为
shield.py
,这样它就可以在Python中import
。请注意,图层本身的命名方式并不重要。这是AWS世界中的一种配置,对Python世界没有任何影响。在真正有效果的是层归档的结构。您需要将要
import
的文件放入python
目录中,对其进行压缩并将其作为一个层使用(我正在按serverless framework为您做这件事)。在在Lambda执行环境中,层存档被提取到}中声明。因此需要“wrapper”python目录。在
/opt
,但只有/opt/python
在{相关问题 更多 >
编程相关推荐