繁体   English   中英

“this”类型的参数不可分配给 AWS CDK 中“Construct”类型的参数

[英]Argument of type 'this' is not assignable to parameter of type 'Construct' in AWS CDK

我在使用 CDK 时遇到问题,因为this属性出错并说我无法将“this”分配给构造类型的参数。 这发生在const s3ListLambdaRole部分开始,并使之后的每个新变量声明也因同样的事情而出错。

import * as sns from '@aws-cdk/aws-sns';
import * as subs from '@aws-cdk/aws-sns-subscriptions';
import * as sqs from '@aws-cdk/aws-sqs';
import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';
import * as lambda from '@aws-cdk/aws-lambda';
import * as path from 'path';
import { Bucket } from '@aws-cdk/aws-s3';
import * as iam from'@aws-cdk/aws-iam';


export class SecurityBaselineDevStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const testSecurityqueue = new sqs.Queue(this, 'testSecurityqueue', {
      visibilityTimeout: cdk.Duration.seconds(300)
    });

    const testSecuritytopic = new sns.Topic(this, 'testSecuritytopic');

      testSecuritytopic.addSubscription(new subs.SqsSubscription(testSecurityqueue));
    //Creating lambda role below
    const s3ListLambdaRole = new iam.Role(this, 's3ListLambdaRole', {
      assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
    });

    s3ListLambdaRole.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AWSLambdaFullAccess')) //creates LambdaFullAccess Role

    //Adding specific permissions to role now

    s3ListLambdaRole.addToPolicy(new iam.PolicyStatement({
      resources: ['*'], //adds full access to lamda
      actions: ['s3']
    }));

    const s3ListLambda = new lambda.Function (this, 's3ListLambda', {
      runtime: lambda.Runtime.PYTHON_3_6,
      handler: 'listS3.handler',
      role:s3ListLambdaRole,
      code: lambda.Code.fromAsset(path.join(__dirname, '../lambda'))
    });

    const testSecurityBucket = new s3.Bucket(this, 'testSecurityBucket');






    }

  }

先感谢您!

当 CDK 依赖项的版本不同时会发生这种情况。确保 CDK 依赖项具有相同的版本。

  • 删除 node_modules 文件夹<\/li>
  • 删除 package-lock.json<\/li>
  • 确保 package.json 中的所有依赖项都使用相同的版本。<\/li>
  • 在依赖项之前删除胡萝卜 ^ 符号<\/li>
  • npm 安装<\/li><\/ul>"

只是为了继续 Yogeshwar 的回答(这非常有帮助)......

虽然确保所使用的版本是一致的是一个很好的第一步,但了解特定版本的来源以及更深入的原因对于我来说是解决这个问题的关键。

我正在使用 CDK v2,它只需要您拉入一个模块 (aws-cdk-lib),但我仍然看到与构造库相关的问题。 另外两条有用的信息是运行npm why constructs来查看不同版本的包是从哪里拉进来的。 这将我带到了我创建的另一个模块,该模块要求"constructs": "^10.0.0" ,但得到的是 10.1.x...

这促使我对semver有了更深入的了解,并发现 ^, 将引入 10.x 系列版本中的任何内容,从而引入不兼容的 package(另一个答案中的“删除 ^”步骤)。

这导致我更新了我指定依赖项的方式,并且我最终能够解决这个问题。

问题在于 @aws-cdk/lambda 依赖项与 @aws-cdk/sqs 和 @aws-cdk/sns 依赖项的版本不同。

更新您的 CDK 库。 这通常是由于您的 CDK 库具有不同版本而引起的。 npm 更新 -g aws-cdk

如果有人目前遇到这个问题,就像我所做的那样,这就是导致我来到这里的原因,我为解决这个问题所做的事情是使用 cdk 库并从中导入我需要的东西。

import {Stack, StackProps, App, aws_s3 as s3, aws_iam as iam } from 'aws-cdk-lib';
import { BucketEncryption } from 'aws-cdk-lib/aws-s3';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM