Bereitstellen von Ruby-Lambda-Funktionen mit Container-Images - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bereitstellen von Ruby-Lambda-Funktionen mit Container-Images

Es gibt drei Möglichkeiten, ein Container-Image für eine Ruby-Lambda-Funktion zu erstellen:

Tipp

Um die Zeit zu reduzieren, die benötigt wird, bis Lambda-Container-Funktionen aktiv werden, siehe die Docker-Dokumentation unter Verwenden mehrstufiger Builds. Um effiziente Container-Images zu erstellen, folgen Sie den Bewährte Methoden für das Schreiben von Dockerfiles.

Auf dieser Seite wird erklärt, wie Sie Container-Images für Lambda erstellen, testen und bereitstellen.

AWS Basis-Images für Ruby

AWS stellt die folgenden Basis-Images für Ruby bereit:

Tags Laufzeit Betriebssystem Dockerfile Ablehnung

3.3

Rubin 3.3 Amazon Linux 2023 Dockerfile für Ruby 3.3 auf GitHub

Nicht geplant

3.2

Ruby 3.2 Amazon Linux 2 Dockerfile für Ruby 3.2 auf GitHub

Nicht geplant

ECRAmazon-Repository: gallery.ecr.aws/lambda/ruby

Verwenden AWS Sie ein Basis-Image für Ruby

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:

Erstellen eines Container-Images für Ruby
  1. Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.

    mkdir example cd example
  2. Erstellen Sie eine neue Datei mit dem Namen Gemfile. Hier listen Sie die benötigten RubyGems Pakete für Ihre Anwendung auf. Das AWS SDK for Ruby ist erhältlich bei RubyGems. Sie sollten bestimmte AWS Service Gems für die Installation auswählen. Um beispielsweise das Ruby-Gem für Lambda zu verwenden, sollte Ihr Gemfile so aussehen:

    source 'https://rubygems.org' gem 'aws-sdk-lambda'

    Alternativ enthält das aws-sdk-Gem jedes verfügbare AWS Service-Gem. Dieses Gem ist sehr groß. Wir empfehlen, es nur zu verwenden, wenn Sie auf viele AWS Dienste angewiesen sind.

  3. Installieren Sie die im Gemfile angegebenen Abhängigkeiten mithilfe von bundle install.

    bundle install
  4. Erstellen Sie eine neue Datei mit dem Namen lambda_function.rb. Sie können der Datei zum Testen den folgenden Beispielfunktionscode hinzufügen oder Ihren eigenen verwenden.

    Beispiel Ruby-Funktion
    module LambdaFunction class Handler def self.process(event:,context:) "Hello from Lambda!" end end end
  5. Erstellen Sie eine neue Docker-Datei. Es folgt ein Beispiel für ein Dockerfile, das ein AWS -Basis-Image verwendet. Dieses Dockerfile verwendet die folgende Konfiguration:

    • Stellen Sie die FROM Eigenschaft auf die URI des Basis-Images ein.

    • Verwenden Sie den COPY Befehl, um den Funktionscode und die Laufzeitabhängigkeiten in eine von Lambda definierte Umgebungsvariable zu {LAMBDA_TASK_ROOT} kopieren.

    • Legen Sie das CMD-Argument auf den Lambda-Funktionshandler fest.

    Beachten Sie, dass das Dockerfile-Beispiel keine Anweisung enthält. USER Wenn Sie ein Container-Image auf Lambda bereitstellen, definiert Lambda automatisch einen Standard-Linux-Benutzer mit den am wenigsten privilegierten Rechten. Dies unterscheidet sich vom Standardverhalten von Docker, bei dem standardmäßig der Benutzer verwendet wird, wenn keine Anweisung bereitgestellt wird. root USER

    Beispiel Dockerfile
    FROM public.ecr.aws/lambda/ruby:3.2 # Copy Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ${LAMBDA_TASK_ROOT}/ # Install Bundler and the specified gems RUN gem install bundler:2.4.20 && \ bundle config set --local path 'vendor/bundle' && \ bundle install # Copy function code COPY lambda_function.rb ${LAMBDA_TASK_ROOT}/ # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.LambdaFunction::Handler.process" ]
  6. Erstellen Sie Ihr Docker-Image mit dem docker build-Befehl. Das folgende Beispiel benennt das Bild in docker-image und gibt ihm den test Tag.

    docker build --platform linux/amd64 -t docker-image:test .
    Anmerkung

    Der Befehl gibt die --platform linux/amd64-Option an, um sicherzustellen, dass Ihr Container mit der Lambda-Ausführungsumgebung kompatibel ist, unabhängig von der Architektur des Entwicklungsrechners. Wenn Sie beabsichtigen, eine Lambda-Funktion mithilfe der ARM64 Befehlssatzarchitektur zu erstellen, müssen Sie den Befehl so ändern, dass er stattdessen die --platform linux/arm64 Option verwendet.

  1. Starten Sie Ihr Docker-Image mit dem docker run-Befehl. In diesem Beispiel ist docker-image der Image-Name und test der Tag.

    docker run --platform linux/amd64 -p 9000:8080 --read-only docker-image:test

    Dieser Befehl führt das Image als Container aus und erstellt einen lokalen Endpunkt bei localhost:9000/2015-03-31/functions/function/invocations.

    Anmerkung

    Wenn Sie das Docker-Image für die ARM64 Befehlssatzarchitektur erstellt haben, stellen Sie sicher, dass Sie stattdessen die --platform linux/arm64 Option verwenden. --platform linux/amd64

  2. Veröffentlichen Sie in einem neuen Terminalfenster ein Ereignis an den lokalen Endpunkt.

    Linux/macOS

    Führen Sie unter Linux oder macOS den folgenden curl-Befehl aus:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, möchten Sie die Funktion möglicherweise mit einer JSON Nutzlast aufrufen. Beispiel:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Führen Sie in PowerShell den folgenden Invoke-WebRequest Befehl aus:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, möchten Sie die Funktion möglicherweise mit einer JSON Nutzlast aufrufen. Beispiel:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  3. Die Container-ID erhalten.

    docker ps
  4. Verwenden Sie den Befehl docker kill, um den Container zu anzuhalten. Ersetzen Sie in diesem Befehl 3766c4ab331c durch die Container-ID aus dem vorherigen Schritt.

    docker kill 3766c4ab331c
