当前位置: 首页 > 知识库问答 >
问题:

CFT到CDK迁移-如何从CDK代码引用CFT创建的对象

甘祺
2023-03-14

我阅读了关于如何将云形成模板(CFT)导入CDK代码的描述。

这很有趣,但在CDK代码中似乎没有使用CFT创建的任何对象的方法。因此,例如,如果您在CFT中定义了一个apigateway或appsync实例,并且希望使用非常好的机制在CDK中创建Lambda函数,那么似乎没有办法将Lambda函数附加到apigateway或appsync实例。

这意味着如果无法从CDK引用CFT对象,那么从CFT迁移到CDK是一个完整的叉车升级。不过,这听起来并不正确,这将是收养的一个重大障碍。

如何在CDK代码中引用CFT创建的对象?下面是四个可能的示例,其中任何一个的解决方案都应该能够通过显示要使用的代码模式来回答问题:

  1. CDK创建的Lambda函数使用在CFT中创建的DynamoDB表
  2. CDK创建的Lambda函数连接到在CFT中创建的API网关
  3. CDK创建的Lambda函数连接到CFT中创建的appsync解析器
  4. 或者CDK代码使用CFT对象的任何其他示例

我注意到,文档告诉您如何获取ARN,但没有告诉您如何使用CDK代码中的ARN。

共有2个答案

丁雅懿
2023-03-14

某些API明确支持引用现有或要创建的实例。有些则不然。因此,不能全部支持所请求的用例。下面是列表的状态和当前的支持,后面是一个完整的示例。唉,最简单的东西可以工作,而最复杂的构造(如ApiGateway和AppSync)则不行。这意味着叉车升级。

注意:AWS可能会修复此问题,请参阅以获取更新

  1. CDK创建的Lambda函数使用在CFT-Works中创建的DynamoDB表。见下面的例子

示例DynamoDB实例在CFT中,添加一个使用该表的lambda函数

const existingTemplate = new cdk.CfnInclude(this, "ExistingInfrastructure", {
  template: yamlParse(fs.readFileSync("aws-stack.yaml").toString())
});
const ddbArn = cdk.Fn.getAtt("DynamoDBUserTable", "Arn");   // DynamoDBUserTable is a named element in aws-stack.yaml of type DynamoDB::Table
const userTable = dynamodb.Table.fromTableArn(this, 'importedTable', ddbArn.toString());
const handler = new lambda.Function(this, "UserGetHandler", {
  runtime: lambda.Runtime.NODEJS_10_X, // So we can use async in user-get.js
  code: lambda.Code.asset("resources"),
  handler: "user-get.main",
});

userTable.grantReadWriteData(handler);
双恩
2023-03-14

您引用的博客系列的第二部分给出了两个示例,一个用于VPC,另一个用于ALB。

如何参考现有资源?

大多数时候,有必要引用已经在AWS帐户中创建的现有资源。通过另一个云形成堆栈或另一个CDK应用程序。

为此,许多CDK构造都支持fromXXX()方法。

示例VPC

const vpc = Vpc.fromLookup(this, 'MyExistingVPC', { isDefault: true });

例ALB

const existingAlb = elb.ApplicationLoadBalancer.fromApplicationLoadBalancerAttributes(this, "ImportedALB", {
  loadBalancerArn: "arn:aws:elasticloadbalancing:eu-west-1:123456789012...",
  securityGroupId: "MyAlbSecurityGroupA12345AB"
});

然后,可以将现有资源引用用作CDK代码中的对象。下面是一个使用VPC的示例。

const fn = new lambda.Function(this, 'MyFunction', {
  runtime: lambda.Runtime.NODEJS_10_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
  vpc: vpc
});
 类似资料:
  • 我是AWS世界的新手。我正在做一个项目,建立一个服务器少的应用程序,作为其中的一部分,我已经创建了4 lambda,工作正常。 接下来,我尝试使用CDK创建一个部署管线;下面是我想做的。 > 从同一个图像创建4个不同的lambda,只需覆盖docker图像中的CMD,并提及lambda处理程序 我在本地安装了CDK,并能够创建堆栈,一切正常。 下面是我的代码片段 --创建docker映像 --从d

  • 我有一个CDK堆栈,它创建了λ和SNS主题。这些策略设置为允许lambda发布到SNS主题。 我很难在我的lambda运行时代码中指定主题ARN,因为它在技术上还没有创建,只是在堆栈中。 如何在Lambda代码中引用主题ARN,以便Lambda发布到该主题?Lambda是用python编写的。我正在使用方法(https://docs.aws.amazon.com/cdk/api/latest/do

  • CDK

    化学开发工具包(CDK)是一个结构化学和生物信息学的Java库。来自世界各地,并在10多个不同的学术以及世界各地的工业项目开发。

  • 我试图创建和上传一个lambda使用AWS CDKJava。下面的代码是我用来在堆栈中创建lambda的。但是,当尝试运行lambda时,这会抛出一个。 我可以看到我从包含资产的S3桶中下载zip文件的代码存在。不完全确定这里缺少什么,但任何帮助都将不胜感激!谢啦

  • 我升级为不和谐。JSV12,但它破坏了我现有的v11代码。下面是一些导致错误的示例: 如何将代码迁移到Discord。JSV12并修复这些错误?在哪里可以看到v12引入的突破性更改?

  • 我正在尝试使用代码构建操作在AWS代码管道上部署AWS CDK应用程序。 构建和部署在本地完美工作(因为它会!)但是在CodeBuild上运行时,命令失败 这很可能是一些琐碎的事情,但我却在挠头,想弄明白是什么! 项目结构是自动生成的(使用) 对于阶段是 是(此阶段的输入目录是阶段的工件,即目录) 阶段抛出cdk ls步骤中的错误。由于上面的构建/部署步骤在本地工作(在干净的签出中),我怀疑这可能