[英]Capture a AWS lambda function's output and email it via SNS
Lambda function 代碼:
import json
import datetime
import redshift_module.pygresql_redshift_common as db_handler
from decouple import config
import pg
host = config('host')
port = config('port')
db_name = config('db_name')
db_user = config('db_user')
db_password = config('db_password')
def get_connection(host, port, dbname, user, password):
rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % (
host, port, dbname, user, password)
rs_conn = pg.connect(dbname=rs_conn_string)
rs_conn.query("set statement_timeout = 1200000")
return rs_conn
def query(con, query):
res = con.query(query)
return res
rs_conn = db_handler.get_connection(host, port, db_name, db_user, db_password)
query_string = "call XYZ_warehouse.ABC_revenue_last_7_days();"
res = query(rs_conn, query_string)
print(res.getresults())
def lambda_handler(event, context):
return {'statusCode': 200, 'body': json.dumps('Hello from Lambda!')}
因此代碼在 redshift 數據庫上運行查詢 function。 lambda 的 output 包含如下字符串:
DEUS revenue is completely matching and revenue is : 5139 and Revenue without shipping is: 4987
我需要做的是在執行結果中捕獲像這樣的行,也許將它們存儲在某個變量或日志文件中,這樣我就可以 email 它們。 我試過在查詢 object 上運行.getresults()
但它返回一個空字符串。 也許是因為它沒有返回記錄或表格?
有沒有辦法可以捕獲 lambda function 的完整 output? 或者將它發送到某處的文件?
創建字典並保存所有要通過 email 發送的 output。
現在將其轉換為 json 並通過 SNS 或 SES 發送
您的問題有點不清楚,您是否也需要有關檢索查詢結果的幫助?
如果是這樣,我建議你從這里閱讀
有沒有辦法可以捕獲 lambda function 的完整 output? 或者將它發送到某處的文件?
一種選擇是將 lambda 函數的 output 發送到 s3 存儲桶,例如
import boto3
s3 = boto3.resource(
's3',
region_name='us-east-1',
aws_access_key_id=KEY_ID,
aws_secret_access_key=ACCESS_KEY
)
content="String content to write to a new S3 file"
s3.Object('my-bucket-name', 'newfile.txt').put(Body=content)
您可以設置一個 s3 觸發器, 一旦將新的 object 添加到存儲桶中,它就會觸發第二個 lambda 。
然后,您的第二個 lambda 可以轉換為 JSON 並作為 Vaquar Khan 的回答通過 SNS/SES 發送。
如果我理解正確“您想將 lambda 中的 output 存儲在單獨的位置/文件中”以將其用作 email。
如果它是純 lambda output 你可以簡單地使用lambda destinations 。
目的地允許您根據失敗或成功來分離結果。 如果成功,您可以將其發送到目標(SNS、SQS、EventBridge 或不同的 Lambda),如果失敗,您可以將其發送到失敗目的地
解決了
我作為初學者想出的解決方案是:
decoded_data = json.loads(gzip.decompress(b64decode(event['awslogs']['data'])))
decoded_data
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.