我们希望听到您的声音!帮助我们了解 Ansible 生态系统的现状。
参加 2024 年 Ansible 项目调查

探索 AWS 云控制集合的新可能性

探索 AWS 云控制集合的新可能性

我们最近发布了使用 AWS 云控制 API 生成模块的实验性 alpha 集合,用于与 AWS 服务交互。此内容目前不适用于生产环境。我们之所以公开此工作,是因为我们认为分享我们的研究成果并获得您的反馈非常重要。

在本文中,我们将重点介绍如何试用新 amazon.cloud 内容集合 的 alpha 版本。

AWS 云控制 API

AWS 云控制 API 于 2021 年 9 月推出,并在 AWS re:Invent 上亮相,是一组通用的应用程序编程接口 (API),为开发人员提供五种操作来创建、读取、更新、删除和列出 (CRUDL) 资源,并使开发人员和合作伙伴能够以标准方式轻松管理 AWS 和第三方服务的生命周期。

云控制 API 目前支持数百种 AWS 资源,并将在未来几个月内支持更多现有 AWS 资源,涵盖 Amazon Elastic Compute Cloud (Amazon EC2) 和 Amazon Simple Storage Service (Amazon S3) 等服务。

AWS 提供广泛而深入的云服务组合。它始于 Amazon Simple Storage Service (Amazon S3),并发展到 200 多项服务。每个独立的 AWS 服务都拥有特定的 API,拥有自己的词汇、输入参数和错误报告。由于这些 API 对每个服务都是独一无二的,因此开发人员必须了解他们使用的每个 API 的行为(输入、响应和错误代码)。随着应用程序变得越来越复杂,开发人员跨越更多 AWS 服务,学习和管理针对开发人员的独特 API 可能会变得具有挑战性。

随着 AWS 云控制 API 的推出,开发人员拥有了一种一致的方法来管理在其整个生命周期中定义为其云基础设施一部分的支持服务,因此随着开发人员将其基础设施中添加新服务,他们需要学习的 API 越来越少。

为什么 AWS 云控制 API 对 Ansible 很重要

虽然不会直接影响自动执行 AWS 服务的 Ansible 内容作者,但我们相信云控制 API 将有助于提供更好的云自动化体验。

最值得注意的是,它能够快速引入新的 AWS 服务以及对现有服务的实施新功能。这也将能够更全面地涵盖大量可用的 AWS 服务。这可以进一步扩展到包括在已采用云控制 API 的 AWS 云中运行的第三方服务。

此集合中包含的模块使用名为 amazon_cloud_code_generator 的工具生成,该工具由 Ansible 云团队开发和开源。

amazon.cloud collection generation flow diagram

如流程图所示,可以使用 tox -e refresh_modules 轻松部署该集合,并且默认情况下它会在 cloud 子目录中生成。

基本上,生成过程利用了一些 Python 实用程序脚本,这些脚本包装了 AWS CloudFormation 客户端,以抓取每个 Amazon 支持的资源的资源类型定义模式或元模式,并执行必要的处理以生成模块文档。

额外的处理逻辑会生成所有实用程序,包括模块、模块实用程序和测试。

例如,module_utils 包含一个基类,所有资源模块都可以使用该基类来提供所有必要的方法,以使用适当的逻辑创建、更新、删除、描述和列出,以等待、分页以及优雅地处理 botocore 异常。

使用 amazon.cloud 集合

此集合的所有模块都使用 boto3 Amazon Web Services (AWS) 软件开发工具包 (SDK) for Python 和 AWS 云控制 API (CloudControlApi) 客户端。它需要

  • boto3 >= 1.20.0 和 botocore >= 1.23.0
  • Python 3.9 或更高版本。

基本任务示例

让我们看一个如何使用 amazon.cloud 集合的实际示例。也许您需要配置一个简单的 AWS S3 存储桶,然后描述它。

如果您已经在使用 amazon.awscommunity.aws 集合,您会发现任务语法非常类似。

您可能会注意到,我们不再有 info 模块,但是 info 模块所执行的“获取”或“描述”以及“列出”功能都由主模块处理。这无疑简化了集合使用,并改善了用户体验。

- name: Create a simple S3 bucket with public access block configuration
  amazon.cloud.s3_bucket:
    state: present
    bucket_name: {{ local_bucket_name }}
    public_access_block_configuration:
      block_public_acls: true
      block_public_policy: true
      ignore_public_acls: true
      restrict_public_buckets: true
  register: _result_create

- name: Gather information about the S3 bucket
  amazon.cloud.s3_bucket:
    state: get
    bucket_name: {{ local_bucket_name }}
  register: _result_info
