こんにちは、k.sasakiです。本日はOCIのCloud ShellにプリインストールされたAnsibleを使って、環境内のOracle Linuxを設定する方法について解説します。
目次
はじめに
OSの初期設定は決まった作業を何度も実施することが多いですが、手作業で行うと単純なミスが起こりがちです。Cloud ShellにはAnsibleがプリインストールされているので、環境内のサーバにAnsibleを導入することなく、Cloud ShellからVCN上のプライベートサブネット上のインスタンスにAnsibleで設定を加えることができます。
本記事では、VCN内にプロビジョニングされている Oracle Linux 9 サーバ(プライベートIPのみ付与)に対し、Cloud Shellの「プライベート・ネットワーク・アクセス」機能を利用して直接接続し、Cloud Shell上からAnsibleを使って初期設定を自動化する手順を解説します。
本構成を利用する際の注意点は以下のとおりです。
・Cloud Shellは無操作状態が60分続くとセッションが切断されます
・Cloud ShellはホームリージョンのVCNにのみプライベート接続できます
・Cloud Shell上のAnsibleについては2026/8/6時点でAnsible 2.9系がインストールされています
構成イメージ
今回解説する構成イメージです。

Step 1: OCI Cloud Shell から VCN へのプライベートアクセス接続
OCIコンソールからアクセス可能な Cloud Shell は「プライベート・ネットワーク・アクセス」機能を使用することで、VCN内のプライベートIP宛てに直接アクセスできるようになります。
1-1. プライベート・ネットワークへのアクセス設定
詳細な手順は弊社ブログに記載の手順をご覧ください。
下記の画像は手順を実行して、今回の対象のサーバが存在するansible-vcnのサブネットを「プライベート・ネットワーク定義リスト」に登録して、アタッチした状態です。「詳細」の文字をクリックすると、Cloud Shellの接続状況や接続先のサブネットを確認できます。
新規に登録する場合は、以下のように「プライベート・ネットワーク定義リスト」を選択して、接続するVCNを登録することができます。
1-2. アクセス確認
Cloud Shell上から対象サーバ(例:10.0.1.233)へSSH接続し、OSバージョンとPythonのパスを確認します。対象サーバのアクセスに必要な鍵ファイルはこちらの手順でCloud Shellにアップロードして、SSH接続できるようにしておきます。Pythonのパスは後ほどAnsibleのinventoryファイルに記載します。
(Cloud Shell)
$ ssh opc@10.0.1.233
(対象サーバ)
$ cat /etc/oracle-release
Oracle Linux Server release 9.8
$ which python3
/usr/bin/python3
$ exit
logout
無事、プライベートIP経由で対象サーバにアクセスできました。
Step 2: Cloud ShellのAnsible環境確認
Cloud Shell にはデフォルトで Ansible がプリインストールされているため、特別な環境構築を行わずにすぐ Playbook を作成・実行できます。
(Cloud Shell)
$ ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/k_sasaki/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Jul 14 2026, 16:15:45) [GCC 8.5.0 20210514 (Red Hat 8.5.0-28.0.1)]
Step 3: Ansible Playbookの作成
Cloud Shell上でAnsibleの実行に必要なinventoryとPlaybookを作成します。
3-1. 対象サーバ用のディレクトリと各ファイルの作成
Cloud Shell上に対象のサーバ用のディレクトリを作成し、inventoryとPlaybookを配置します。
(Cloud Shell)
$ mkdir -p ~/ansible-ol9
$ cd ~/ansible-ol9
$ touch inventory.ini
$ touch setup.yml
3-2. inventoryの作成 (inventory.ini)
SSH接続に必要なユーザー名(opc)、対象サーバへアクセスするための秘密鍵のパス、およびStep 1で確認した対象サーバのPythonのパスを記載します。
[oraclelinux]
10.0.1.233
[oraclelinux:vars]
ansible_user=opc
ansible_ssh_private_key_file=~/.ssh/id_rsa
ansible_python_interpreter=/usr/bin/python3
3-3. Playbookの作成 (setup.yml)
OSパッケージの最新化、タイムゾーンの設定、ユーティリティ(tree, nc)の導入および firewalld の停止を行う Playbook を作成します。
---
- name: Cloud ShellからVCN上のOracle Linux 9を自動セットアップ
hosts: oraclelinux
become: true
tasks:
- name: DNFパッケージの最新化
dnf:
name: "*"
state: latest
- name: タイムゾーンを Asia/Tokyo に設定
timezone:
name: Asia/Tokyo
- name: ユーティリティ(tree, nc)のインストール
dnf:
name:
- tree
- nc
state: present
- name: firewalldの停止と自動起動の無効化
systemd:
name: firewalld
state: stopped
enabled: false
Step 4: Ansible Playbookの実行
4-1. pingモジュールでの導通確認
Playbook実行前に、Ansible経由で対象サーバに疎通できるか ping モジュールを実行します。ping: pong が返ってくれば、Ansibleによる操作準備は完了です。
(Cloud Shell)
$ ansible oraclelinux -i inventory.ini -m ping
10.0.1.233 | SUCCESS => {
"changed": false,
"ping": "pong"
}
4-2. Ansible Playbookのドライラン
--check オプションをつけることで、実際に変更を加える前にどのような操作が行われるかを確認できます。
(Cloud Shell)
$ ansible-playbook -i inventory.ini setup.yml --check
PLAY [Cloud ShellからVCN上のOracle Linux 9を自動セットアップ] *********************************
TASK [Gathering Facts]
*********************************
ok: [10.0.1.233]
TASK [DNFパッケージの最新化]
*********************************
changed: [10.0.1.233]
TASK [タイムゾーンを Asia/Tokyo に設定]
*********************************
changed: [10.0.1.233]
TASK [ユーティリティ(tree, nc)のインストール]
*********************************
changed: [10.0.1.233]
TASK [firewalldの停止と自動起動の無効化]
*********************************
changed: [10.0.1.233]
PLAY RECAP
*************************************************
10.0.1.233 : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4-3. Ansible Playbookの実行
Playbookを実行し、サーバ設定と各種ツールのインストールを適用します。
(Cloud Shell)
$ ansible-playbook -i inventory.ini setup.yml
(中略)
PLAY RECAP
*************************************************
10.0.1.233 : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
パッケージの更新は1回で終わらないことがあるので、再度実行します。
(Cloud Shell)
$ ansible-playbook -i inventory.ini setup.yml
(中略)
TASK [DNFパッケージの最新化]
*********************************
changed: [10.0.1.233]
(中略)
PLAY RECAP
*************************************************
10.0.1.233 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
パッケージの最新化でchangedが1件ありました。changedが0件になるまで実行します。
(Cloud Shell)
$ ansible-playbook -i inventory.ini setup.yml
(中略)
PLAY RECAP
*************************************************
10.0.1.233 : ok=5 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
changedが0件になったので、Playbookの実行は完了です。
4-4. 導入結果の確認
対象サーバ(10.0.1.233)にSSH接続して各コマンドを実行して結果を確認します。
(Cloud Shell)
$ ssh opc@10.0.1.233
(対象サーバ)
# タイムゾーンの確認
$ timedatectl
Local time: Thu 2026-08-06 14:25:04 JST
Universal time: Thu 2026-08-06 05:25:04 UTC
RTC time: Thu 2026-08-06 05:25:03
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
# tree コマンドの確認
$ tree --version
tree v1.8.0 (c) 1996 - 2018 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro
# nc (netcat) コマンドの確認
$ nc --version
Ncat: Version 7.92 ( https://nmap.org/ncat )
# ファイアウォールが停止しているか確認
$ sudo systemctl is-active firewalld
inactive
# ファイアウォールが無効になっているか確認
$ sudo systemctl is-enabled firewalld
disabled
Playbookで実行したコマンドが正常に動作することを確認できました。
最後に再起動して新しいカーネルが適用されているかも確認しました。
(対象サーバ)
# reboot前
$ uname -r
6.12.0-204.92.4.3.1.el9uek.x86_64
# reboot後
$ uname -r
6.12.0-204.92.4.4.el9uek.x86_64
まとめ
本記事では、環境内のサーバにAnsibleを導入することなく、OCIの標準機能であるCloud Shellから、VCN内のOracle Linux 9に対してAnsibleで初期設定を行う手順を解説しました。
本構成のメリット
- 踏み台サーバ完全不要: 踏み台VMの構築管理費やセキュリティリスクを削減できます。
- クラウドブラウザ完結: ローカル環境へのツール導入不要で、OCIコンソール上のCloud ShellのみでAnsibleの構成管理が完結します。
すでにVCN環境をお持ちの方や、プライベートサーバの自動設定を手軽に試したい方は、ぜひCloud Shell × Ansibleの組み合わせを活用してみてください。
参考ドキュメント



