Skip to content

rivethealth/bitbucket-webhook-aws-terraform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bitbucket webhook to AWS SNS

Publish Bitbucket webhook events to AWS SNS, enabling easy consumption by Lambda or other subscribers in the AWS ecosystem.

Usage

Multiple HTTP resources can be created. Each corresponds to a separate SNS topic.

SNS messages have an attribute "event" with the contents of X-Event-Key. You may use this for subscription filter policies.

The "signature" attribute is "sha256=<hmac>". The message contents have not been validated with the signature; consumer must do that.

Inputs

Name Type Description Default
deploy_version string Arbitrary version to force deployment of API gateway "1"
endpoints list Names of endpoints ["all"]
name string Namespace for resources "bitbucket-events"

Outputs

Name Type Description
gateway_api_id string ID of API gateway
gateway_invoke_url string URL of deployed API
gateway_stage_name string Stage name of API gateway
sns_topic_arns list ARNs of SNS topics

Requests can be made against "${gateway_invoke_url}/${endpoint}". (Or use a custom domain)

Examples

Basic

module "bitbucket-events" {
  source         = "github.com/rivethealth/bitbucket-webhook-aws-terraform"
}

Custom domain

data "aws_acm_certificate" "bitbucket-events" {
  domain   = "bitbucket-events.example.com"
  statuses = ["ISSUED"]
}

module "bitbucket-events" {
  source         = "github.com/rivethealth/bitbucket-webhook-aws-terraform"
}

resource "aws_api_gateway_base_path_mapping" "bitbucket-events" {
  api_id      = "${module.bitbucket-events.gateway_api_id}"
  stage_name  = "${module.bitbucket-events.gateway_stage_name}"
  domain_name = "${aws_api_gateway_domain_name.bitbucket-events.domain_name}"
}

resource "aws_api_gateway_domain_name" "bitbucket-events" {
  certificate_arn = "${data.aws_acm_certificate.bitbucket-events.arn}"
  domain_name     = "bitbucket-events.example.com"
}

Note that a custom domain name will not be ready for several minutes.