0

我正在尝试创建一个 lambda 函数,该函数将关闭在 EC2 实例上运行的 systemd 服务。我认为使用 boto3 模块中的 ssm 客户端可能是最好的选择,而我正在考虑使用的具体命令是 send_command()。理想情况下,我想使用 Ansible 来关闭 systemd 服务。所以我正在尝试使用“AWS-ApplyAnsiblePlaybooks”,我在这里卡住了,似乎 boto3 ssm 客户端需要一些参数,我尝试按照这里的 boto3 文档,但实际上并不清楚它希望我如何呈现参数,我在“AWS-ApplyAnsiblePlaybooks”文档中找到了它正在寻找的参数 - 但是当我将它们包含在我的代码中时,它告诉我参数无效. 我还尝试访问 AWS 的 GitHub 存储库,因为我知道他们有时有代码示例,但他们没有任何用于 send_command() 的内容。我已经上传了一个要点,以防人们对我到目前为止所写的内容感兴趣,我肯定有兴趣了解其他人如何通过 boto3 python 脚本使用 ssm 运行他们的 Ansible 剧本。

4

1 回答 1

1

As far I can see by looking at the documentation for that SSM document and the code you shared in the gist. you need to add "SourceType":["S3"] and you need to have a path in the Source Info like:

{
   "path":"https://s3.amazonaws.com/path_to_directory_or_playbook_to_download"
}

so you need to adjust your global variable S3_DEVOPS_ANSIBLE_PLAYBOOKS.

Take a look at the CLI example from the doc link, it should give you ideas on how yo re-structure your Parameters:

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"
于 2021-02-10T20:41:32.720 回答