Terraform AWS Lambda CI/CD 代码独立仓库部署及APIGW集成方案咨询
第三种可行解决方案:核心基础设施层与Lambda业务层通过共享参数+集成校验机制解耦
架构分层规则
整体拆为两层完全独立的Terraform项目,各自维护独立状态:
- 核心基础设施层:保留你现有存放APIGateway的仓库,仅维护
aws_apigatewayv2_api、全局部署阶段、域名、公共访问策略这类公共资源,不涉及任何Lambda相关配置 - Lambda业务层:每个Lambda对应独立仓库,维护
aws_lambda_function、aws_apigatewayv2_integration、aws_apigatewayv2_route、Lambda专属IAM权限、触发器配置等与业务逻辑绑定的资源
跨层资源信息传递方案
弃用terraform_remote_state,改用AWS SSM Parameter Store作为中间信息传递层,完全隔离两层的Terraform状态访问:
- 在核心基础设施层的Terraform配置中,将APIGateway所有需要对外暴露的公共属性(如API ID、执行ARN、部署阶段ID等)按照统一命名规范写入SSM参数,示例配置:
resource "aws_ssm_parameter" "apigw_api_id" { name = "/infra/apigw/main-public-api/api-id" type = "String" value = aws_apigatewayv2_api.main.id } resource "aws_ssm_parameter" "apigw_execution_arn" { name = "/infra/apigw/main-public-api/execution-arn" type = "String" value = aws_apigatewayv2_api.main.execution_arn } resource "aws_ssm_parameter" "apigw_stage_name" { name = "/infra/apigw/main-public-api/stage-name" type = "String" value = aws_apigatewayv2_stage.main.name }
- 每个Lambda的Terraform配置中,通过
aws_ssm_parameter数据源读取对应的公共参数,仅需要SSM参数读取权限即可获取APIGateway信息,不需要访问核心层的Terraform状态:
data "aws_ssm_parameter" "apigw_api_id" { name = "/infra/apigw/main-public-api/api-id" } data "aws_ssm_parameter" "apigw_execution_arn" { name = "/infra/apigw/main-public-api/execution-arn" }
一致性保障机制
解决核心层变更导致Lambda集成失效的问题:
- 核心层APIGateway配置变更的CI流水线中,在
terraform apply执行完成后,自动触发所有关联Lambda仓库的只读校验任务:仅执行terraform plan,不需要修改任何资源,如果任意Lambda的集成配置因为核心层参数变更出现错误,直接在核心层CI中抛出告警,不需要等到Lambda侧触发流水线才发现问题 - 每个Lambda仓库的CI流水线执行
apply前,强制增加参数合法性校验步骤,校验读取到的APIGateway参数格式、权限是否符合预期,不符合直接中断执行
补充优化:APIGateway自动部署
Lambda侧新增/修改路由后需要触发APIGateway重新部署才能生效,可在Lambda层增加null_resource通过AWS CLI触发部署,不需要操作核心层Terraform资源:
resource "null_resource" "trigger_apigw_deployment" { triggers = { integration_id = aws_apigatewayv2_integration.lambda.id route_id = aws_apigatewayv2_route.lambda.id } provisioner "local-exec" { command = "aws apigatewayv2 create-deployment --api-id ${data.aws_ssm_parameter.apigw_api_id.value} --stage-name ${data.aws_ssm_parameter.apigw_stage_name.value}" } }
方案优势
- 完全满足隔离要求:核心基础设施与Lambda代码、专属配置完全分离,各层独立CI/CD,状态互不干扰,Lambda侧执行
apply仅会操作自身相关资源,不需要扫描全量基础设施 - 一致性有保障:核心层变更自动校验所有Lambda集成的兼容性,不会出现故障隐埋到Lambda上线才发现的问题
- 权限可控:仅需要给Lambda侧配置SSM参数的只读权限即可,不需要开放核心基础设施的Terraform状态访问权限,还可以通过SSM参数的路径权限做更细粒度的隔离
内容的提问来源于stack exchange,提问作者JSON Brody
相关产品推荐
相关产品推荐

