我正在尝试在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)
});
现在这行得通了,但这远非一个干净的解决方案。我的新Stack包含多个资源,这意味着我必须将SDK调用的结果传递到多个级别,而不是直接在需要的地方传递,如果我必须进行多个SDK调用,这将变得更加混乱。
核心问题是AWS SDK在JS中是完全异步的,这意味着我必须使用上面相当详细的模式来包装它。
有人有更好的方法吗?