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

如何为部署在Fargate的Spring Boot应用编写正确的Buildspec文件

面向Fargate部署的Spring Boot应用Buildspec编写指南

以下为AWS CodeBuild场景下合规可用的Buildspec编写逻辑及示例,同步集成负载性能测试流程:

核心阶段配置逻辑

所有Buildspec默认遵循AWS CodeBuild的标准结构,分为4个核心执行阶段,各阶段需完成的操作如下:

  • 安装阶段:配置运行时环境(对应Spring Boot版本的JDK、Docker),安装必要工具(AWS CLI、压测工具、JSON解析工具等)
  • 预构建阶段:登录镜像仓库(ECR)、动态获取ALB地址、拉取依赖缓存、校验环境变量配置
  • 构建阶段:完成Spring Boot应用打包、Docker镜像构建与标签设置
  • 后构建阶段:推送镜像到ECR、触发Fargate服务更新、等待部署完成、执行负载测试、校验性能指标、不符合阈值则终止构建流程

完整可复用Buildspec示例

version: 0.2

env:
  variables:
    JAVA_VERSION: "17"
    ECR_REPO_URI: "替换为你的ECR仓库地址"
    ALB_NAME: "替换为你的应用ALB名称"
    PERF_TEST_ERROR_RATE_THRESHOLD: "0.001" # 允许的最大请求错误率0.1%
    ECS_CLUSTER_NAME: "替换为你的ECS集群名称"
    ECS_SERVICE_NAME: "替换为你的Fargate服务名称"
  secrets-manager:
    AWS_ACCOUNT_ID: "替换为你存储在Secrets Manager的账号ID对应的密钥路径"

phases:
  install:
    runtime-versions:
      java: $JAVA_VERSION
      docker: latest
    commands:
      - echo "安装工具依赖"
      - apt update && apt install -y jq bc
      # 以下为k6压测工具安装,使用JMeter可替换为对应安装命令
      - wget https://github.com/grafana/k6/releases/download/v0.45.1/k6-v0.45.1-linux-amd64.deb && dpkg -i k6-v0.45.1-linux-amd64.deb
  pre_build:
    commands:
      - echo "登录AWS ECR镜像仓库"
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
      - echo "动态获取ALB访问域名"
      - ALB_DOMAIN=$(aws elbv2 describe-load-balancers --names $ALB_NAME --query 'LoadBalancers[0].DNSName' --output text)
  build:
    commands:
      - echo "Maven打包Spring Boot应用"
      - mvn clean package -DskipTests
      - echo "构建Docker镜像"
      - docker build -t $ECR_REPO_URI:$CODEBUILD_BUILD_NUMBER .
      - docker tag $ECR_REPO_URI:$CODEBUILD_BUILD_NUMBER $ECR_REPO_URI:latest
  post_build:
    commands:
      - echo "推送镜像到ECR"
      - docker push $ECR_REPO_URI:$CODEBUILD_BUILD_NUMBER
      - docker push $ECR_REPO_URI:latest
      - echo "触发Fargate服务滚动更新"
      - aws ecs update-service --cluster $ECS_CLUSTER_NAME --service $ECS_SERVICE_NAME --force-new-deployment
      - echo "等待服务部署稳定"
      - aws ecs wait services-stable --cluster $ECS_CLUSTER_NAME --service $ECS_SERVICE_NAME
      - echo "执行负载性能测试"
      # 压测脚本默认存放于代码仓库performance-test目录,需提前编写对应测试逻辑
      - k6 run -e TARGET_URL=http://$ALB_DOMAIN ./performance-test/script.js --summary-export perf-test-result.json
      - echo "校验性能测试结果"
      - ACTUAL_ERROR_RATE=$(jq '.metrics.http_req_failed.values.rate' perf-test-result.json)
      - |
        if (( $(echo "$ACTUAL_ERROR_RATE > $PERF_TEST_ERROR_RATE_THRESHOLD" | bc -l) )); then
          echo "性能测试不通过,错误率为$ACTUAL_ERROR_RATE,超过阈值$PERF_TEST_ERROR_RATE_THRESHOLD"
          exit 1
        fi
artifacts:
  files:
    - target/*.jar
    - perf-test-result.json
  name: build-artifact-$CODEBUILD_BUILD_NUMBER

注意事项

  • 所有敏感凭证(如AWS账号ID、数据库密码等)禁止硬编码在Buildspec中,统一通过CodeBuild环境变量、AWS Parameter Store或者Secrets Manager获取
  • 负载测试建议在预发布环境执行,避免对生产业务造成影响,压测阈值可根据业务需求调整,除错误率外还可新增P95延迟、峰值QPS等校验维度
  • Docker镜像构建建议遵循最小权限原则,不要使用root用户运行Spring Boot应用,降低安全风险
  • 构建产物和性能测试报告默认会作为构建产物留存,也可配置自动上传到S3存储桶用于后续审计排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:06:06