我在帐户a中有一个日志组,我想发送到另一个帐户b中的kineesis流。我正在遵循https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CrossAccountSubscriptions.html来实现它(在typescript中)。
在Account B
中,我创建了一个跨帐户目的地:
const logDestination = new CrossAccountDestination(this, 'LogDestination', {
destinationName: 'LogDestination',
role: IAMRole,
targetArn: kinesisStream.streamArn
});
在Account A
中,我试图创建订阅过滤器:
const filter = lambdaFunction.logGroup.addSubscriptionFilter('Filter', {
filterPattern: pattern,
destination: ...
})
如何在Account A的模板中引用Account B的跨账号目的地址,使A的日志发送到B的目的地址?
如果您正在考虑Export/ImportValue
类型的引用,那么没有这样的选项。CloudFormation (CFN)不支持该类型的跨地区或跨帐户引用
这意味着你基本上必须做以下其中一件事:
-
通过Parameters将Acc1的值传递给Acc2。因此,您可以通过编程方式(创建堆栈1,获取其输出,并创建堆栈2,将所需的输出作为参数传递进来)。
-
在Acc 2中开发一个自定义资源lambda函数。该函数将有权查询Acc 1中的堆栈1中的输出,并将其返回到堆栈2中。这可以是完全自动化的解决方案,全部包含在CFN中。
其他解决方案也是可能的,例如使用SSM参数存储,但以上两个将是我所见过的最常用的两个。
回答你的问题:
在帐户B中创建CrossAccountDestination后,在单个app.ts中实例化帐户A和帐户B,并将帐户B中实例化的CrossAccountDestination作为帐户A的输入属性,即
const AccountBStack = new AccountBStack(app, `Account B`, deploymentProps={....});
const AccountAStack = new AccountAStack(app, `Account A`,
deploymentProps= {CrossAccountDestination: AccountBStack.CrossAccountDestination, ...}
);