Car*_*ght 7 javascript amazon-web-services typescript aws-sdk-js aws-cdk
我正在尝试在我的 CDK 应用程序中使用 SDK。我的堆栈正在创建一个目录、一些网络内容,然后是一些使用需要 AD DNS IP 的 PowerShell 脚本加入域的实例,我目前使用它的方式如下:
const ds = new DirectoryService();
const result = new Promise(function (resolve: (value: string) => any, reject) {
ds.describeDirectories({}, function (err, data) {
if (err){
reject(data)
}else{
try{
if (data.DirectoryDescriptions){
if (data.DirectoryDescriptions[0].DnsIpAddrs){
resolve(data.DirectoryDescriptions[0].DnsIpAddrs.toString())
}
}
}catch (e) {
reject("Directory doesn't exist yet.")
}
}
})
});
result.then(value => {
const subs = {
"#{DNS_ADDRESSES}": value,
"#{SECRET_ID}": directory.directorySecret.secretArn
};
Object.entries(subs).forEach(
([key, value]) => {
domainJoinScript = domainJoinScript.replace(key, String(value));
}
);
new Stack(app, 'instances', networking.vpc, domainJoinScript);
}).catch(error => {
print(error)
});
Run Code Online (Sandbox Code Playgroud)
现在这可行了,但它远非一个干净的解决方案。我的新堆栈中有多个资源,这意味着我必须通过多个级别传递 SDK 调用的结果,而不是直接在需要的地方传递,如果我必须进行多个 SDK 调用,这会变得更加混乱。
核心问题是 AWS SDK 在 JS 中是完全异步的,这意味着我必须使用上面相当详细的模式来包装它。
有没有人有更好的方法来做到这一点?
您可以使用AwsCustomResource实施 AWS 开发工具包调用
这允许在不同的资源操作(oncreate、ondelete、onupdate)上调用 AWS 开发工具包函数
结果数据可以通过调用getData来消费。这确实进一步允许 cdk 创建的 CloudFormation 模板无需客户端运行即可工作。
我使用它的一个示例如下:
const userPoolDomainDescription = new customResources.AwsCustomResource(this, 'user-pool-domain-description', {
onCreate: {
physicalResourceId: 'user-pool-domain-description',
service: 'CognitoIdentityServiceProvider',
action: 'describeUserPoolDomain',
parameters: {
Domain: userPoolDomain.domain
}
}
});
const dnsName = userPoolDomainDescription.getData('DomainDescription.CloudFrontDistribution').toString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7132 次 |
| 最近记录: |