Um das Bild auf Amazon hochzuladen ECR und die Lambda-Funktion zu erstellen
  1. Führen Sie den get-login-passwordBefehl aus, um den Docker bei Ihrer ECR Amazon-Registrierung CLI zu authentifizieren.

    • Stellen Sie den --region Wert auf den AWS-Region Ort ein, an dem Sie das ECR Amazon-Repository erstellen möchten.

    • 111122223333Ersetzen Sie es durch Ihre AWS-Konto ID.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Erstellen Sie mit dem ECR Befehl create-repository ein Repository in Amazon.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Anmerkung

    Das ECR Amazon-Repository muss sich im selben Format AWS-Region wie die Lambda-Funktion befinden.

    Wenn erfolgreich, sehen Sie eine Antwort wie diese:

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Kopieren Sie das repositoryUri aus der Ausgabe im vorherigen Schritt.

  4. Führen Sie den Befehl docker tag aus, um Ihr lokales Image als neueste Version in Ihrem ECR Amazon-Repository zu taggen. In diesem Befehl gilt Folgendes:

    • docker-image:testist der Name und das Tag Ihres Docker-Images. Dies sind der Imagename und das Tag, die Sie im docker build Befehl angegeben haben.

    • Ersetzen Sie <ECRrepositoryUri> durch den repositoryUri, den Sie kopiert haben. Stellen Sie sicher, dass Sie :latest am Ende des angebenURI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Beispiel:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Führen Sie den Befehl docker push aus, um Ihr lokales Image im ECR Amazon-Repository bereitzustellen. Stellen Sie sicher, dass Sie es :latest am Ende des Repositorys URI einschließen.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Erstellen Sie eine Ausführungsrolle für die Funktion, wenn Sie noch keine haben. Im nächsten Schritt benötigen Sie den Amazon-Ressourcennamen (ARN) der Rolle.

  7. So erstellen Sie die Lambda-Funktion: Geben Sie für ImageUri das Repository URI von früher an. Stellen Sie sicher, dass Sie :latest am Ende des angebenURI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Anmerkung

    Sie können eine Funktion mit einem Bild in einem anderen AWS Konto erstellen, sofern sich das Bild in derselben Region wie die Lambda-Funktion befindet. Weitere Informationen finden Sie unter ECRKontoübergreifende Amazon-Berechtigungen.

  8. Die Funktion aufrufen.

    aws lambda invoke --function-name hello-world response.json

    Das Ergebnis sollte ungefähr wie folgt aussehen:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Um die Ausgabe der Funktion zu sehen, überprüfen Sie die response.json-Datei.

