[AWS Lambda] Ändern Sie die Größe des in S3 gespeicherten Bildes und speichern Sie es in einem anderen S3 (mit Ruby).

Ziel

Ä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.

Einführung

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.

Annahme

Sie haben im Voraus zwei S3-Buckets erstellt.

Diagramm

Untitled Diagram.png

Arbeitsablauf

Artikelnummer Titel
1 Erstellen und Hochladen von Lambda-Funktionen
2 Festlegen von Lambda-Umgebungsvariablen
3 Einstellungen für Handler und Ausführungsrolle
4 Ereignisauslöserdefinition
5 Einstellungen für Ausführungsrollen
6 Betriebsüberprüfung

Verfahren

1. Erstellen und Hochladen von Lambda-Funktionen

Wählen Sie einen beliebigen Funktionsnamen und die Programmiersprache für die Lambda-Funktion. Dieses Mal werde ich es in "Ruby2.5" schreiben. image.png

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.

image.png

Laden Sie die erstellte Zip-Datei hoch. Klicken Sie in der Aktion des Funktionscodefelds auf der Lambda-Konsole auf "ZIP-Datei hochladen" tempsnip.png

Wählen Sie "handler.zip" und "Speichern"

tempsnip.png

2. Einstellen der Lambda-Umgebungsvariablen

Legen Sie die in der Lambda-Funktion verwendeten Umgebungsvariablen über die Lambda-Konsole fest.

tempsnip.png

3. Einstellungen für Handler und Ausführungsrolle

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 tempsnip.png

Geben Sie einen Wert im Format "Name der Ausführungsdatei (ohne Erweiterung) .Funktionsname" in das Handlerfeld ein und speichern Sie ihn. tempsnip.png

4. Definition des Ereignisauslösers

Klicken Sie in der Lambda-Konsole auf "Trigger hinzufügen" tempsnip.png

Der AWS-Service, der dieses Mal als Ereignisauslöser verwendet wird, ist S3 tempsnip.png

Nehmen Sie detaillierte Einstellungen für den Trigger vor. Dieses Mal wird das Ereignis gestartet, wenn das Objekt im Bilderverzeichnis erstellt wird. tempsnip.png

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"

tempsnip.png

5. Einstellungen der Ausführungsrolle

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

tempsnip.png

Klicken Sie auf "Richtlinie anhängen" tempsnip.png

Nachdem Sie "AmazonS3FullAccess" ausgewählt haben, klicken Sie auf "Richtlinie anhängen" tempsnip.png

6. Überprüfung des Betriebs

Laden Sie ein beliebiges Bild in das als Ereignisquelle angegebene S3-Bildverzeichnis hoch. image.png

Hier ist übrigens das hochgeladene Bild image.png

Als ich nach der Größenänderung den als Bildspeicherziel angegebenen S3 überprüft habe, wurde das Bild gespeichert, sodass es in Ordnung ist. image.png

Der Inhalt wurde ebenfalls in der Größe geändert. image.png

Lambda-Protokolle finden Sie in Cloudwatch-Protokollen. image.png

Artikel, die ich als Referenz verwendet habe

API zur Größenänderung von Bildern, erstellt in 1 Stunde mit AWS Lambda Ruby

Recommended Posts

[AWS Lambda] Ändern Sie die Größe des in S3 gespeicherten Bildes und speichern Sie es in einem anderen S3 (mit Ruby).
Hinweis: Bildspeicherung mit AWS S3
Erstellen Sie einfach ein virtuelles S3 und testen Sie die Integration zwischen AWS Lambda und S3-Diensten in einer lokalen Umgebung
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
Ändern Sie das Speicherziel des Bildes in der Rails-App in S3. Teil 2
[Android-Entwicklung] Holen Sie sich mit Java Bilder vom Server und legen Sie sie in ImageView fest! !!
[Java] Sortieren Sie die Liste mit Streams und Lambda-Ausdrücken
Importieren Sie eine Instanz und verwenden Sie sie auf einem anderen Bildschirm
Untersuchen Sie die Elemente im Array mit der Methode [Ruby] include?
Unterschiede zwischen Klassen und Instanzen in Ruby
Zeigen Sie ein Ladebild in JavaFX an und zeigen Sie dann ein anderes Bild an