建立 Ansible 学习环境的初学者教程第2/3部分(在 AWS 上进行环境建立)
首先
你好。这是Ansible学习环境搭建的第二次。上次我们介绍了Ansible的概况。如果您还没有看过的话,希望您能阅读一下。(即使不读也能顺利进行环境搭建)
第1回 Ansible简介
第二節:构建学习环境(当前页)
创建中:第三篇《Ansible实践》
让我们在这次的环境中建立一个虚拟机并安装Ansible来试试吧。
目录
・准备工作
・建立环境
・最后
预先准备
・AWS账户
・teraterm(用于连接服务器的SSH接口)
建立环境
使用Cloudformation进行资源构建。
构建下述环境。
建构过程
1. 创建 EC2 密钥对。
2. 在 Cloudformation 中创建堆栈。
3. 使用 teraterm 连接到 Ansible 控制器。
4. 安装 Ansible。
5. 配置密钥。
6. 进行连接测试和其他设置。
详细的构建步骤
- 1. 创建EC2密钥对
- 虽然在Cloudformation中也可以创建EC2密钥对,但是在删除堆栈时,密钥也会被删除,因此本次我们会提前创建。可以通过EC2控制台来创建密钥对。
- 使用Cloudformation创建一个堆栈。
- 使用以下模板来建立上述架构图的环境。你可以直接复制并使用,但请不要忘记更改密钥的名称。
---
AWSTemplateFormatVersion: "2010-09-09"
Resources:
VPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: "172.16.0.0/16"
InternetGateway:
Type: "AWS::EC2::InternetGateway"
AttachGateway:
Type: "AWS::EC2::VPCGatewayAttachment"
Properties:
VpcId: !Ref "VPC"
InternetGatewayId: !Ref "InternetGateway"
PublicRouteTable:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref "VPC"
PublicRoute:
Type: "AWS::EC2::Route"
DependsOn: "AttachGateway"
Properties:
RouteTableId: !Ref "PublicRouteTable"
DestinationCidrBlock: "0.0.0.0/0"
GatewayId: !Ref "InternetGateway"
PublicSubnetARouteTableAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref "PublicSubnetA"
RouteTableId: !Ref "PublicRouteTable"
PublicSubnetBRouteTableAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref "PublicSubnetB"
RouteTableId: !Ref "PublicRouteTable"
PublicSubnetA:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref "VPC"
CidrBlock: "172.16.0.0/24"
AvailabilityZone: "ap-northeast-1a"
PublicSubnetB:
Type: "AWS::EC2::Subnet"
Properties:
VpcId: !Ref "VPC"
CidrBlock: "172.16.1.0/24"
AvailabilityZone: "ap-northeast-1c"
SecurityGroup:
Type: "AWS::EC2::SecurityGroup"
Properties:
GroupDescription: "Allow SSH access to EC2 instances"
VpcId: !Ref "VPC"
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: "0.0.0.0/0"
EC2Instance1:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-0ffac3e16de16665e"
InstanceType: "t2.micro"
KeyName: "作成した鍵の名前"
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: 0
GroupSet:
- !Ref "SecurityGroup"
SubnetId: !Ref "PublicSubnetA"
Tags:
- Key: "Name"
Value: "Ansible-Controller"
EC2Instance2:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-0ffac3e16de16665e"
InstanceType: "t2.micro"
KeyName: "作成した鍵の名前"
NetworkInterfaces:
- AssociatePublicIpAddress: true
DeviceIndex: 0
GroupSet:
- !Ref "SecurityGroup"
SubnetId: !Ref "PublicSubnetB"
Tags:
- Key: "Name"
Value: "Ansible-Target"
创建堆栈的方法——创建堆栈的方式
- 3. 使用teraterm连接到Ansible Controller。
- 使用teraterm通过SSH连接到创建的EC2实例(Ansible Controller)。输入Controller的公共IP地址,使用创建的密钥连接到服务器。在此之后,为了配置公钥,最好在此时也连接到目标主机。
4. 安装Ansible
按照以下命令安装Ansible
#以root身份登录
[ec2-user@ansible-controller ~]$ sudo su –
#使用pip3安装Ansible
[root@ansible-controller ~]# pip3 install ansible
#确认Ansible版本
[root@ansible-controller ~]# ansible –version
5. 配置密钥
从这里开始,进行配置以便在Controller上通过SSH连接到目标主机。
#生成SSH密钥对
[root@ansible-controller ~]$ ssh-keygen -t rsa
※需要以交互方式回答3次,每次都按Enter键
#将生成的公钥追加到authorized_keys文件中
[root@ansible-controller ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#更改authorized_keys文件的权限
[root@ansible-controller ~]# chmod 600 ~/.ssh/authorized_keys
#复制显示的密钥
[root@ansible-controller ~]# cat .ssh/id_rsa.pub
#rootでログイン
[ec2-user@ansible-target ~]$ sudo su -
#authorized_keysにコピーしたキーを張り付ける
[root@ansible-target ~]# vi .ssh/authorized_keys
6. 连通测试
#/etcにansibleのディレクトリ作成
[root@ansible-controller ~]$ mkdir /etc/ansible
#作成した/ansible直下にhostsファイルを作成し、TargetサーバのプライベートIPを追加
[root@ansible-controller ~]# vi /etc/ansible/hosts
[target]
172.16.1.73(TargetサーバのプライベートIP)
#targetに対してpingを送信
[root@ansible-controller ~]# ansible target -m ping
Are you sure you want to continue connecting (yes/no)? yes
172.16.1.73 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
如果显示出这样的情况,那就没有问题。我同时认为下面会显示两个类似警告的文本。
[DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the
controller starting with Ansible 2.12. Current version: 3.7.16 (default, Dec 15
2022, 23:24:54) [GCC 7.3.1 20180712 (Red Hat 7.3.1-15)]. This feature will be
removed from ansible-core in version 2.12. Deprecation warnings can be disabled
by setting deprecation_warnings=False in ansible.cfg.
[WARNING]: Platform linux on host 172.16.1.73 is using the discovered Python
interpreter at /usr/bin/python, but future installation of another Python
interpreter could change the meaning of that path. See
https://docs.ansible.com/ansible-
core/2.11/reference_appendices/interpreter_discovery.html for more information.
我們會最後處理這個警告訊息。
#configファイルの作成し、以下を追加
[root@ansible-controller ~]# vi /etc/ansible/ansible.cfg
[defaults]
deprecation_warnings=False
interpreter_python = /usr/bin/python
使用这个方法后,错误将不再出现。
请参考以下内容,了解导致该警告信息出现的原因。
最后
辛苦了。
安装成功了吗?
由于文章变得很长,关于在Azure上进行环境配置的内容将在另一篇文章中介绍。
下次将介绍使用Ansible创建用户等实战部分。
非常感谢您的阅读。
← 第1章
→ 第三章 正在制作