Problemi relativi alla distribuzione di applicazioni e funzioni
Scopri come risolvere i problemi durante la distribuzione di applicazioni e funzioni con OCI Functions.
Questi problemi possono verificarsi durante la distribuzione di applicazioni e funzioni con OCI Functions.
La distribuzione di un'applicazione restituisce un messaggio "non autorizzato: nome utente o password errati"
Quando si distribuisce un'applicazione, è possibile che venga visualizzato un messaggio simile al seguente:
$ 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
Il messaggio indica un tentativo non necessario e non riuscito di eseguire il login a Docker Hub. Per risolvere questa situazione, eseguire il logout da Docker utilizzando il seguente comando:
docker logout
Dopo aver eseguito il logout da Docker, rieseguire il comando per distribuire l'applicazione.
La distribuzione di una funzione restituisce un messaggio "error running docker push, are you logg to docker?"
Se durante la distribuzione di una funzione viene visualizzato un messaggio simile al seguente, verificare che la variabile di ambiente FN_REGISTRY nell'ambiente di sviluppo non sia impostata sul nome utente Docker:
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.
Se hai utilizzato la piattaforma Fn Project open source, potresti aver seguito le istruzioni nella documentazione di Fn Project per impostare la variabile di ambiente FN_REGISTRY sul tuo nome utente Docker per abilitare l'interazione con il registro Docker ufficiale (docker.io).
La variabile di ambiente FN_REGISTRY sostituisce il valore dell'opzione di registro nel contesto CLI di Fn Project.
Per utilizzare l'interfaccia CLI di Fn Project con OCI Functions, effettuare una delle operazioni riportate di seguito.
- Annullare l'impostazione della variabile di ambiente FN_REGISTRY.
- Eseguire l'override della variabile di ambiente FN_REGISTRY utilizzando l'opzione globale
--registry
ogni volta che si immette un comando CLI Fn Project che interagisce con Oracle Cloud Infrastructure Registry.
La distribuzione di una funzione restituisce un messaggio ListTriggers e un errore 500
Quando si distribuisce una funzione creata in precedenza utilizzando una versione precedente dell'interfaccia CLI di Fn Project, è possibile che venga visualizzato un messaggio simile al seguente:
Fn: [GET /triggers][500] ListTriggers default &{Fields: Message:Internal server error}
Questo messaggio indica che il file func.yaml della funzione contiene una o più definizioni di trigger HTTP. OCI Functions attualmente non supporta i trigger HTTP. Per distribuire la funzione, rimuovere la sezione triggers:
dal file func.yaml.
Per evitare di creare nuovi file func.yaml contenenti definizioni di trigger, seguire le istruzioni in Installazione dell'interfaccia CLI di Fn Project per aggiornare l'interfaccia CLI di Fn Project alla versione più recente.
La distribuzione di una funzione restituisce un messaggio "Immagine inesistente o non si dispone dell'accesso per utilizzarla"
Quando si distribuisce una funzione utilizzando un'istanza di computazione Oracle Cloud Infrastructure come ambiente di sviluppo OCI Functions, potrebbe essere visualizzato un messaggio simile al seguente:
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.
Questo messaggio indica che l'istanza di computazione non dispone dell'accesso a Oracle Cloud Infrastructure Registry.
Verificare che nel compartimento radice della tenancy esista un'istruzione dei criteri (simile a quella riportata di seguito) per consentire a un gruppo dinamico che includa l'OCID dell'istanza di computazione di accedere a Oracle Cloud Infrastructure Registry:
Allow dynamic-group <dynamic-group-name> to read repos in tenancy
Per ulteriori informazioni sull'uso di un'istanza di computazione Oracle Cloud Infrastructure come ambiente di sviluppo, vedere Opzioni diverse per gli ambienti di sviluppo delle funzioni.
La distribuzione di una funzione in OCI Functions restituisce il messaggio "Fn: Annotazione subnet mancante"
Quando si distribuisce una funzione in OCI Functions, potrebbe essere visualizzato il seguente messaggio:
$ fn deploy --app joes-helloworld-app
Deploying helloworld-func to app: joes-helloworld-app
.
.
.
Fn: Missing subnets annotation
Se viene visualizzato il messaggio Fn: Missing subnets annotation
, confermare di aver immesso il nome corretto dell'applicazione. Ad esempio:
- l'applicazione potrebbe non trovarsi nel compartimento attualmente specificato dal contesto CLI di Fn Project
- l'applicazione potrebbe essere esistita in precedenza, ma è stata successivamente eliminata
La distribuzione di una funzione in OCI Functions restituisce il messaggio "L'architettura immagine della funzione 'x86' è incompatibile..."
Quando si distribuisce una funzione in OCI Functions, è possibile che venga visualizzato un messaggio simile al seguente:
$ 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:...
Questo messaggio indica che l'immagine della funzione non include le dipendenze (immagini figlio) necessarie per la forma dell'applicazione. Una probabile causa del messaggio è l'uso di Fn Project CLI versione 0.6.24 (o precedente) per distribuire una funzione con un'immagine x86 in:
- un'applicazione con una forma multiarchitettura (ad esempio Generic_X86_ARM)
- un'applicazione con una singola forma di architettura non compatibile con un'immagine x86, ad esempio Generic_ARM;
A partire dalla versione 0.6.25 dell'interfaccia CLI di Fn Project, quando si utilizza il comando fn deploy --app <app-name>
per creare una funzione e distribuirla in OCI Functions, l'interfaccia CLI di Fn Project crea l'immagine Docker della funzione con le dipendenze necessarie per la forma dell'applicazione. Se l'applicazione dispone di una forma multi-architettura (ad esempio Generic_X86_ARM, la forma predefinita dell'applicazione da settembre 2023), l'interfaccia CLI di Fn Project crea un'immagine multi-architettura per la funzione. L'immagine della funzione e la forma dell'applicazione sono sempre compatibili.
Tuttavia, Fn Project CLI versione 0.6.24 (e precedente) crea sempre immagini Docker con le dipendenze necessarie per una singola architettura, l'architettura x86. Come singola immagine di architettura, un'immagine x86 di questo tipo è compatibile solo con le applicazioni con la forma di architettura singola Generic_X86. L'immagine x86 non è compatibile con le applicazioni che dispongono dei seguenti elementi:
- una forma a più architetture (ad esempio, Generic_X86_ARM, la forma predefinita dell'applicazione da settembre 2023)
- una singola forma di architettura diversa da Generic_X86 (ad esempio Generic_ARM)
Per distribuire correttamente la funzione, è necessario fornire un'immagine compatibile con la forma dell'applicazione. Procedere in uno dei seguenti modi:
- Utilizzare Fn Project CLI versione 0.6.25 o successiva (consigliato).
- Distribuire la funzione in un'altra applicazione con una forma compatibile con l'immagine della funzione (se necessario, creare una nuova applicazione). Supponendo che si stia utilizzando Fn Project CLI versione 0.6.24 o precedente, distribuire sempre la funzione in un'applicazione con una forma Generic_X86.
- Utilizza Docker per creare un'immagine compatibile con la forma dell'architettura dell'applicazione.
Per ulteriori informazioni, vedere Specifica dell'architettura di calcolo su cui eseguire le funzioni.
La distribuzione di una funzione in OCI Functions in Cloud Shell restituisce il messaggio "OL8 Cloud Shell non supporta le build delle funzioni di compilazione incrociata e a più ricerche..."
Quando si distribuisce una funzione in OCI Functions nell'ambiente di sviluppo Cloud Shell, potrebbe essere visualizzato un messaggio simile al seguente:
OL8 CloudShell does not support cross-compilation and multi-arch functions builds. Please ensure the architecture of your App matches the CloudShell architecture.
Questo messaggio indica che la funzione si basa su un'immagine con più architetture, che l'applicazione ha una forma con più architetture o che la sessione Cloud Shell e l'applicazione hanno un'architettura diversa.
Nell'ambiente di sviluppo Cloud Shell, OCI Functions non supporta la creazione e la distribuzione di funzioni basate su immagini multi-architettura né di applicazioni con forme multi-architettura. Inoltre, l'architettura della sessione Cloud Shell deve essere uguale all'architettura dell'applicazione.
Ulteriori informazioni
- Per informazioni sulla creazione di una funzione basata su una singola immagine di architettura, in un'applicazione con una forma di architettura singola compatibile, vedere Specifica dell'architettura di calcolo su cui eseguire le funzioni.
- Informazioni sulla selezione dell'architettura della sessione Cloud Shell, vedere Architettura Cloud Shell.
La distribuzione di una funzione restituisce un file manifesto dell'immagine non valido o non supportato. Impossibile ottenere l'architettura dal messaggio Manifest/Headers OCIR..."
Quando si distribuisce una funzione in OCI Functions, è possibile che venga visualizzato un messaggio simile al seguente:
$ 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.
Esistono una serie di possibili cause e soluzioni, come descritto in questa sezione.
Possibile causa: versione Docker errata
La versione Docker in uso potrebbe non essere supportata.
Se si utilizza Docker per creare immagini delle funzioni, è necessario utilizzare una versione supportata di Docker (al momento della scrittura, versione 17.10 o successiva).
Per confermare la versione di Docker in uso, immettere:
docker version
Se la versione di Docker non è supportata, installare una versione più recente. Per ulteriori informazioni, vedere Installazione di Docker per l'uso con le funzioni OCI.
Causa possibile: il file manifesto è formattato in modo errato o non contiene informazioni obbligatorie
Il file manifesto dell'immagine può avere un formato non corretto o non contenere tutte le informazioni richieste. Il messaggio di errore fornisce ulteriori dettagli.
In particolare, il manifesto dell'immagine:
- Il formato deve essere JSON valido.
- È necessario includere un digest di immagine.
- È necessario specificare un'architettura immagine valida (
amd64
,arm64
o entrambi).
Per esaminare il file manifesto dell'immagine, immettere:
docker manifest inspect --verbose <image-path>
Ad esempio:
docker manifest inspect --verbose phx.ocir.io/ansh81vru1zp/acme-repo/acme-func:0.0.3
Verificare che nel file manifesto dell'immagine:
- Formato JSON valido.
- Include un campo
digest
. - Include un campo
platform
che specifica un'architettura immagine valida. Nel caso di una singola immagine di architettura, il campoplatform
deve specificareamd64
oarm64
. Nel caso di un'immagine con più architetture, il campoplatform
deve specificare siaamd64
chearm64
. Per ulteriori informazioni, vedere Specifica dell'architettura di calcolo su cui eseguire le funzioni.
Se il file manifesto dell'immagine non è formattato correttamente o mancano le informazioni richieste, aggiornare il file manifesto e ricreare l'immagine.
Possibile causa: immagine non valida
L'immagine creata dal file manifesto dell'immagine potrebbe non essere valida, ad esempio perché nel file manifesto dell'immagine mancano le informazioni richieste.
In questa situazione, devi ricostruire l'immagine. La ricostruzione dell'immagine dipende dal fatto che si stia ricostruendo una singola immagine di architettura o un'immagine multi-architettura e dallo strumento che si desidera utilizzare.
Ricostruire un'unica immagine architettonica:
È possibile ricostruire singole immagini di architettura in diversi modi, tra cui:
- Utilizzo dell'interfaccia CLI Fn Project (consigliata):
Nella directory della funzione, immettere il seguente comando CLI di Fn Project per creare la funzione e le relative dipendenze come immagine a architettura singola, eseguire il push dell'immagine nel registro Docker specificato e distribuire la funzione in OCI Functions:
fn deploy --app <your-function-app>
dove
<app-name>
è il nome dell'applicazione con la singola forma di architettura, in cui si desidera creare la funzione.Per ulteriori informazioni, vedere Utilizzo dell'interfaccia CLI di Fn Project per creare un'unica immagine di architettura.
- Utilizzando il comando di build Docker o il plugin buildx Docker:
Per creare un'immagine per la stessa architettura della piattaforma corrente, utilizzare il comando
docker build
. Ad esempio, per creare un'immagine da distribuire in un'applicazione conamd64
come forma di architettura singola, immettere:docker build --platform linux/amd64 -t <image-path> .
Per creare un'immagine per un'architettura diversa dalla piattaforma corrente, utilizzare il comando
docker buildx build
. Ad esempio, per creare un'immagine da distribuire in un'applicazione conamd64
come forma di architettura singola, immettere:docker buildx build --platform linux/amd64 -t <image-path> .
Assicurarsi di specificare
amd64
oarm64
e non entrambi. Inoltre, assicurati di non specificare altre architetture.Dopo aver creato l'immagine, immettere il comando seguente per eseguire il push dell'immagine nel registro Docker:
docker push <image-path>
Per ulteriori informazioni, vedere Utilizzo del comando di creazione Docker per creare un'unica immagine dell'architettura.
Ricostruire un'immagine multi-architettura:
È possibile ricostruire immagini multi-architettura in diversi modi, tra cui:
- Utilizzo dell'interfaccia CLI Fn Project (consigliata):
Nella directory della funzione, immettere il seguente comando CLI di Fn Project per creare la funzione e le relative dipendenze come immagine multi-architettura, eseguire il PUSH dell'immagine nel registro Docker specificato e distribuire la funzione nelle funzioni OCI:
fn deploy --app <your-function-app>
dove
<app-name>
è il nome dell'applicazione con la forma a più architetture, in cui si desidera creare la funzione.Per ulteriori informazioni, vedere Utilizzo dell'interfaccia CLI di Fn Project per creare un'immagine multiarchitettura (consigliato).
- Utilizzando il plugin buildx Docker:
Per creare un'immagine a più architetture su cui basare una funzione da distribuire a un'applicazione con una forma a più architetture, immettere il comando
docker buildx build
seguente:docker buildx build --platform linux/amd64,linux/arm64 -t <your-registry>/<your-image>:<tag> --push .
Assicurarsi di specificare sia
amd64
chearm64
e di non specificare altre architetture.Dopo aver creato l'immagine, immettere il comando seguente per eseguire il push dell'immagine nel registro Docker:
docker push <image-path>
Per ulteriori informazioni, vedere Utilizzo del plugin buildx Docker per creare un'immagine multiarchitettura.