[AWS Lambda] Redimensionner l'image enregistrée dans S3 et l'enregistrer dans un autre S3 (à l'aide de Ruby)

Cible

Redimensionnez les données d'image enregistrées dans S3 à l'aide de la fonction Lambda et enregistrez-les dans un autre S3. Le langage de programmation utilise Ruby.

introduction

Je ne connais pas très bien Lambda, donc, fondamentalement, le but est de laisser le fonctionnement de base de Lambda comme une procédure. J'ai essayé un processus simple de redimensionnement (taille fixe) de l'image placée dans S3 à partir de la console AWS et de l'enregistrer dans un autre S3.

supposition

Vous avez créé deux compartiments S3 à l'avance.

Diagramme

Untitled Diagram.png

Flux de travail

Numéro d'article Titre
1 Création et téléchargement de fonctions Lambda
2 Définition des variables d'environnement Lambda
3 Paramètres de rôle de gestionnaire et d'exécution
4 Définition du déclencheur d'événement
5 Paramètres du rôle d'exécution
6 Vérification du fonctionnement

procédure

1. Création et téléchargement de fonctions Lambda

Sélectionnez un nom de fonction arbitraire et le langage de programmation à utiliser avec la fonction Lambda. Cette fois, je vais l'écrire en Ruby2.5. image.png

Créez une version compressée du corps de la fonction Lambda à déployer et de la bibliothèque externe (mini_magick). Effectuez les opérations suivantes sur le répertoire de travail.

Tout d'abord, créez un Gemfile

Gemfile



source 'https://rubygems.org'
gem "mini_magick"

Utilisez bundle install --path vendor / bundle pour installer le gem dans votre répertoire de travail.


bundle install --path vendor/bundle

De plus, créez handler.rb qui est le corps principal de la fonction Lambda.

handler.rb



require 'aws-sdk-s3'
require 'base64'
require 'mini_magick'

def resize_image(event:, context:)
  s3_client = Aws::S3::Client.new(
                           :region => ENV['REGION'],
                           :access_key_id => ENV['ACCESS_KEY'],
                           :secret_access_key => ENV['SECRET_ACCESS_KEY']
                          )
                          
  #Importer l'image enregistrée depuis S3 spécifiée comme source d'événement
  key = event['Records'][0]['s3']['object']['key']
  image_file = s3_client.get_object(:bucket => ENV['BUCKET_BEFORE'], :key => key).body.read
  image = MiniMagick::Image.read(image_file)

  #Image redimensionnée dans l'environnement Lambda/Écrire temporairement dans tmp
  resized_tmp_file = "/tmp/#{key.delete("images/")}"
  image.resize("300x300").write(resized_tmp_file)

  #Télécharger l'exécution
  s3_resource = Aws::S3::Resource.new()
  object = s3_resource.bucket(ENV['BUCKET_AFTER']).object(key).upload_file(resized_tmp_file)
end

Zip handler.rb et vender.

image.png

Téléchargez le fichier zip créé. Cliquez sur «Télécharger le fichier .zip» à partir de l'action du champ de code de fonction sur la console Lambda tempsnip.png

Sélectionnez handler.zip et Enregistrer

tempsnip.png

2. Définition des variables d'environnement Lambda

Définissez les variables d'environnement utilisées dans la fonction Lambda à partir de la console Lambda.

tempsnip.png

3. Paramètres du gestionnaire et du rôle d'exécution

On dit que le paramétrage de quelle fonction appeler dans quel fichier est spécifié par un paramètre appelé handler. Modifiez le contenu en fonction de la fonction Lambda créée cette fois.

Cliquez sur «Modifier» des préférences sur la console Lambda tempsnip.png

Entrez une valeur dans le champ du gestionnaire au format «nom du fichier d'exécution (hors extension). Nom de la fonction» et enregistrez. tempsnip.png

4. Définition du déclencheur d'événement

Cliquez sur «Ajouter un déclencheur» dans la console Lambda tempsnip.png

Le service AWS utilisé comme déclencheur d'événement cette fois est S3 tempsnip.png

Définissez les paramètres détaillés du déclencheur. Cette fois, l'événement sera lancé lorsque l'objet est créé dans le répertoire images. tempsnip.png

En incluant Trigger Enabled, S3 peut lancer le processus vers cette fonction Lambda (paramètre de stratégie de fonction Lambda). Enfin cliquez sur ʻAjouter`

tempsnip.png

5. Paramètres du rôle d'exécution

De plus, cette fois, il est nécessaire d'accéder à S3 depuis Lambda lors de l'enregistrement de l'image redimensionnée, donc Accordez un rôle d'exécution avec accès à S3.

Cliquez sur «Droits d'accès» en haut de la console Lambda, puis cliquez sur le nom du rôle d'exécution

tempsnip.png

Cliquez sur ʻAttach Policy` tempsnip.png

ʻAprès avoir sélectionné AmazonS3FullAccess, Joindre la politique` tempsnip.png

6. Vérification du fonctionnement

Téléchargez n'importe quelle image dans le répertoire d'images S3 spécifié comme source d'événement. image.png

Au fait, voici l'image téléchargée image.png

Lorsque j'ai vérifié le S3 spécifié comme destination d'enregistrement de l'image après le redimensionnement, l'image a été enregistrée, donc c'est OK. image.png

Le contenu a également été redimensionné. image.png

Les journaux Lambda se trouvent dans Cloudwatch Logs. image.png

Articles que j'ai utilisés comme référence

API de redimensionnement d'image créée en 1 heure avec AWS Lambda Ruby

Recommended Posts

[AWS Lambda] Redimensionner l'image enregistrée dans S3 et l'enregistrer dans un autre S3 (à l'aide de Ruby)
Remarque: Stockage d'images à l'aide d'AWS S3
Créez facilement un S3 virtuel et testez l'intégration entre les services AWS Lambda et S3 dans un environnement local
Je souhaite télécharger un fichier sur Internet en utilisant Ruby et l'enregistrer localement (avec prudence)
Modifiez la destination d'enregistrement de l'image en S3 dans l'application Rails. Partie 2
[Développement Android] Obtenez des images du serveur avec Java et définissez-les dans ImageView! !!
[Java] Trier la liste à l'aide de flux et d'expressions lambda
Importez une instance et utilisez-la sur un autre écran
Examinez les éléments du tableau à l'aide de la méthode [Ruby] includes?
Différences entre les classes et les instances dans Ruby
Afficher une image de chargement dans JavaFX puis afficher une autre image