DevOps チートシート
ハンズオンラボと現実世界のシナリオを通じて DevOps プラクティスを学びましょう。LabEx は、必須のオペレーション、インフラストラクチャ管理、CI/CD パイプライン、コンテナ化、モニタリング、自動化を網羅した包括的な DevOps コースを提供します。アプリケーションのデプロイ、コードとしてのインフラストラクチャ管理、ワークフローの自動化、効率的なソフトウェア配信のための最新の DevOps プラクティスの実装を学びます。
Infrastructure as Code (IaC)
Terraform: インフラストラクチャプロビジョニング
宣言的な設定言語を使用してインフラストラクチャを定義し、プロビジョニングします。
# Terraformの初期化
terraform init
# インフラストラクチャ変更の計画
terraform plan
# インフラストラクチャ変更の適用
terraform apply
# インフラストラクチャの破棄
terraform destroy
# 設定ファイルのフォーマット
terraform fmt
# 設定の検証
terraform validate
ログインしてこのクイズに回答し、学習の進捗を追跡できます
terraform planは何をしますか?Ansible: 構成管理
アプリケーションのデプロイと構成管理を自動化します。
# プレイブックの実行
ansible-playbook site.yml
# 特定のホストでプレイブックを実行
ansible-playbook -i inventory site.yml
# 構文チェック
ansible-playbook --syntax-check site.yml
# 特定のユーザーで実行
ansible-playbook -u ubuntu site.yml
CloudFormation: AWS ネイティブ IaC
JSON/YAMLテンプレートを使用してAWSリソースをプロビジョニングします。
# スタックの作成
aws cloudformation create-stack --stack-name mystack --template-body file://template.yml
# スタックの更新
aws cloudformation update-stack --stack-name mystack --template-body file://template.yml
# スタックの削除
aws cloudformation delete-stack --stack-name mystack
コンテナ管理
Docker: コンテナ化
アプリケーションをコンテナでビルド、出荷、実行します。
# イメージのビルド
docker build -t myapp:latest .
# コンテナの実行
docker run -d -p 8080:80 myapp:latest
# 実行中のコンテナの一覧表示
docker ps
# コンテナの停止
docker stop container_id
# コンテナの削除
docker rm container_id
Kubernetes: コンテナオーケストレーション
コンテナ化されたアプリケーションを大規模にデプロイおよび管理します。
# 設定の適用
kubectl apply -f deployment.yml
# Podの取得
kubectl get pods
# デプロイメントのスケール
kubectl scale deployment myapp --replicas=5
# ログの表示
kubectl logs pod_name
# リソースの削除
kubectl delete -f deployment.yml
ログインしてこのクイズに回答し、学習の進捗を追跡できます
kubectl apply -f deployment.ymlは何をしますか?Helm: Kubernetes パッケージマネージャー
チャートを使用して Kubernetes アプリケーションを管理します。
# チャートのインストール
helm install myrelease stable/nginx
# リリースのアップグレード
helm upgrade myrelease stable/nginx
# リリースの一覧表示
helm list
# リリースのアンインストール
helm uninstall myrelease
CI/CDパイプライン管理
Jenkins: ビルド自動化
継続的インテグレーションパイプラインを設定および管理します。
// Jenkinsfileの例
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean compile'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh './deploy.sh'
}
}
}
}
GitHub Actions: クラウド CI/CD
GitHub リポジトリから直接ワークフローを自動化します。
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install
- run: npm test
GitLab CI: 統合された DevOps
GitLab の組み込み CI/CD 機能を使用して、完全な DevOps ワークフローを実現します。
# .gitlab-ci.yml
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "Building the app"
test_job:
stage: test
script:
- echo "Running tests"
バージョン管理とコラボレーション
Git: バージョン管理システム
変更を追跡し、コード開発でのコラボレーションを行います。
# リポジトリのクローン
git clone https://github.com/user/repo.git
# ステータスの確認
git status
# 変更の追加
git add .
# 変更のコミット
git commit -m "Add feature"
# リモートへのプッシュ
git push origin main
# 最新の変更のプル
git pull origin main
ログインしてこのクイズに回答し、学習の進捗を追跡できます
git pullとgit fetchの違いは何ですか?ブランチ管理
異なる開発ストリームとリリースを管理します。
# ブランチの作成
git checkout -b feature-branch
# ブランチのマージ
git merge feature-branch
# ブランチの一覧表示
git branch -a
# ブランチの切り替え
git checkout main
# ブランチの削除
git branch -d feature-branch
# 以前のコミットにリセット
git reset --hard HEAD~1
# コミット履歴の表示
git log --oneline
GitHub: コードホスティングとコラボレーション
リポジトリをホストし、共同開発を管理します。
# GitHub CLI コマンド
gh repo create myrepo
gh repo clone user/repo
gh pr create --title "New feature"
gh pr list
gh pr merge 123
gh issue create --title "Bug report"
gh release create v1.0.0
# プルリクエストの作成
git push -u origin feature-branch
# その後、GitHub/GitLabでPRを作成
コードレビューと品質
ピアレビューと自動チェックを通じてコード品質を保証します。
# プリコミットフックの例
#!/bin/sh
# コミット前にテストを実行
npm test
if [ $? -ne 0 ]; then
echo "Tests failed"
exit 1
fi
モニタリングと可観測性
Prometheus: メトリクス収集
時系列データを使用してシステムおよびアプリケーションのメトリクスを監視します。
# CPU使用率
cpu_usage_percent{instance="server1"}
# メモリ使用量
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
# HTTPリクエスト率
rate(http_requests_total[5m])
# アラートルール例
ALERT HighCPUUsage
IF cpu_usage_percent > 80
FOR 5m
Grafana: 視覚化ダッシュボード
監視データのためのダッシュボードと視覚化を作成します。
# ダッシュボードの作成
curl -X POST http://admin:admin@localhost:3000/api/dashboards/db \
-H "Content-Type: application/json" \
-d @dashboard.json
# ダッシュボードの取得
curl http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid
ELK Stack: ログ管理
インフラストラクチャ全体でログデータを収集、検索、分析します。
# Elasticsearchクエリ
# ログの検索
GET /logs/_search
{
"query": {
"match": {
"message": "error"
}
}
}
# Logstash 設定
input {
file {
path => "/var/log/app.log"
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
}
}
アプリケーションパフォーマンスモニタリング
アプリケーションのパフォーマンスとユーザーエクスペリエンスのメトリクスを追跡します。
# New Relic エージェント設定
# アプリケーションへの追加
require 'newrelic_rpm'
# Datadog メトリクス
from datadog import DogStatsdClient
statsd = DogStatsdClient('localhost', 8125)
statsd.increment('web.requests')
statsd.histogram('web.response_time', 0.75)
クラウドプラットフォーム管理
AWS CLI: Amazon Web Services
コマンドラインから AWS サービスと対話します。
# AWS CLIの設定
aws configure
# EC2インスタンスの一覧表示
aws ec2 describe-instances
# S3バケットの作成
aws s3 mb s3://my-bucket-name
# Lambda関数のデプロイ
aws lambda create-function --function-name myfunction --runtime python3.8 --role arn:aws:iam::123456789:role/lambda-role --handler lambda_function.lambda_handler --zip-file fileb://function.zip
# 実行中のサービスの一覧表示
aws ecs list-services --cluster my-cluster
Azure CLI: Microsoft Azure
Azure リソースとサービスを管理します。
# Azureへのログイン
az login
# リソースグループの作成
az group create --name myResourceGroup --location eastus
# 仮想マシンの作成
az vm create --resource-group myResourceGroup --name myVM --image Ubuntu2204 --admin-username azureuser --generate-ssh-keys
# Webアプリの一覧表示
az webapp list
Google Cloud: GCP
Google Cloud Platform でアプリケーションをデプロイおよび管理します。
# GCP認証
gcloud auth login
# プロジェクトの設定
gcloud config set project my-project-id
# App Engineアプリケーションのデプロイ
gcloud app deploy
# Compute Engineインスタンスの作成
gcloud compute instances create my-instance --zone=us-central1-a
# Kubernetesクラスタの管理
gcloud container clusters create my-cluster --num-nodes=3
マルチクラウド管理
複数のクラウドプロバイダーにわたるリソースを管理するためのツール。
# Pulumi (マルチクラウド IaC)
import pulumi_aws as aws
import pulumi_gcp as gcp
# AWS S3 バケットの作成
bucket = aws.s3.Bucket("my-bucket")
# GCP ストレージバケットの作成
gcp_bucket = gcp.storage.Bucket("my-gcp-bucket")
セキュリティとシークレット管理
HashiCorp Vault: シークレット管理
HashiCorp Vault は、シークレットに安全にアクセスするためのツールです。シークレットとは、API キー、パスワード、証明書など、アクセスを厳密に制御したいすべてのものを指します。
# シークレットの書き込み
vault kv put secret/myapp/config username=myuser password=mypassword
# シークレットの読み取り
vault kv get secret/myapp/config
# シークレットの削除
vault kv delete secret/myapp/config
# 認証メソッドの有効化
vault auth enable kubernetes
# ポリシーの作成
vault policy write myapp-policy myapp-policy.hcl
セキュリティスキャン:Trivy & SonarQube
コンテナとコードをスキャンしてセキュリティの脆弱性を検出します。
# Trivyコンテナスキャン
trivy image nginx:latest
# ファイルシステムのスキャン
trivy fs /path/to/project
# SonarQube分析
sonar-scanner -Dsonar.projectKey=myproject -Dsonar.sources=. -Dsonar.host.url=http://localhost:9000
SSL/TLS証明書管理
安全な通信のために SSL 証明書を管理します。
# Certbotを使用したLet's Encrypt
certbot --nginx -d example.com
# 証明書の更新
certbot renew
# 証明書の有効期限の確認
openssl x509 -in cert.pem -text -noout | grep "Not After"
# 自己署名証明書の生成
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
コンテナセキュリティ
コンテナ化されたアプリケーションとランタイム環境を保護します。
# 非rootユーザーとしてコンテナを実行
docker run --user 1000:1000 myapp
# イメージの脆弱性スキャン
docker scan myapp:latest
# distrolessイメージの使用
FROM gcr.io/distroless/java:11
COPY app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
パフォーマンス最適化
システムパフォーマンス監視
サーバーの管理、デプロイの設定、本番環境で発生した問題の修正など、これらのコマンドはより速く、よりスマートに作業するのに役立ちます。
# CPUとメモリの使用率
htop
# ディスク使用量
df -h
# ネットワーク接続
netstat -tulpn
# プロセス監視
ps aux | grep process_name
# システム負荷
uptime
# メモリ詳細
free -h
アプリケーションパフォーマンスチューニング
アプリケーションのパフォーマンスとリソース使用率を最適化します。
# JVMパフォーマンス監視
jstat -gc -t PID 1s
# Node.jsパフォーマンス
node --inspect app.js
# データベースクエリの最適化
EXPLAIN ANALYZE SELECT * FROM table WHERE condition;
# Nginxパフォーマンスチューニング
nginx -t && nginx -s reload
ロードテストとベンチマーク
さまざまな負荷条件下でアプリケーションのパフォーマンスをテストします。
# Apache Bench
ab -n 1000 -c 10 http://example.com/
# wrk HTTPベンチマーク
wrk -t12 -c400 -d30s http://example.com/
# Artilleryロードテスト
artillery run load-test.yml
# Kubernetes水平Podオートスケーラー
kubectl autoscale deployment myapp --cpu-percent=70 --min=1 --max=10
データベースパフォーマンス
データベースのパフォーマンスとクエリを監視および最適化します。
# MySQLパフォーマンス
SHOW PROCESSLIST;
SHOW STATUS LIKE 'Threads_connected';
# PostgreSQL監視
SELECT * FROM pg_stat_activity;
# Redis監視
redis-cli --latency
redis-cli info memory
DevOps ツールのインストール
パッケージマネージャー
システムパッケージマネージャーを使用してツールをインストールします。
# Ubuntu/Debian
apt update && apt install -y docker.io kubectl terraform
# CentOS/RHEL
yum install -y docker kubernetes-client terraform
# macOS Homebrew
brew install docker kubectl terraform ansible
コンテナランタイムのインストール
Docker とコンテナオーケストレーションツールを設定します。
# Dockerのインストール
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker
# Docker Composeのインストール
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
クラウド CLI ツールのインストール
主要なクラウドプロバイダーのコマンドラインインターフェイスをインストールします。
# AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && ./aws/install
# Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | bash
# Google Cloud SDK
curl https://sdk.cloud.google.com | bash
環境設定
環境変数管理
異なる環境全体で構成を安全に管理します。
# .env ファイルの例
DATABASE_URL=postgresql://user:pass@localhost/db
API_KEY=your-api-key-here
ENVIRONMENT=production
# 環境変数のロード
export $(cat .env | xargs)
# Docker環境変数
docker run -e NODE_ENV=production -e API_KEY=secret myapp
# Kubernetes configmap
kubectl create configmap app-config --from-env-file=.env
サービスディスカバリと構成
サービスディスカバリと動的構成を管理します。
# Consulサービス登録
consul services register myservice.json
# サービスヘルスチェックの取得
consul health service web
# Etcdキーバリューストア
etcdctl put /config/database/host localhost
etcdctl get /config/database/host
開発環境セットアップ
コンテナを使用して一貫した開発環境をセットアップします。
# 開発用Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
# 開発用 Docker Compose
version: '3.8'
services:
app:
build: .
ports:
- '3000:3000'
volumes:
- .:/app
- /app/node_modules
database:
image: postgres:13
environment:
POSTGRES_DB: myapp
本番環境の強化
本番環境を保護し、最適化します。
# Systemd サービス設定
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
自動化とオーケストレーション
Ansible によるインフラストラクチャ自動化
インフラストラクチャのプロビジョニングと構成管理を自動化します。
# Ansible プレイブックの例
---
- hosts: webservers
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Start nginx
service:
name: nginx
state: started
enabled: yes
- name: Deploy application
copy:
src: /local/app
dest: /var/www/html
ワークフローオーケストレーション
複雑なワークフローとデータパイプラインをオーケストレートします。
# Apache Airflow DAG の例
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime
dag = DAG('data_pipeline',
start_date=datetime(2023, 1, 1),
schedule_interval='@daily')
extract = BashOperator(task_id='extract_data',
bash_command='extract.sh',
dag=dag)
transform = BashOperator(task_id='transform_data',
bash_command='transform.sh',
dag=dag)
extract >> transform
イベント駆動型自動化
システムイベントと Webhook に基づいて自動化をトリガーします。
# GitHub webhookハンドラ
#!/bin/bash
if [ "$1" == "push" ]; then
git pull origin main
docker build -t myapp .
docker run -d --name myapp-$(date +%s) myapp
fi
# Prometheus alertmanager webhook
curl -X POST http://webhook-handler/deploy \
-H "Content-Type: application/json" \
-d '{"service": "myapp", "action": "restart"}'
ChatOps 統合
共同自動化のために DevOps 操作をチャットプラットフォームと統合します。
# Slackボットコマンドの例
/deploy myapp to production
/rollback myapp to v1.2.3
/scale myapp replicas=5
/status infrastructure
# Microsoft Teams webhook
curl -H "Content-Type: application/json" \
-d '{"text": "Deployment completed successfully"}' \
$TEAMS_WEBHOOK_URL