我尝试了AWS CDK文档中的示例代码,但它没有按预期工作。
CDK版本2.62.2在Typescript.Everywhere(这是站在那里是一个声明错误。The argument of type "undefined" cannot be assigned to the parameter of type "Construct".
代码:
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as ecs from 'aws-cdk-lib/aws-ecs';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
declare const vpc: ec2.Vpc;
// Create an ECS cluster
const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
// Add capacity to it
cluster.addCapacity('DefaultAutoScalingGroupCapacity', {
instanceType: new ec2.InstanceType("t2.xlarge"),
desiredCapacity: 3,
});
const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef');
taskDefinition.addContainer('DefaultContainer', {
image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample"),
memoryLimitMiB: 512,
});
// Instantiate an Amazon ECS Service
const ecsService = new ecs.Ec2Service(this, 'Service', {
cluster,
taskDefinition,
});
2条答案
按热度按时间wz3gfoph1#
TL;DR错误提示
this
关键字未定义。请将示例化代码移到构造子类构造函数中。构造的第一个参数是它的作用域或父构造。您使用
this
关键字作为作用域是正确的,但当前编写的代码是undefined
。定义构造的idomatic CDK方法在构造子类的构造函数内部,通常是Stack。在Stack的构造函数内部,this
将引用Stack示例。vpc
变量在你的代码中也是undefined
。按照惯例,CDK文档使用Typescript变量声明语句来缩短示例。严格地说,这不会导致错误,但可能不是你所期望的行为。如果你不想使用默认的Vpc,当vpc
属性是undefined
时,将为你创建Vpc。你需要示例化一个Vpc,而不仅仅是声明vpc
变量。aws-samples/aws-cdk-examples repo有几个完整的EC2工作ECS示例。
zvokhttg2#
在你试图创建一个新的ecs.cluster的地方,你传递了一个"未定义"的VPC,因为你只声明了常量而没有设置任何值。
要创建一个新的VPC,您应该修改行:
变成这样:
有关此问题的文档可在https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.Vpc.html中找到