AWS SDK 与 AWS CLI - AWS Cloud Formation - Terraform

AWS SDK vs AWS CLI - AWS Cloud Formation - Terraform

为了在 AWS 云中配置基础设施,我们目前正在使用从 ansible 角色调用的云形成模板,但我们发现在增加基础设施的规模之后,此代码在 GitHub[ 中变得非结构化或未模块化=10=]

Github 有这段代码的意大利面条,结构不合理,可读性差,不易被新手采摘

特别是对于供应基础设施,我看到维护用 领域特定语言 编写的代码,如 ansible、terraform、cloudformation 等...对于长期维护GitHub 中的代码,因为要实现完全(完全)自动化,您需要结合使用这些技术。

哲学是,aws sdk 代码在 GitHub 中看起来更加结构化,因为它提供了大量隐藏实现细节的抽象。

当然,配置代码与在该配置的基础设施上运行的功能代码一样重要。

我们有信心,在从 Azure 迁移后,我们将坚持使用 AWS 云


领域特定语言相对于编程语言,

aws sdk 方法是否解决了这个问题?我们更喜欢 GoLang aws sdk 以便任何 GoLang 程序员都可以使用它..

如果我对你的问题的理解正确,你是在说由于规模的增加,你的 Cloud Formation 代码变得难以管理,现在有兴趣使用 AWS SDK 定义它,这样你就可以使用软件最佳实践来保持代码更易于维护。

与声明性语言相比,AWS SDK 的缺点是现在您有责任确保在单击 运行 时它不会只是创建一个新实例。例如。当我通过 AWS SDK 部署 ec2 机器时,下次我 运行 该代码将部署新的 ec2 机器。 Cloud Formation 维护已部署内容的状态,因此更容易将增量更改部署到基础架构并恢复更改。

我建议您查看新的 AWS-CDK,它允许您通过 Cloud Formation 定义最终为 运行 的代码。它允许你编写 OO 风格的对象:

const vpc = new Vpc(this, 'vpc', {
            cidr: '10.150.0.0/16',
            natGateways: 2,
            subnetConfiguration: [
                {
                    name: 'Public',
                    subnetType: SubnetType.Public,
                    cidrMask: 20
                },
                {
                    name: 'Private',
                    subnetType: SubnetType.Private,
                    cidrMask: 22
                },
                {
                    name: 'Isolated',
                    subnetType: SubnetType.Isolated,
                    cidrMask: 22
                }
            ]
        });

遗憾的是,目前尚不支持 Golang。