amazon-web-services - Ansible 和 s3 模块

标签 amazon-web-services amazon-s3 ansible

我正在尝试使用 Ansible 将一些文件下载到我的各个 EC2 实例。我遇到的问题是我的 AWS 凭证。 AWS Ansible 模块都运行良好,包括 S3 模块。以下内容(当我替换我的 AWS 凭证时)就像一个魅力。

  - name: upload data import file
    s3: aws_access_key=<accesskey> aws_secret_key=<secretkey> bucket=my-bucket object=/data.zip mode=get

但是,我需要我编写的 Ansible 剧本和角色可供任何人使用,并且我不想对任何 AWS 凭证进行硬编码。在我使用 Ansible AWS 模块的其他地方,我已经消除了 aws_access_key 和 aws_secret_key,并且它工作得很好,因为 Ansible 在环境变量中查找这些值。但是,对于所有其他用途,我将它们作为本地操作运行。因此,它从我的本地计算机中提取凭据,这就是我想要的。问题是当我在一个实例上运行 S3 模块时,如果我消除凭据参数,我会得到:

failed: [54.173.19.238] => {"failed": true}
msg: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials

我想这是因为由于我没有指定凭据,所以它在我的实例上的环境变量中查找它们,而这些变量尚未设置。我也不想将它们设置在实例的环境变量中。

有没有办法可以使用 ansible 从 S3 下载文件,而不必指定我的 AWS 凭证?

最佳答案

ansible 中的 S3 模块不支持配置文件选项,但如果您已将 aws_key 和 aws_secret 作为变量导出,则可以这样使用:

export aws_key="AAAAAAAAAAAAAAAAAAAAAAAAAA"
export aws_secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

然后你可以像这样使用它们:

s3:
  aws_access_key: "{{ lookup('env','aws_key') }}"
  aws_secret_key: "{{ lookup('env','aws_secret') }}"
  bucket: "my-bucket"
  object: "/data.zip"
  mode: get

希望这能帮助您或任何正在寻找的人在 ansible playbook 中使用本地环境变量。谢谢

关于amazon-web-services - Ansible 和 s3 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28997757/

相关文章:

android - 为 DynamoDB Android SDK 实现 CreatedAt 和 UpdatedAt 时间戳

amazon-web-services - AWS Cognito 从用户池中删除所有用户

amazon-web-services - 理论上是否可以通过单个 http POST 请求在 Kinesis 中使用 `putRecord`?

亚马逊云上的 ASP.NET 网站

ansible - ansible 中的换行符 - var 提示符

Ansible:查找文件并遍历路径

javascript - 将 Cordova camera.getPicture 文件传递​​到 AWS S3 (JS SDK)

html - 如何避免 PWA 中的 CORS 问题

javascript - 将 blob 直接上传到 s3 时出现问题

python - 来自 with_items 的 Ansible 设置变量