DevOpsの基礎と実践ガイド
2024-02-24
DevOpsの基礎と実践ガイド
DevOpsの基本概念と、実践的な実装方法について解説します。
1. CI/CD(継続的インテグレーション/デリバリー)
GitHub Actionsを使用した例
# .github/workflows/ci.yml
name: CI/CD Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build application
run: npm run build
deploy:
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to production
run: |
echo "デプロイ処理をここに記述"
2. インフラストラクチャのコード化
Terraformの設定例
# AWS環境の構築例
provider "aws" {
region = "ap-northeast-1"
}
# VPCの作成
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "production-vpc"
Environment = "production"
}
}
# EC2インスタンスの作成
resource "aws_instance" "web" {
ami = "ami-0123456789"
instance_type = "t3.micro"
tags = {
Name = "web-server"
}
user_data = <<-EOF
#!/bin/bash
yum update -y
yum install -y nginx
systemctl start nginx
EOF
}
3. コンテナ化
Dockerfileの例
# Node.jsアプリケーションのDockerfile
FROM node:18-alpine
WORKDIR /app
# パッケージファイルのコピー
COPY package*.json ./
# 依存関係のインストール
RUN npm ci --only=production
# ソースコードのコピー
COPY . .
# ビルド
RUN npm run build
# ポートの公開
EXPOSE 3000
# アプリケーションの起動
CMD ["npm", "start"]
4. 監視とロギング
Prometheusの設定例
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
- job_name: 'application'
static_configs:
- targets: ['localhost:8080']
# アラートルール
rules:
- alert: HighCPUUsage
expr: node_cpu_usage_percent > 80
for: 5m
labels:
severity: warning
annotations:
summary: 'High CPU usage detected'
5. 自動化スクリプト
シェルスクリプトの例
#!/bin/bash
# デプロイメントスクリプト
deploy_application() {
echo "アプリケーションのデプロイを開始します..."
# Git pull
git pull origin main
# 依存関係のインストール
npm ci
# ビルド
npm run build
# アプリケーションの再起動
pm2 restart app
echo "デプロイが完了しました"
}
# バックアップスクリプト
backup_database() {
echo "データベースのバックアップを開始します..."
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="backup_${TIMESTAMP}.sql"
# MySQLバックアップ
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_FILE
# S3にアップロード
aws s3 cp $BACKUP_FILE s3://backup-bucket/
echo "バックアップが完了しました"
}
DevOpsのベストプラクティス
-
自動化
- テストの自動化
- デプロイの自動化
- インフラ構築の自動化
-
モニタリング
- パフォーマンス監視
- エラー監視
- リソース使用率の監視
-
セキュリティ
- 脆弱性スキャン
- セキュリティテスト
- アクセス制御
DevOpsツールチェーン
カテゴリ | ツール例 | 用途 |
---|---|---|
バージョン管理 | Git | ソースコード管理 |
CI/CD | Jenkins, GitHub Actions | 自動化パイプライン |
コンテナ化 | Docker, Kubernetes | アプリケーションの実行環境 |
構成管理 | Ansible, Terraform | インフラ構築・管理 |
モニタリング | Prometheus, Grafana | 監視・可視化 |
DevOpsは、開発と運用の連携を強化し、より効率的なソフトウェア開発・運用を実現するための重要な手法です。