使用 Ansible 配置 EC2 实例时遇到问题

2024-05-05

我对如何使用 Ansible 启动 EC2 实例感到非常困惑。

我正在尝试使用 ec2.py 库存脚本。我不确定应该使用哪一个,因为 Ansible 安装了三个:

  • ansible/lib/ansible/module_utils/ec2.py
  • ansible/lib/ansible/modules/core/cloud/amazon/ec2.py
  • ansible/插件/库存/ec2.py

我认为在 inventory/ 中运行这个是最有意义的,所以我使用以下命令运行它:

ansible-playbook launch-ec2.yaml -i ec2.py

这给了我:

msg: Either region or ec2_url must be specified

因此,我添加一个区域(即使我指定了 vpc_subnet_id),我得到:

msg: Region us-east-1e does not seem to be available for aws module boto.ec2. If the region definitely exists, you may need to upgrade boto or extend with endpoints_path

我想亚马逊最近一定改变了ec2,所以你需要使用VPC?即使当我尝试从 Amazon 控制台启动实例时,“EC2 Classic”选项也被禁用。

当我尝试在 cloud/amazon/ 中使用 ec2.py 脚本时,我得到:

ERROR: Inventory script (/software/ansible/lib/ansible/modules/core/cloud/amazon/ec2.py) had an execution error:

没有比这更多的细节了。

经过一番搜索,我在 /module_utils 中看到了 ec2.py 模块已经变了 https://github.com/ansible/ansible/pull/10734/files所以不需要指定区域。我尝试运行这个文件但得到:

错误:文件 /software/ansible/lib/ansible/module_utils/ec2.py 被标记为可执行文件,但无法正确执行。如果这不应该是可执行脚本,请使用以下命令更正它chmod -x /software/ansible/lib/ansible/module_utils/ec2.py.

因此,正如错误所示,我删除了 ec2.py 文件的可执行权限,但随后出现以下错误:

ERROR: /software/ansible/lib/ansible/module_utils/ec2.py:30: Invalid ini entry: distutils.version - need more than 1 value to unpack

有谁对如何让它发挥作用有任何想法吗?使用的正确文件是什么?我现在完全不知道如何让它发挥作用。


您的帖子中有几个问题。我将尝试将它们总结为三项:

  1. 是否仍然可以在 EC2 Classic(无 VPC)中启动实例?
  2. 如何使用 Ansible 创建新的 EC2 实例?
  3. 如何启动动态清单文件ec2.py?

1.EC2经典版

您的选项会有所不同,具体取决于您创建 AWS 账户的时间、实例类型和使用的 AMI 虚拟化类型。参考文献:亚马逊账户 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html,实例类型 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html#t2-instances-vpc-support.

如果上述参数均不限制 EC2 classic 的使用,您应该能够在不定义任何 VPC 的情况下创建新实例。

2. 使用 Ansible 创建新的 EC2 实例

由于您的实例尚不存在动态清单文件(ec2.py)是没用的。尝试指示 ansible 在本地计算机上运行。

创建一个新的库存文件,例如new_hosts包含以下内容:

[localhost]
127.0.0.1

然后是你的剧本,例如create_instance.yml应该使用本地连接并且hosts: localhost。请参阅下面的示例:

--- # Create ec2 instance playbook

- hosts: localhost
  connection: local
  gather_facts: false
  vars_prompt:
    inst_name: "What's the name of the instance?"
  vars:
      keypair: "your_keypair"
      instance_type: "m1.small"
      image: "ami-xxxyyyy"
      group: "your_group"
      region: "us-west-2"
  tasks:
    - name: make one instance
      ec2: image={{ image }}
           instance_type={{ instance_type }}
           keypair={{ keypair }}
           instance_tags='{"Name":"{{ inst_name }}"}'
           region={{ region }}
           group={{ group }}
           wait=true
      register: ec2_info

    - name: Add instances to host group
      add_host: hostname={{ item.public_ip }} groupname=ec2hosts
      with_items: ec2_info.instances

    - name: Wait for SSH to come up
      wait_for: host={{ item.public_dns_name }} port=22 delay=60 timeout=320 state=started
      with_items: ec2_info.instances

