使用 HashiCorp Terraform 部署 Amazon FSx for NetApp ON
使用 HashiCorp Terraform 部署 Amazon FSx for NetApp ONTAP
关键要点
部署和管理基础设施是一个复杂的任务,尤其是在多个环境中。使用基础设施即代码IaC可以帮助您安全、可预测地创建、修改和优化基础设施。Amazon FSx for NetApp ONTAP 是理想的共享存储解决方案,可以减轻基础设施管理的负担。本文探讨了 Terraform 的优缺点,并展示了如何使用 Terraform 部署 FSx for ONTAP 文件系统。部署和管理基础设施及其所有依赖关系是一项具有挑战性的任务。当您将多个环境考虑在内时,这一复杂性更容易成倍增加。手动管理基础设施会浪费大量时间在基础设施部署上,而不是在增值业务活动中。这种情况下,假设部署在第一次尝试中就顺利完成。基础设施即代码IaC使您能够安全、可预测地创建、改变和改进基础设施。
Amazon FSx for NetApp ONTAP 是一个完全托管的多协议共享存储解决方案,适合希望无需繁琐的基础设施管理而能专注于核心业务任务的用户。为了实现一致的、无错误的基础设施部署,建议利用 IaC 工具,这些工具支持无缝地部署 FSx for ONTAP。
在本文中,我们讨论了 Terraform 的优缺点,并使用它部署 FSx for ONTAP 文件系统。HashiCorp Terraform 是 IaC 市场的主要参与者之一,帮助管理混合云和多云环境中的基础设施。
IaC 工具
IaC 是通过可机器读的文件定义和配置基础设施的实践,确保基础设施配置的一致性。
如果您需要编排多云环境,我们建议使用 HashiCorp Terraform。如果您的全部基础设施都在 AWS 上,建议使用 AWS CloudFormation。有关使用 CloudFormation 部署 FSx for ONTAP 的更多信息,请参见 CloudFormation 和 FSx 用户指南。如果您已经部署了文件系统,并希望使用配置管理工具保持配置的已知状态,可以考虑 Ansible。您可以参考博客 如何使用 Ansible 管理 Amazon FSx for NetApp ONTAP 了解 Ansible 的简要介绍。如果您需要更多灵活性并希望将新共享的创建与 REST API 集成,请查看博客 如何使用 NetApp ONTAP REST APIs 与 Amazon FSx for NetApp ONTAP。
在 IaC、配置管理和自动化市场中,有许多不同的工具。CloudFormation 和 HashiCorp Terraform 是两种供应工具,而 Ansible 是配置管理工具。您选择的工具取决于您需要解决的挑战以及您在自动化方面的立场。对于执行 Day0 活动如供应,我们建议使用 CloudFormation 或 HashiCorp Terraform。如果用户完全在 AWS 中,我们推荐使用 CloudFormation,因为它与其他 AWS 服务集成紧密。对于构建和管理混合或多云的需求,我们建议使用 HashiCorp Terraform。在进行 Day1 活动如配置存储时,建议使用 Ansible。Ansible 提供用于管理 NetApp 的认证模块。如需 NetApp 模块的完整列表,请参阅集合文档 NetappOntap。如果您需要的灵活性超出 Ansible 所能提供的,建议使用 REST API。在某些情况下,您可能需要结合使用这些工具。我们推荐管理 FSx for ONTAP 的组合方式是供给和配置管理CloudFormation/Terraform Ansible或供给和编排CloudFormation/Terraform REST API。请参考附加阅读部分以获取更多关于这些工具的见解。
组件概述
FSx for ONTAP 是一种完全托管的服务,提供高度可靠、可扩展、高性能且功能丰富的基于 NetApp 的文件存储解决方案。FSx for ONTAP 提供了多协议访问的无缝解决方案,使组织能够专注于核心业务活动,而不必管理复杂的基础设施。FSx for ONTAP 文件系统与本地 NetApp 集群相似。下面列出了 FSx for ONTAP 的主要组件:
文件系统:文件系统是主要的 Amazon FSx 资源,相当于本地的 ONTAP 集群。存储虚拟机SVM:SVM 是一个独立的文件服务器,具有自己的管理凭据和管理及访问数据的端点。卷:ONTAP 从称为卷的逻辑容器向客户端和主机提供数据。Terraform 是一种 IaC 工具,可安全、高效地构建、修改和版本化云和本地资源。Terraform 可以管理低层组件,如计算、存储和网络资源,以及高层组件,如 DNS 条目和软件即服务SaaS功能。Terraform 利用称为提供者的外部插件来管理外部资源。
Terraform 支持在 AWS、Azure 和 Google Cloud PlatformGCP等多个公共云平台上进行供给。其关键优势之一是模块化的方法,使得可以创建可重用的代码模块。这种模块化设计提升了代码在项目中的组织性和可重用性。
尽管 Terraform 提供强大的基础设施供给能力,但它也存在一些限制。首先,它不自动处理依赖关系,需要使用 Depends On 属性 明确定义,这可能会比较繁琐。此外,Terraform 默认在供给机器上存储基础设施的状态,这在团队协作时可能不方便,因此需要使用远程状态管理。

