[AWS] DevTools Evangelism CodeBuild 版 [CodeBuild]
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 时在部署前对代码进行测试和编译。

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
-
在 AWS CodeBuild 控制台,点击 Create Project。

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

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

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


-
启用 Use buildspec file,让构建使用仓库中存放的
buildspec.yml。
Creating a Test Object
本示例需要在仓库中准备三个文件:
- 定义 Lambda 函数的 CloudFormation 模板。
- 表达所需约束的 Cfn‑Guard 规则文件。
- 指示 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 模板执行校验,并在构建日志中报告成功或失败的结果。