Publié en tant que pièce jointe à Slack sur AWS Lambda (Python)

Je faisais AWS Lambda qui récupère les fichiers d'Amazon S3 et les publie sur Slack en tant que pièces jointes, mais j'ai eu du mal car l'environnement Python d'AWS Lambda n'incluait pas le module de requêtes.

Hypothèses / environnement

Environnement AWS Lambda Python

Ce que je voulais faire

  1. Obtenez le fichier d'Amazon S3
  2. Publiez le fichier en pièce jointe avec l'API files.upload de Slack (utilisez multipart / form-data pour le type de contenu)

Ce que je ne pouvais pas faire et pourquoi

Télécharger des fichiers en Python https://qiita.com/5zm/items/92cde9e043813e02eb68 Ou 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/ Comme vous pouvez le voir, il est standard d'utiliser des requêtes. Cependant, l'environnement Python d'AWS Lambda n'incluait pas le module de requêtes.

Solution

--Utiliser la couche Lambda avec les requêtes

la mise en oeuvre

Même si vous utilisez urllib.request, vous devez créer des données de formulaire en plusieurs parties, j'ai donc fait référence à l'URL suivante. https://necoyama3.hatenablog.com/entry/20150608/1434982490 La méthode ʻencode_multipart_formdata` décrite dans cet article convertit la partie données et la partie fichier dans le format de données de formulaire en plusieurs parties.

En utilisant cela, j'ai fait ce qui suit.

python


##Point 1:Définir les paramètres à l'exclusion du paramètre de fichier
data = {
   'token': <your token>,
   'channels': <your channels>,
   'initial_comment': key + 'Publier:eyes:',
   'filename': key,
   'filetype': 'webp'
}

url = "https://slack.com/api/files.upload"
content = open('/tmp/' + key, 'rb').read()

##Point 2:définir le paramètre de fichier
file = {'file': {'filename': key, 'content': content}}

##Point 3:Convertissez les données et le fichier en un seul formulaire en plusieurs parties
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)

Le point est

  1. Définissez les paramètres dans la variable data en excluant le paramètre de fichier de l'API Slack files.upload.
  2. Définissez le paramètre de fichier de l'API Slack files.upload avec la variable file
  3. Conversion en données de formulaire en plusieurs parties avec la méthode ʻencode_multipart_formdata`

3 points. Vous pouvez désormais publier des fichiers sur Slack avec AWS Lambda sans utiliser de requêtes.

finalement

Qu'est-ce qui est le plus facile à créer une couche Lambda ...?

Recommended Posts

Publié en tant que pièce jointe à Slack sur AWS Lambda (Python)
Prise en charge de l'environnement d'exécution Python 2.7 sur AWS Lambda (à partir de 2020.1)
Je veux AWS Lambda avec Python sur Mac!
Exécutez Python selon la planification sur AWS Lambda
Essayez d'exécuter Schedule pour démarrer et arrêter des instances dans AWS Lambda (Python)
Publiez régulièrement des images de Papillon sur Python + AWS Lambda + Slack
Création d'un environnement pour exécuter des programmes Python sur AWS EC2
[Python] Permet d'importer les packages pip3 sur AWS Lambda
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
[Pour Python] Créez rapidement un fichier de téléchargement vers AWS Lambda Layer
[Python] Exécutez Headless Chrome sur AWS Lambda
Connectez-vous à s3 avec AWS Lambda Python
Exécutez régulièrement des programmes Python sur AWS Lambda
[Version 2020] Comment installer Python3 sur EC2 d'AWS
Exemple de notification Slack avec python lambda
[AWS / Lambda] Comment charger une bibliothèque externe Python
Résumé de l'étude de Python pour utiliser AWS Lambda
N'hésitez pas à transformer Python en utilisant la bibliothèque en une fonction AWS Lambda
Créez des paramètres dans terraform pour envoyer des messages depuis AWS Lambda Python3.8 vers Slack
Vérifiez types_map lors de l'utilisation de mimetypes avec AWS Lambda (Python)
Comment configurer Layer sur Lambda à l'aide d'AWS SAM
J'ai essayé d'obtenir une AMI en utilisant AWS Lambda
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Amazon SNS → AWS Lambda → Slack → Exécuter des commandes AWS sur AWS Chatbot
Une petite histoire à savoir comme un point addictif lors de l'écriture d'applications Twilio à l'aide de Python sur AWS Lambda
Publier de Python vers Slack
publier sur vim → Python → Slack
[Python] Scraping dans AWS Lambda
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Publiez sur Slack avec Python 3
Mettez à jour le python que vous aviez sur votre Mac à 3.7-> 3.8
Une introduction à la programmation Python
Utilisons AWS Lambda pour créer un mécanisme pour notifier Slack lorsque la valeur surveillée par CloudWatch est dépassée sur Python
Comment utiliser Python lambda
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack
Publier sur Slack en Python
Comment créer des couches AWS Lambda lors de l'exécution de sélénium × chrome sur AWS Lambda
Un jeu pour partir à l'aventure en mode interactif de python
xgboost (python) sur l'environnement d'instance EC2 Spot préparé par AWS Lambda
Bonnes pratiques pour la journalisation au format JSON sur AWS Lambda / Python
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
J'ai essayé de résumer les remarques de tout le monde sur le slack avec wordcloud (Python)
Préparer un environnement pour utiliser OpenCV et Pillow avec AWS Lambda
La route pour installer Python et Flask sur un PC hors ligne
Création d'un environnement pour exécuter ChainerMN sur une instance de GPU AWS
[Présentation de l'application Udemy Python3 +] 58. Lambda
Python 3.6 sous Windows ... et vers Xamarin.
Récapitulatif si vous utilisez AWS Lambda (Python)
Numba pour accélérer en Python
Introduction à Python Hands On Partie 1
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Ecrire une fonction AWS Lambda en Python
Notifier HipChat avec AWS Lambda (Python)
Étapes pour installer python3 sur Mac
Premiers pas avec Python pour les non-ingénieurs
Une alternative à `pause` en Python
[AWS SAM] Présentation de la version Python
[Tutoriel Python] Une introduction facile à Python