【Ansible】AnsibleでEC2にNginxを自動構築してみようの巻(AWS無料枠)
1. はじめに(背景・目的)
■ 筆者について
20代後半・インフラエンジニア3年目・東京都内IT企業勤務
Ansibleに触れたことはありませんでしたが、現在参画しているプロジェクトで採用されているため、キャッチアップとして実際にサーバ構築を行ってみました。
⚠️ 注意事項(セキュリティについて)
本記事は学習・検証目的のハンズオンとして構成しています。
そのため、以下のようなセキュリティ観点は考慮していませんのでご注意ください。
- セキュリティグループの最小権限設計
- SSHアクセス制御(IP制限・踏み台構成など)
- 鍵管理や認証強化
- OSやミドルウェアのセキュリティ設定
本記事では、
- AWS無料利用枠を使用
- EC2を2台構成で用意
という前提で、
👉 Ansibleを使ってEC2にNginxを自動インストールするところまで
をハンズオン形式でやってみました。
2. 構成
今回はシンプルな構成です。
[ローカルPC](Mac / Windows)
↓ SSH
[Ansibleサーバ](制御ノード)
↓ SSH
[ターゲットサーバ](管理対象ノード)
-
EC2:2台(t3.micro / Amazon Linux)
- Ansibleサーバ(操作用)
- ターゲットサーバ(Nginxをインストールする対象)
3. EC2作成
Ansibleサーバ用とターゲットサーバ用にEC2を2台作成します。
(作成手順は省略)
■ セキュリティグループ設定
両方のEC2に以下を許可します。
- TCP 22(SSH)
- TCP 80(HTTP)
4. Ansibleインストール(Ansibleサーバで実行)
実行場所:Ansibleサーバ
SSHでAnsibleサーバに接続後、以下を実行します。
■ パッケージ更新
sudo dnf update -y
■ Ansibleインストール
sudo dnf install ansible -y
■ バージョン確認
ansible --version
実行結果例
ansible [core 2.15.3]
5. SSH設定
AnsibleサーバからターゲットサーバへSSH接続できるようにします。
■ 秘密鍵の配置(ローカルPCで実行)
scp -i your-key.pem your-key.pem ec2-user@<AnsibleサーバIP>:~
■ 権限変更(Ansibleサーバで実行)
chmod 400 your-key.pem
■ 接続確認(Ansibleサーバで実行)
ssh -i your-key.pem ec2-user@<ターゲットサーバIP>
6. インベントリ設定(Ansibleサーバで実行)
■ ファイル作成
vi inventory.ini
■ 内容
[target]
target1 ansible_host=<ターゲットサーバIP> ansible_user=ec2-user ansible_ssh_private_key_file=~/your-key.pem
■ 接続確認
ansible -i inventory.ini target -m ping
成功例
target1 | SUCCESS => {
"ping": "pong"
}
7. Playbook作成(Ansibleサーバで実行)
■ ファイル作成
vi nginx.yml
■ 内容
- name: Install and start Nginx
hosts: target
become: yes
tasks:
- name: Install nginx
dnf:
name: nginx
state: present
- name: Start nginx
service:
name: nginx
state: started
enabled: yes
■ ポイント
-
become: yes→ sudo権限で実行 -
dnf→ パッケージ管理 -
service→ サービスの起動・自動起動設定
8. Playbook実行(Ansibleサーバで実行)
ansible-playbook -i inventory.ini nginx.yml
■ 成功ログ例
changed=2
failed=0
9. 動作確認
ブラウザで以下にアクセスします。
http://<ターゲットサーバIP>
👉 NginxのWelcome画面が表示されれば成功です。
10. ハマりポイント・注意点
-
秘密鍵の権限が緩いとSSH接続できない
→chmod 400 your-key.pemを忘れずに -
セキュリティグループでSSH許可していないと接続不可
-
インベントリのIPミスが多いので注意
11. まとめ
今回はAnsibleを使って、
- EC2環境の構築
- SSH接続設定
- Playbook作成
- Nginxの自動インストール
までを一通り実施しました。
今後は、
AWSを導入してみようと思います。
