如何使用Ansible创建AWS ec2密钥
我想使用Ansible工具创建Amazon EC2密钥对。
是否可以使用Ansible创建AWS ec2密钥?
您需要使用Ansible的ec2_key模块。
此模块依赖python-boto 2.5或更高版本。
boto只是使用API到Amazon Web Services的python接口。
您可以将boto用于Amazon S3,Amazon EC2等服务。
简而言之,您需要与boto模块一起安装ansible。
让我们看看如何安装boto并将其与Ansbile结合使用。
步骤1在Ubuntu Linux上安装最新版本的Ansible
您必须在系统上配置PPA才能安装最新版本的ansible。
要管理从各种PPA(个人软件包存档)安装软件的存储库。
它允许您上载由Launchpad构建和发布为apt存储库的Ubuntu源程序包。
执行以下apt-get命令或apt命令:
$ sudo apt update $ sudo apt upgrade $ sudo apt install software-properties-common
接下来将ppa:ansible/ansible添加到您的系统中软件来源:
$ sudo apt-add-repository ppa:ansible/ansible
更新您的存储库并安装ansible:
$ sudo apt update $ sudo apt install ansible
安装boto:
$ pip3 install boto3
关于在CentOS/RHEL 7.x上安装Ansible的注释
您需要在CentOS和RHEL 7.x上与yum命令一起设置EPEL存储库:
$ cd /tmp $ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm $ ls *.rpm $ sudo yum install epel-release-latest-7.noarch.rpm $ sudo yum install ansible
安装boto:
$ pip install boto3
步骤2配置Boto
您需要设置AWS凭证/API密钥。
请参阅AWS Security Credentials文档,以了解如何创建编程API密钥。
使用mkdir命令和设置API密钥创建一个名为~/.aws的目录:
$ mkdir -pv ~/.aws/ $ vi ~/.aws/credentials
[default] aws_access_key_id = YOUR-ACCESS-KEY-HERE aws_secret_access_key = YOUR-SECRET-ACCESS-KEY-HERE
还要设置默认的AWS区域:
$ vi ~/.aws/config
输出示例:
[default] region = us-west-1
通过创建一个简单的名为test-boto.py的python程序,使用API测试您的Boto设置:
#!/usr/bin/python3 # A simple program to test boto and print s3 bucket names import boto3 t = boto3.resource('s3') for b in t.buckets.all(): print(b.name)
如下运行:
$ python3 test-boto.py
输出示例:
theitroad-images theitroad-backups-cbz theitroad-backups-forum
输出确认Python-boto使用AWS API正常工作。
步骤3使用Ansible创建AWS ec2密钥
如下创建一个名为ec2.key.yml的剧本:
-- - hosts: local connection: local gather_facts: no tasks: - name: Create a new EC2 key ec2_key: name: theitroad-key region: us-west-1 register: ec2_key_result - name: Save private key copy: content="{{ ec2_key_result.key.private_key }}" dest="./aws.theitroad.pem" mode=0600 when: ec2_key_result.changed
其中:
ec2_key:
维护ec2密钥对。- 名称:theitroad_key密钥对的名称。
region:us-west-1
要使用的AWS区域。register:ec2_key_result
:将生成的密钥结果保存到ec2_key_result变量中。copy:content =" {{ec2_key_result.key.private_key}}" dest =" ./aws.theitroad.pem" mode = 0600
:将ec2_key_result.key.private_key的内容设置为名为aws.theitroad.pem的文件在当前目录中。将文件的模式设置为0600(unix文件权限)。- 何时:ec2_key_result.changed:仅在ec2_key_result更改为true时保存。我们不想覆盖我们的密钥文件。
您还必须创建主机文件,如下所示:
[local] localhost
如下运行您的剧本:
$ ansible-playbook -i hosts ec2.key.yml
最后,您应该拥有一个可用于AWS EC2的名为aws.theitroad.pem的私钥。
要查看密钥,请使用cat命令:
$ cat aws.theitroad.pem
如果您有EC2 VM,请按以下方式使用它:
$ ssh -i aws.theitroad.pem user@ec2-vm-dns-name
查找有关python数据结构变量名称的信息,例如ec2_key_result.changed和ec2_key_result.key.private_key
您一定想知道我如何使用变量名,例如ec2_key_result.changed和ec2_key_result.key.private_key。
他们在某处定义吗?
从API调用返回值。
只需运行带有-v选项的ansible-playbook命令即可查看此类信息:
$ ansible-playbook -v -i hosts ec2.key.yml
如何删除金钥?
使用以下ec2-key-delete.yml:
-- - hosts: local connection: local gather_facts: no tasks: - name: Delete a EC2 key ec2_key: name: theitroad-key region: us-west-1 # absent means delete keypair state: absent
如下运行:
$ ansible-playbook -i hosts ec2-key-delete.yml