mcpField
A
aws-deployment

aws-deployment

github.com/aws云与 DevOps3.3k5.9k 次安装今天更新
代码仓库

关于 aws-deployment

面向 AWS CI/CD 部署的技能,为开发者提供 CodePipeline、CodeBuild、CodeDeploy 等服务的配置和排错指导。涵盖常见部署流程、跨账户要求及安全注意事项。

主要功能

  1. 01CodePipeline 流水线指导
  2. 02CodeConnections 源连接配置
  3. 03CodeBuild 构建配置
  4. 04CodeDeploy 部署策略
  5. 05跨账户部署与故障排查

适用场景

  1. 01创建 GitHub 到 ECS 的流水线
  2. 02诊断流水线或构建卡住
  3. 03配置跨账户部署权限
  4. 04设置 Lambda 金丝雀部署

MCP 相关

该技能适用于 AWS MCP server,可直接运行 CLI 命令并验证配置;相关指导也适用于标准 AWS CLI。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aws/agent-toolkit-for-aws --skill aws-deployment

安装后在 Claude Code 中输入/aws-deployment确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
codeartifact.md
codebuild.md
codeconnections.md
codedeploy.md
codepipeline.md
troubleshooting.md

详细介绍

AWS 部署(CI/CD)

搭配 AWS MCP server 使用效果最佳,可直接运行 CLI 命令并验证配置。所有指导也适用于标准 AWS CLI。

重要警告

CodeConnections 的 PENDING 陷阱:通过 CLI/CloudFormation 创建的连接会一直处于 PENDING 状态——必须在 AWS Console 中完成 OAuth。不存在仅通过 API 完成的途径。

跨账户部署的三项要求:跨账户部署需要同时满足以下三项:(1) KMS 密钥策略授予目标账户权限(使用密钥 ID,而非别名);(2) S3 存储桶策略授予目标账户权限;(3) 配置具有信任策略的跨账户 IAM 角色。缺少任何一项都会导致难以诊断的 Access Denied。

CodeDeploy ApplicationStop 使用上一个修订版本:先前部署中的停止脚本如果有问题,会阻止所有后续部署。应确保停止脚本幂等(服务不存在时退出码为 0)。使用 --ignore-application-stop-failures 解除阻塞。

没有 NAT 的 CodeBuild VPC:在没有 NAT 网关的 VPC 子网中构建时,会在 DOWNLOAD_SOURCE 阶段无提示地挂起。私有子网必须配置 NAT 网关或 VPC 端点。

CodeConnections IAM:API 调用和 IAM 策略 Actions 使用 codeconnections: 前缀。资源 ARN 必须完全匹配——新资源使用 codeconnections 前缀,现有资源可能使用 codestar-connections 前缀。如果资源创建时间不一,请在 Resource 中指定两种前缀。

UseConnection 权限过于宽泛:codeconnections:UseConnection 会授予对该连接可访问的所有存储库的权限。必须指定条件键(codeconnections:FullRepositoryId、codeconnections:ProviderAction、codeconnections:BranchName),将 CodeBuild 限制为只能访问所需的存储库。

这些服务如何协同工作

CodeConnections → CodeBuild → CodeDeploy,由 CodePipeline 负责编排。

层级服务作用
源代码CodeConnections向 GitHub/GitLab/Bitbucket 进行身份验证并交付代码
软件包CodeArtifact私有软件包注册表,从公共注册表缓存依赖项
构建/测试CodeBuild编译、测试并打包构件
部署CodeDeploy通过流量切换策略部署到 EC2/ECS/Lambda
编排CodePipeline串联各阶段、管理转换和审批关卡

默认使用 V2 管道类型和 QUEUED 执行模式。仅当各次执行完全独立时才使用 PARALLEL。

快速导航

你想要……前往
创建管道(V2、触发器、变量、模式)codepipeline.md
连接 GitHub/GitLab/Bitbucket 源codeconnections.md
编写 buildspec.yml / 配置构建codebuild.md
为构建设置私有软件包注册表codeartifact.md
配置部署策略(蓝绿、金丝雀)codedeploy.md
跨账户或跨区域部署codepipeline.md
修复失败的管道、构建或部署troubleshooting.md

常见工作流

任务操作参考
从 GitHub 部署流水线到 ECS创建连接 → CodeBuild Docker 阶段 → CodeDeploy ECS 蓝绿部署codepipeline、codedeploy
流水线停滞在源阶段检查连接状态;如果状态为 PENDING,请在 AWS Console 中完成 OAuthtroubleshooting
构建超时检查 VPC/NAT,增大 timeoutInMinutes,确认 Docker 特权模式已启用codebuild
部署到其他账户配置 KMS + S3 存储桶策略 + 跨账户角色,并将 RoleArn 添加到操作中codepipeline
回滚失败的部署在警报触发或失败时自动回滚;手动操作:stop-deployment --auto-rollback-enabledcodedeploy
Lambda 金丝雀部署CodeBuild 打包 → CodeDeploy Lambda 金丝雀流量转移codedeploy

故障排除

错误/症状原因解决方法
CodeBuild 中出现 YAML_FILE_ERRORbuildspec 中缺少或格式错误的 runtime-versions(标准映像建议配置)在 install 阶段添加 runtime-versions 块
CodeDeploy 出现 file already exists重新部署时未配置覆盖设置 file_exists_behavior: OVERWRITE
流水线触发器未触发文件路径筛选器仅检查差异中的前 100 个文件缩小路径筛选范围,或合并更小的更改
PARALLEL 模式使用了错误的修订版本事件与源操作之间存在竞争使用 QUEUED 模式以确保顺序一致性
Docker:Cannot connect to daemon未启用特权模式设置 privilegedMode: true,并在 buildspec 中启动 dockerd
CODEBUILD_CLONE_REF 权限错误CodeBuild 角色缺少 UseConnection 权限将 codeconnections:UseConnection 添加到 CodeBuild 服务角色
部署始终无法完成MinimumHealthyHosts 对实例数量而言设置过高确保健康阈值低于实例总数
ECS 部署停滞新任务集的运行状况检查失败确认目标组的运行状况检查路径/端口

安全

  • MUST 将密钥存储在 Secrets Manager 或 Parameter Store 中;通过 CodeBuild type: SECRETS_MANAGER 引用——MUST NOT 将密钥以 PLAINTEXT 嵌入 buildspec
  • MUST 使用客户管理的 KMS 密钥加密跨账户构件(默认加密不支持跨账户)
  • SHOULD 将 CodeBuild/CodeDeploy 服务角色的权限范围限定为特定资源 ARN;MUST NOT 在 s3:GetObject 或 kms:Decrypt 中使用 *
  • MUST 使用 CodeConnections(而非个人访问令牌)建立源连接;OAuth 令牌无法自动轮换
  • 有关完整指南,请参阅 CodePipeline 安全最佳实践

未涵盖的内容

主题请改用
CDK Pipelines(aws-cdk-lib/pipelines)aws-cdk
sam deploy / SAM CLIaws-serverless
ECS 服务部署配置(断路器、滚动参数)aws-containers
GitHub Actions / GitLab CI第三方工具,不在本文涵盖范围内

评论

支持 Markdown