AWS开发工具包vs AWS CLI-AWS云形成-Terraform

时间:2019-06-21 11:39:33

标签: aws-sdk amazon-cloudformation terraform aws-cli

对于AWS云中的供应基础架构,我们目前正在使用从ansible角色调用的云形成模板,但是我们看到在增加基础架构的规模之后,该代码已在GitHub中变为非结构化或未模块化

Github的意大利面条没有适当的结构,可读性差,不易被新技术人员采摘

特别是对于供应基础架构,我看到维护用领域特定语言编写的代码(例如ansible,terraform,cloudformation等)对于在GitHub中长期维护代码不是一个好主意,因为为了实现完整的(完全)自动化,可以结合使用这些技术。

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

当然,供应代码与在该供应的基础架构上运行的功能代码同样重要。

我们相信,从Azure迁移之后,我们将坚持使用AWS云


针对编程语言的域特定语言

aws sdk方法可以解决此问题吗?我们更喜欢GoLang aws sdk,以便任何GoLang程序员都可以选择它。.

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则表示由于大小增加,您的Cloud Formation代码变得难以管理,并且现在对使用AWS开发工具包定义它感兴趣,因此您可以使用软件最佳实践来保持代码更多可维护的。

与声明性语言相比,AWS SDK的不利之处在于,您现在要负责确保单击运行时,它不仅会创建新实例。例如。当我通过AWS开发工具包部署ec2机器时,下次运行该代码时,它将部署一台新的ec2机器。云形成维护了已部署内容的状态,因此更容易将增量更改部署到基础结构并还原更改。

我建议您检出的是新的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。