Um den Funktionscode zu aktualisieren, müssen Sie das Image erneut erstellen, das neue Image in das ECR Amazon-Repository hochladen und dann den update-function-codeBefehl verwenden, um das Image für die Lambda-Funktion bereitzustellen.

Lambda löst das Image-Tag in einen bestimmten Image-Digest auf. Das heißt, wenn Sie das Image-Tag, das zur Bereitstellung der Funktion verwendet wurde, auf ein neues Image in Amazon verweisenECR, aktualisiert Lambda die Funktion nicht automatisch, um das neue Image zu verwenden.

Um das neue Image für dieselbe Lambda-Funktion bereitzustellen, müssen Sie den update-function-codeBefehl verwenden, auch wenn das Image-Tag in Amazon dasselbe ECR bleibt. Im folgenden Beispiel erstellt die --publish Option eine neue Version der Funktion unter Verwendung des aktualisierten Container-Images.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Verwenden eines alternativen Basis-Images mit dem Laufzeitschnittstellen-Client

Wenn Sie ein OS-Basis-Image oder ein alternatives Basis-Image verwenden, müssen Sie den Laufzeitschnittstellen-Client in das Image einbinden. Der Laufzeitschnittstellen-Client erweitert die Verwendung der Lambda-Laufzeit API für benutzerdefinierte Laufzeiten, die die Interaktion zwischen Lambda und Ihrem Funktionscode verwaltet.

Installieren Sie den Lambda Runtime Interface Client für Ruby mit dem Paketmanager RubyGems .org:

gem install aws_lambda_ric

Sie können den Ruby-Runtime-Interface-Client auch von GitHub herunterladen. Der Laufzeitschnittstellen-Client unterstützt die Ruby-Versionen 2.5.x bis 2.7.x.

Das folgende Beispiel zeigt, wie ein Container-Image für Ruby mithilfe eines AWS Nicht-Basis-Images erstellt wird. Das Beispiel-Dockerfile verwendet ein offizielles Ruby-Basis-Image. Das Docker-File enthält den Laufzeitschnittstellen-Client.

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:

