在AWS CDK中使用AWS开发工具包的正确方法

时间:2019-12-19 09:42:18

标签: javascript typescript amazon-web-services aws-cdk aws-sdk-js

我正在尝试在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中是完全异步的,这意味着我必须使用上面相当详细的模式来包装它。

有人有更好的方法吗?

0 个答案:

没有答案