AWS CDK 获取 Pinpoint Project/Application ID
AWS CDK Get Pinpoint Project/Application ID
在 AWS CDK 中,可以直接创建 Pinpoint 服务。但是如何获取项目 ID(也称为 Pinpoint App ID 或应用程序 ID)以供后续 CDK 代码使用。
创建 Pinpoint 项目:
const pinpointProject = new pinpoint.CfnApp(this, 'PinpointNotificationProject', {
name: 'myProject',
});
在 AWS CloudFormation 文档中它说:
“当您将此资源的逻辑 ID 传递给内部 Ref 函数时,Ref returns Amazon Pinpoint 应用程序的唯一标识符 (ApplicationId)。”
但是,下面的CDK代码returns项目名不是id。 logicalId = myProject.
的值
cdk.Fn.ref(pinpointProject.logicalId); // This returns 'myProject'
pinpointProject.ref; // This also returns 'myProject'
您 运行 遇到的问题是 pinpoint 不是一个完成的模块。您可以看到其中的所有函数都以 Cfn - cloudformation 为前缀。这意味着它们是准系统,并没有绑定到 CDK 的其余部分正在使用的所有接口挂钩中。
首先,逻辑 ID 不是项目名称。逻辑 ID 是 Cloudformation 模板的一部分,它是为 Cloudformation 将要建立的任何资源生成的。它将给定的资源链接到堆栈,因此同一逻辑 ID 下的任何更改都将应用于同一站起来的资源。它 仅 在内部引用到 cloudformation 堆栈,并且从不为外界所知。如果您不指定,CDK 使用 LogicalID 生成资源名称。
其次,看一下documentation shows that CfnApp has the following property: attrArn
. Meaning in your code, you would reference this by pinpointProject.attrArn
- the arn of a pinpoint resource is something like: arn:aws:mobiletargeting:region:accountId:apps/projectId.
with, as you guessed it, the projectId as the last value. you can split the string and get that value out, or use the arn manipulation methods provided as part of the core module提取你需要的东西。
最后,即使 Pinpoint 模块几乎只是准系统,它可能仍然可以将存储 Pinpoint 构造对象的变量传递给需要它的任何其他资源。我说 可能 是因为,如前所述,大多数 Cfn 前缀函数都没有适当的钩子来很好地完成这项工作——但有些有,而且我从未直接使用 Pinpoint。
我建议花一些时间了解 CDK 文档的布局方式。它在某些地方很简单,但是一旦您了解了它们的结构,就会很容易在其中回答这些问题。
这已确认已在最新的 CDK 版本 1.130.0 中修复。 ref
属性 现在 returns Pinpoint ProjectId。
在 AWS CDK 中,可以直接创建 Pinpoint 服务。但是如何获取项目 ID(也称为 Pinpoint App ID 或应用程序 ID)以供后续 CDK 代码使用。
创建 Pinpoint 项目:
const pinpointProject = new pinpoint.CfnApp(this, 'PinpointNotificationProject', {
name: 'myProject',
});
在 AWS CloudFormation 文档中它说: “当您将此资源的逻辑 ID 传递给内部 Ref 函数时,Ref returns Amazon Pinpoint 应用程序的唯一标识符 (ApplicationId)。”
但是,下面的CDK代码returns项目名不是id。 logicalId = myProject.
的值cdk.Fn.ref(pinpointProject.logicalId); // This returns 'myProject'
pinpointProject.ref; // This also returns 'myProject'
您 运行 遇到的问题是 pinpoint 不是一个完成的模块。您可以看到其中的所有函数都以 Cfn - cloudformation 为前缀。这意味着它们是准系统,并没有绑定到 CDK 的其余部分正在使用的所有接口挂钩中。
首先,逻辑 ID 不是项目名称。逻辑 ID 是 Cloudformation 模板的一部分,它是为 Cloudformation 将要建立的任何资源生成的。它将给定的资源链接到堆栈,因此同一逻辑 ID 下的任何更改都将应用于同一站起来的资源。它 仅 在内部引用到 cloudformation 堆栈,并且从不为外界所知。如果您不指定,CDK 使用 LogicalID 生成资源名称。
其次,看一下documentation shows that CfnApp has the following property: attrArn
. Meaning in your code, you would reference this by pinpointProject.attrArn
- the arn of a pinpoint resource is something like: arn:aws:mobiletargeting:region:accountId:apps/projectId.
with, as you guessed it, the projectId as the last value. you can split the string and get that value out, or use the arn manipulation methods provided as part of the core module提取你需要的东西。
最后,即使 Pinpoint 模块几乎只是准系统,它可能仍然可以将存储 Pinpoint 构造对象的变量传递给需要它的任何其他资源。我说 可能 是因为,如前所述,大多数 Cfn 前缀函数都没有适当的钩子来很好地完成这项工作——但有些有,而且我从未直接使用 Pinpoint。
我建议花一些时间了解 CDK 文档的布局方式。它在某些地方很简单,但是一旦您了解了它们的结构,就会很容易在其中回答这些问题。
这已确认已在最新的 CDK 版本 1.130.0 中修复。 ref
属性 现在 returns Pinpoint ProjectId。