New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Perché ricevo gli errori "Execution failed due to configuration" da API Gateway dopo aver utilizzato un modello CloudFormation o una definizione OpenAPI per creare una REST API con un'integrazione Lambda?
Ho usato un modello AWS CloudFormation (o definizione OpenAPI) per creare una REST API di Gateway Amazon API con integrazione con AWS Lambda. Quando provo a richiamare la mia funzione Lambda utilizzando il metodo API, ricevo il seguente messaggio di errore e un codice di stato 500: "Execution failed due to configuration error." Qual è la causa dell'errore e come posso risolvere il problema?
Breve descrizione
Se disponi di una REST API di API Gateway con integrazione Lambda, l'API deve richiamare la funzione Lambda di backend utilizzando il metodo HTTP POST. Se utilizzi un altro metodo HTTP (ad esempio, ANY o GET) per la richiesta di integrazione del backend, la chiamata dà esito negativo. API Gateway restituisce quindi un messaggio di errore simile al seguente esempio nei log Amazon CloudWatch:
Mon Oct 14 14:08:49 UTC 2019 : Received response. Status: 403, Integration latency: 3 ms Mon Oct 14 14:08:49 UTC 2019 : Endpoint response headers: {Date=Mon, 14 Oct 2019 14:08:49 GMT, Content-Length=130, Connection=keep-alive, x-amzn-RequestId=abc1d2ef-34ab-56c7-de8f-90123a456789} Mon Oct 14 14:08:49 UTC 2019 : Endpoint response body before transformations: <AccessDeniedException> <Message>Unable to determine service/operation name to be authorized</Message> </AccessDeniedException> Mon Oct 14 14:08:49 UTC 2019 : Lambda invocation failed with status: 403. Lambda request id: abc1d2ef-34ab-56c7-de8f-90123a456789 Mon Oct 14 14:08:49 UTC 2019 : Execution failed due to configuration error: Mon Oct 14 14:08:49 UTC 2019 : Method completed with status: 500
**Nota:**puoi comunque configurare qualsiasi metodo HTTP per il frontend della tua REST API.
È necessario specificare il metodo POST per la richiesta di integrazione del backend se si crea una REST API con integrazione Lambda utilizzando uno dei seguenti:
- Modelli CloudFormation
- Definizione OpenAPI
- Interfaccia della linea di comando AWS (CLI AWS)
- Software Development Kit (SDK)
- Cloud Development Kit (CDK)
**Nota:**se si utilizza la console API Gateway per configurare un'integrazione Lambda, la richiesta di integrazione del backend viene impostata automaticamente su POST.
Risoluzione
La best practice di CloudFormation consiste nel gestire tutte le risorse dello stack tramite AWS CloudFormation e non apportare modifiche alle risorse dello stack all'esterno di CloudFormation.
Il metodo utilizzato per modificare il metodo HTTP in POST per la richiesta di integrazione del backend dipende dalla definizione del modello originale. Ad esempio, il processo è diverso per aggiornare un API Gateway distribuito utilizzando CloudFormation rispetto a un API Gateway creato con OpenAPI o AWS CLI.
Per modificare il metodo di richiesta dell'integrazione in POST per i gateway API creati utilizzando CloudFormation
Per istruzioni, consulta Modifica di un modello di stack.
A. Se il tuo metodo è stato creato definendo la risorsa AWS::ApiGateway::Method nel tuo modello CloudFormation, aggiorna la proprietà HttpMethod su POST. Per istruzioni, consulta la sezione Esempi della documentazione di AWS::ApiGateway::Method.
B. Se il tuo metodo includeva una definizione OpenAPI come valore della proprietà Body della risorsa AWS::ApiGateway::RestAPI: Imposta il valore della proprietà httpMethod nel tuo file di definizione API su POST. Per istruzioni, consulta x-amazon-apigateway-integration object e il modello Swagger di esempio nel repository GitHub aws-samples.
Aggiorna la tua API eseguendo gli aggiornamenti dello stack di AWS CloudFormation con il modello modificato:
"x-amazon-apigateway-integration" : { "type" : "aws", "httpMethod" : "POST"
Per modificare il metodo HTTP dell'integrazione backend in POST per gateway API creati all'esterno di CloudFormation
Metodo di aggiornamento tramite la console
- Nella console API Gateway, scegli la tua API.
- Nel riquadro Risorse, scegli il metodo HTTP con l'integrazione Lambda.
- Nel riquadro Esecuzione del metodo, scegli Richiesta di integrazione.
- Nel riquadro Richiesta di integrazione, per il metodo HTTP, modifica il nome della funzione Lambda facendo clic sull'icona a forma di matita a destra del nome della funzione, quindi fai clic sull'icona del segno di spunta che appare a destra.
- Quando viene richiesto di aggiungere l'autorizzazione alla funzione Lambda, scegli OK.
- Distribuisci l’API.
- (Facoltativo) Prova il metodo HTTP che dispone dell'integrazione con Lambda.
Nota: la console aggiunge una nuova istruzione alla policy delle risorse della funzione Lambda ogni volta che si seleziona OK nel prompt Aggiungi autorizzazione alla funzione Lambda. Prendi nota della dimensione della policy delle risorse della tua funzione per assicurarti che non raggiunga il relativo limite di dimensione. Consulta: Configurazione, distribuzione ed esecuzione della funzione.
Per ulteriori informazioni, consulta Guida introduttiva ad API Gateway e Configurazione di una richiesta di integrazione API tramite la console API Gateway.
Aggiorna il metodo utilizzando AWS CLI
- Esegui il metodo put-integration per aggiornare il metodo http di integrazione a POST:
aws apigateway put-integration \ --rest-api-id 1234123412 \ --resource-id a1b2c3 \ --http-method ANY \ --type AWS \ --integration-http-method POST \ --uri 'arn:aws:apigateway:us-west-2:lambda:path//2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:function_name/invocations
- Distribuisci le risorse configurate per un'API in una fase esistente:
aws apigateway create-deployment \ --rest-api-id 1234123412 \ --stage-name dev \ --description 'Deployment to an existing dev stage'
Nota: se ricevi errori durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.
Aggiorna il metodo utilizzando l'importazione delle definizioni OpenAPI
- Imposta il valore della proprietà httpMethod nel tuo file di definizione API su POST. Per istruzioni, consulta x-amazon-apigateway-integration object e il modello Swagger di esempio nel repository GitHub aws-samples.
- Aggiorna la tua API importando il file di definizione dell'API modificato in API Gateway. Consulta Importazione di un file OpenAPI per aggiornare una definizione API esistente.
Informazioni correlate
AWS::ApiGateway::Method Integration
Come posso risolvere gli errori "Invalid mapping expression specified" da API Gateway?

Contenuto pertinente
- AWS UFFICIALEAggiornata 3 mesi fa
- AWS UFFICIALEAggiornata 4 mesi fa
- AWS UFFICIALEAggiornata 3 anni fa