Erstellen eines Container-Images für Ruby mit einem alternativen Basis-Image
  1. Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.

    mkdir example cd example
  2. Erstellen Sie eine neue Datei mit dem Namen Gemfile. Hier listen Sie die benötigten RubyGems Pakete für Ihre Anwendung auf. Das AWS SDK for Ruby ist erhältlich bei RubyGems. Sie sollten bestimmte AWS Service Gems für die Installation auswählen. Um beispielsweise das Ruby-Gem für Lambda zu verwenden, sollte Ihr Gemfile so aussehen:

    source 'https://rubygems.org' gem 'aws-sdk-lambda'

    Alternativ enthält das aws-sdk-Gem jedes verfügbare AWS Service-Gem. Dieses Gem ist sehr groß. Wir empfehlen, es nur zu verwenden, wenn Sie auf viele AWS Dienste angewiesen sind.

  3. Installieren Sie die im Gemfile angegebenen Abhängigkeiten mithilfe von bundle install.

    bundle install
  4. Erstellen Sie eine neue Datei mit dem Namen lambda_function.rb. Sie können der Datei zum Testen den folgenden Beispielfunktionscode hinzufügen oder Ihren eigenen verwenden.

    Beispiel Ruby-Funktion
    module LambdaFunction class Handler def self.process(event:,context:) "Hello from Lambda!" end end end
  5. Erstellen Sie eine neue Docker-Datei. Das folgende Dockerfile verwendet ein Ruby-Basis-Image anstelle eines AWS -Basis-Images. Das Dockerfile enthält den Laufzeitschnittstellen-Client für Ruby, der das Image mit Lambda kompatibel macht. Alternativ können Sie den Laufzeitschnittstellen-Client zum Gemfile Ihrer Anwendung hinzufügen.

    • Legen Sie die FROM-Eigenschaft auf das Ruby-Basis-Image fest.

    • Erstellen Sie ein Verzeichnis für den Funktionscode und eine Umgebungsvariable, die auf dieses Verzeichnis verweist. In diesem Beispiel ist das Verzeichnis/var/task, das die Lambda-Ausführungsumgebung widerspiegelt. Sie können jedoch ein beliebiges Verzeichnis für den Funktionscode wählen, da das Dockerfile kein Basis-Image verwendet. AWS

    • Legen Sie ENTRYPOINT auf das Modul fest, das der Docker-Container beim Start ausführen soll. In diesem Fall ist das Modul der Laufzeitschnittstellen-Client.

    • Legen Sie das CMD-Argument auf den Lambda-Funktionshandler fest.

    Beachten Sie, dass das Dockerfile-Beispiel keine Anweisung enthält. USER Wenn Sie ein Container-Image auf Lambda bereitstellen, definiert Lambda automatisch einen Standard-Linux-Benutzer mit den am wenigsten privilegierten Rechten. Dies unterscheidet sich vom Standardverhalten von Docker, bei dem standardmäßig der Benutzer verwendet wird, wenn keine Anweisung bereitgestellt wird. root USER

    Beispiel Dockerfile
    FROM ruby:2.7 # Install the runtime interface client for Ruby RUN gem install aws_lambda_ric # Add the runtime interface client to the PATH ENV PATH="/usr/local/bundle/bin:${PATH}" # Create a directory for the Lambda function ENV LAMBDA_TASK_ROOT=/var/task RUN mkdir -p ${LAMBDA_TASK_ROOT} WORKDIR ${LAMBDA_TASK_ROOT} # Copy Gemfile and Gemfile.lock COPY Gemfile Gemfile.lock ${LAMBDA_TASK_ROOT}/ # Install Bundler and the specified gems RUN gem install bundler:2.4.20 && \ bundle config set --local path 'vendor/bundle' && \ bundle install # Copy function code COPY lambda_function.rb ${LAMBDA_TASK_ROOT}/ # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "aws_lambda_ric" ] # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.LambdaFunction::Handler.process" ]
  6. Erstellen Sie Ihr Docker-Image mit dem docker build-Befehl. Das folgende Beispiel benennt das Bild in docker-image und gibt ihm den test Tag.

    docker build --platform linux/amd64 -t docker-image:test .
    Anmerkung

    Der Befehl gibt die --platform linux/amd64-Option an, um sicherzustellen, dass Ihr Container mit der Lambda-Ausführungsumgebung kompatibel ist, unabhängig von der Architektur des Entwicklungsrechners. Wenn Sie beabsichtigen, eine Lambda-Funktion mithilfe der ARM64 Befehlssatzarchitektur zu erstellen, müssen Sie den Befehl so ändern, dass er stattdessen die --platform linux/arm64 Option verwendet.

Verwenden Sie den Laufzeit-Schnittstellen-Emulator, um das Image lokal zu testen. Sie können den Emulator in Ihr Image integrieren oder ihn mit dem folgenden Verfahren auf Ihrem lokalen Computer installieren.

