如何配置CDK Pipeline实现GitHub提交后自动部署S3静态网站?
CDK Pipeline配置指南:GitHub触发+S3静态网站自动部署
1. 配置代码变更自动触发流水线
CDK Pipelines对接GitHub时,需通过GitHub个人访问令牌(PAT)完成权限认证并自动创建Webhook,实现代码提交触发流水线:
- 前往GitHub生成具备
repo和admin:repo_hook权限的PAT - 将该令牌存入AWS Secrets Manager,命名例如
github-token - 在CDK代码中引用该密钥作为GitHub源的认证凭据,部署栈后CDK会自动为目标仓库创建Webhook,后续指定分支(如
main)的代码提交将直接触发流水线
2. 将仓库内容部署到S3桶
通过在流水线中添加部署步骤,执行aws s3 sync命令同步仓库静态文件到目标S3桶:
- 确保流水线执行角色拥有S3桶的
PutObject、DeleteObject、ListBucket权限 - 根据项目结构指定静态文件所在目录(如
./public或根目录.) - 在流水线阶段中添加ShellStep执行同步命令
修改后的完整代码示例
import * as cdk from "aws-cdk-lib"; import * as pipelines from "aws-cdk-lib/pipelines"; import { Construct } from "constructs"; import * as iam from "aws-cdk-lib/aws-iam"; export class WorkshopPipeLineStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // 配置GitHub源,引入SecretsManager中的令牌 const source = pipelines.CodePipelineSource.gitHub( "kasukur/s3-website", "main", { authentication: cdk.SecretValue.secretsManager("github-token"), } ); // 创建流水线,包含Synth步骤 const pipeline = new pipelines.CodePipeline(this, "MyPipeline", { synth: new pipelines.ShellStep("Synth", { input: source, commands: [ "npm install", "npx cdk synth" ], env: { COMMIT_ID: source.sourceAttribute("CommitId"), }, }), }); // 引入目标S3桶(若桶由CDK创建,可直接引用栈内资源) const targetBucket = cdk.aws_s3.Bucket.fromBucketName(this, "TargetBucket", "your-s3-static-bucket-name"); // 添加部署阶段,同步静态文件到S3 pipeline.addStage(new cdk.Stage(this, "DeployStaticSite", { env: props?.env })).addPost(new pipelines.ShellStep("SyncToS3", { commands: [ // 替换为你的静态文件目录 `aws s3 sync ./public s3://${targetBucket.bucketName} --delete` ], // 为步骤添加S3操作权限 rolePolicyStatements: [ new iam.PolicyStatement({ actions: ["s3:PutObject", "s3:DeleteObject", "s3:ListBucket"], resources: [targetBucket.bucketArn, `${targetBucket.bucketArn}/*`] }) ] })); } }
关键注意事项
- 替换代码中的
your-s3-static-bucket-name为实际S3桶名称 - 若静态文件存放在仓库根目录,将
./public改为. - 首次部署前需确保本地已配置AWS credentials,且具备创建Pipeline、Secrets Manager等资源的权限
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

