You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket通过AWS CodeDeploy部署失败问题求助

排查Bitbucket部署AWS CodeDeploy时的IAM_ROLE_MISSING错误 & 完整配置教程

首先咱们先解决你当前遇到的「IAM_ROLE_MISSING」错误,再给你一份靠谱的Bitbucket对接CodeDeploy的配置流程。

一、错误排查步骤

直接从最可能的原因开始查:

  • 先确认IAM角色真的存在:打开AWS IAM控制台的「角色」页面,搜索m30role,看看这个角色是不是真的在你的账号里。还要核对ARN里的账号ID(就是那串星号的部分)和角色名称,有没有拼写错误、大小写问题或者多余空格——ARN必须完全匹配,差一个字符都不行。
  • 检查信任关系是否允许Bitbucket访问:你当前的信任关系里只加了CodeDeploy服务和根账号,但Bitbucket发起部署时,是用它自己的AWS身份来扮演你的角色的。你需要把Bitbucket的固定AWS账号ID 102604600755加到Principal里,同时确保ExternalId和Bitbucket连接里的完全一致。
  • 验证Bitbucket部署配置里的ARN是否正确:去Bitbucket的部署步骤里,看看你填的IAM角色ARN是不是复制粘贴的完整值,有没有漏了开头的arn:aws:iam::或者末尾的角色名。
  • 确认角色是CodeDeploy服务角色:这个角色必须是专门给CodeDeploy用的服务角色,不能是普通的IAM用户角色——创建角色的时候要选CodeDeploy作为受信任服务。

二、Bitbucket对接AWS CodeDeploy完整配置教程

1. AWS端准备

(1)创建CodeDeploy服务角色

  • 进入IAM控制台 → 角色 → 创建角色
  • 选择「CodeDeploy」作为受信任服务,点击下一步
  • 附加官方托管策略AWSCodeDeployRole(比自定义策略更安全,权限刚好匹配CodeDeploy需求)
  • 给角色起个好记的名字(比如CodeDeploy-Service-Role),完成创建

(2)调整角色信任关系

因为是Bitbucket发起部署,需要允许Bitbucket的身份来扮演这个角色。编辑信任关系,替换成下面的内容:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "codedeploy.amazonaws.com",
        "AWS": "arn:aws:iam::102604600755:root" // Bitbucket Cloud固定AWS账号ID,别改
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "connection:你的Bitbucket连接ID" // 替换成你Bitbucket连接里的External ID
        }
      }
    }
  ]
}

(3)创建CodeDeploy应用和部署组

  • 进入CodeDeploy控制台 → 应用 → 创建应用,选择你的平台(比如EC2/On-premises)
  • 创建部署组:关联刚才的服务角色,选部署配置(你用的CodeDeployDefault.OneAtATime没问题),添加要部署的目标实例或Auto Scaling组

(4)准备S3存储桶

创建一个S3桶用来存部署包,确保刚才的CodeDeploy服务角色有S3的读写权限(托管策略已经包含了必要权限)。

2. Bitbucket端配置

(1)关联AWS账号

  • 打开Bitbucket仓库 → 设置 → 部署 → AWS连接 → 「连接AWS」
  • 按照提示在AWS里创建授权角色,记录下生成的External ID,完成连接

(2)编写Bitbucket Pipelines配置

在仓库根目录创建bitbucket-pipelines.yml,示例配置如下(根据你的项目调整打包步骤):

image: amazonlinux:2

pipelines:
  default:
    - step:
        name: 构建并部署到AWS CodeDeploy
        script:
          # 安装AWS CLI
          - yum install -y aws-cli
          # 打包项目文件成zip(根据你的项目结构调整,必须包含appspec.yml)
          - zip -r deploy-package.zip ./src ./appspec.yml
          # 上传到S3
          - DEPLOY_PACKAGE_KEY="deploy-packages/$(date +%Y%m%d%H%M%S).zip"
          - aws s3 cp deploy-package.zip s3://你的S3桶名/$DEPLOY_PACKAGE_KEY
          # 发起CodeDeploy部署
          - aws deploy create-deployment --application-name 你的CodeDeploy应用名 --deployment-group-name 你的部署组名 --s3-location bucket=你的S3桶名,bundleType=zip,key=$DEPLOY_PACKAGE_KEY --iam-role-arn arn:aws:iam::你的AWS账号ID:role/CodeDeploy-Service-Role

⚠️ 注意:必须包含appspec.yml文件,这是CodeDeploy的核心部署配置文件,没有它部署一定会失败。

(3)测试部署

提交代码触发Pipeline,查看Bitbucket的部署日志,确认是否成功。如果还有问题,看日志里的具体错误信息,再针对性排查。

三、你的当前配置分析

  • 策略部分:你给的codedeploy:*和s3:*权限足够,但建议换成官方托管策略AWSCodeDeployRole,避免过度授权带来的安全风险。
  • 信任关系部分:缺少Bitbucket的AWS账号ID,这会导致Bitbucket无法合法扮演你的m30role,AWS因此返回角色不存在的错误(本质是Bitbucket没有权限访问这个角色)。
  • 部署包:你说构建文件已经上传到S3,但要确认包里包含appspec.yml,这是CodeDeploy必须的配置文件,很多部署失败都是因为遗漏了它。

内容的提问来源于stack exchange,提问作者Renz Manacmol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:13:47