AWS::CodePipeline::Webhook - AWS CloudFormation
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS::CodePipeline::Webhook

AWS::CodePipeline::Webhook 资源创建并注册您的 Webhook。创建并注册 Webhook 之后,它会在每次发生外部事件时触发您的管道启动。有关更多信息,请参阅 AWS CodePipeline 用户指南 中的将 GitHub 管道配置为使用 Webhook 检测更改

我们强烈建议您使用 AWS Secrets Manager 来存储您的凭证。如果使用 Secrets Manager,则您必须已在 Secrets Manager 中配置并存储密钥参数。有关更多信息,请参阅使用动态引用以指定模板值

重要

传递密钥参数时,请勿直接将值输入到模板中。该值以明文形式提供,因此是可读的。出于安全原因,请勿在 AWS CloudFormation 模板中使用明文存储凭证。

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "Type" : "AWS::CodePipeline::Webhook", "Properties" : { "Authentication" : String, "AuthenticationConfiguration" : WebhookAuthConfiguration, "Filters" : [ WebhookFilterRule, ... ], "Name" : String, "RegisterWithThirdParty" : Boolean, "TargetAction" : String, "TargetPipeline" : String, "TargetPipelineVersion" : Integer } }

YAML

Type: AWS::CodePipeline::Webhook Properties: Authentication: String AuthenticationConfiguration: WebhookAuthConfiguration Filters: - WebhookFilterRule Name: String RegisterWithThirdParty: Boolean TargetAction: String TargetPipeline: String TargetPipelineVersion: Integer

属性

Authentication

支持的选项为 GITHUB_HMAC、IP 和 UNAUTHENTICATED。

  • 有关 GITHUB_HMAC 实施的身份验证方案的信息,请参阅 GitHub 开发人员网站上的保护您的 Webhook

  • IP 将拒绝 Webhook 触发请求,除非它们源自身份验证配置中列入白名单的 IP 范围内的 IP 地址。

  • UNAUTHENTICATED 将接受所有 Webhook 触发请求,不管源如何。

必需:是

类型:字符串

允许的值GITHUB_HMAC | IP | UNAUTHENTICATED

Update requires: No interruption

AuthenticationConfiguration

配置应用到传入 Webhook 触发请求的身份验证的属性。所需的属性取决于身份验证类型。对于 GITHUB_HMAC,只需设置 SecretToken 属性。对于 IP,仅 AllowedIPRange 属性必须设置为有效的 CIDR 范围。对于 UNAUTHENTICATED,无法设置任何属性。

必需:是

类型WebhookAuthConfiguration

Update requires: No interruption

Filters

对发送到 Webhook URL 的 POST 请求中的正文/负载应用的规则列表。要接受请求并启动管道,必须传递所有定义的规则。

必需:是

类型WebhookFilterRule 的列表

最高5

Update requires: No interruption

Name

Webhook 的名称。

必需:否

类型:字符串

最低1

最高100

模式[A-Za-z0-9.@\-_]+

Update requires: Replacement

RegisterWithThirdParty

使用要检测的事件在创建的 Webhook 与外部工具之间配置连接。

必需:否

类型:布尔值

Update requires: No interruption

TargetAction

您要连接到 Webhook 的管道中操作的名称。该操作必须来自管道的源(第一个)阶段。

必需:是

类型:字符串

最低1

最高100

模式[A-Za-z0-9.@\-_]+

Update requires: No interruption

TargetPipeline

要连接到 Webhook 的管道的名称。

必需:是

类型:字符串

最低1

最高100

模式[A-Za-z0-9.@\-_]+

Update requires: No interruption

TargetPipelineVersion

要连接到触发请求的管道的版本号。

必需:是

类型:整数

更新要求:没有中断

必需:是

类型:整数

Update requires: No interruption

返回值

Ref

在将此资源的逻辑 ID 传递给内部 Ref 函数时,Ref 返回 Webhook 名称,例如 MyFirstPipeline-SourceAction1-Webhook-utb9LrOl24Kk。

For more information about using the Ref function, see Ref.

Fn::GetAtt

Fn::GetAtt 内部函数返回此类型的一个指定属性的值。以下为可用属性和示例返回值。

有关使用 Fn::GetAtt 内部函数的更多信息,请参阅 Fn::GetAtt

Url

AWS CodePipeline 生成的 Webhook URL,例如 https://eu-central-1.webhooks.aws/trigger123456。

示例

Webhook 资源配置

以下示例创建一个名为 MyWebhook 的 Webhook,并将该 Webhook 注册到管道的 GitHub 源存储库。在该示例中,WebhookPipeline 是要将 Webhook 添加到的管道的逻辑 ID。

我们强烈建议您使用 AWS Secrets Manager 来存储您的凭证。如果使用 Secrets Manager,则您必须已在 Secrets Manager 中配置并存储密钥参数。此示例利用对 AWS Secrets Manager 的动态引用(采用 {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} 引用的形式)来获取用于 Webhook 的 GitHub 凭证。有关更多信息,请参阅使用动态引用以指定模板值

重要

传递密钥参数时,请勿直接将值输入到模板中。该值以明文形式提供,因此是可读的。出于安全原因,请勿在 AWS CloudFormation 模板中使用明文存储凭证。

JSON

{ "Webhook": { "Type": "AWS::CodePipeline::Webhook", "Properties": { "AuthenticationConfiguration": { "SecretToken": "{{resolve:secretsmanager:MyGitHubSecret:SecretString:token}}" }, "Filters": [ { "JsonPath": "$.ref", "MatchEquals": "refs/heads/{Branch}" } ], "Authentication": "GITHUB_HMAC", "TargetPipeline": { "Ref" : "WebhookPipeline" }, "TargetAction": "Source", "Name": "MyWebhook", "TargetPipelineVersion": { "Fn::GetAtt" : [ "WebhookPipeline", "Version" ] }, "RegisterWithThirdParty": "true" } } }

YAML

Webhook: Type: 'AWS::CodePipeline::Webhook' Properties: AuthenticationConfiguration: SecretToken: {{resolve:secretsmanager:MyGitHubSecret:SecretString:token}} Filters: - JsonPath: "$.ref" MatchEquals: refs/heads/{Branch} Authentication: GITHUB_HMAC TargetPipeline: !Ref WebhookPipeline TargetAction: Source Name: MyWebhook TargetPipelineVersion: !GetAtt WebhookPipeline.Version RegisterWithThirdParty: 'true'