【发布时间】:2020-01-07 22:43:43
【问题描述】:
我正在尝试在我的 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)
});
现在这可行,但它远非一个干净的解决方案。我的新堆栈中有多个资源,这意味着我必须将 SDK 调用的结果传递到多个级别,而不是直接在需要的地方传递,如果我必须进行多个 SDK 调用,这将变得更加混乱。
核心问题是AWS SDK在JS中纯粹是异步的,这意味着我必须使用上面相当冗长的模式来包装它。
有人有更好的方法吗?
【问题讨论】:
标签: javascript typescript amazon-web-services aws-cdk aws-sdk-js