278 lines
5.7 KiB
HCL
278 lines
5.7 KiB
HCL
variable "ami" {
|
|
type = string
|
|
default = "ubuntu/images/hvm-ssd/ubuntu-focal-20.04-arm64-server-*"
|
|
}
|
|
|
|
variable "profile" {
|
|
type = string
|
|
default = "${env("AWS_PROFILE")}"
|
|
}
|
|
|
|
variable "ami_name" {
|
|
type = string
|
|
default = "supabase-postgres"
|
|
}
|
|
|
|
variable "ami_regions" {
|
|
type = list(string)
|
|
default = ["ap-southeast-2"]
|
|
}
|
|
|
|
variable "ansible_arguments" {
|
|
type = string
|
|
default = "--skip-tags install-postgrest,install-pgbouncer,install-supabase-internal"
|
|
}
|
|
|
|
variable "aws_access_key" {
|
|
type = string
|
|
default = ""
|
|
}
|
|
|
|
variable "aws_secret_key" {
|
|
type = string
|
|
default = ""
|
|
}
|
|
|
|
variable "environment" {
|
|
type = string
|
|
default = "prod"
|
|
}
|
|
|
|
variable "region" {
|
|
type = string
|
|
}
|
|
|
|
variable "build-vol" {
|
|
type = string
|
|
default = "xvdc"
|
|
}
|
|
|
|
# ccache docker image details
|
|
variable "docker_user" {
|
|
type = string
|
|
default = ""
|
|
}
|
|
|
|
variable "docker_passwd" {
|
|
type = string
|
|
default = ""
|
|
}
|
|
|
|
variable "docker_image" {
|
|
type = string
|
|
default = ""
|
|
}
|
|
|
|
variable "docker_image_tag" {
|
|
type = string
|
|
default = "latest"
|
|
}
|
|
|
|
locals {
|
|
creator = "packer"
|
|
}
|
|
|
|
variable "postgres-version" {
|
|
type = string
|
|
default = ""
|
|
}
|
|
|
|
variable "git-head-version" {
|
|
type = string
|
|
default = "unknown"
|
|
}
|
|
|
|
variable "packer-execution-id" {
|
|
type = string
|
|
default = "unknown"
|
|
}
|
|
|
|
variable "force-deregister" {
|
|
type = bool
|
|
default = false
|
|
}
|
|
|
|
packer {
|
|
required_plugins {
|
|
amazon = {
|
|
source = "github.com/hashicorp/amazon"
|
|
version = "~> 1"
|
|
}
|
|
}
|
|
}
|
|
|
|
# source block
|
|
source "amazon-ebssurrogate" "source" {
|
|
profile = "${var.profile}"
|
|
#access_key = "${var.aws_access_key}"
|
|
#ami_name = "${var.ami_name}-arm64-${formatdate("YYYY-MM-DD-hhmm", timestamp())}"
|
|
ami_name = "${var.ami_name}-${var.postgres-version}-stage-1"
|
|
ami_virtualization_type = "hvm"
|
|
ami_architecture = "arm64"
|
|
ami_regions = "${var.ami_regions}"
|
|
instance_type = "c6g.4xlarge"
|
|
region = "${var.region}"
|
|
#secret_key = "${var.aws_secret_key}"
|
|
force_deregister = var.force-deregister
|
|
|
|
# Use latest official ubuntu focal ami owned by Canonical.
|
|
source_ami_filter {
|
|
filters = {
|
|
virtualization-type = "hvm"
|
|
name = "${var.ami}"
|
|
root-device-type = "ebs"
|
|
}
|
|
owners = [ "099720109477" ]
|
|
most_recent = true
|
|
}
|
|
ena_support = true
|
|
launch_block_device_mappings {
|
|
device_name = "/dev/xvdf"
|
|
delete_on_termination = true
|
|
volume_size = 10
|
|
volume_type = "gp3"
|
|
}
|
|
|
|
launch_block_device_mappings {
|
|
device_name = "/dev/xvdh"
|
|
delete_on_termination = true
|
|
volume_size = 8
|
|
volume_type = "gp3"
|
|
}
|
|
|
|
launch_block_device_mappings {
|
|
device_name = "/dev/${var.build-vol}"
|
|
delete_on_termination = true
|
|
volume_size = 16
|
|
volume_type = "gp2"
|
|
omit_from_artifact = true
|
|
}
|
|
|
|
run_tags = {
|
|
creator = "packer"
|
|
appType = "postgres"
|
|
packerExecutionId = "${var.packer-execution-id}"
|
|
}
|
|
run_volume_tags = {
|
|
creator = "packer"
|
|
appType = "postgres"
|
|
}
|
|
snapshot_tags = {
|
|
creator = "packer"
|
|
appType = "postgres"
|
|
}
|
|
tags = {
|
|
creator = "packer"
|
|
appType = "postgres"
|
|
postgresVersion = "${var.postgres-version}-stage1"
|
|
sourceSha = "${var.git-head-version}"
|
|
}
|
|
|
|
communicator = "ssh"
|
|
ssh_pty = true
|
|
ssh_username = "ubuntu"
|
|
ssh_timeout = "5m"
|
|
|
|
ami_root_device {
|
|
source_device_name = "/dev/xvdf"
|
|
device_name = "/dev/xvda"
|
|
delete_on_termination = true
|
|
volume_size = 10
|
|
volume_type = "gp2"
|
|
}
|
|
|
|
associate_public_ip_address = true
|
|
}
|
|
|
|
# a build block invokes sources and runs provisioning steps on them.
|
|
build {
|
|
sources = ["source.amazon-ebssurrogate.source"]
|
|
|
|
provisioner "file" {
|
|
source = "ebssurrogate/files/sources-arm64.cfg"
|
|
destination = "/tmp/sources.list"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ebssurrogate/files/ebsnvme-id"
|
|
destination = "/tmp/ebsnvme-id"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ebssurrogate/files/70-ec2-nvme-devices.rules"
|
|
destination = "/tmp/70-ec2-nvme-devices.rules"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ebssurrogate/scripts/chroot-bootstrap-nix.sh"
|
|
destination = "/tmp/chroot-bootstrap-nix.sh"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ebssurrogate/files/cloud.cfg"
|
|
destination = "/tmp/cloud.cfg"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ebssurrogate/files/vector.timer"
|
|
destination = "/tmp/vector.timer"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ebssurrogate/files/apparmor_profiles"
|
|
destination = "/tmp"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "migrations"
|
|
destination = "/tmp"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ebssurrogate/files/unit-tests"
|
|
destination = "/tmp"
|
|
}
|
|
|
|
# Copy ansible playbook
|
|
provisioner "shell" {
|
|
inline = ["mkdir /tmp/ansible-playbook"]
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ansible"
|
|
destination = "/tmp/ansible-playbook"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "scripts"
|
|
destination = "/tmp/ansible-playbook"
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "ansible/vars.yml"
|
|
destination = "/tmp/ansible-playbook/vars.yml"
|
|
}
|
|
|
|
provisioner "shell" {
|
|
environment_vars = [
|
|
"ARGS=${var.ansible_arguments}",
|
|
"DOCKER_USER=${var.docker_user}",
|
|
"DOCKER_PASSWD=${var.docker_passwd}",
|
|
"DOCKER_IMAGE=${var.docker_image}",
|
|
"DOCKER_IMAGE_TAG=${var.docker_image_tag}",
|
|
"POSTGRES_SUPABASE_VERSION=${var.postgres-version}"
|
|
]
|
|
use_env_var_file = true
|
|
script = "ebssurrogate/scripts/surrogate-bootstrap-nix.sh"
|
|
execute_command = "sudo -S sh -c '. {{.EnvVarFile}} && cd /tmp/ansible-playbook && {{.Path}}'"
|
|
start_retry_timeout = "5m"
|
|
skip_clean = true
|
|
}
|
|
|
|
provisioner "file" {
|
|
source = "/tmp/ansible.log"
|
|
destination = "/tmp/ansible.log"
|
|
direction = "download"
|
|
}
|
|
}
|