建立 Ansible 学习环境的初学者教程第2/3部分(在 AWS 上进行环境建立)

首先

你好。这是Ansible学习环境搭建的第二次。上次我们介绍了Ansible的概况。如果您还没有看过的话,希望您能阅读一下。(即使不读也能顺利进行环境搭建)

第1回 Ansible简介

 

第二節:构建学习环境(当前页)

创建中:第三篇《Ansible实践》

让我们在这次的环境中建立一个虚拟机并安装Ansible来试试吧。

目录

・准备工作
・建立环境
・最后

预先准备

・AWS账户
・teraterm(用于连接服务器的SSH接口)

建立环境

使用Cloudformation进行资源构建。
构建下述环境。

EC2Ansible-controlleransible-targetOSAmazon Linux2Amazon Linux2Ansible2.11.12不要
undefined

建构过程

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"

创建堆栈的方法——创建堆栈的方式

undefined
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章

 

→ 第三章 正在制作

广告
将在 10 秒后关闭
bannerAds