chatai/postgres_15.8.1.044/amazon-arm64-nix.pkr.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"
}
}