Probleme beim Bereitstellen von Anwendungen und Funktionen

Erfahren Sie, wie Sie Probleme beim Deployment von Anwendungen und Funktionen mit OCI Functions beheben.

Diese Probleme treten möglicherweise beim Deployment von Anwendungen und Funktionen mit OCI Functions auf.

Beim Bereitstellen einer Anwendung wird die Meldung "unauthorized: incorrect username or password" zurückgegeben

Beim Bereitstellen einer Anwendung wird möglicherweise etwa folgende Meldung angezeigt:

$ fn -v deploy --app acme-app

Deploying go-app to app: acme-app
Bumped to version 0.0.2
Building image phx.ocir.io/ansh81vru1zp/acme-repo/go-app:0.0.2
FN_REGISTRY: phx.ocir.io/ansh81vru1zp/acme-repo
Current Context: acme-functions-compartment
Sending build context to Docker daemon 5.12kB
Step 1/10 : FROM fnproject/go:dev as build-stage
Get https://registry-1.docker.io/v2/fnproject/go/manifests/dev: unauthorized: incorrect username or password

Die Meldung gibt einen unnötigen und nicht erfolgreichen Versuch an, sich bei Docker Hub anzumelden. Um dieses Problem zu beheben, melden Sie sich mit dem folgenden Befehl von Docker ab:

docker logout

Nachdem Sie sich von Docker abgemeldet haben, führen Sie den Befehl zum Bereitstellen der Anwendung erneut aus.

Beim Bereitstellen einer Funktion wird die Meldung "error running docker push, are you login into docker?" zurückgegeben.

Wenn beim Bereitstellen einer Funktion etwa folgende Meldung angezeigt wird, vergewissern Sie sich, dass die FN_REGISTRY-Umgebungsvariable für die Entwicklungsumgebung nicht auf Ihren Docker-Benutzernamen gesetzt ist:

