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.
Environnement AWS Lambda Python
files.upload
de Slack (utilisez multipart / form-data pour le type de contenu)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.
--Utiliser la couche Lambda avec les requêtes
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
data
en excluant le paramètre de fichier de l'API Slack files.upload.file
3 points. Vous pouvez désormais publier des fichiers sur Slack avec AWS Lambda sans utiliser de requêtes.
Qu'est-ce qui est le plus facile à créer une couche Lambda ...?