Ändern Sie die Größe der in S3 gespeicherten Bilddaten mithilfe der Lambda-Funktion und speichern Sie sie in einem anderen S3. Die Programmiersprache verwendet Ruby.
Ich bin mit Lambda nicht sehr vertraut, daher besteht der Zweck im Grunde darin, die Grundoperation von Lambda als Verfahren zu belassen. Ich habe versucht, die Größe des in S3 von der AWS-Konsole eingegebenen Bilds (feste Größe) auf einfache Weise zu ändern und in einem anderen S3 zu speichern.
Sie haben im Voraus zwei S3-Buckets erstellt.
Wählen Sie einen beliebigen Funktionsnamen und die Programmiersprache für die Lambda-Funktion. Dieses Mal werde ich es in "Ruby2.5" schreiben.
Erstellen Sie eine komprimierte Version des zu implementierenden Lambda-Funktionskörpers und der externen Bibliothek (mini_magick). Führen Sie die folgenden Vorgänge für das Arbeitsverzeichnis aus.
Erstellen Sie zunächst eine Gemfile
Gemfile
source 'https://rubygems.org'
gem "mini_magick"
Verwenden Sie bundle install --path vendor / bundle
, um das Juwel in Ihrem Arbeitsverzeichnis zu installieren.
bundle install --path vendor/bundle
Erstellen Sie außerdem handler.rb
, den Hauptteil der Lambda-Funktion.
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']
)
#Importieren Sie das aus S3 gespeicherte Bild, das als Ereignisquelle angegeben ist
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)
#Bildgröße in Lambda-Umgebung geändert/Schreiben Sie vorübergehend an tmp
resized_tmp_file = "/tmp/#{key.delete("images/")}"
image.resize("300x300").write(resized_tmp_file)
#Ausführung hochladen
s3_resource = Aws::S3::Resource.new()
object = s3_resource.bucket(ENV['BUCKET_AFTER']).object(key).upload_file(resized_tmp_file)
end
Zip handler.rb
und vender
.
Laden Sie die erstellte Zip-Datei hoch. Klicken Sie in der Aktion des Funktionscodefelds auf der Lambda-Konsole auf "ZIP-Datei hochladen"
Wählen Sie "handler.zip" und "Speichern"
Legen Sie die in der Lambda-Funktion verwendeten Umgebungsvariablen über die Lambda-Konsole fest.
Es wird gesagt, dass die Einstellung, welche Funktion in welcher Datei aufgerufen werden soll, durch einen Parameter namens Handler angegeben wird. Bearbeiten Sie den Inhalt gemäß der diesmal erstellten Lambda-Funktion.
Klicken Sie in der Lambda-Konsole auf "Bearbeiten" der Einstellungen
Geben Sie einen Wert im Format "Name der Ausführungsdatei (ohne Erweiterung) .Funktionsname" in das Handlerfeld ein und speichern Sie ihn.
Klicken Sie in der Lambda-Konsole auf "Trigger hinzufügen"
Der AWS-Service, der dieses Mal als Ereignisauslöser verwendet wird, ist S3
Nehmen Sie detaillierte Einstellungen für den Trigger vor. Dieses Mal wird das Ereignis gestartet, wenn das Objekt im Bilderverzeichnis erstellt wird.
Durch Einfügen von "Trigger Enable" kann S3 den Prozess für diese Lambda-Funktion starten (Lambda-Funktionsrichtlinieneinstellung). Klicken Sie abschließend auf "Hinzufügen"
Außerdem ist es diesmal erforderlich, von Lambda aus auf S3 zuzugreifen, wenn das verkleinerte Bild gespeichert wird Gewähren Sie eine Ausführungsrolle mit Zugriff auf S3.
Klicken Sie oben in der Lambda-Konsole auf "Zugriffsrechte" und dann auf den Namen der Ausführungsrolle
Klicken Sie auf "Richtlinie anhängen"
Nachdem Sie "AmazonS3FullAccess" ausgewählt haben, klicken Sie auf "Richtlinie anhängen"
Laden Sie ein beliebiges Bild in das als Ereignisquelle angegebene S3-Bildverzeichnis hoch.
Hier ist übrigens das hochgeladene Bild
Als ich nach der Größenänderung den als Bildspeicherziel angegebenen S3 überprüft habe, wurde das Bild gespeichert, sodass es in Ordnung ist.
Der Inhalt wurde ebenfalls in der Größe geändert.
Lambda-Protokolle finden Sie in Cloudwatch-Protokollen.
API zur Größenänderung von Bildern, erstellt in 1 Stunde mit AWS Lambda Ruby
Recommended Posts