此操作将创建一个 EC2 实例,并将其公共 IP 注册为 ansible 主机变量ec2hostsIE。就像您已在清单文件中定义它一样。如果您想配置刚刚创建的实例,只需添加一个新的 Play 即可,这非常有用hosts: ec2hosts.

最终,按如下方式启动 ansible:

export ANSIBLE_HOST_KEY_CHECKING=false
export AWS_ACCESS_KEY=<your aws access key here>
export AWS_SECRET_KEY=<your aws secret key here>

ansible-playbook -i new_hosts create_instance.yml

环境变量的目的ANSIBLE_HOST_KEY_CHECKING=false是为了避免在连接到实例时提示添加 ssh 主机密钥。

Note:boto 需要安装在运行上述 ansible 命令的机器上。

3.使用ansible的ec2动态库存

EC2动态清单由2个文件组成,ec2.py and ec2.ini。就您的具体情况而言,我认为您的问题是由于以下事实:ec2.py无法定位ec2.ini file.

要解决您的问题,请复制ec2.py and ec2.ini到您打算运行 ansible 的计算机中的同一文件夹,例如到/etc/ansible/.

Pre Ansible 2.0 版本(相应更改分支).

cd /etc/ansible
wget https://raw.githubusercontent.com/ansible/ansible/stable-1.9/plugins/inventory/ec2.py
wget https://raw.githubusercontent.com/ansible/ansible/stabe-1.9/plugins/inventory/ec2.ini
chmod u+x ec2.py

对于安塞波 2:

cd /etc/ansible
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini
chmod u+x ec2.py

配置ec2.ini并运行ec2.py,它应该将 ini 格式的主机列表打印到标准输出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Ansible 配置 EC2 实例时遇到问题 的相关文章

