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可以长期解决这个问题,所以这是一个小问题。
请记住,部署这些实例会在您的 AWS 账户上产生费用。非常小的费用,但仍然收费。
您应该有一个 AWS 帐户,并awscli
安装在您的机器上。Terraform 使用awscli
与 AWS 服务器通信来设置基础设施。可以在 AWS 站点上找到awscli 安装说明。安装后,请务必按照awscli 配置说明中的说明配置您的凭据。需要设置的主要内容是您的访问密钥和秘密访问密钥。这些允许 Terraform(通过awscli)
验证您的 AWS 帐户。
从发布页面下载适用于您的操作系统和架构的版本,并确保您的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 配置文件进行最少的更改,就有可能显着节省成本。
原作者:胡里奥·苏亚雷斯
更多回帖