将堆栈资源值传递给另一个帐户



我在帐户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, ...}
);

最新更新