随机推荐

  • 领域驱动设计:处理原子操作和事务

    必须保证每个聚合内部的一致性 在存储库中执行此操作很容易 因为我始终可以使用数据库或框架中的事务 我对存储库之外发生的事情表示怀疑 一项服务可能需要使用多个聚合来处理请求 在服务处理过程中或在保留聚合时可能会出现问题 如果服务处理过程中出现
  • 如何生成满足某些限制的整数?

    任何人都可以帮我提供生成满足某些限制的整数的技术吗 例如 假设我需要生成整数 x 和 y 使得 100 gt x and y lt x 5 我指的并不是这个特定的示例 而是一些生成满足某些条件的整数的通用技术 嗯 这并不难 选择一个整数 可
  • 自动调整“非视网膜”图像版本的大小

    我正在寻找一种解决方案 可以使我免于维护同一图像的两个版本 一个用于视网膜显示器 又名 2x 另一个用于非视网膜显示器 我的目标是仅维护 2x 图像 并使用一些 神奇工具 只需单击一下即可调整所有图像的大小 甚至在 XCode 中构建时效果
  • 如何为Spring测试创建TestContext?

    我有一个相对较小的 Java 库 它实现了几十个 bean 没有数据库或 GUI 我创建了一个 Spring Bean 配置文件 其他 Java 项目使用该文件将我的 bean 注入到他们的东西中 我现在第一次尝试使用 Spring Tes
  • 在 Android 中使用新的“manifestmerger”属性

    在最新版本的 ADT 版本 20 预览版 3 中 他们说可以使库的清单文件与使用它们的项目合并 自动将库项目清单文件合并到包含文件中 项目的清单 使用manifestmerger enabled 属性启用 我如何以及在哪里使用它 我在任何地
  • 错误 ITMS-90168:“您上传的二进制文件无效。”

    我正在尝试将应用程序上传到 App Store 它包含一个 watchOS 2 应用程序 watchOS 1 扩展和一些 iOS 扩展 我不明白为什么会发生这种情况 当我使用 Xcode 7 的 上传到 App Store 功能 或使用应用
  • 从原始 URL 获取重定向 URL

    我的数据库中有一个表 其中包含一些网站的 URL 我必须打开这些 URL 并验证这些页面上的一些链接 问题是某些 URL 被重定向到其他 URL 对于这样的 URL 我的逻辑是失败的 有什么方法可以传递原始 URL 字符串并获取重定向的 U
  • 如何对变量使用 GRANT?

    我在 MySql 中使用 GRANT 和变量时遇到一些麻烦 SET username user123 pass pass123 GRANT USAGE ON TO username IDENTIFIED BY pass GRANT INSE
  • Groovy 与 Grape 和 AntBuilder 类加载器问题

    我想使用 groovy 编写一个小 ftp 脚本 并找到了这篇文章http www hhhhq org blog 2009 05 01 ftp using groovy and ant http www hhhhq org blog 200
  • 如何在 MSBuild 项转换分隔符中包含单引号?

    我需要在项目转换中包含单引号 如下所示
  • Spring Data 中 IQueryable 的等效项

    我习惯了 Net 和 LINQtoEntities 尤其是 IQueryable 部分 它允许在获取结果之前通过不同的函数传送请求 Spring数据中是否存在类似的东西 或者任何其他 java ORM 我希望能够做的基本示例 private
  • 为什么 choice.com 在批处理文件中创建无限循环?

    昨天我已经下载了choice com命令从这里FTP link ftp ftp microsoft com Services TechNet Windows msdos RESKIT SUPPDISK CHOICE COM在 Windows
  • 使用 STL 迭代器而不初始化它

    我想做这样的事情 container iterator it NULL switch eSomeEnum case Container1 it vecContainer1 begin break case Container2 it vec
  • Python-打印字符串一定次数[重复]

    这个问题在这里已经有答案了 可能的重复 Python 多次打印 https stackoverflow com questions 6293421 python printing multiple times 我想知道如何打印 String
  • 从 webdriver 中的文本区域读取文本

    在用 Java 编写 webdriver 测试时 我试图从 textarea 读取文本 由于某种原因 当我使用时我得到了 null getAttribute WebElement text wd findElement By id edit
  • Objective-C 中将 重新定义为另一种符号

    我们有一堂课WayPoint 但在某个时候 我们决定将类重命名为Placemark 然而 我们并不是真的想改变类的名称 因为这会导致现有代码的大量修改 因此 我添加了一行typedef在头文件的底部并开始使用Placemark从那以后 在任
  • 如何在 Scala 中操作 JSON AST

    我正在尝试 json4s 库 基于 lift json 我想做的一件事是将 JSON 字符串解析为 AST 然后对其进行操作 例如 我想更新插入一个字段 如果该字段不存在 则将该字段插入到 AST 中 如果存在 则更新其值 我无法在文档中找
  • 将相机移动到点击的 SCNNode

    我在用着SceneKit and Swift尝试移动相机 使其 聚焦 在所选节点上 我知道我启用了 defaultCameraController 但我试图通过调整相机的位置dolly rotate and translateInCamer
  • 如何选择此“tr”中的下一个“td”? [复制]

    这个问题在这里已经有答案了 我想选择 a 的下一个兄弟姐妹td标签在一个tr元素 The tr元素是这样的 tr td Created On td td 06 28 2018 06 32 td tr 我的 XPATH 代码如下所示 text
  • 使用 Ansible 配置 EC2 实例时遇到问题

    我对如何使用 Ansible 启动 EC2 实例感到非常困惑 我正在尝试使用 ec2 py 库存脚本 我不确定应该使用哪一个 因为 Ansible 安装了三个 ansible lib ansible module utils ec2 py