[AWS] DevTools Evangelism CodeBuild 版 [CodeBuild]

发布: (2025年12月9日 GMT+8 14:08)
3 min read
原文: Dev.to

Source: Dev.to

Introduction

我在之前的文章中介绍过多个 AWS DevTools,这次要介绍 AWS CodeBuild

AWS CodeBuild 常用于在部署工作之前自动化例行任务,例如测试和编译源代码。
它经常与 AWS CodeCommit 和 AWS CodeDeploy 一起被提及,属于同一套 Code 系列。

注:本文并非 Qiita Advent Calendar 的一部分。

Prerequisites

很多人会使用 AWS CodePipeline 或 GitHub Actions 等工具来设置自动化执行。
本文旨在宣传 DevTools,因此侧重于直接使用 CodeBuild 的基础操作。

What is AWS CodeBuild?

AWS CodeBuild 会编译存放在 S3、AWS CodeCommit 或 GitHub 中的源代码,并运行单元测试。
它通常用于更新制品仓库,并在实现 CI/CD 时在部署前对代码进行测试和编译。

CodeBuild overview

What we’ll try in this article

在 CodeBuild 中运行 AWS CloudFormation Guard 测试。

What is AWS CloudFormation Guard?

一个用于验证 CloudFormation 模板中的定义是否符合预期规则的工具。
你使用 YAML 格式编写规则定义,Guard 会检查这些规则是否与模板内容匹配。

规则示例

  • 确保 Lambda 函数的 timeout ≤ 90 秒。
  • 限制运行时版本为特定版本。

Configuring CodeBuild

Creating a CodeBuild Project

  1. 在 AWS CodeBuild 控制台,点击 Create Project

    Create Project button

  2. 输入项目名称并保持默认设置。

    Project name screen

  3. 选择 source provider(之前创建的 AWS CodeCommit 仓库)。

    Source provider selection

  4. 对于环境,选择 managed image 并将 Lambda 设为计算类型(最小配置)。

    Environment selection

    Compute type selection

  5. 启用 Use buildspec file,让构建使用仓库中存放的 buildspec.yml

    Buildspec option

Creating a Test Object

本示例需要在仓库中准备三个文件:

  1. 定义 Lambda 函数的 CloudFormation 模板
  2. 表达所需约束的 Cfn‑Guard 规则文件
  3. 指示 CodeBuild 如何运行 Guard 的 buildspec.yml

CloudFormation Template

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Lambda function CloudFormation template'

Resources:
  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: MyLambdaFunction
      Runtime: python3.9
      Handler: index.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Timeout: 30
      Code:
        ZipFile: |
          def lambda_handler(event, context):
              return {
                  'statusCode': 200,
                  'body': 'Hello from Lambda!'
              }

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

Outputs:
  LambdaFunctionArn:
    Description: 'Lambda Function ARN'
    Value: !GetAtt MyLambdaFunction.Arn

Cfn‑Guard Rule File

# Lambda function security and best practices rules

# Ensure Lambda function has a timeout set and  **Note:** Adjust the `runtime-versions` and any additional commands to match your project's requirements.

有了项目、源码文件以及 buildspec.yml 后,在 CodeBuild 控制台启动一次构建。构建过程会编译 Guard 二进制文件,对 CloudFormation 模板执行校验,并在构建日志中报告成功或失败的结果。

Back to Blog

相关文章

阅读更多 »

Jenkins 在 AWS + Docker

Jenkins 在 AWS + Docker 的封面图片 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-upload...