Ich habe AWS Lambda erstellt, das Dateien von Amazon S3 abruft und als Anhänge an Slack sendet, aber ich hatte Probleme, weil die Python-Umgebung von AWS Lambda das Anforderungsmodul nicht enthielt.
AWS Lambda Python-Umgebung
Hochladen von Dateien in Python https://qiita.com/5zm/items/92cde9e043813e02eb68 Oder https://www.it-swarm-ja.tech/ja/python/python%E3%81%A7%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%A8-multipart-formdata%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%EF%BC%9F/1069592211/ Wie Sie in sehen können, ist es Standard, Anforderungen zu verwenden. Die Python-Umgebung von AWS Lambda enthielt jedoch nicht das Anforderungsmodul.
--Verwenden Sie Lambda Layer mit Anfragen
Selbst wenn Sie urllib.request verwenden, müssen Sie mehrteilige Formulardaten erstellen, daher habe ich auf die folgende URL verwiesen. https://necoyama3.hatenablog.com/entry/20150608/1434982490 Die in diesem Artikel beschriebene Methode "encode_multipart_formdata" konvertiert den Datenteil und den Dateiteil in das mehrteilige Formulardatenformat.
Damit habe ich folgendes gemacht.
python
##Punkt 1:Definieren Sie Parameter ohne den Dateiparameter
data = {
'token': <your token>,
'channels': <your channels>,
'initial_comment': key + 'Post:eyes:',
'filename': key,
'filetype': 'webp'
}
url = "https://slack.com/api/files.upload"
content = open('/tmp/' + key, 'rb').read()
##Punkt 2:Definieren Sie den Dateiparameter
file = {'file': {'filename': key, 'content': content}}
##Punkt 3:Konvertieren Sie Daten und Dateien in einteilige Formulardaten
content_type, body = encode_multipart_formdata(data, file)
header = {'Content-Type': content_type}
request = urllib.request.Request(url, body, header)
response = urllib.request.urlopen(request)
Der Punkt ist
data ohne den Dateiparameter der API Slack files.upload.file3 Punkte. Sie können jetzt Dateien mit AWS Lambda an Slack senden, ohne Anforderungen zu verwenden.
Was ist einfacher, eine Lambda-Schicht herzustellen ...?