关于 devops-deploy
devops-deploy 面向处理应用基础设施与发布的开发者,涵盖 Docker、CI/CD、AWS 部署、基础设施即代码和监控,并提醒审慎处理生产环境变更。
主要功能
- 01Docker 配置与 Compose
- 02GitHub Actions CI/CD 流水线
- 03AWS Lambda 与 SAM 部署
- 04Terraform 基础设施即代码
- 05健康检查与 CloudWatch 告警
- 06生产检查与回滚清单
适用场景
- 01将应用容器化
- 02配置 GitHub 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、基础设施即代码和监控。适用于:将应用容器化、配置 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-30s)
- CloudWatch 已配置错误和延迟告警
- 已记录回滚计划
- 发布前进行负载测试
6. 命令
| 命令 | 操作 |
|---|---|
/docker-setup | 将应用容器化 |
/sam-deploy | 完整部署到 AWS Lambda |
/ci-cd-setup | 配置 GitHub Actions 流水线 |
/monitoring-setup | 配置 CloudWatch 和告警 |
/production-checklist | 执行发布前检查清单 |
/rollback | 制定回滚到上一版本的计划 |
最佳实践
- 提供清晰、具体的项目背景和需求
- 将建议应用到生产代码前,先审查所有建议
- 结合其他互补技能进行全面分析
常见问题
- 将此技能用于超出其专业范围的任务
- 未了解自身具体情况便直接应用建议
- 未提供足够的项目背景,导致分析不准确
限制
- 仅在任务明确符合上述范围时使用此技能。
- 不要将输出视为针对特定环境的验证、测试或专家审查的替代品。
- 如果缺少必要输入、权限、安全边界或成功标准,请暂停并请求澄清。
评论
支持 Markdown