首页 > 解决方案 > 在 AWS lambda [错误] NameError 中运行的 Py 脚本:未定义名称“文件内容” Traceback(最近一次调用):

问题描述

我有一个作为 lambda 函数运行的 Python 脚本,用于将 S3 中的数据发送到 Splunk。它可以读取我的数据,但无法将数据发送到 Splunk。任何人都可以对附加的脚本进行任何更改吗?

from base64 import b64decode
import io
import os
import urllib
import boto3
from botocore.vendored import requests
import sys

# Define Global Variables
splunk_host = os.environ['splunk_host']
splunk_index = os.environ['splunk_index']
region = os.environ['region']
print(splunk_host,splunk_index)


 
# Disable SSL Warnings
#urllib3.disable_warnings()

def get_object(bucket, object):
    
    # Setup connection with S3
    session = boto3.Session()
    s3 = session.client('s3')
    # Download file
    obj = s3.get_object(Bucket=bucket, Key=object)
    return obj

def lambda_handler(event, context):

    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    session = boto3.Session()
    s3 = session.client('s3')
    # Download file
    obj = s3.get_object(Bucket=bucket, Key=key)
    file_content = obj["Body"].read().decode('utf-8')
    
    print("Returned Object: {}".format(obj))
    print(file_content)
    
    
    for value in filecontent.split('\n'):
        data_json = str(file_content)
        payload = {}
        payload.update({"index": splunk_index})
        payload.update({"source": "waf"})
        payload.update({"event": data_json})
       #Send data to splunk
        send_to_splunk(splunk_host, get_secrets('tropos-splunk')['splunk-hec-token-dev'], payload)
        print(raja)
        
        def get_object(bucket, object):
        s3 = boto3.client('s3')
        obj = s3.get_object(Bucket=bucket, Key=object) 

        return obj
 
#Configure SPLUNK Connection
def send_to_splunk(host, token, logdata):
     url = 'https://' + host + ':8088/services/collector'
     auth_header = {'Authorization': 'Splunk ' + token}
     r = requests.post(url, headers=auth_header, json=logdata, verify=False)
     print(r)
     return r      
 
def get_secrets(secret_id):
    client = boto3.client(service_name='secretsmanager',region_name=region)
    get_secret_value_response = client.get_secret_value(SecretId=secret_id)
    return eval(get_secret_value_response['SecretString'])
    
    
    

代码到达printf(file_content),我收到以下错误。请建议对脚本进行任何更改。

[ERROR] NameError: name 'filecontent' is not defined
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 43, in lambda_handler
    for value in filecontent.split('\n'):

标签: pythonamazon-web-servicesamazon-s3aws-lambdasplunk

解决方案


变量名file_content不是filecontent


推荐阅读