インフラエンジニアのPython自動化入門

インフラエンジニアのPython自動化入門:業務効率を10倍上げるスクリプト作成術
インフラ運用の作業を半分以下に削減するPython自動化スクリプトを今日から書き始めましょう。サーバー構築・監視・ログ解析まで、定型業務を自動化する具体的な手法を網羅的に解説します。
—
目次
- 1. なぜインフラエンジニアにPython自動化が必須なのか
- 2. 環境構築:Python自動化の第一歩
- 3. Python基礎から応用まで:インフラ向け実践テクニック
- 4. 実践!インフラ自動化スクリプト5選
- 5. 運用に耐えるスクリプトを作るためのベストプラクティス
- まとめ:Python自動化でインフラエンジニアの価値を最大化しよう
—
1. なぜインフラエンジニアにPython自動化が必須なのか
手作業でサーバーを1台構築するのに30分かかっていたとしたら、100台構築するのに50時間かかる計算になります。Pythonで自動化すれば、この作業をわずか10分に短縮できます。自動化は単なる効率化ではなく、ビジネス価値を直接向上させる武器なのです。
1.1 手作業の限界と自動化の必要性
インフラエンジニアの業務には、以下のような手作業による非効率な部分が多く存在します。
- サーバー構築時のOSインストールと初期設定
- 監視システムのログチェックとアラート確認
- バックアップファイルの整理と世代管理
- セキュリティパッチの適用と脆弱性チェック
- インシデント発生時のログ収集と分析
これらの作業を手動で行うと、以下の問題が発生します。
| 問題点 | 具体的な影響 | 発生頻度 |
|---|---|---|
| 人的ミス | 設定ミスによるサービス停止やセキュリティホール | 月に1-2回 |
| 作業時間の増大 | 新規サーバー構築に数時間かかる | 週に3-5回 |
| 属人化 | 特定の担当者しか作業できない | 常に発生 |
| コスト増大 | 作業時間に比例して人件費が増加 | 常に発生 |
これらの問題を解決するのがPythonによる自動化です。自動化によって、作業時間を90%削減し、人的ミスを限りなくゼロに近づけることが可能になります。
1.2 Pythonが選ばれる3つの理由
インフラエンジニアがPythonを選ぶべき理由は、以下の3点に集約されます。
- 豊富なライブラリ
インフラ関連の作業を効率化するライブラリが充実しています。paramiko:SSH経由でのリモート操作fabric:サーバー構築とデプロイの自動化boto3:AWS操作の自動化requests:HTTP API経由での操作pandas:ログデータの解析
- 学習コストの低さ
文法がシンプルで、他言語経験者なら1-2週間で実用レベルに到達できます。- インデントでブロックを表現(括弧不要)
- 動的型付けで型宣言が不要
- 豊富なチュートリアルとドキュメント
- 柔軟性と拡張性
小さなスクリプトから大規模なシステムまで対応可能。- CLIツールとして実行可能
- Webアプリケーションと連携可能
- 他言語との連携が容易
実際に、多くの企業でPythonがインフラ自動化のデファクトスタンダードとなっています。例えば、GoogleのSREチームはPythonを活用した自動化システムで、年間数千時間の作業時間を削減しています。
1.3 具体的な自動化対象業務
Pythonで自動化できるインフラ業務は多岐にわたります。以下に具体的な例を示します。
| 業務カテゴリ | 具体的な自動化タスク | 想定削減時間 | 難易度 |
|---|---|---|---|
| サーバー構築 | OSインストールからミドルウェア設定までの一括自動化 | 90%削減 | 中 |
| 監視システム | ログ監視とアラート発報の自動化 | 80%削減 | 易 |
| バックアップ管理 | 世代管理と圧縮・暗号化の自動化 | 70%削減 | 易 |
| セキュリティ管理 | 脆弱性スキャンとパッチ適用の自動化 | 85%削減 | 難 |
| インシデント対応 | ログ収集と原因特定の自動化 | 75%削減 | 中 |
| クラウド管理 | リソースの起動停止とコスト最適化 | 95%削減 | 易 |
これらの自動化を実現することで、インフラエンジニアはより戦略的な業務に注力できるようになります。例えば、サーバー構築を自動化すれば、新規サービスの立ち上げにかかるリードタイムを大幅に短縮できます。
—
2. 環境構築:Python自動化の第一歩
Pythonで自動化スクリプトを開発するためには、適切な開発環境を整えることが重要です。環境構築で失敗すると、後の開発効率に大きな影響を与えます。
2.1 必須ツールのインストールと設定
Python自動化開発に必要なツールを段階的にインストールしていきましょう。
2.1.1 Python本体のインストール
まずはPython本体をインストールします。最新の安定版を使用することを推奨します。
| OS | 推奨バージョン | ダウンロードURL | インストールコマンド(参考) |
|---|---|---|---|
| Windows | Python 3.11以上 | https://www.python.org/downloads/windows/ | winget install Python.Python.3.11 |
| macOS | Python 3.11以上 | https://www.python.org/downloads/macos/ | brew install python@3.11 |
| Linux(Ubuntu/Debian) | Python 3.11以上 | aptリポジトリ経由 | sudo apt update && sudo apt install python3.11 |
インストール確認コマンド:
python3 --version pip3 --version
正常にインストールされていれば、Pythonのバージョンとpipのバージョンが表示されます。
2.1.2 必須パッケージのインストール
Python自動化に必須のパッケージをインストールします。
pip3 install --upgrade pip pip3 install paramiko fabric boto3 requests pandas python-dotenv
paramiko:SSH経由でのサーバー操作fabric:サーバー構築とデプロイの自動化boto3:AWS操作の自動化requests:HTTP API経由での操作pandas:ログデータの解析python-dotenv:環境変数管理
2.1.3 SSHクライアントの設定
リモートサーバーに接続するためにSSHクライアントを設定します。
# SSH鍵の生成(初回のみ) ssh-keygen -t ed25519 -C "your_email@example.com" # 公開鍵をサーバーに配置 ssh-copy-id user@server-ip
SSH接続のテストを行います。
ssh user@server-ip "echo 'SSH接続成功'"
2.2 仮想環境の重要性と構築方法
Pythonのプロジェクトごとに独立した環境を作成することは、依存関係の管理とバージョンの競合を防ぐために非常に重要です。仮想環境を使用しないと、プロジェクト間でライブラリのバージョンが衝突し、思わぬエラーが発生する可能性があります。
2.2.1 venvを使用した仮想環境の作成
Python標準のvenvモジュールを使用して仮想環境を作成します。
# プロジェクトディレクトリの作成 mkdir infra-automation cd infra-automation # 仮想環境の作成 python3 -m venv venv # 仮想環境の有効化(Linux/macOS) source venv/bin/activate # 仮想環境の有効化(Windows) venv\Scripts\activate
仮想環境が有効化されると、プロンプトに(venv)という表示が追加されます。これにより、現在の環境が仮想環境であることがわかります。
2.2.2 仮想環境へのパッケージインストール
仮想環境内でのみパッケージをインストールします。
# 必須パッケージのインストール pip install paramiko fabric boto3 requests pandas python-dotenv # インストール済みパッケージの確認 pip list
2.2.3 仮想環境の無効化と削除
作業が終了したら仮想環境を無効化します。
# 仮想環境の無効化 deactivate # 仮想環境の削除(必要な場合) rm -rf venv
2.3 開発に役立つ拡張機能
効率的なPython開発のために、以下の拡張機能を導入しましょう。
2.3.1 VS Codeの拡張機能
- Python拡張機能:公式のPythonサポート
- Pylance:高度なコード補完とエラー検出
- Jupyter:Jupyter Notebookのサポート
- GitLens:Git操作の拡張
- Docker:コンテナ開発のサポート
2.3.2 必須設定
VS Codeの設定ファイル(settings.json)に以下の設定を追加します。
{
"python.pythonPath": "venv/bin/python", // 仮想環境のPythonパス
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.formatting.provider": "black",
"python.analysis.typeCheckingMode": "basic",
"editor.formatOnSave": true,
"files.autoSave": "onFocusChange"
}2.3.3 その他の便利ツール
- black:自動フォーマッター
- flake8:コード品質チェッカー
- mypy:静的型チェッカー
- pre-commit:コミット前の自動チェック
これらのツールを導入することで、コードの品質を向上させ、開発効率を大幅に高めることができます。
—
3. Python基礎から応用まで:インフラ向け実践テクニック
Pythonの基本文法をマスターし、インフラ自動化に特化した実践的なテクニックを学びましょう。これらのテクニックを習得することで、効率的なスクリプトを開発できるようになります。
3.1 文字列操作とファイル処理
インフラ自動化では、ログファイルの解析や設定ファイルの編集など、文字列操作が頻繁に行われます。Pythonの強力な文字列処理機能を活用しましょう。
3.1.1 基本的な文字列操作
Pythonの文字列操作は非常に柔軟です。以下に基本的な操作を示します。
# 文字列の連結
server_name = "web-server"
environment = "production"
full_name = f"{server_name}-{environment}" # f-string(推奨)
# full_name = server_name + "-" + environment # 従来の方法
# 文字列の分割
log_line = "2024-01-01 12:34:56 ERROR: Connection failed"
parts = log_line.split(" ")
timestamp = parts[0] + " " + parts
log_level = parts
.rstrip(":")
message = " ".join(parts[3:])
# 文字列の置換
config_line = "server_port = 8080"
new_config = config_line.replace("8080", "80")
# 文字列の検索
if "ERROR" in log_line:
print("エラーを検出しました")3.1.2 ファイル操作の基本
ファイルの読み書きは、ログ解析や設定ファイルの編集で頻繁に行われます。
# ファイルの読み込み
with open("/var/log/nginx/access.log", "r") as f:
log_data = f.read()
# ファイルの書き込み
config = """
server {
listen 80;
server_name example.com;
}
"""
with open("/etc/nginx/sites-available/example.conf", "w") as f:
f.write(config)
# ファイルの行ごとの処理
error_count = 0
with open("/var/log/app/error.log", "r") as f:
for line in f:
if "ERROR" in line:
error_count += 1
print(f"エラー件数: {error_count}")3.1.3 正規表現を活用したテキスト処理
正規表現は、複雑なパターンのテキストを処理する際に非常に有効です。Pythonのreモジュールを使用します。
import re
# IPアドレスの抽出
log_line = "Connection from 192.168.1.100:54321 to 10.0.0.1:80"
ip_pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
match = re.search(ip_pattern, log_line)
if match:
source_ip = match.group()
print(f"送信元IP: {source_ip}")
# メールアドレスの検証
email = "user@example.com"
email_pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
if re.match(email_pattern, email):
print("有効なメールアドレスです")
else:
print("無効なメールアドレスです")3.1.4 CSVファイルの処理
CSVファイルは、サーバー情報や監視データの管理に頻繁に使用されます。csvモジュールを使用して処理します。
import csv
# CSVファイルの読み込み
servers = []
with open("servers.csv", "r") as f:
reader = csv.DictReader(f)
for row in reader:
servers.append(row)
# CSVファイルの書き込み
new_server = {
"name": "db-server-01",
"ip": "192.168.1.10",
"role": "database",
"status": "active"
}
with open("servers.csv", "a", newline="") as f:
fieldnames = ["name", "ip", "role", "status"]
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writerow(new_server)3.2 並列処理で作業を高速化
インフラ自動化では、複数のサーバーに対して同時に処理を行う場面が多くあります。Pythonの並列処理機能を活用して、作業を高速化しましょう。
3.2.1 threadingモジュールを使用した並列処理
threadingモジュールを使用して、複数のスレッドで処理を並列化します。I/Oバウンドな処理(ネットワーク通信やファイル操作)に適しています。
import threading
import time
def check_server_status(server_ip):
print(f"サーバー {server_ip} のステータスを確認中...")
time.sleep(2) # シミュレーション
print(f"サーバー {server_ip} は正常です")
servers = ["192.168.1.10", "192.168.1.11", "192.168.1.12", "192.168.1.13"]
threads = []
for server in servers:
thread = threading.Thread(target=check_server_status, args=(server,))
threads.append(thread)
thread.start()
# すべてのスレッドの完了を待機
for thread in threads:
thread.join()
print("すべてのサーバーのステータス確認が完了しました")3.2.2 multiprocessingモジュールを使用した並列処理
multiprocessingモジュールを使用して、複数のプロセスで処理を並列化します。CPUバウンドな処理(計算処理など)に適しています。
import multiprocessing
import time
def process_log_file(filename):
print(f"ファイル {filename} を処理中...")
time.sleep(3) # シミュレーション
print(f"ファイル {filename} の処理が完了しました")
log_files = ["app.log", "access.log", "error.log", "system.log"]
processes = []
for log_file in log_files:
process = multiprocessing.Process(target=process_log_file, args=(log_file,))
processes.append(process)
process.start()
# すべてのプロセスの完了を待機
for process in processes:
process.join()
print("すべてのログファイルの処理が完了しました")3.2.3 concurrent.futuresを使用した簡潔な並列処理
concurrent.futuresモジュールを使用すると、より簡潔に並列処理を実装できます。
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
import time
def ping_server(server_ip):
print(f"サーバー {server_ip} をping中...")
time.sleep(1) # シミュレーション
return f"{server_ip} は応答あり"
servers = ["192.168.1.10", "192.168.1.11", "192.168.1.12", "192.168.1.13"]
# スレッドプールを使用した並列処理
with ThreadPoolExecutor(max_workers=4) as executor:
results = list(executor.map(ping_server, servers))
for result in results:
print(result)
print("すべてのping処理が完了しました")3.2.4 並列処理の注意点
並列処理を実装する際には、以下の点に注意してください。
- リソース競合:複数のスレッド/プロセスが同じリソースにアクセスすると、競合が発生する可能性があります。
- ロック機構:
threading.Lockやmultiprocessing.Lockを使用して、リソースへのアクセスを制御します。 - エラーハンドリング:並列処理ではエラーが発生した際のハンドリングが重要です。
try-exceptブロックを適切に使用します。 - パフォーマンスチューニング:CPUコア数やネットワーク帯域幅を考慮して、並列度を調整します。
3.3 正規表現でログ解析を自動化
ログ解析は、インフラエンジニアの重要な業務の一つです。正規表現を活用して、ログから必要な情報を効率的に抽出しましょう。
3.3.1 ログファイルの基本的な解析
以下は、Nginxのアクセスログを解析するスクリプトの例です。
import re
from collections import defaultdict
# ログファイルの読み込み
with open("/var/log/nginx/access.log", "r") as f:
log_lines = f.readlines()
# IPアドレスごとのアクセス数をカウント
ip_pattern = r"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
ip_access = defaultdict(int)
for line in log_lines:
match = re.search(ip_pattern, line)
if match:
ip = match.group(1)
ip_access[ip] += 1
# 上位5つのIPアドレスを表示
print("上位5つのアクセス元IPアドレス:")
for ip, count in sorted(ip_access.items(), key=lambda x: x
, reverse=True)[:5]:
print(f"{ip}: {count}回")3.3.2 複雑なログパターンの解析
以下は、アプリケーションログからエラーを抽出するスクリプトの例です。
import re
from datetime import datetime
# ログファイルの読み込み
with open("/var/log/app/application.log", "r") as f:
log_lines = f.readlines()
# エラーパターンの定義
error_pattern = r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (ERROR|CRITICAL) (.+)"
errors = []
for line in log_lines:
match = re.search(error_pattern, line)
if match:
timestamp = match.group(1)
level = match.group(2)
message = match.group(3)
errors.append({
"timestamp": timestamp,
"level": level,
"message": message
})
# エラーの時系列表示
print("エラー発生時刻とメッセージ:")
for error in errors:
print(f"{error['timestamp']} [{error['level']}] {error['message']}")
# 直近1時間のエラー数をカウント
one_hour_ago = datetime.now() - timedelta(hours=1)
recent_errors = [e for e in errors if datetime.strptime(e['timestamp'], "%Y-%m-%d %H:%M:%S") >= one_hour_ago]
print(f"\n直近1時間のエラー数: {len(recent_errors)}")3.3.3 ログ解析の自動化スクリプト
以下は、ログ解析を自動化するスクリプトの例です。特定のエラーが発生した際にメールで通知します。
import re
import smtplib
from email.mime.text import MIMEText
from datetime import datetime, timedelta
def analyze_logs(log_file, error_pattern, email_config):
# ログファイルの読み込み
with open(log_file, "r") as f:
log_lines = f.readlines()
# エラーの検出
errors = []
for line in log_lines:
if re.search(error_pattern, line):
errors.append(line.strip())
# エラーが検出された場合はメールで通知
if errors:
subject = f"【自動通知】ログにエラーを検出しました"
body = f"以下のエラーを検出しました:\n\n" + "\n".join(errors)
send_email(email_config, subject, body)
print("エラーを検出し、メールで通知しました")
else:
print("エラーは検出されませんでした")
def send_email(config, subject, body):
msg = MIMEText(body)
msg["Subject"] = subject
msg["From"] = config["from"]
msg["To"] = config["to"]
with smtplib.SMTP(config["smtp_server"], config["smtp_port"]) as server:
server.starttls()
server.login(config["username"], config["password"])
server.send_message(msg)
# 設定
log_file = "/var/log/app/application.log"
error_pattern = r"ERROR|CRITICAL"
email_config = {
"smtp_server": "smtp.example.com",
"smtp_port": 587,
"username": "alert@example.com",
"password": "your-password",
"from": "alert@example.com",
"to": "admin@example.com"
}
# ログ解析の実行
analyze_logs(log_file, error_pattern, email_config)—
4. 実践!インフラ自動化スクリプト5選
実際の業務で役立つ、実践的な自動化スクリプトを5つ紹介します。これらのスクリプトをベースに、自分の業務に合わせてカスタマイズしてください。
4.1 サーバー構築を自動化するスクリプト
新規サーバーの構築を自動化するスクリプトです。OSインストールからミドルウェアの設定まで一括で行います。
import paramiko
import time
def setup_server(hostname, ip, username, password, ssh_key_path):
# SSH接続の設定
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, username=username, password=password)
stdin, stdout, stderr = ssh.exec_command("yum update -y && yum install -y nginx")
time.sleep(10)
print(stdout.read().decode())
ssh.close()
4.2 ログ監視・アラート通知を自動化するスクリプト
ログファイルを定期的にチェックし、エラーパターンを検知したらSlackやメールに通知するスクリプトです。
import re
import time
ERROR_PATTERN = re.compile(r"(ERROR|CRITICAL|FATAL)")
def tail_and_alert(log_path, notify_func, interval=5):
with open(log_path, "r", encoding="utf-8") as f:
f.seek(0, 2) # ファイル末尾へ移動
while True:
line = f.readline()
if not line:
time.sleep(interval)
continue
if ERROR_PATTERN.search(line):
notify_func(f"[ALERT] {log_path}: {line.strip()}")
def notify_slack(message):
# requestsでSlack Incoming Webhookに通知する処理をここに実装
print(message)
実運用ではnotify_funcにSlack Webhook・メール送信・PagerDutyなどの通知処理を実装し、検知パターンも自社の障害傾向に合わせて調整します。
4.3 バックアップの世代管理を自動化するスクリプト
指定した保持世代数を超えた古いバックアップを自動削除し、ストレージ容量を圧迫しないようにするスクリプトです。
import os
import glob
def rotate_backups(backup_dir, pattern="*.tar.gz", keep=7):
files = sorted(
glob.glob(os.path.join(backup_dir, pattern)),
key=os.path.getmtime,
reverse=True,
)
for old_file in files[keep:]:
os.remove(old_file)
print(f"削除: {old_file}")
# 例:直近7世代のみ保持し、それ以前は削除
rotate_backups("/var/backups/db", keep=7)
4.4 セキュリティパッチ適用状況を確認するスクリプト
複数サーバーに対してSSH経由でパッケージの更新状況を一括確認するスクリプトです。
import paramiko
def check_updates(servers, username, ssh_key_path):
results = {}
for host in servers:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=username, key_filename=ssh_key_path, timeout=10)
# RHEL/CentOS系の場合の例(Debian系は apt list --upgradable に置き換え)
stdin, stdout, stderr = ssh.exec_command("yum check-update --quiet | wc -l")
results[host] = stdout.read().decode().strip()
ssh.close()
return results
servers = ["10.0.0.11", "10.0.0.12", "10.0.0.13"]
print(check_updates(servers, "deploy", "/home/deploy/.ssh/id_ed25519"))
件数が一定を超えたサーバーだけを抽出して通知するようにすれば、パッチ適用漏れの早期発見につながります。
4.5 クラウドリソースの起動・停止を自動化するスクリプト(boto3)
検証環境のEC2インスタンスを、業務時間外に自動停止してコストを削減するスクリプトです。同じ処理をサーバーを持たずに定期実行したい場合は、AWS Lambda入門|サーバーレス関数の基本と実践でイベント駆動の実装方法を確認できます。
import boto3
def stop_dev_instances(tag_key="Environment", tag_value="dev"):
ec2 = boto3.client("ec2")
instances = ec2.describe_instances(
Filters=[
{"Name": f"tag:{tag_key}", "Values": [tag_value]},
{"Name": "instance-state-name", "Values": ["running"]},
]
)
ids = [
i["InstanceId"]
for r in instances["Reservations"]
for i in r["Instances"]
]
if ids:
ec2.stop_instances(InstanceIds=ids)
print(f"停止したインスタンス: {ids}")
stop_dev_instances()
EventBridge(旧CloudWatch Events)のスケジュールルールでこのスクリプトを定期実行すれば、検証環境のコストを人手を介さずに削減できます。
5. 運用に耐えるスクリプトを作るためのベストプラクティス
自動化スクリプトは「動けばよい」ものから「安心して本番運用に任せられる」ものへ育てる必要があります。あわせて、スクリプトのテストと配布を自動化するGitHub ActionsによるCI/CDを組み合わせると、変更のたびに手作業で確認する負担を減らせます。以下の3点は特に優先度が高い改善ポイントです。
5.1 エラーハンドリングとロギング
本番運用スクリプトでは、例外を握りつぶさず、何が起きたか後から追跡できるようにログを残すことが重要です。
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
filename="automation.log",
)
def setup_server(hostname, ip):
try:
# サーバー構築処理
logging.info(f"{hostname} ({ip}) の構築を開始")
# ... 処理 ...
logging.info(f"{hostname} ({ip}) の構築が完了")
except Exception as e:
logging.error(f"{hostname} ({ip}) の構築に失敗: {e}")
raise
特にリモートサーバーを操作するスクリプトでは、接続タイムアウト・認証エラー・コマンド実行失敗をそれぞれ個別にハンドリングし、どの段階で失敗したかをログから特定できるようにします。
5.2 セキュリティ考慮事項
- 認証情報をコードに直書きしない:パスワードやAPIキーは環境変数(
python-dotenv)やAWS Secrets Manager、Azure Key Vaultなどのシークレット管理サービスから取得する - SSH鍵認証を優先する:パスワード認証よりも鍵認証を使い、鍵ファイルのパーミッションは600に設定する
- 最小権限の原則:自動化スクリプトが使うIAMロール・SSHユーザーには、必要最小限の権限のみを付与する
- 実行ログに機密情報を出力しない:パスワードやトークンをログに残さないよう、マスキング処理を入れる
5.3 パフォーマンス最適化
対象サーバー台数が増えると、逐次処理では実行時間が線形に増加します。3.2で紹介した並列処理(concurrent.futuresなど)を活用し、複数サーバーへの処理を同時実行することで全体の実行時間を大幅に短縮できます。また、SSH接続は確立コストが高いため、同一サーバーに対して複数コマンドを実行する場合は接続を使い回す(コネクションの再利用)ことも有効です。
まとめ:Python自動化でインフラエンジニアの価値を最大化しよう
インフラエンジニアにとってPython自動化は、単なる作業時間の削減にとどまらず、人的ミスの防止・属人化の解消・より戦略的な業務への注力を可能にする武器です。まずは本記事で紹介したサーバー構築・ログ監視・バックアップ管理・パッチ確認・クラウドリソース制御のいずれか1つから、自分の業務に合わせて試してみてください。エラーハンドリング・セキュリティ・パフォーマンスの3点を意識しながら育てていくことで、手元のスクリプトを「本番運用に任せられる自動化基盤」へと成長させられます。サーバーを用意せずにスクリプトを定期実行したい場合は、Lambda関数を初心者が学ぶ(入門編)から始めると全体像をつかみやすいです。
本記事はInfra Academy編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
編集ポリシーはこちら
log_level = parts
.rstrip(":")
message = " ".join(parts[3:])
# 文字列の置換
config_line = "server_port = 8080"
new_config = config_line.replace("8080", "80")
# 文字列の検索
if "ERROR" in log_line:
print("エラーを検出しました")



