devops-deploy について
devops-deployは、アプリのインフラとリリースを担当する開発者向けのスキルです。Docker、CI/CD、AWSデプロイ、IaC、監視、ロールバック計画を扱い、本番環境の変更には慎重な確認を促します。
主な機能
- 01Docker設定とCompose
- 02GitHub ActionsのCI/CDパイプライン
- 03AWS LambdaとSAMのデプロイ
- 04TerraformによるIaC
- 05ヘルスチェックとCloudWatchアラート
- 06本番確認とロールバックのチェックリスト
活用シーン
- 01アプリのコンテナ化
- 02GitHub Actionsパイプラインの設定
- 03サービスのAWS Lambdaへのデプロイ
- 04監視とロールバック計画の準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill devops-deployインストール後、Claude Code で/devops-deployを入力して読み込まれたか確認します。
詳細
DEVOPS-DEPLOY — アイデアから本番環境へ
概要
アプリケーションの DevOps とデプロイ — Docker、GitHub Actions による CI/CD、AWS Lambda、SAM、Terraform、Infrastructure as Code、モニタリング。次の用途で有効にしてください:アプリケーションの Docker 化、CI/CD パイプラインの設定、AWS へのデプロイ、Lambda、ECS、GitHub Actions の設定、Terraform、ロールバック、ブルーグリーンデプロイ、ヘルスチェック、アラート。
このスキルを使用する場合
- この分野に関する専門的な支援が必要な場合
このスキルを使用しない場合
- タスクが DevOps やデプロイに関係しない場合
- よりシンプルで具体的なツールでリクエストに対応できる場合
- ユーザーが専門知識を必要としない汎用的な支援を求めている場合
実行上の制限
例では有料のインフラストラクチャを変更し、リソースを公開または削除する可能性があります。実行前に、アカウント、リージョン、スタック、コスト、ロールバックを確認してください。Telegram 通知には明示的な許可が必要です。依頼されていない場合は、この手順を省略してください。スクリプトとアプリケーションのファイルは含まれていません。バージョンを固定し、確認を得ずにデプロイする前にプランを確認してください。
仕組み
「素早く進み、問題を起こさない。」— エリートエンジニアリングは遅くありません。 速さと信頼性を同時に実現します。
最適化された Dockerfile(Python)
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
ENV PYTHONUNBUFFERED=1
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=3s CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=2)" || exit 1
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Docker Compose(ローカル開発)
version: "3.9"
services:
app:
build: .
ports: ["8000:8000"]
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
volumes:
- .:/app
depends_on: [db, redis]
db:
image: postgres:15
environment:
POSTGRES_DB: auri
POSTGRES_USER: auri
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
pgdata:
Sam テンプレート(サーバーレス)
## Template.Yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 30
Runtime: python3.11
Environment:
Variables:
ANTHROPIC_API_KEY: !Ref AnthropicApiKey
DYNAMODB_TABLE: !Ref AuriTable
Parameters:
AnthropicApiKey:
Type: String
NoEcho: true
Resources:
AuriFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/
Handler: lambda_function.handler
MemorySize: 512
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref AuriTable
AuriTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: auri-users
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
TimeToLiveSpecification:
AttributeName: ttl
Enabled: true
デプロイコマンド
## Build E Deploy
sam build
sam deploy --guided # primeira vez
sam deploy # deploys seguintes
## Deploy Rapido (Sem Confirmacao)
sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
## Ver Logs Em Tempo Real
sam logs -n AuriFunction --tail
## Deletar Stack
sam delete
.Github/Workflows/Deploy.Yml
name: Deploy Auri
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: { python-version: "3.11" }
- run: pip install -r requirements.txt
- run: pytest tests/ -v --cov=src --cov-report=xml
- uses: codecov/codecov-action@v4
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install bandit safety
- run: bandit -r src/ -ll
- run: safety check -r requirements.txt
deploy:
needs: [test, security]
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: aws-actions/setup-sam@v2
- uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- run: sam build
- run: sam deploy --no-confirm-changeset
- name: Notify Telegram on Success
run: |
curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
-d "chat_id=${{ secrets.TELEGRAM_CHAT_ID }}" \
-d "text=Auri deployed successfully! Commit: ${{ github.sha }}"
ヘルスチェックエンドポイント
from fastapi import FastAPI
import time, os
app = FastAPI()
START_TIME = time.time()
@app.get("/health")
async def health():
return {
"status": "healthy",
"uptime_seconds": time.time() - START_TIME,
"version": os.environ.get("APP_VERSION", "unknown"),
"environment": os.environ.get("ENV", "production")
}
Cloudwatch アラート
import boto3
def create_error_alarm(function_name: str, sns_topic_arn: str):
cw = boto3.client("cloudwatch")
cw.put_metric_alarm(
AlarmName=f"{function_name}-errors",
MetricName="Errors",
Namespace="AWS/Lambda",
Dimensions=[{"Name": "FunctionName", "Value": function_name}],
Period=300,
EvaluationPeriods=1,
Statistic="Sum",
Threshold=5,
ComparisonOperator="GreaterThanThreshold",
AlarmActions=[sns_topic_arn],
TreatMissingData="notBreaching"
)
5. 本番環境チェックリスト
- Secrets Manager 経由で環境変数を設定する(ハードコードは厳禁)
- ヘルスチェックエンドポイントが応答する
- request_id を含む構造化ログ(JSON)
- レート制限を設定する
- CORS を許可されたドメインに制限する
- DynamoDB の自動バックアップを有効にする
- Lambda に適切なタイムアウトを設定する(10~30 秒)
- エラーとレイテンシーの CloudWatch アラーム
- ロールバック計画を文書化する
- リリース前に負荷テストを行う
6. コマンド
| コマンド | アクション |
|---|---|
/docker-setup | アプリケーションを Docker 化します |
/sam-deploy | AWS Lambda に完全デプロイします |
/ci-cd-setup | GitHub Actions パイプラインを設定します |
/monitoring-setup | CloudWatch とアラートを設定します |
/production-checklist | リリース前チェックリストを実行します |
/rollback | 以前のバージョンへのロールバック計画 |
ベストプラクティス
- プロジェクトと要件について、明確で具体的なコンテキストを提示してください
- 提案を本番コードに適用する前に、すべて確認してください
- 包括的な分析を行うため、他の補完的なスキルと組み合わせてください
よくある落とし穴
- このスキルの専門分野以外のタスクに使用する
- 独自のコンテキストを理解せずに推奨事項を適用する
- 正確な分析に必要なプロジェクトのコンテキストを十分に提示しない
制限事項
- タスクが上記の説明にある範囲に明確に該当する場合にのみ、このスキルを使用してください。
- 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認を求めてください。
コメント
Markdown 対応