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.
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.
Vous avez créé deux compartiments S3 à l'avance.
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
.
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
.
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
Sélectionnez handler.zip
et Enregistrer
Définissez les variables d'environnement utilisées dans la fonction Lambda à partir de la console Lambda.
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
Entrez une valeur dans le champ du gestionnaire au format «nom du fichier d'exécution (hors extension). Nom de la fonction» et enregistrez.
Cliquez sur «Ajouter un déclencheur» dans la console Lambda
Le service AWS utilisé comme déclencheur d'événement cette fois est S3
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.
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`
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
Cliquez sur ʻAttach Policy`
ʻAprès avoir sélectionné AmazonS3FullAccess,
Joindre la politique`
Téléchargez n'importe quelle image dans le répertoire d'images S3 spécifié comme source d'événement.
Au fait, voici l'image téléchargée
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.
Le contenu a également été redimensionné.
Les journaux Lambda se trouvent dans Cloudwatch Logs.
API de redimensionnement d'image créée en 1 heure avec AWS Lambda Ruby