更重要的是,Terraform 的状态文件中可能包含敏感信息,如密码,因此必须采取手动安全措施来适当保护这些信息。另一个限制是缺乏回滚支持。在部署过程中出现错误时,必须手动解决问题。
以下表格提供了 Terraform 的功能集概述:
特性Terraform支持开源软件工具,由 HashiCorp 及其他公司和社区贡献范围包括 AWS、本地、其他云提供商工具类型编排工具状态管理是本地机器上的状态文件,支持使用 Amazon S3 和 Amazon DynamoDB 等远程状态选项, Terraform Cloud)状态文件格式JSON 格式许可证和支持HashiCorp 提供 247 支持计划变更验证是,使用 plan 命令API 模型基于 FSx API除了 BlueXP 提供者语言声明式语言基础设施不可变的回滚否外部等待条件否Terraform 在逻辑上分为两个主要部分:
Terraform 核心Terraform 插件Terraform 核心是用 Go 编写的二进制文件,提供 Terraform 命令行接口CLI。Terraform 插件也是用 Go 编写的可执行二进制文件,为特定服务如 AWS 或 Azure或提供者如 bash提供实现。在 FSx for ONTAP 中,我们将使用两个提供者: HashiCorp AWS 提供者 和 NetApp Cloud Manager 提供者。尽管两者之间存在小的差异,但这两个提供者都可以创建功能完备的 FSx for ONTAP 文件系统。本文我们主要关注使用 AWS 提供者创建 FSx for ONTAP 文件系统。在深入讨论创建 FSx for ONTAP 文件系统的流程之前,这里列出一些我们在本文中使用的 Terraform 术语:
提供者:提供者是 Terraform 用于创建和管理资源的插件。您可以在 Terraform 配置中使用多个提供者块以管理来自不同提供者的资源。提供者块配置指定的提供者,负责创建和管理资源。Terraform 块:terraform {} 块包含 Terraform 设置,例如所需的提供者以供配置基础设施。默认情况下,Terraform 从 Terraform Registry 安装提供者。配置文件:Terraform 配置文件是一组描述基础设施的文件。Terraform 将所有扩展名为 “tf” 的文件视为一个整体,并创建资源。您可以将配置文件划分为多个文件或称为模块的文件夹,以便于使用和重用。状态文件:状态文件包含通过配置文件部署的资源的详细信息。Terraform 将代码中的资源配置与状态文件进行比较,以确定应用的更改。状态文件默认存储在本地。模块:模块是标准配置文件的集合。模块使您能够提供其他团队可以利用的可重用代码块。资源:资源块定义基础设施的组件。资源可以是物理或虚拟组件,例如 Amazon Elastic Compute Cloud (Amazon EC2) 实例。您可以在配置文件中定义多个资源。前提条件
已安装 Terraform CLI版本 120 及以上已安装 AWS 命令行界面AWS 账户及其相关凭证,允许您创建资源本地配置 AWS 凭证创建文件系统所需的 VPC 和子网解决方案 walkthrough
1 创建配置文件
Terraform 需要一个目录,其中包含所有配置文件。为此,我们创建一个名为 TerraformFSxN 的目录并切换到该目录。bashmkdir TerraformFSxN cd TerraformFSxN创建以下三个文件并相应命名:
touch maintf # 包含 Terraform 提供程序、资源等的完整配置数据。touch variablestf # 列出 maintf 的输入参数。touch outputstf # 列出我们希望 Terraform 输出的参数。2 添加 Terraform 和提供者块
terraform {} 块包含设置,例如 Terraform 用于配置基础设施的所需提供者。provider 块配置指定的提供者,这里 aws 是所需的提供者。aws 提供者的源定义为 hashicorp/aws,这是 registryterraformio/hashicorp/aws 的简写。所有 AWS 资源的命名格式如下:
hclterraform { requiredproviders { aws = { source = hashicorp/aws version = 4220 } }}
provider aws { # 配置选项 profile = default region = useast1 defaulttags { tags = { DeploymentType = Terraform Date = 1Nov2022 } }}
3 将资源添加到配置文件
配置文件中列出的所有资源使用以下格式:
hclresource resourcetype resourcename { # 特定资源配置}
在下面的代码块中,您可以看到创建了三个资源。注意资源类型始终以 {provider} 开头。在我们的案例中是 aws。资源名称特定于配置文件,仅在特定配置文件内有效。例如,terraformfsxn 或 fsxnsvm 仅在配置文件中有效。
hcl
FSxN 文件系统
resource awsfsxontapfilesystem terraformfsxn { storagecapacity = varstoragecapacity subnetids = varsubnetids deploymenttype = vardeploymenttype preferredsubnetid = varpreferredsubnetid throughputcapacity = varthroughputcapacity fsxadminpassword = randomstringfsxnfsadminpasswordresult kmskeyid = varkmskeyid}
FSxN SVM
resource awsfsxontapstoragevirtualmachine fsxnsvm { filesystemid = awsfsxontapfilesystemterraformfsxnid name = varsvmname activedirectoryconfiguration { netbiosname = terraformsvm selfmanagedactivedirectoryconfiguration { dnsips = vardnsips domainname = CORPEXAMPLECOM organizationalunitdistinguishedname = varOrganizationalUnitDistinguishedName username = localdbcredsadmin password = localdbcredspassword } }}
FSxN 卷
resource awsfsxontapvolume fsxnvol { name = varvolname junctionpath = /{varvolname} securitystyle = varsecuritystyle sizeinmegabytes = varsizeinmegabytes storageefficiencyenabled = varstorageefficiencyenabled storagevirtualmachineid = awsfsxontapstoragevirtualmachinefsxnsvmid tieringpolicy { name = vartieringpolicyname }}
一旦您将资源添加到主配置文件中,它将显示如下:
hcl
标题: maintf
创建 FSxN 文件系统、SVM、卷
terraform { requiredproviders { aws = { source = hashicorp/aws version = 4220 } }}
provider aws { # 配置选项 profile = default region = useast1 defaulttags { tags = { DeploymentType = Terraform Date = 1Nov2022 } }}
resource randompassword fsxnfsadminpassword { length = 12 number = true special = true overridespecial = !}
data awssecretsmanagersecretversion creds { # 填入您为秘密命名的名称 secretid = corpdomainadmin}
locals { dbcreds = jsondecode( dataawssecretsmanagersecretversioncredssecretstring )}
FSxN 文件系统
resource awsfsxontapfilesystem terraformfsxn { storagecapacity = varstoragecapacity subnetids = varsubnetids deploymenttype = vardeploymenttype preferredsubnetid = varpreferredsubnetid throughputcapacity = varthroughputcapacity fsxadminpassword = randomstringfsxnfsadminpasswordresult kmskeyid = varkmskeyid}
啊哈加速器免费永久版FSxN SVM
resource awsfsxontapstoragevirtualmachine fsxnsvm { filesystemid = awsfsxontapfilesystemterraformfsxnid name = varsvmname activedirectoryconfiguration { netbiosname = terraformsvm selfmanagedactivedirectoryconfiguration { dnsips = vardnsips domainname = CORPEXAMPLECOM organizationalunitdistinguishedname = varOrganizationalUnitDistinguishedName username = localdbcredsadmin password = localdbcredspassword } }}
FSX for ONTAP 卷
resource awsfsxontapvolume fsxnvol { name = varvolname junctionpath = /{varvolname} securitystyle = varsecuritystyle sizeinmegabytes = varsizeinmegabytes storageefficiencyenabled = varstorageefficiencyenabled storagevirtualmachineid = awsfsxontapstoragevirtualmachinefsxnsvmid
tieringpolicy { name = vartieringpolicyname }}
4 向第二个配置文件添加变量
资源块中使用的所有变量都由创建的 variablestf 文件提供。将以下行添加到该文件中:
hcl
标题: variablestf
FSX for ONTAP 文件系统变量
variable FSxNName { description = fsxn 文件系统名称 type = string default = BlogFSxN}
variable deploymenttype { description = 文件系统部署类型 (SINGLEAZ1 或 MULTIAZ1) type = string default = MULTIAZ1}
variable subnetids { description = 将放置 VPC 端点的子网 ID 列表根据 deploymenttype 变量,可能是 1 或 2 个列表项 type = list(any) default = [subnet65523503 subnet8c9ec782]}
variable preferredsubnetid { description = 主实例将驻留的子网 type = string default = subnet65523503}
variable routetableids { description = 仅适用于多可用区部署文件系统端点将被创建的 VPC 路由表 默认为空时使用默认路由表
东南亚受到疑似中国网络间谍活动的影响 媒体
东南亚的网络间谍活动揭示中国威胁行动关键要点多个东南亚高调组织,包括政府机构、通信公司和空中交通管理单位,受到影响。攻击者使用与中国高级持续威胁组相关的开源和生活在本地的战术。研究指出攻击的地理位置和工具使用,暗示这可能是来自中国的行动。据 The Hacker News 报道,多个东南亚的高调组织,包括来自两个国家的政府机构、一家电信公司以及一个空中交通控制机构,受到了一个疑似中国威胁行动的侵害...
创建和微调句子变换器以提升分类准确性 机器学习博客
提升分类准确度的句子变换器创建与微调作者:Kara Yang Farshad Harirchi 和 James Poquiz 发布于 2024年10月30日 亚马逊 SageMaker重点总结句子变换器是一种强大的深度学习模型,能够将句子转化为高质量的固定长度嵌入,从而捕捉其语义含义。在这篇文章中,我们将展示如何微调句子变换器,以便更好地将亚马逊产品分类。我们比较了两种不同的句子变换器,并证明了基...