Installieren des Laufzeitschnittstellen-Emulators auf Ihrem lokalen Computer
  1. Führen Sie in Ihrem Projektverzeichnis den folgenden Befehl aus, um den Runtime-Interface-Emulator (x86-64-Architektur) herunterzuladen GitHub und auf Ihrem lokalen Computer zu installieren.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Um den arm64-Emulator zu installieren, ersetzen Sie das GitHub Repository URL im vorherigen Befehl durch Folgendes:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    Um den arm64-Emulator zu installieren, ersetzen Sie das $downloadLink durch Folgendes:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. Starten Sie Ihr Docker-Image mit dem docker run-Befehl. Beachten Sie Folgendes:

    • docker-image ist der Image-Name und test ist das Tag.

    • aws_lambda_ric lambda_function.LambdaFunction::Handler.process ist der ENTRYPOINT gefolgt von dem CMD aus Ihrem Dockerfile.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ --read-only \ docker-image:test \ aws_lambda_ric lambda_function.LambdaFunction::Handler.process
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` --read-only ` docker-image:test ` aws_lambda_ric lambda_function.LambdaFunction::Handler.process

    Dieser Befehl führt das Image als Container aus und erstellt einen lokalen Endpunkt bei localhost:9000/2015-03-31/functions/function/invocations.

    Anmerkung

    Wenn Sie das Docker-Image für die ARM64 Befehlssatzarchitektur erstellt haben, stellen Sie sicher, dass Sie die --platform linux/arm64 Option anstelle von verwenden. --platform linux/amd64

  3. Veröffentlichen Sie ein Ereignis auf dem lokalen Endpunkt.

    Linux/macOS

    Führen Sie unter Linux oder macOS den folgenden curl-Befehl aus:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, möchten Sie die Funktion möglicherweise mit einer JSON Nutzlast aufrufen. Beispiel:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Führen Sie in PowerShell den folgenden Invoke-WebRequest Befehl aus:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Dieser Befehl ruft die Funktion mit einem leeren Ereignis auf und gibt eine Antwort zurück. Wenn Sie Ihren eigenen Funktionscode anstelle des Beispielfunktionscodes verwenden, möchten Sie die Funktion möglicherweise mit einer JSON Nutzlast aufrufen. Beispiel:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  4. Die Container-ID erhalten.

    docker ps
  5. Verwenden Sie den Befehl docker kill, um den Container zu anzuhalten. Ersetzen Sie in diesem Befehl 3766c4ab331c durch die Container-ID aus dem vorherigen Schritt.

    docker kill 3766c4ab331c
Um das Bild auf Amazon hochzuladen ECR und die Lambda-Funktion zu erstellen
  1. Führen Sie den get-login-passwordBefehl aus, um den Docker bei Ihrer ECR Amazon-Registrierung CLI zu authentifizieren.

    • Stellen Sie den --region Wert auf den AWS-Region Ort ein, an dem Sie das ECR Amazon-Repository erstellen möchten.

    • 111122223333Ersetzen Sie es durch Ihre AWS-Konto ID.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Erstellen Sie mit dem ECR Befehl create-repository ein Repository in Amazon.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    Anmerkung

    Das ECR Amazon-Repository muss sich im selben Format AWS-Region wie die Lambda-Funktion befinden.

    Wenn erfolgreich, sehen Sie eine Antwort wie diese:

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Kopieren Sie das repositoryUri aus der Ausgabe im vorherigen Schritt.

  4. Führen Sie den Befehl docker tag aus, um Ihr lokales Image als neueste Version in Ihrem ECR Amazon-Repository zu taggen. In diesem Befehl gilt Folgendes:

    • docker-image:testist der Name und das Tag Ihres Docker-Images. Dies sind der Imagename und das Tag, die Sie im docker build Befehl angegeben haben.

    • Ersetzen Sie <ECRrepositoryUri> durch den repositoryUri, den Sie kopiert haben. Stellen Sie sicher, dass Sie :latest am Ende des angebenURI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Beispiel:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Führen Sie den Befehl docker push aus, um Ihr lokales Image im ECR Amazon-Repository bereitzustellen. Stellen Sie sicher, dass Sie es :latest am Ende des Repositorys URI einschließen.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Erstellen Sie eine Ausführungsrolle für die Funktion, wenn Sie noch keine haben. Im nächsten Schritt benötigen Sie den Amazon-Ressourcennamen (ARN) der Rolle.

  7. So erstellen Sie die Lambda-Funktion: Geben Sie für ImageUri das Repository URI von früher an. Stellen Sie sicher, dass Sie :latest am Ende des angebenURI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    Anmerkung

    Sie können eine Funktion mit einem Bild in einem anderen AWS Konto erstellen, sofern sich das Bild in derselben Region wie die Lambda-Funktion befindet. Weitere Informationen finden Sie unter ECRKontoübergreifende Amazon-Berechtigungen.

  8. Die Funktion aufrufen.

    aws lambda invoke --function-name hello-world response.json

    Das Ergebnis sollte ungefähr wie folgt aussehen:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Um die Ausgabe der Funktion zu sehen, überprüfen Sie die response.json-Datei.

Um den Funktionscode zu aktualisieren, müssen Sie das Image erneut erstellen, das neue Image in das ECR Amazon-Repository hochladen und dann den update-function-codeBefehl verwenden, um das Image für die Lambda-Funktion bereitzustellen.

Lambda löst das Image-Tag in einen bestimmten Image-Digest auf. Das heißt, wenn Sie das Image-Tag, das zur Bereitstellung der Funktion verwendet wurde, auf ein neues Image in Amazon verweisenECR, aktualisiert Lambda die Funktion nicht automatisch, um das neue Image zu verwenden.

Um das neue Image für dieselbe Lambda-Funktion bereitzustellen, müssen Sie den update-function-codeBefehl verwenden, auch wenn das Image-Tag in Amazon dasselbe ECR bleibt. Im folgenden Beispiel erstellt die --publish Option eine neue Version der Funktion unter Verwendung des aktualisierten Container-Images.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish