演练:创建运行Ansible剧本的关联 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

演练:创建运行Ansible剧本的关联

您可以使用 AWS-ApplyAnsiblePlaybooks SSM 文档创建运行Ansible剧本的State Manager关联。 State Manager的能力是 Amazon Systems Manager。本文档为运行 Playbook 提供了以下好处:

  • 支持运行复杂的 Playbook

  • 支持从GitHub亚马逊简单存储服务 (Amazon S3) 下载剧本

  • 支持压缩的 PlayBook 结构

  • 增强的日志记录

  • 捆绑 Playbook 时可以指定要运行的 Playbook

注意

Systems Manager 包括两个 SSM 文档,允许您创建运行Ansible剧本的State Manager关联:AWS-RunAnsiblePlaybook和。AWS-ApplyAnsiblePlaybooksAWS-RunAnsiblePlaybook 文档已被弃用。它在 Systems Manager 中仍然提供,用于传统用途。由于此处介绍的增强功能,我们建议您使用 AWS-ApplyAnsiblePlaybooks 文档。

不支持运行Ansible剧本的关联。macOS

支持运行复杂的 Playbook

AWS-ApplyAnsiblePlaybooks 文档支持捆绑的复杂 Playbook,因为它会在执行指定的主 Playbook 之前将整个文件结构复制到本地目录中。您可以在 Zip 文件或目录结构中提供源 Playbook。Zip 文件或目录可以存储在GitHub或 Amazon S3 中。

支持从 GitHub 下载 Playbook

AWS-ApplyAnsiblePlaybooks 文档使用 aws:downloadContent 插件下载 Playbook 文件。文件可以存储在单个文件GitHub中,也可以存储为一组剧本文件。要从中下载内容GitHub,请以 JSON 格式指定有关GitHub存储库的信息。下面是一个例子。

{ "owner":"TestUser", "repository":"GitHubTest", "path":"scripts/python/test-script", "getOptions":"branch:master", "tokenInfo":"{{ssm-secure:secure-string-token}}" }

支持从 Amazon S3 下载 Playbook

您也可以将Ansible剧本作为单个.zip 文件或目录结构存储和下载到 Amazon S3 中。要从 Amazon S3 下载内容,您必须指定该文件的路径。以下是两个示例。

示例 1:下载特定 Playbook 文件

{ "path":"https://s3.amazonaws.com/doc-example-bucket/playbook.yml" }

示例 2:下载目录的内容

{ "path":"https://s3.amazonaws.com/doc-example-bucket/ansible/webservers/" }
重要

如果您指定 Amazon S3,则必须使用该AmazonS3ReadOnlyAccess策略配置托管节点上的 Amazon Identity and Access Management (IAM) 实例配置文件。有关更多信息,请参阅为 Systems Manager 配置实例权限

支持压缩的 PlayBook 结构

AWS-ApplyAnsiblePlaybooks 文档使您可以在下载的捆绑包中运行压缩的 .zip 文件。该文档检查下载的文件是否包含 .zip 格式的压缩文件。如果找到.zip,则文档会自动解压缩该文件,然后运行指定的自动化。Ansible

增强的日志记录

AWS-ApplyAnsiblePlaybooks 文档包括一个可选参数,用于指定不同级别的日志记录。指定 -v 来表示低详细程度,-vv 或 –vvv 表示中等详细程度,-vvvv 表示调试级别日志记录。这些选项直接映射到Ansible详细程度选项。

捆绑 Playbook 时可以指定要运行的 Playbook

AWS-ApplyAnsiblePlaybooks 文档包含一个必需参数,用于指定捆绑多个 PlayBook 时要运行哪个 PlayBook。此选项为运行 PlayBook 提供了灵活性,以支持不同的使用案例。

已安装依赖项

如果您为InstallDependencies参数指定 True,则 Systems Manager 会验证您的节点是否安装了以下依赖项:

  • Ubuntu Server/Debian Server: apt-get(包管理)、Python 3、、Ansible Unzip

  • 亚马逊 Linux:Ansible

  • RHEL:Python 3,Ansible,解压缩

如果找不到这些依赖项中的一个或多个,则 Systems Manager 将自动安装它们。

创建运行Ansible剧本的关联(控制台)

以下过程介绍如何使用 Systems Manager 控制台创建通过AWS-ApplyAnsiblePlaybooks文档运行Ansible剧本的State Manager关联。