The push refers to repository [docker.io. ...
.
.
.
denied: requested access to the resource is denied
Fn: error running docker push, are you logged into docker?: exit status 1
See fn <command> --help’ for more information.
			

Wenn Sie die Open-Source-Plattform Fn Project verwendet haben, haben Sie möglicherweise die Anweisungen in der Fn-Projekt-Dokumentation zum Festlegen der FN_REGISTRY-Umgebungsvariablen auf Ihren Docker-Benutzernamen befolgen, um eine Interaktion mit der offiziellen Docker-Registry zu ermöglichen (docker.io).

Die FN_REGISTRY-Umgebungsvariable setzt den Wert der Registry-Option im Fn-Projekt-CLI-Kontext außer Kraft.

So verwenden Sie die Fn-Projekt-CLI mit OCI Functions:

  • Heben Sie die Festlegung der FN_REGISTRY-Umgebungsvariablen auf.
  • Setzen Sie die FN_REGISTRY-Umgebungsvariable mit der globalen Option --registry außer Kraft, wenn Sie einen Fn-Projekt-CLI-Befehl eingeben, der mit Oracle Cloud Infrastructure Registry interagiert.

Beim Bereitstellen einer Funktion werden eine ListTriggers-Meldung und ein 500-Fehler zurückgegeben

Wenn Sie eine Funktion bereitstellen, die Sie vorher mit einer früheren Version der Fn-Projekt-CLI erstellt haben, wird möglicherweise etwa folgende Meldung angezeigt:

Fn: [GET /triggers][500] ListTriggers default  &{Fields: Message:Internal server error}

Diese Meldung gibt an, dass die Datei "func.yaml" der Funktion mindestens eine HTTP-Triggerdefinition enthält. OCI Functions unterstützt derzeit keine HTTP-Trigger. Um die Funktion bereitzustellen, entfernen Sie den Abschnitt triggers: aus der Datei "func.yaml".

Um zu vermeiden, dass neue func.yaml-Dateien mit Triggerdefinitionen erstellt werden, befolgen Sie die Anweisungen unter Fn-Projekt-CLI installieren, um ein Upgrade der Fn-Projekt-CLI auf die neueste Version auszuführen.

Beim Bereitstellen einer Funktion wird die Meldung "Das Image ist nicht vorhanden, oder Sie haben keinen Zugriff darauf" zurückgegeben

Beim Bereitstellen einer Funktion mit einer Oracle Cloud Infrastructure-Compute-Instanz als OCI Functions-Entwicklungsumgebung wird möglicherweise eine ähnliche Meldung wie die folgende angezeigt:

Fn: Image phx.ocir.io/ansh81vru1zp/acme-repo/helloworld-func:0.0.2 does not exist or you do not have access to use it.

Diese Meldung gibt an, dass die Compute-Instanz keinen Zugriff auf Oracle Cloud Infrastructure Registry hat.

Prüfen Sie, ob eine Policy-Anweisung (ähnlich wie unten angegeben) im Root-Compartment des Mandanten vorhanden ist, damit eine dynamische Gruppe, die die OCID der Compute-Instanz enthält, auf Oracle Cloud Infrastructure Registry zugreifen kann:

 Allow dynamic-group <dynamic-group-name> to read repos in tenancy

Weitere Informationen zur Verwendung einer Oracle Cloud Infrastructure-Compute-Instanz als Entwicklungsumgebung finden Sie unter Verschiedene Optionen für Funktionsentwicklungsumgebungen.

Beim Deployment einer Funktion in OCI Functions wird die Meldung "Fn: Missing subnets annotation" zurückgegeben

Wenn Sie eine Funktion in OCI Functions bereitstellen, wird möglicherweise die folgende Meldung angezeigt:

$ fn deploy --app joes-helloworld-app

Deploying helloworld-func to app: joes-helloworld-app
.
.
.
Fn: Missing subnets annotation

Wenn die Meldung Fn: Missing subnets annotation angezeigt wird, bestätigen Sie, dass Sie den richtigen Anwendungsnamen eingegeben haben. Beispiel:

  • Die Anwendung ist möglicherweise nicht im aktuell im Fn-Projekt-CLI-Kontext angegebenen Compartment enthalten.
  • Die Anwendung war möglicherweise zuvor vorhanden, wurde jedoch später gelöscht.

Beim Deployment einer Funktion in OCI Functions wird die Meldung "Function's image architecture 'x86' is incompatible..." zurückgegeben

Wenn Sie eine Funktion in OCI Functions bereitstellen, wird möglicherweise eine Meldung wie die Folgende angezeigt:

$ fn deploy --app joes-helloworld-app

Deploying helloworld-func to app: joes-helloworld-app
.
.
.
Fn: Service error:InvalidParameter. Invalid Invalid image - Function's image architecture 'x86' is incompatible with the application's shape type 'GENERIC_X86_ARM'. http status code: 400. Opc request id:...

Diese Meldung gibt an, dass das Image der Funktion nicht die erforderlichen Abhängigkeiten (untergeordnete Bilder) für die Ausprägung der Anwendung enthält. Eine wahrscheinliche Ursache für die Meldung ist die Verwendung der Fn-Projekt-CLI-Version 0.6.24 (oder früher), um eine Funktion mit einem x86-Image bereitzustellen, um:

  • eine Anwendung mit einer Ausprägung mit mehreren Architekturen (wie Generic_X86_ARM)
  • eine Anwendung mit einer einzelnen Architekturausprägung, die nicht mit einem x86-Image kompatibel ist (wie Generic_ARM)

Wenn Sie ab Fn-Projekt-CLI-Version 0.6.25 mit dem Befehl fn deploy --app <app-name> eine Funktion erstellen und in OCI Functions bereitstellen, erstellt die Fn-Projekt-CLI das Docker-Image der Funktion mit den erforderlichen Abhängigkeiten für die Ausprägung der Anwendung. Wenn die Anwendung eine Ausprägung mit mehreren Architekturen aufweist (z.B. Generic_X86_ARM, die Standardanwendungsausprägung seit September 2023), erstellt die Fn-Projekt-CLI ein Image mit mehreren Architekturen für die Funktion. Das Image der Funktion und die Ausprägung der Anwendung sind immer kompatibel.

Die Fn-Projekt-CLI-Version 0.6.24 (und früher) erstellt jedoch immer Docker-Images mit den erforderlichen Abhängigkeiten für eine einzelne Architektur, die Architektur x86. Als einzelnes Architekturimage ist ein solches x86-Image nur mit Anwendungen kompatibel, die über die einzelne Architekturausprägung Generic_X86 verfügen. Das Abbild x86 ist nicht mit Anwendungen kompatibel, die Folgendes aufweisen:

  • eine Ausprägung mit mehreren Architekturen (wie Generic_X86_ARM, die Standardanwendungsausprägung seit September 2023)
  • eine einzelne Architekturausprägung, die nicht Generic_X86 ist (wie Generic_ARM)

Um die Funktion erfolgreich bereitzustellen, müssen Sie ein Image angeben, das mit der Ausprägung der Anwendung kompatibel ist. Führen Sie einen der folgenden Schritte aus:

  • Verwenden Sie die Fn-Projekt-CLI-Version 0.6.25 oder höher (empfohlen).
  • Stellen Sie die Funktion in einer anderen Anwendung mit einer Ausprägung bereit, die mit dem Image der Funktion kompatibel ist (erstellen Sie bei Bedarf eine neue Anwendung). Angenommen, Sie verwenden die Fn-Projekt-CLI-Version 0.6.24 oder früher, stellen Sie die Funktion immer in einer Anwendung mit einer Ausprägung Generic_X86 bereit.
  • Mit Docker können Sie ein Image erstellen, das mit der Architekturausprägung der Anwendung kompatibel ist.

Weitere Informationen finden Sie unter Compute-Architektur für die Ausführung von Funktionen angeben.

Wenn Sie eine Funktion in OCI Functions in Cloud Shell bereitstellen, wird die Meldung "OL8 Cloud Shell unterstützt keine Compilierungs- und Multi-Arch-Funktionen-Builds..." zurückgegeben

Wenn Sie eine Funktion in OCI Functions in der Cloud Shell-Entwicklungsumgebung bereitstellen, wird möglicherweise eine Meldung wie die Folgende angezeigt:

OL8 CloudShell does not support cross-compilation and multi-arch functions builds. Please ensure the architecture of your App matches the CloudShell architecture.

Diese Meldung gibt an, dass die Funktion auf einem Image mit mehreren Architekturen basiert, dass die Anwendung eine Ausprägung mit mehreren Architekturen aufweist oder dass die Cloud Shell-Session und die Anwendung eine andere Architektur aufweisen.

In der Cloud Shell-Entwicklungsumgebung unterstützt OCI Functions weder das Erstellen und Deployment von Funktionen auf Basis von Images mit mehreren Architekturen noch Anwendungen mit Ausprägungen mit mehreren Architekturen. Darüber hinaus muss die Architektur der Cloud Shell-Session mit der Architektur der Anwendung identisch sein.

Weitere Informationen:

Beim Bereitstellen einer Funktion wird ein "Ungültiges oder nicht unterstütztes Imagemanifest" zurückgegeben. Architektur kann nicht aus der Nachricht "OCIR-Manifest/Header..." abgerufen werden

Wenn Sie eine Funktion in OCI Functions bereitstellen, wird möglicherweise eine Meldung wie die Folgende angezeigt:

$ fn -v deploy --app acme-app

Fn: Service error:InvalidParameter. Invalid or unsupported image manifest. Unable to get architecture from the OCIR Manifest/Headers. http status code: 400.

Es gibt eine Reihe von möglichen Ursachen und Lösungen, wie in diesem Abschnitt beschrieben.

Mögliche Ursache: Falsche Docker-Version

Die von Ihnen verwendete Docker-Version wird möglicherweise nicht unterstützt.

Wenn Sie Docker zum Erstellen von Funktionsimages verwenden, müssen Sie eine unterstützte Version von Docker verwenden (zum Zeitpunkt des Schreibens, Version 17.10 oder höher).

Um die verwendete Docker-Version zu bestätigen, geben Sie Folgendes ein:

docker version

Wenn die Docker-Version nicht unterstützt wird, installieren Sie eine neuere Version. Weitere Informationen finden Sie unter Docker zur Verwendung mit OCI Functions installieren.

Mögliche Ursache: Manifest ist falsch formatiert oder es fehlen erforderliche Informationen

Das Imagemanifest ist möglicherweise falsch formatiert oder enthält nicht alle erforderlichen Informationen. Die Fehlermeldung enthält weitere Details.

Insbesondere das Imagemanifest:

  • Muss im gültigen JSON-Format sein.
  • Muss einen Imagedigest enthalten.
  • Sie müssen eine gültige Imagearchitektur angeben (amd64, arm64 oder beides).

Um das Imagemanifest zu prüfen, geben Sie Folgendes ein:

docker manifest inspect --verbose <image-path>

Beispiel:

docker manifest inspect --verbose phx.ocir.io/ansh81vru1zp/acme-repo/acme-func:0.0.3

Prüfen Sie, ob das Imagemanifest:

  • Ist im gültigen JSON-Format.
  • Enthält ein Feld digest.
  • Enthält ein Feld platform, das eine gültige Imagearchitektur angibt. Bei einem einzelnen Architekturimage muss im Feld platform entweder amd64 oder arm64 angegeben werden. Bei einem Image mit mehreren Architekturen muss im Feld platform sowohl amd64 als auch arm64 angegeben werden. Weitere Informationen finden Sie unter Compute-Architektur für die Ausführung von Funktionen angeben.

Wenn das Imagemanifest falsch formatiert ist oder erforderliche Informationen fehlen, aktualisieren Sie das Manifest, und erstellen Sie das Image neu.

Mögliche Ursache: Bild ist ungültig

Das aus dem Imagemanifest erstellte Image ist möglicherweise ungültig (z.B. weil im Imagemanifest erforderliche Informationen fehlen).

In dieser Situation müssen Sie das Bild wieder aufbauen. Wie Sie das Bild neu erstellen, hängt davon ab, ob Sie ein einzelnes Architekturbild oder ein Bild mit mehreren Architekturen neu erstellen, und von dem Tool, das Sie verwenden möchten.

Ein einzelnes Architekturimage wird neu erstellt:

Sie können einzelne Architekturimages auf unterschiedliche Weise neu erstellen, darunter:

  • Mit der Fn-Projekt-CLI (empfohlen):

    Geben Sie im Funktionsverzeichnis den folgenden Fn-Projekt-CLI-Befehl ein, um die Funktion und ihre Abhängigkeiten als ein einzelnes Architekturimage zu erstellen, das Image in die angegebene Docker-Registry zu übertragen und die Funktion in OCI Functions bereitzustellen:

    fn deploy --app <your-function-app>

    Dabei ist <app-name> der Name der Anwendung mit der einzelnen Architekturform, in der Sie die Funktion erstellen möchten.

    Weitere Informationen finden Sie unter Ein einzelnes Architekturimage mit der Fn-Projekt-CLI erstellen.

  • Mit dem Docker-Build-Befehl oder dem Docker-Buildx-Plug-in:

    Um ein Image für dieselbe Architektur wie die aktuelle Plattform zu erstellen, verwenden Sie den Befehl docker build. Beispiel: Um ein Image zu erstellen, das in einer Anwendung mit amd64 als einzelne Architekturausprägung bereitgestellt werden soll, geben Sie Folgendes ein:

    docker build --platform linux/amd64 -t <image-path> .

    Um ein Image für eine andere Architektur als die aktuelle Plattform zu erstellen, verwenden Sie den Befehl docker buildx build. Beispiel: Um ein Image zu erstellen, das in einer Anwendung mit amd64 als einzelne Architekturausprägung bereitgestellt werden soll, geben Sie Folgendes ein:

    docker buildx build --platform linux/amd64 -t <image-path> .

    Stellen Sie sicher, dass Sie amd64 oder arm64 angeben und nicht beides. Achten Sie auch darauf, keine andere Architektur anzugeben.

    Nachdem Sie das Image erstellt haben, geben Sie den folgenden Befehl ein, um das Image per Push an die Docker-Registry zu übertragen:

    docker push <image-path>

    Weitere Informationen finden Sie unter Mit dem Docker-Build-Befehl ein einzelnes Architekturimage erstellen.

Image mit mehreren Architekturen neu erstellen:

Sie können Bilder mit mehreren Architekturen auf unterschiedliche Weise neu erstellen, darunter:

  • Mit der Fn-Projekt-CLI (empfohlen):

    Geben Sie im Verzeichnis der Funktion den folgenden Fn-Projekt-CLI-Befehl ein, um die Funktion und ihre Abhängigkeiten als Image mit mehreren Architekturen zu erstellen, das Image in die angegebene Docker-Registry zu übertragen und in OCI Functions bereitzustellen:

    fn deploy --app <your-function-app>

    Dabei ist <app-name> der Name der Anwendung mit der Ausprägung mit mehreren Architekturen, in der Sie die Funktion erstellen möchten.

    Weitere Informationen finden Sie unter Fn-Projekt-CLI zum Erstellen eines Images mit mehreren Architekturen verwenden (empfohlen).

  • Verwenden des Docker-Buildx-Plug-ins:

    Um ein Image mit mehreren Architekturen zu erstellen, auf dem eine Funktion für das Deployment in einer Anwendung mit einer Ausprägung mit mehreren Architekturen basieren soll, geben Sie den folgenden docker buildx build-Befehl ein:

    docker buildx build --platform linux/amd64,linux/arm64 -t <your-registry>/<your-image>:<tag> --push .

    Stellen Sie sicher, dass Sie sowohl amd64 als auch arm64 angeben, und geben Sie keine andere Architektur an.

    Nachdem Sie das Image erstellt haben, geben Sie den folgenden Befehl ein, um das Image per Push an die Docker-Registry zu übertragen:

    docker push <image-path>

    Weitere Informationen finden Sie unter Docker-Buildx-Plug-in zum Erstellen eines Images mit mehreren Architekturen verwenden.