【AWS】我尝试使用ansible来自动化繁琐的任务
这是2022年12月21日,关于Digital Cube & Heptagon Advent Calendar的帖子。
因为在工作中有过几次接触的机会,所以我打算借此机会学习一下Ansible。
ansible是一种自动化工具。
Ansible是一种用于自动化和优化系统配置和软件安装等的配置管理工具。由Red Hat公司开发和销售,并作为开源软件公开发布。
- Ansible
使用Ansible可以自动化以前繁琐的手动操作,带来以下优点。
-
- チーム共有が可能
-
- 同じ環境を作れる
-
- 修正が簡単
- コーヒーを飲む時間ができる
相似的服務
如果您对Chef、Puppet等服务感兴趣,可以通过以下链接进行了解。(据说由于其独特的语言,管理起来很困难)
-
- Chef
- Puppet
引入环境
本次的作業將在下列環境下進行。
[local]
- MacBook Air 2019 (intel)
- macOS Ventura 13.0.1
- brew 3.6.15
- ansible 2.13.6
[server]
- Amazon Linux 2
- t3.micro
- EIP関連付け済み(52.69.34.67)
如果您的设备上没有安装 brew,请按照下面的步骤进行安装。
預先準備
可以使用Ansible的话,我们需要准备本地环境。
如果使用brew的话,可以简单地进行安装。
[local]
# ansibleをインストール
brew install ansible
# バージョン確認
ansible --version
ansible [core 2.13.6]
当你被这样责备的时候,请安装错误下面所写的内容,并重新安装ansible。
# エラー内容
Error: python@3.11: the bottle needs the Apple Command Line Tools to be installed.
You can install them, if desired, with:
xcode-select --install
# xcode-selectをインストール
xcode-select --install
# ansibleをインストール
brew install ansible
# バージョン確認
ansible --version
ansible [core 2.13.6]
初始设置
我会在任意的地方创建一个目录。
# 任意の場所にディレクトリを作る
mkdir /hoge/ansible
cd /hoge/ansible
之後,將設置設定檔案。
構成如下。
<プロジェクトディレクトリ>
└── ansible
├── hosts
├── site.yaml
├── ansible.cfg
└── index.html
[aws]
52.69.34.67
# 対象の指定(インベントリファイルで指定した名前)
- hosts: aws
# 管理者権限で実行
become: true
# 以下に実際の操作を記述
tasks:
# パッケージの更新
- name: yum updated
yum:
name: "*"
state: latest
# タイムゾーンの変更
- name: set timezone to Asia/Tokyo
community.general.timezone:
name: Asia/Tokyo
become: yes
# httpdのインストール
- name: httpd installed
yum:
name: httpd
state: installed
become: yes
# httpdの起動・自動起動設定
- name: httpd start and automatic startup setting
service:
name: httpd
state: started
enabled: yes
become: yes
# リポジトリの有効化
- name: enable to install php7.4
shell: "amazon-linux-extras enable php7.4"
changed_when: False
# phpのインストール
- name: php7.4 installed
yum:
name: php
enablerepo: amzn2extra-php7.4
state: present
# index.htmlファイルを対象に配置
- name: index.html deployed
template:
src: ./index.html
dest: /var/www/html/index.html
mode: 0644
[defaults]
remote_user = ec2-user
private_key_file = ~/.ssh/hogehoge.pem
host_key_checking = false
retry_files_enabled = false
inventory = ./hosts
interpreter_python = auto
[privilege_escalation]
become = true
ansible
试一试
# 設定に問題がないかチェック
ansible-playbook -i hosts site.yaml --syntax-check
# 実行
ansible-playbook site.yaml
ansible-playbook site.yaml
PLAY [aws] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [52.69.34.67]
TASK [yum updated] *************************************************************
ok: [52.69.34.67]
TASK [set timezone to Asia/Tokyo] **********************************************
ok: [52.69.34.67]
TASK [httpd installed] *********************************************************
ok: [52.69.34.67]
TASK [httpd start and automatic startup setting] *******************************
ok: [52.69.34.67]
TASK [enable to install php7.4] ************************************************
ok: [52.69.34.67]
TASK [php7.4 installed] ********************************************************
ok: [52.69.34.67]
TASK [index.html deployed] *****************************************************
changed: [52.69.34.67]
PLAY RECAP *********************************************************************
52.69.34.67 : ok=8 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
# date
Wed Dec 21 02:48:20 JST 2022
# httpd -v
Server version: Apache/2.4.54 ()
Server built: Jun 30 2022 11:02:23
# systemctl status httpd
● httpd.service - The Apache HTTP Server
Active: active (running) since Wed 2022-12-21 02:37:06 JST; 11min ago
# php -v
PHP 7.4.33 (cli) (built: Nov 19 2022 00:22:13) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
我对此有所感受。
初始的学习成本可能会有些高,但如果是相同的结构,一旦记住了,就能很容易地在其他环境中复用。这次只是基本操作,但以后还想更深入地探索一下,像是通过使用详细的设定周围或角色来整理playbook。
以下为参考:
请用中文进行原生的改写,只需要一个选项:
请提供以下参考 :
-
- Ansible
-
- Chef
- Puppet