Gepostet als Anhang zu Slack auf AWS Lambda (Python)

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.

Annahmen / Umwelt

AWS Lambda Python-Umgebung

Was ich machen wollte

  1. Holen Sie sich die Datei von Amazon S3
  2. Veröffentlichen Sie die Datei als Anhang mit der API "files.upload" von Slack (verwenden Sie mehrteilige / Formulardaten für den Inhaltstyp).

Was ich nicht konnte und warum

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.

Lösungen

--Verwenden Sie Lambda Layer mit Anfragen

Implementierung

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

  1. Definieren Sie Parameter in der Variablen data ohne den Dateiparameter der API Slack files.upload.
  2. Definieren Sie den Dateiparameter der Slack files.upload-API mit der Variablen file
  3. Konvertieren Sie mit der Methode "encode_multipart_formdata" in mehrteilige Formulardaten

3 Punkte. Sie können jetzt Dateien mit AWS Lambda an Slack senden, ohne Anforderungen zu verwenden.

Schließlich

Was ist einfacher, eine Lambda-Schicht herzustellen ...?

Recommended Posts

Gepostet als Anhang zu Slack auf AWS Lambda (Python)
Unterstützung für Python 2.7-Laufzeit auf AWS Lambda (ab 2020.1)
Ich möchte Lambda mit Python auf Mac AWS!
Führen Sie Python planmäßig auf AWS Lambda aus
Versuchen Sie, Schedule auszuführen, um Instanzen in AWS Lambda (Python) zu starten und zu stoppen.
Veröffentlichen Sie regelmäßig Bilder von Papillon auf Python + AWS Lambda + Slack
Erstellen einer Umgebung zum Ausführen von Python-Programmen unter AWS EC2
[Python] Ermöglicht den Import von pip3-Paketen in AWS Lambda
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
[Für Python] Erstellen Sie schnell eine Upload-Datei in AWS Lambda Layer
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
[Version 2020] So installieren Sie Python3 auf EC2 von AWS
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
[AWS / Lambda] Laden einer externen Python-Bibliothek
Zusammenfassung des Studiums von Python zur Verwendung von AWS Lambda
Sie können Python mithilfe der Bibliothek in eine AWS Lambda-Funktion verwandeln
Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden
Überprüfen Sie types_map, wenn Sie Mimetypen mit AWS Lambda (Python) verwenden.
So konfigurieren Sie Layer auf Lambda mit AWS SAM
Ich habe versucht, mit AWS Lambda einen AMI zu erhalten
Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
Amazon SNS → AWS Lambda → Slack → Führen Sie AWS-Befehle in AWS Chatbot aus
Eine kleine Geschichte, die beim Schreiben von Twilio-Anwendungen mit Python auf AWS Lambda süchtig macht
Post von Python nach Slack
poste an vim → Python → Slack
[Python] Scraping in AWS Lambda
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Post to Slack mit Python 3
Aktualisieren Sie die Python, die Sie auf Ihrem Mac hatten, auf 3.7-> 3.8
Eine Einführung in die Python-Programmierung
Verwenden Sie AWS Lambda, um einen Mechanismus zu erstellen, der Slack benachrichtigt, wenn der von CloudWatch überwachte Wert in Python überschritten wird
Wie benutzt man Python Lambda?
Site-Überwachung und Alarmbenachrichtigung mit AWS Lambda + Python + Slack
Post an Slack in Python
So erstellen Sie AWS Lambda-Schichten, wenn Selen × Chrom auf AWS Lambda ausgeführt wird
Ein Spiel für ein Abenteuer im interaktiven Python-Modus
xgboost (Python) in einer von AWS Lambda erstellten EC2 Spot-Instanzumgebung
Best Practice für die Anmeldung im JSON-Format unter AWS Lambda / Python
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
Ich habe versucht, alle Bemerkungen von Slack mit Wordcloud (Python) zusammenzufassen.
Bereiten Sie eine Umgebung für die Verwendung von OpenCV und Pillow mit AWS Lambda vor
Der Weg zur Installation von Python und Flask auf einem Offline-PC
Erstellen einer Umgebung zum Ausführen von ChainerMN auf einer AWS-GPU-Instanz
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
Python 3.6 unter Windows ... und zu Xamarin.
Zusammenfassung bei Verwendung von AWS Lambda (Python)
Numba als Python zu beschleunigen
Einführung in Python Hands On Teil 1
[Lambda] [Python] Von Lambda auf Twitter posten!
Schreiben Sie die AWS Lambda-Funktion in Python
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Schritte zum Installieren von python3 auf einem Mac
Erste Schritte mit Python für Nicht-Ingenieure
Eine Alternative zu "Pause" in Python
[AWS SAM] Einführung in die Python-Version
[Python Tutorial] Eine einfache Einführung in Python