如何在Bitbucket Pipeline中结合OIDC使用AWS Amplify及解决部署错误
解决Bitbucket Pipeline部署AWS Amplify的错误及实现测试+手动部署流程
错误原因解析
当前报错“项目级配置已将useProfile设为false,但缺少访问密钥或区域”,核心问题:
- Amplify CLI未获取到有效的AWS认证凭证(虽配置了OIDC,但未完成临时凭证的获取流程)
- 未明确指定AWS区域参数
完整解决方案
1. 调整Pipeline配置,添加测试步骤+修复认证流程
更新bitbucket-pipelines.yml,先执行测试,再完成AWS OIDC凭证获取,最后设置手动触发部署:
pipelines: default: - step: name: Run React Tests image: node:18 caches: - node script: - npm install - npm test # 测试通过才进入后续流程 - step: name: Build and Deploy to Amplify image: node:18 oidc: true caches: - node script: # 安装jq工具用于解析AWS凭证 - apt-get update && apt-get install -y jq # 配置OIDC相关变量 - export AWS_ROLE_ARN=arn:aws:iam::816202482289:role/BitbucketPipelines - export AWS_WEB_IDENTITY_TOKEN_FILE=$(pwd)/web-identity-token - echo $BITBUCKET_STEP_OIDC_TOKEN > $AWS_WEB_IDENTITY_TOKEN_FILE - export AWS_REGION=us-east-1 # 替换为你的实际AWS区域 # 通过OIDC获取临时AWS凭证 - aws sts assume-role-with-web-identity --role-arn $AWS_ROLE_ARN --role-session-name bitbucket-pipeline --web-identity-token file://$AWS_WEB_IDENTITY_TOKEN_FILE --query "Credentials" > credentials.json - export AWS_ACCESS_KEY_ID=$(jq -r '.AccessKeyId' credentials.json) - export AWS_SECRET_ACCESS_KEY=$(jq -r '.SecretAccessKey' credentials.json) - export AWS_SESSION_TOKEN=$(jq -r '.SessionToken' credentials.json) # 安装依赖、构建项目 - npm install - npm install -g @aws-amplify/cli - npm run build # 执行Amplify部署脚本 - node setup_amplify_script.js # 设置为手动触发,需人工确认后执行 trigger: manual
2. 修正Amplify部署脚本(setup_amplify_script.js)
确保脚本中配置Amplify时,明确传入区域和临时凭证参数:
const amplify = require('@aws-amplify/cli'); async function setupAmplify() { try { await amplify.configure({ projectConfig: { useProfile: false, region: process.env.AWS_REGION, accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, sessionToken: process.env.AWS_SESSION_TOKEN } }); // 此处添加你的Amplify应用创建/部署逻辑 // 示例:await amplify.addHosting({ platform: 'WEB', framework: 'REACT' }); // 示例:await amplify.publish({}); } catch (err) { console.error('Amplify部署失败:', err); process.exit(1); } } setupAmplify();
3. 关键注意事项
- 确保Bitbucket Pipelines对应的IAM角色(BitbucketPipelines)拥有创建、管理AWS Amplify应用的权限
- 替换
AWS_REGION为你实际使用的AWS区域(如ap-southeast-1) - 确认React项目的
package.json中已配置有效的test脚本
内容的提问来源于stack exchange,提问作者Maurice
相关产品推荐
相关产品推荐

