概括
- Arm A1 实例可以为您的工作负载节省大量资金。
- 如果您已经熟悉如何将 Terraform 与 AWS 结合使用,并且您的软件与架构无关,那么您的工作负载可以轻松部署在 A1 实例上。
- 我们将通过 Terraform 演示 A1 实例的示例部署。
Arm 支持的 EC2 实例
Amazon EC2 A1 实例于 2018 年 11 月发布。这些实例基于 Arm Graviton 处理器,可显着节省成本。如果您的工作负载与架构无关的构建系统中讨论的架构无关,您可以轻松利用这些成本较低的实例。下面我们将介绍一些使用 Terraform 部署的 A1 实例。
地形
Terraform是一个开源基础设施管理工具。使用 Terraform 有很多好处,但其中一个好处是它不会将您锁定在任何特定的云提供商中。它可用于在 AWS、Azure 等上部署基础设施。正如我们将看到的,它也很容易上手。
我们的设置
任何机器都可以用作基础设施引导机器。在我们的例子中,我们将使用MacchiatoBin来部署我们的 A1 实例。MacchiatoBin 的设置在为 Kubernetes 和 Swarm 配置MacchiatoBin 中讨论过 。目前,Terraform Arm 发布二进制文件仅作为 32 位可执行文件提供。但是,鉴于该项目是开源的,因此可以编译 64 位二进制文件。此外,已经有一个github PR可以长期解决这个问题,所以这是一个小问题。
部署 A1 实例
小警告
请记住,部署这些实例会在您的 AWS 账户上产生费用。非常小的费用,但仍然收费。
AWS 设置
您应该有一个 AWS 帐户,并awscli安装在您的机器上。Terraform 使用awscli与 AWS 服务器通信来设置基础设施。可以在 AWS 站点上找到awscli 安装说明。安装后,请务必按照awscli 配置说明中的说明配置您的凭据。需要设置的主要内容是您的访问密钥和秘密访问密钥。这些允许 Terraform(通过awscli)验证您的 AWS 帐户。
安装 Terraform
从发布页面下载适用于您的操作系统和架构的版本,并确保您的PATH变量指向二进制文件的位置。运行以下命令来初始化 Terraform。
terraform init
部署
让我们创建一个名为myA1Deployment.tf.
description = "要运行的 EC2 实例类型列表。"
类型 = 列表(字符串)
默认 = ["a1.medium", "a1.large", "a1.xlarge"]
}
提供者“aws”{
地区=“我们-东-2”
}
资源“aws_instance”“myA1Deployment”{
计数 = 3
ami =“ami-0f2057f28f0a44d06”
instance_type = "${element(var.instances, count.index)}"
标签 = {
名称 = "我的 A1-Instance-${count.index}"
}
key_name = "A1DEMO"
}
上述配置文件包含三个主要块。让我们仔细看看它们中的每一个。
输入变量块
第一个块定义了一个名为的输入变量instances。此变量中有三个参数。第一个参数是 a description,它告诉我们这个变量包含一个要运行的 EC2 实例类型的列表。第二个是type定义数据类型的参数;在我们的例子中,它是一个字符串列表。最后一个参数是default`分配给变量的实例类型列表。如果用户在调用 Terraform 时未提供列表,则将使用此默认列表。我们的默认列表显示了 a1.medium、a1.large 和 a1.xlarge 的实例类型。
提供者块
第二个块定义了一个提供者。提供商告诉 Terraform 使用哪个云提供商 API 来设置我们的基础架构。在我们的例子中,提供者设置为AWS。此块中可以使用许多参数,但唯一需要的参数是 AWS region。在我们的配置文件中,我们将其设置为 us-east-2。
资源块
第三块描述资源。在这里,我们定义了一个名为的aws_instance资源myA1Deployment。这告诉 Terraform 我们要部署 AWS EC2 实例。第一个参数是count,它是资源块的元参数。count描述了我们想要部署多少这个资源(即 EC2 实例)的副本。在我们的配置中,count设置为 3。在后台, usingcount告诉 Terraform 运行循环count(3) 次以创建资源 (aws_instance) 的副本。此外,count公开了一个名为的属性,该属性count.index可以在此循环的不同迭代中使用。在第一次迭代中,count.index是 0,第二个是 1,第三个是 2。这类似于任何编程语言中的基本循环。稍后,我们将看到如何 count.index在资源块定义中使用。
下一个参数是ami要使用的 Amazon 机器映像 ( )。它设置为 ami-0f2057f28f0a44d06,这是 64 位 Arm Ubuntu 18.04 映像的 AMI ID。下图显示了 EC2 实例向导中 Ubuntu AMI 名称旁边的此 ID。

争论之后ami,我们有instance_type争论。在这里,我们看到了一些更有趣的东西。我们将 Terraform函数称为element。这允许我们访问instances列表中的元素。我们使用在每次循环迭代时count.index从列表中选择一个元素。instances假设我们使用默认instances列表,这一行会产生 3 个实例;a1.medium、a1.large 和 a1.xlarge 类型中的每一个。这对应于instances列表的索引 0 到 2。
在 之后instance_type,我们有一个名为 的标签Name。在这里,我们通过将计数索引附加到每个实例的标记count.index末尾来为每个实例赋予唯一的名称。Name这意味着我们应该期望我们的实例使用名称 My-A1-Instance-0 (a1.medium)、My-A1-Instance-1 (a1.large) 和 My-A1-Instance-2 (a1.xlarge )。
最后,我们有key_name,这是用于在没有密码的情况下连接到实例的公钥对的名称。这可以在您的 AWS 账户上提前创建,或者在 Terraform 配置文件中创建。创建实例后,我们将使用此密钥通过 SSH 连接到我们的实例。我们预先创建的密钥称为A1DEMO. 有关如何创建和使用这些密钥的信息可以在 EC2文档中找到。
现在我们了解了配置文件,让我们部署实例。terraform apply在文件所在的目录中运行命令myA1Deployment.tf。您将需要键入yes以确认部署。如果您看到NoCredentialProviders错误。这意味着您没有awscli正确设置凭据。如果是这种情况,请再次查看awscli 配置说明。
现在我们可以切换到 EC2 页面上的实例查看器并查看我们的实例。

正如预期的那样,我们看到了 3 个实例。只要我们拥有私钥 ( A1DEMO),我们还可以通过 SSH 连接到任何这些实例。
可以通过运行terraform destroy命令删除实例。
此时,您可以添加到 Terraform 配置文件以运行配置程序来管理实例的配置。
闭幕致辞
如上所示,Terraform 可用于将 A1 实例部署到您的云基础设施。除了选择 A1 实例类型外,无需执行任何不同或特殊操作即可在 AWS 上运行 A1 实例。鉴于与运行 A1 实例相关的成本较低,我们鼓励 DevOps 团队探索在 A1 实例上运行至少部分工作负载。只需对 Terraform 配置文件进行最少的更改,就有可能显着节省成本。
原作者:胡里奥·苏亚雷斯