我用AWS CDK编写了一个简单的 typescript ,并尝试获取帐户ID
import cdk = require("@aws-cdk/core");
const app = new cdk.Stack();
console.log(app.account);
但产量低于
$ tsc index.ts
$ node index.js
${Token[AWS::AccountId.0]}
那么Token
在这里是什么意思呢?如何得到真实的的账户id呢?
更新
$ cdk init app --language=typescript
# replace lib/<name>-stack.ts with @Rob Raisch 's code
$ cdk synth
${Token[AWS::AccountId.0]}
Outputs:
MyStackAccount:
Description: Account of this stack
Value:
Ref: AWS::AccountId
Resources:
CDKMetadata:
Type: AWS::CDK::Metadata
Properties:
Modules: aws-cdk=1.2.0,@aws-cdk/core=1.8.0,@aws-cdk/cx-api=1.8.0,jsii-runtime=node.js/v10.15.3
$ cdk deploy
${Token[AWS::AccountId.0]}
MyStack: deploying...
MyStack: creating CloudFormation changeset...
0/2 | 11:58:59 AM | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata Resource creation Initiated
1/2 | 11:58:59 AM | CREATE_COMPLETE | AWS::CDK::Metadata | CDKMetadata
2/2 | 11:59:00 AM | CREATE_COMPLETE | AWS::CloudFormation::Stack | MyStack
✅ MyStack
Outputs:
MyStack.MyStackAccount = 123456789012
3条答案
按热度按时间2lpgd9681#
我遇到了完全相同的问题,直到我意识到,在运行
cdk deploy
之前,没有这样的值,只有占位符(如${Token[AWS::AccountId.0]}
)将在部署期间填充。可以这样想,您的CDK堆栈是一个创建大量资源的计划,但是在运行
cdk deploy
之前,这些资源并不存在,因此无法查询它们的值。获取所需值的一种方法是将其添加到堆栈构造函数中:
例如:
当你运行
cdk deploy
的时候,它会输出:bwleehnv2#
问题是“如何获得帐户ID”,但你没有提到为什么。
如果您希望获取IAM用途的帐号,例如仅允许您的帐户使用API Gateway(举例来说),则您还可以使用始终指向“当前”帐户的主体类型
AccountRootPrincipal
。zwghvu4y3#
在Rob Raisch的回答中,我认为应该是
不