aws-lambda - 执行错误 - 模块 'lambda_function' 上缺少处理程序 'lambda_handler'"
问题描述
下面是我在 Lambda 中测试时遇到的代码和错误。我是 python 和无服务器的新手。请帮忙。这是为了将结果从安全中心上传到 S3 for POC 而创建的。
import boto3
import json
from botocore.exceptions import ClientError
import time
timestr = time.strftime("%Y%m%d-%H%M%S")
storedata = {}
client = boto3.client('securityhub')
_filter = Filters={
'GeneratorId': [
{
'Value': 'arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark',
'Comparison': 'PREFIX'
}
],
}
response = client.get_findings(Filters=_filter)
storedata = json.dumps(response)
print(storedata)
def aws_session(region_name='eu-west-1'):
return boto3.session.Session()
def upload_data_to_bucket(data, bucket_name, s3_key):
session = aws_session()
s3_resource = session.resource('s3')
obj = s3_resource.Object(bucket_name, s3_key)
obj.put(ACL='private', Body=data)
s3_url = f"https://{bucket_name}.s3.amazonaws.com/{s3_key}"
return s3_url
s3_url = upload_data_to_bucket(storedata, 'sdhkdhiufhasp', 'securityhub_findings.json')
print(s3_url)
解决方案
当我们使用 Lambda 时,我们需要在 lambda_handler 方法
"def lambda_handler(event, context):" 中编写代码。
正如您提到的,您正在使用 lambda 运行此代码,那么下面的代码可能适合您。
import boto3
import json
from botocore.exceptions import ClientError
import time
import glob
client = boto3.client('securityhub')
s3 = boto3.resource('s3')
storedata = {}
_filter = Filters={
'GeneratorId': [
{
'Value': 'arn:aws:securityhub:::ruleset/cis-aws-foundations-
benchmark',
'Comparison': 'PREFIX'
}
],
}
def lambda_handler(event, context):
response = client.get_findings(Filters=_filter)
storedata = json.dumps(response)
print(storedata)
save_file = open("/tmp/securityhub_findings.json", "w")
save_file.write(storeddata)
save_file.close()
for name in glob.glob(/tmp/*):
s3.meta.client.upload_file(name, "you_bucket_name", name)