我可以使用从 cdk deploy 创建的值执行另一个脚本吗?

Can I execute another script with values created from cdk deploy?

我正在尝试使用 aws CDK 创建 EC2 实例,运行 新部署的 EC2 实例的一些脚本基本上是这样的。

(Python 会更好,但 cdk deploy 似乎在 shell 中是 运行。)

cdk deploy && python script.py -I {new ec2 id} -s {new sg id}

但我需要从 cdk deploy 结果中获取实例 ID 和安全组 ID,并将其用作下一个脚本的参数,但不确定如何完成。

cdk deploy 是否可以在部署完成后传递一些值而无需来自 shell 的非常复杂的标准输出?

p.s: 其他方式,例如 userdata 和 cloud-init 可以包含在 synth time 中,但对我不起作用,因为它需要从本地脚本获取一些其他值作为参数以及一些命令式程序,例如打开临时端口并在脚本 运行.

后关闭

根据您写的内容,我认为最好的选择是使用 CfnOutput。使用 CfnOutput,您可以 return 安全组或实例 ID,就像您在 CloudFormation 的 Outputs 部分中所做的那样。

例如:

new CfnOutput(this, 'SecurityGroupOutput', {
  value: mySecurityGroup.securityGroupId,
  description: 'security group id' // Optional,
  exportName: 'MySecurityGroupId'
});

然后您可以使用 AWS CLI(或 Python,任何适合您的方式)检索堆栈输出并在您的脚本中使用此值:

aws cloudformation describe-stacks --stack-name <your-stack-name> --query "Stacks[0].Outputs[?ExportName == MySecurityGroupId].OutputValue" --output text

我在这里使用 ExportName 是因为 CDK 会自动为输出创建一些不易阅读或记忆的逻辑 ID。如果您想使用它来检索正确的 OutputValue.

,您可以通过在 CfnOutput 上调用 .overrideLogicalId(newLogicalId) 来覆盖它

您可以通过类似的方式来检索 EC2 实例 ID。