创建运行Ansible剧本的关联(控制台)
  1. 打开 Amazon Systems Manager 控制台,网址为 https://console.aws.amazon.com/systems-manager/

  2. 在导航窗格中,选择 State Manager

    -或者-

    如果首先打开 Amazon Systems Manager 主页,请选择菜单图标 ( 
    The menu icon
  ) 以打开导航窗格,然后选择State Manager

  3. 选择 Create Association,然后选择 State Manager

  4. 对于 Name (名称),请指定一个名称,该名称可帮助您记住关联的用途。

  5. Document (文档) 列表中,选择 AWS-ApplyAnsiblePlaybooks

  6. 参数部分中,对于源类型,选择其中一个GitHubS3

    GitHub

    如果您愿意 GitHub,请按以下格式输入存储库信息。

    { "owner":"user_name", "repository":"name", "path":"path_to_directory_or_playbook_to_download", "getOptions":"branch:branch_name", "tokenInfo":"{{(Optional)_token_information}}" }

    S3

    如果选择 S3,则采用以下格式输入路径信息:

    { "path":"https://s3.amazonaws.com/path_to_directory_or_playbook_to_download" }
  7. 对于 Install Dependencies (安装依赖项),请选择一个选项。

  8. (可选)对于 Playbook File (PlayBook 文件),输入文件名。如果 Zip 文件包含 Playbook,则必须指定 Zip 文件的相对路径。

  9. (可选)在 “额外变量” 中,输入要Ansible在运行时发送State Manager到的变量。

  10. (可选)对于 Check (检查),选择一个选项。

  11. (可选)对于 Verbose (详细),选择一个选项。

  12. 对于 Targets (目标),选择一个选项。有关使用目标的信息,请参阅 关于 State Manager 关联中的目标和速率控制

  13. Specify schedule (指定计划) 部分中,选择 On schedule (按计划)No schedule (无计划)。如果选择 On schedule (按计划),则可使用提供的按钮为关联创建 cron 或 rate 计划。

  14. 高级选项 部分中,对于合规性严重级别,选择关联的严重级别。合规性报告指示关联状态是合规还是不合规以及您在此处指示的严重级别。有关更多信息,请参阅 关于 State Manager 关联合规性

  15. Rate control(速率控制)部分,配置用于在托管式节点机群中运行 State Manager 关联的选项。有关使用速率控制的信息,请参阅 关于 State Manager 关联中的目标和速率控制

    并发部分中,选择一个选项:

    • 选择 targets (目标) 输入可同时运行关联的目标的绝对数量。

    • 选择 percentage (百分比) 输入可同时运行关联的目标集的百分比。

    错误阈值部分中,选择一个选项:

    • 选择 errors (错误) 以输入允许的错误绝对数量,超过该数量后 State Manager 停止对其他目标运行关联。

    • 选择 percentage (百分比) 以输入允许的错误百分比,超过该百分比后 State Manager 停止对其他目标运行关联。

  16. (可选)对于 Output options (输出选项),要将命令输出保存到文件,请选中 Enable writing output to S3 (启用将输出写入 S3) 方框。在方框中输入存储桶和前缀(文件夹)名称。

    注意

    授予将数据写入 S3 存储桶的能力的 S3 权限,是分配给托管式节点的实例配置文件的权限,而不是执行此任务的 IAM 用户的权限。有关更多信息,请参阅为 Systems Manager 配置实例权限为混合环境创建 IAM 服务角色。此外,如果指定的 S3 存储桶位于不同存储桶中 Amazon Web Services 账户,请验证与托管节点关联的实例配置文件或 IAM 服务角色是否具有写入该存储桶所需的权限。

  17. 选择创建关联

注意

如果使用标签在一个或多个目标节点上创建关联,然后从某一节点中删除标签,则该节点将不再运行该关联。该节点不再与 State Manager 文档关联。

创建运行Ansible剧本的关联 (CLI)

以下过程介绍如何使用 Amazon Command Line Interface (Amazon CLI) 创建通过AWS-ApplyAnsiblePlaybooks文档运行Ansible剧本的State Manager关联。

创建运行Ansible剧本的关联 (CLI)
  1. 安装并配置 Amazon Command Line Interface (Amazon CLI)(如果尚未安装)。

    有关信息,请参阅安装或更新 Amazon CLI的最新版本

  2. 运行以下命令之一,创建通过使用标签定位节点来运行Ansible剧本的关联。将每个示例资源占位符替换为您自己的信息。命令 (A) 指定GitHub为源类型。命令 (B) 指定 Amazon S3 作为源类型。

    (A) GitHub 来源

    Linux & macOS
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets Key=tag:TagKey,Values=TagValue \ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"name\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"],"TimeoutSeconds":["3600"]}' \ --association-name "name" \ --schedule-expression "cron_or_rate_expression"
    Windows
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" ^ --targets Key=tag:TagKey,Values=TagValue ^ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"name\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"], "TimeoutSeconds":["3600"]}' ^ --association-name "name" ^ --schedule-expression "cron_or_rate_expression"

    下面是一个例子。

    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets "Key=tag:OS,Values=Linux" \ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"ansibleDocumentTest\", \"repository\": \"Ansible\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True"],"PlaybookFile":["hello-world-playbook.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"]}' \ --association-name "AnsibleAssociation" \ --schedule-expression "cron(0 2 ? * SUN *)"

    (B) S3 源

    Linux & macOS
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets Key=tag:TagKey,Values=TagValue \ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_playbook_to_download\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"]}' \ --association-name "name" \ --schedule-expression "cron_or_rate_expression"
    Windows
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" ^ --targets Key=tag:TagKey,Values=TagValue ^ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_playbook_to_download\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"]}' ^ --association-name "name" ^ --schedule-expression "cron_or_rate_expression"

    下面是一个例子。

    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets "Key=tag:OS,Values=Linux" \ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/DOC-EXAMPLE-BUCKET/playbook.yml\"}"],"InstallDependencies":["True"],"PlaybookFile":["playbook.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"]}' \ --association-name "AnsibleAssociation" \ --schedule-expression "cron(0 2 ? * SUN *)"
    注意

    State Manager 关联不支持所有的 cron 和 rate 表达式。有关为关联创建 cron 和 rate 表达式的更多信息,请参阅 参考:适用于 Systems Manager 的 Cron 和 Rate 表达式

    系统将尝试在节点上创建关联并立即应用状态。

  3. 运行以下命令查看您刚才创建的关联的更新状态。

    aws ssm describe-association --association-id "ID"