- name: Create a simple S3 bucket with public access block configuration
  amazon.aws.s3_bucket:
    state: present
    name: {{ local_bucket_name }}
    public_access:
      block_public_acls: true
      block_public_policy: true
      ignore_public_acls: true
      restrict_public_buckets: true
  register: _result_create

- name: Gather information about the S3 bucket
  community.aws.aws_s3_bucket_info:
    name: {{ local_bucket_name }}
  register: _result_info

amazon.cloud 内容集合的另一个相关功能是返回结果的结构。特别是,所有可用操作(存在、不存在、列出和获取或描述)返回的结果在所有模块中结构良好且统一。它始终包含资源的标识符和资源特定属性的字典。

这样,我们就可以直接获取每个资源的标识符,并在多个依赖资源中重复使用它。

此功能对用户体验肯定有积极影响。

[
{
    "identifier": "090ba2aa-cc0c-5a40-9b5f-a2d2b8fc6ceb",
    "properties": {
        "arn": "arn:aws:s3:::090ba2aa-cc0c-5a40-9b5f-a2d2b8fc6ceb",
        "bucket_name": "090ba2aa-cc0c-5a40-9b5f-a2d2b8fc6ceb",
        "domain_name": "090ba2aa-cc0c-5a40-9b5f-a2d2b8fc6ceb.s3.amazonaws.com",
        "dual_stack_domain_name": "090ba2aa-cc0c-5a40-9b5f-a2d2b8fc6ceb.s3.dualstack.us-east-1.amazonaws.com",
        "regional_domain_name": "090ba2aa-cc0c-5a40-9b5f-a2d2b8fc6ceb.s3.us-east-1.amazonaws.com",
        "website_url": "http://090ba2aa-cc0c-5a40-9b5f-a2d2b8fc6ceb.s3-website-us-east-1.amazonaws.com"
    }
}
]

