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.file
3 Punkte. Sie können jetzt Dateien mit AWS Lambda an Slack senden, ohne Anforderungen zu verwenden.
Was ist einfacher, eine Lambda-Schicht herzustellen ...?