使用云开发工具包(CDK)设置GitHub与AWS CodeBuild的集成:自动化Angular应用程序部署到S3
内容提要
本文介绍了如何使用AWS CodeBuild构建和部署Angular应用程序,包括配置GitHub仓库触发CodeBuild、创建个人访问令牌、设置CodeBuild项目及其构建和部署阶段。此外,还提到使用AWS Lambda清理S3桶中的旧文件,并在每次提交或合并请求时自动构建应用程序,最后通过CDK命令行部署整个堆栈。
延伸解读
安全存储 GitHub 令牌
文章强调不应将 GitHub 个人访问令牌硬编码在代码中,而是存储到 AWS Secrets Manager。在 CDK 代码中,通过 Secret.fromSecretAttributes 引用令牌的 ARN,并在 CodeBuild 项目中授予 secretsmanager:GetSecretValue 权限。这种做法遵循最小权限原则,避免敏感信息泄露,同时便于集中管理。
精准的构建触发条件
CodeBuild 项目配置了 webhook,但并非所有推送都会触发构建。通过 webhookFilters 指定仅当 master 分支的 apps 目录下有文件变更,且事件为推送或合并请求时,才会启动构建。这减少了不必要的构建,节省资源,并确保构建与代码变更直接相关。
部署前清理 S3 桶
由于 Angular 应用部署为静态网站,新版本可能包含已删除的文件。文章使用 Lambda 函数在部署前清空 S3 桶,避免旧文件残留。CodeBuild 在构建阶段调用该 Lambda,并授予 lambda:InvokeFunction 权限。Lambda 自身具有列出和删除对象的权限,确保清理操作安全执行。
CDK 一键部署全栈
整个基础设施通过 AWS CDK 定义,包括 CodeBuild 项目、Lambda 函数、CloudWatch 日志组、IAM 角色和权限。使用 cdk deploy 命令即可部署所有资源。部署时需要提供 GitHub 仓库信息、分支、访问令牌的 Secrets Manager ARN 以及目标 S3 桶名称。这体现了基础设施即代码的自动化优势。
Q&A
如何使用AWS CodeBuild构建和部署Angular应用程序?
使用AWS CodeBuild构建和部署Angular应用程序需要配置GitHub仓库以触发CodeBuild,创建个人访问令牌,设置CodeBuild项目的构建和部署阶段,并将构建后的文件上传到S3桶。
如何创建GitHub个人访问令牌以供AWS CodeBuild使用?
在GitHub个人访问令牌页面,输入令牌名称,选择特定仓库的访问权限,然后生成令牌。确保授予适当的权限,如元数据和Webhooks。
AWS Lambda在部署过程中有什么作用?
AWS Lambda用于在部署新版本之前清理S3桶中的旧文件,以确保新版本的应用程序不会与旧文件冲突。
如何通过CDK命令行部署整个堆栈?
使用CDK命令行工具,运行命令`cdk deploy`,并指定堆栈名称来部署整个堆栈,包括CodeBuild、Lambda等资源。
AWS CodeBuild如何与GitHub进行集成?
AWS CodeBuild通过配置GitHub源凭证和Webhook来与GitHub集成,以便在特定事件(如推送或合并请求)发生时自动触发构建。
在AWS CodeBuild中如何设置构建和部署阶段?
在AWS CodeBuild中,设置构建和部署阶段需要定义构建规范,包括构建命令和上传文件到S3的步骤。