已知问题和不足之处

  • 生成的模块就像 API 和其模式一样好。文档可能并非所有模块选项都齐全。

  • 缺少对重要 AWS 资源的支持,例如 EC2 实例、卷和快照、RDS 实例和快照、弹性负载均衡器等。这些 AWS 服务中的一些资源预计将在未来几个月内得到支持。

  • 幂等性(预期状态)是 API 的功能,可能无法完全支持。在云控制 API 中,幂等性是使用 ClientToken 实现的。ClientToken 在使用后有效期为 36 小时。

    • 之后,使用相同客户端令牌的资源请求将被视为新请求。
    • 为了克服此限制,此集合中存在的模块通过执行第一个 get_resource(TypeName='', Identifier='') 操作(使用资源标识符)来处理幂等性。
  • 缺少服务器端分页可能会对性能产生严重影响。如您所知,某些 AWS 操作返回的结果不完整,需要后续请求才能获得完整的结果集。分页器是 boto3 的一项功能,它充当遍历截断的 API 操作的完整结果集的迭代过程的抽象。目前,云控制 API 缺乏此功能。此限制在本集合中通过实现手动客户端端分页器来处理。

  • 缺少用于提供基于名称的标识的筛选,以支持 amazon.aws 中的预期状态(幂等性)逻辑。实际上,这意味着您无法列出所有资源并在服务器端筛选结果。

    • 例如,一些模块不允许用户在创建时设置 primaryIdentifier。一个可能的解决方案是允许用户设置资源名称,并使用该名称设置 [Tag:Name,但由于 API 不允许服务器端资源筛选,因此我们只能使用该标记信息来实现客户端端筛选。这种方法肯定会对性能产生严重影响。
  • 并非所有资源都支持可用状态。实际上,这意味着某些资源无法更新或列出。

下一步是什么?

新的 amazon.cloud 自动生成的集合除了可以使用生成器工具轻松生成以及为所有模块提供一套相当抽象的 API 之外,还非常易于使用和跨多个依赖资源重复使用资源。

我们一直在努力

  • 使集合的 API 生成的模块更易于使用和操作。
  • 更快地提高资源可支持性,并涵盖更广泛的使用案例场景。
  • 提高集合模块的整体性能。

我们如何才能改进使用 Ansible 配置 AWS 云资源?更广泛地说,我们如何才能使 API 生成的模块更易于使用和操作?我们希望听到您的想法。

您可以通过针对 amazon.cloud GitHub 存储库 报告任何问题来提供反馈。

由于模块是自动生成的,您可以通过针对 amazon_cloud_code_generator 工具而不是生成的集合打开它们来提交 GitHub 拉取请求。

最后

虽然仍处于 alpha 版本,但新的 amazon.cloud 内容集合显示出巨大的潜力,可以帮助您使用 Ansible 自动执行对 AWS 的部署,并大大提高云计划成功的可能性。

希望您发现这篇博文对您有所帮助!但更重要的是,我们希望它能激励您试用最新的 amazon.cloud 集合版本,并告诉我们您的想法。







边缘自动化,2022 年峰会

边缘自动化,2022 年峰会

如您所知,Red Hat 峰会于上周在波士顿以线下方式回归。对于不熟悉的人来说,Red Hat 峰会是 IT 专业人士学习、协作和创新从数据中心和公有云到边缘及更远技术的首要企业开源活动。Red Hat 发布了许多激动人心的公告,其中一些包括 Red Hat Ansible Automation Platform。如果您无法参加活动或想重新浏览一些内容,您可以访问任何会议按需观看

峰会上的一个重要公告是公布从软件供应链到边缘的新安全级别。在 Ansible Automation Platform 2.2 中,Red Hat 推出了 Ansible 内容签名技术的技术预览版。此新功能通过使自动化团队能够验证其企业中正在执行的自动化内容是否经过验证和信任,从而帮助提高软件供应链安全性。

随着这种新的边缘功能的发布,我们展示了一个有关 Ansible 和边缘的会议,该会议可按需观看。会议 "使用 Red Hat Ansible Automation Platform 将您的分布式边缘计算模型 GitOps 化" 涵盖了 Ansible Automation Platform 如何与 GitOps 相结合,从而缩短将网络边缘基础设施部署和运行所需的时间,降低了上市时间和修复时间。它包括一个演示,展示了如何在 Git 中描述部署,它充当单一的事实来源。您将能够看到 Ansible Automation Platform 如何强制执行大型组织网络基础设施的正确状态,以及通过 IT 服务管理对其进行跟踪。

使用 Ansible Automation Platform 在任何地方扩展自动化 Red Hat 推出了新的跨产品组合边缘功能,包括 Ansible Automation Platform 中的功能,这些功能解决了管理和自动化需求,以推动组织边缘部署的可见性和一致性。

会议 "Ansible Automation Platform 2 自动化网格 - 从本地开始,向全球扩展" 涵盖了如何扩展自动化,以便在分布式边缘位置成功执行。

使用 Ansible 自动化 RHEL 边缘

如果您观看了主题演讲,您将听到有关 SaaS Edge Manager 的发布。但是,我们意识到并非所有人都可以使用云来管理其设备。以下是如何将后记添加到您的 kickstart 文件中,以将您的设备直接注册到 Ansible Automation Platform 库存中,以便您可以使用它来管理您的设备。

%post
# Create ansible playbook to register device to Ansible automation platform
cat > /tmp/add_to_aap.yml <<EOF
---
- hosts: localhost
 vars:
   aap_url=https://AAPHOST.fqdn.com/api/v2/inventories/CHANGEME/hosts/
   aap_username=changeme
   aap_password=changeme
 gather_facts: true
 tasks:
   - name: create hostname from regex of mac address
     ansible.builtin.set_fact:
       edge_hostname: "{{ ansible_default_ipv4.macaddress | replace(':','') }}"
   - name: set hostname to mac ansible_all_ipv4_address
     ansible.builtin.hostname:
       name: "summit-demo-{{ edge_hostname }}"
       use: systemd
   - name: Update Ansible Tower inventory
     uri:
      url: "{{ aap_url }}"
      user: "{{ aap_ks_user }}"
      password: "{{ aap_ks_password }}"
      method: POST
      body:
        name: "{{ ansible_hostname }}"
        variables: '{ipaddress: "{{ ansible_all_ipv4_addresses }}", macaddress: "{{ ansible_default_ipv4.macaddress }}" }'
      force_basic_auth: yes
      status_code: 201
      body_format: json
      validate_certs: no
EOF
ansible-playbook /tmp/add_to_aap.yml
%end

步骤 1:创建库存

  • 在 Ansible Automation Platform 中创建库存,并获取库存编号。

  • 获取 URL:在本例中,库存 ID 为 2

    url example

    https://AAPHOST.fqdn.com/#/inventories/inventory/2/details

  • 在 vars 部分分配 aap_url:aap_url = https://AAPHOST.fqdn.com/api/v2/inventories/2/hosts/

步骤 2:在 Ansible Automation Platform 中创建凭据

在 Ansible Automation Platform 的“访问用户”选项卡中,将凭据分配给 aap_ks_useraap_ks_password

步骤 3:检查 Ansible Automation Platform

您的设备在启动后,您现在应该在 Ansible Automation Platform 中看到它们。

screenshot







介绍一种全新的方式来自动化您的 Azure 云

介绍一种全新的方式来自动化您的 Azure 云

在 2021 年 12 月,Red Hat 和微软宣布 Red Hat Ansible Automation PlatformMicrosoft Azure 上可用。

今年在 Red Hat 峰会 2022 上,Red Hat 宣布 Red Hat Ansible Automation Platform 在 Microsoft Azure 上的全球可用性,目前已在北美全面上市。

我想花一些时间提供有关此产品的一些更多详细信息,以及您为什么要考虑使用 Red Hat Ansible Automation Platform on Azure。

Azure 市场部署

Red Hat Ansible Automation Platform on Azure 从 Azure 市场部署为 托管应用程序。它直接部署到您的 Azure 订阅中,但作为应用程序的发布者,Red Hat 可以访问共享的安全托管资源组,以支持、维护和升级您的部署。更具体地说,一个专门的 Red Hat SRE 团队处理 Red Hat Ansible Automation Platform on Azure 的所有持续管理,而您专注于在整个混合云中扩展组织内的自动化策略。

screenshot

Azure 集成

对于今天使用 Azure 的许多组织来说,Red Hat Ansible Automation Platform on Azure 可以带来巨大的优势。它在您的 Azure 订阅中运行。它与许多 Azure 服务(包括 Azure 计费)无缝集成。此外,如果您有 Microsoft Azure 消费承诺协议 (MACC),Red Hat Ansible Automation Platform on Azure 部署成本将计入您的 MACC,并反映在您的 Azure 账单上。哦,我是否还提到了 Red Hat 支持部署,您可以自动化、自动化,再自动化!

部署 Red Hat Ansible Automation Platform on Azure 后,只需几个简单的配置步骤,即可将其集成到您的 Azure 活动目录 (AD) 环境中以进行身份验证。

screenshot

有大量自动化内容可供您利用,并有示例供您学习,如果您不熟悉 Red Hat Ansible Automation Platform on Azure。

这是一个 GitHub 存储库,其中包含用于自动化许多 Azure 资源的自动化内容,例如 Azure 负载均衡器、Azure PostgreSQL、Azure 网络、Azure 安全组等等。很快,我将重点介绍一些更多内容,因为我们将讨论 Red Hat Ansible 认证内容合集 for Microsoft Azure

这是一些示例内容的图片。

screenshot

内容为王!

任何使用 Red Hat Ansible Automation Platform on Azure 的人都一定会想要使用 Red Hat Ansible 认证内容合集 for Microsoft Azure。但是,通过您的订阅,您可以触手可及所有 Red Hat Ansible 认证内容!

screenshot

Azure 合集包括超过 250 个模块,用于查询、管理和自动化众多 Azure 资源类型。从 Azure AD 到网络,再到数据库,到 AKS,到存储,到备份,到虚拟机,到安全组,到 IAM……等等。

screenshot

如果您想查看模块的完整列表,可以在此处在 Automation automation hub 上查看。

以下是一个 Ansible Automation Platform 工作流模板的示例,它将多个作业模板链接在一起,以执行更大的自动化任务。在这种情况下,为 DevOps 团队启动一个完整的开发环境。

screenshot

深入、扩展,实现更多!

Red Hat Ansible Automation Platform on Azure 包含一个专为云自动化量身定制的自动化执行环境,因此您拥有立即在 Azure 上开始使用所需的一切。话虽如此,经常出现的问题是:“如果我使用 Red Hat Ansible Automation Platform on Azure,是否意味着我只能对 Azure 资源执行自动化?”Ansible Automation Platform 的优势在于,它不依赖于运行的位置。在 Red Hat Ansible Automation Platform on Azure 的情况下,您可以自动化公有云、私有云、物理和虚拟环境以及边缘资源。显然,这里的一个要求是拥有到其他环境的适当网络连接。部署 Red Hat Ansible Automation Platform on Azure,并在任何地方自动化!

人们通常将 Ansible Automation Platform 与配置管理联系在一起。但是,配置管理只是 Ansible Automation Platform 可以完成的众多用例之一。今天,许多组织利用 Ansible Automation Platform 来自动化网络和安全用例,集成到 IT 服务管理 (ITSM) 解决方案(如 ServiceNow)中,以及 Linux 自动化、Windows 自动化和监控和分析解决方案。

此外,随着应用程序现代化的积极推动,许多组织使用 Ansible Automation Platform 集成到其 DevOps CI/CD 管道中。您是否使用 Azure DevOps、Jenkins 或其他 CI/CD 工具?太好了,让您的管道在任何阶段启动 Ansible Automation Platform 自动化作业!

自动化用例是无止境的,利用 Ansible Automation Platform 可以获得许多效率和节省,更不用说减少人为错误和加强跨部门协作了。