我有一个AWS CDK堆栈,其中包含一个Step Functions状态机和一个lambda函数。这个lambda函数使用StartExecution API,它需要状态机的ARN。我不知道如何获取状态机的ARN,因为它是不稳定的,不断变化。
我尝试在lambda函数的index.ts旁边创建一个.env文件。
const stateMachine = new stepfunctions.StateMachine(this, 'my-state-machine', {
definition: waitState,
});
字符串
然后使用CDK堆栈中的fs
将stateMachine.stateMachineArn
写入该.env文件。写入.env文件的结果是${Token[TOKEN.1056]}
。这与登录到控制台时的结果相同。据我所知,ARN在CDK堆栈的当前“阶段”不可用,但我不知道如何在lambda函数部署之前将ARN获取到lambda函数。
2条答案
按热度按时间t0ybt7op1#
为什么不直接将
stateMachine.stateMachineArn
传递给lambda函数呢?如果它是同一个堆栈的一部分,您应该可以通过从其中一个Construct公开ARN属性并从lambda引用它来实现。如果它位于不同的堆栈中,则可能必须使用
new CfnOutput
导出它,并使用cdk.Fn.importValue
将其导入到堆栈中如果要在lambda代码中使用它,则必须将其作为环境变量传递给lambda函数。
gblwokeq2#
我相信您使用环境变量的方法是正确的。在部署过程中,我不会动态创建一个
.env
文件作为将状态机ARN传递给lambda函数的方法,而是使用secrets manager或systems manager parameter store,使其成为依赖项,并将其注入到函数environment
变量中。如果不运行代码,我不确定是否需要
<resource>.addDependency(<other resource>)
,但如果您遇到任何部署操作顺序问题,请注意这一点。字符串