J'essaie d'appeler une fonction lambda dans une pile "exemple d'application" et cela me donne une erreur parce que j'essaie de lui passer un paramètre de "ceci".
Voici ma fonction lambda
export async function handler(event) {
console.log("request:", JSON.stringify(event, undefined, 2));
return {
statusCode: 200,
headers: { "Content-Type": "text/plain" },
body: `Hello, CDK! You've hit ${event.path}\n`
};
};
Voici l'application qui appelle cette fonction
//import sns = require('@aws-cdk/aws-sns');
//import subs = require('@aws-cdk/aws-sns-subscriptions');
//import sqs = require('@aws-cdk/aws-sqs');
import cdk = require('@aws-cdk/core');
import lambda = require('@aws-cdk/aws-lambda');
//Exports class from other file much like a function
export class CdkWorkshopStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Describes an AWSLambda Resource
const hello = new lambda.Function (this, 'HelloHandler', {
runtime: lambda.Runtime.NODEJS_8_10, //execution environment
code: lambda.Code.asset('lambda'), // code loaded from the "lambda" directory
handler: 'hello.handler' // file is "hello", function is "handler"
});
}
}
L'erreur que j'obtiens est:
lib/cdk-workshop-stack.ts:31:39 - error TS2345: Argument of type 'this' is not assignable to parameter of type 'Construct'.
Type 'CdkWorkshopStack' is not assignable to type 'Construct'.
Types of property 'node' are incompatible.
Type 'import("/Users/aroe/cdk-workshop/node_modules/@aws-cdk/core/lib/construct").ConstructNode' is not assignable to type 'import("/Users/aroe/cdk-workshop/node_modules/@aws-cdk/aws-lambda/node_modules/@aws-cdk/core/lib/construct").ConstructNode'.
Types have separate declarations of a private property 'Host'.
31 const hello = new lambda.Function(this, 'HelloHandler', {
~~~~
[1:24:08 PM] Found 1 error. Watching for file changes.
Et enfin j'utilise Node version v13.3.0
La définition de la construction me semble juste. Cette erreur peut se produire si les différents modules cdk ne sont pas tous de la même version; voir L'argument de type 'this' n'est pas assignable au paramètre de type 'Construct' pour un exemple de cela. Essayez d'exécuter npm update
; voir si cela résout le problème.
Cela a été résolu en ignorant simplement l'erreur "this" et en exécutant quand même le lambda. Je ne pense pas que cela aurait fonctionné s'il s'agissait d'un véritable programme node/JS. Cependant, lorsque vous utilisez TypeScript natif de CDK, cela vous donne beaucoup.
J'ai eu la même erreur car la version installée pour @aws-cdk/aws-lambda
et @aws-cdk/aws-sns-subscriptions
était différent,
tandis que aws-sns-subscriptions
a une dépendance sur aws-lambda
de la même version.
lorsque j'ai rétrogradé @aws-cdk/aws-lambda
version l'erreur a disparu!
vous pouvez également mettre à jour tous les aws-cdk
packages pour avoir la même version.