如何用Terraform配置CodeBuild的SNS(Slack)通知?
用Terraform配置AWS CodeBuild的SNS通知
CodeBuild的通知配置在Terraform中通过aws_codebuild_project资源的notification块实现,对应控制台里「操作」→「创建通知」的功能,和CodePipeline在action内配置的方式不同。
核心配置示例
假设你已经拥有用于Slack通知的SNS主题ARN(示例中使用var.codebuild_sns_arn引用),可在CodeBuild项目中添加如下配置:
resource "aws_codebuild_project" "example" { name = "example-project" build_timeout = "5" service_role = aws_iam_role.codebuild_role.arn # 项目基础配置(如代码源、环境等,此处省略) source { type = "GITHUB" location = "https://github.com/example/repo.git" git_clone_depth = 1 } # 通知配置块 notification { # 指定触发通知的构建事件,可多选 events = [ "SUCCEEDED", "FAILED", "IN_PROGRESS" ] target { type = "SNS" # CodeBuild目前仅支持SNS作为通知目标 arn = var.codebuild_sns_arn } } }
参数说明
events:触发通知的构建事件类型,可选值包括SUCCEEDED、FAILED、IN_PROGRESS、STOPPED,可根据需求选择多个target.type:固定设为SNS,是当前CodeBuild支持的唯一通知目标类型target.arn:你的SNS主题ARN,需确保该主题已完成Slack订阅配置(通过SNS控制台添加Slack端点)
必要权限配置
要保证CodeBuild能正常发送通知,需给CodeBuild的服务角色添加向目标SNS主题发布消息的权限:
resource "aws_iam_policy" "codebuild_sns_publish" { name = "codebuild-sns-publish" description = "允许CodeBuild向指定SNS主题发送消息" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sns:Publish" Effect = "Allow" Resource = var.codebuild_sns_arn } ] }) } # 将策略附加到CodeBuild服务角色 resource "aws_iam_role_policy_attachment" "codebuild_sns_attach" { role = aws_iam_role.codebuild_role.name policy_arn = aws_iam_policy.codebuild_sns_publish.arn }
内容的提问来源于stack exchange,提问作者theo
相关产品推荐
相关产品推荐

