ashb commented on a change in pull request #14:
URL: https://github.com/apache/airflow-ci-infra/pull/14#discussion_r611449392



##########
File path: github-runner-ami/packer/ubuntu2004.pkr.hcl
##########
@@ -0,0 +1,132 @@
+variable "vpc_id" {
+  type = string
+}
+variable "ami_name" {
+  type = string
+}
+variable "aws_region" {
+  type = string
+}
+variable "subnet_id" {
+  type = string
+}
+variable "packer_role_arn" {
+  type = string
+}
+variable "runner_version" {
+  type = string
+}
+variable "kms_key_arn" {
+  type = string
+}
+variable "session_manager_instance_profile_name" { 
+  type = string
+}
+
+source "amazon-ebs" "runner_builder" {
+  assume_role {
+    role_arn     = var.packer_role_arn
+    session_name = var.runner_version
+  }
+  #access_key = ""
+  #secret_key = ""
+  region = var.aws_region
+  ami_name = "${var.ami_name}-${var.runner_version}"
+  ami_regions = [var.aws_region]
+  tag {
+    key                 = "ami"
+    value               = "github-runner-ami"
+  }
+  encrypt_boot = true
+  kms_key_id = var.kms_key_arn
+  instance_type = "t2.micro"
+  communicator = "ssh"
+  ssh_username = "ubuntu"
+  ssh_interface = "session_manager"
+  iam_instance_profile = var.session_manager_instance_profile_name
+  subnet_id = var.subnet_id
+  vpc_id = var.vpc_id
+  source_ami_filter {
+    filters = {
+       virtualization-type = "hvm"
+       name = "ubuntu/images/*buntu-focal-20.04-amd64-server-*"
+       root-device-type = "ebs"
+    }
+    owners = ["099720109477"]
+    most_recent = true
+  }
+}
+
+build {
+  sources = [
+    "source.amazon-ebs.runner_builder"
+  ]
+
+  provisioner "shell" {
+      inline = [
+        "echo Connected via SSM at '${build.User}@${build.Host}:${build.Port}'"
+      ]
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/mounts_setup.sh"
+    source      = "./files/mounts_setup.sh"
+  }
+  provisioner "shell" {
+    inline = ["sh mounts_setup.sh"]
+  }
+  provisioner "file" {
+    destination = "/etc/systemd/system/actions.runner.service"
+    source      = "./files/actions.runner.service"
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/runner-cleanup-workdir.sh"
+    source      = "./files/runner-cleanup-workdir.sh"
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/stop-runner-if-no-job.sh"
+    source      = "./files/stop-runner-if-no-job.sh"
+  }
+  provisioner "file" {
+    destination = "/etc/sudoers.d/runner"
+    source      = "./files/runner"
+  }
+  provisioner "file" {
+    destination = "/etc/iptables/rules.v4"
+    source      = "./files/rules.v4"
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/actions-runner-ec2-reporting.sh"
+    source      = "./files/actions-runner-ec2-reporting.sh"
+  }
+  provisioner "file" {
+    destination = "/etc/cron.d/cloudwatch-metrics-github-runners"
+    source      = "./files/cloudwatch-metrics-github-runners"
+  }
+  provisioner "file" {
+    destination = "/etc/systemd/system/actions.runner-supervisor.service"
+    source      = "./files/actions.runner-supervisor.service"
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/set-file-permissions.sh"
+    source      = "./files/set-file-permissions.sh"
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/timber.key"
+    source      = "./files/timber.key"
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/source-list-additions.sh"
+    source      = "./files/source-list-additions.sh"
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/install-dependencies.sh"
+    source      = "./files/install-dependencies.sh"
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/runner_bootstrap.sh"
+    source      = "./files/runner_bootstrap.sh"
+  }
+  provisioner "shell-local" {

Review comment:
       ```suggestion
     provisioner "shell" {
   ```
   
   shell-local runs on the local machine -- I don't think that is what you want 
here :)

##########
File path: github-runner-ami/packer/files/runner_bootstrap.sh
##########
@@ -0,0 +1,37 @@
+
+URL=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq 
-r '.assets[].browser_download_url | 
select(endswith("docker-compose-Linux-x86_64"))')
+curl -L $URL -o /usr/local/bin/docker-compose
+chmod +x /usr/local/bin/docker-compose
+set -exu -o pipefail
+echo "AWS_DEFAULT_REGION=$(cloud-init query region)" >> /etc/environment
+# Set an env var (that is visible in runners) that will let us know we are on 
a self-hosted runner
+echo 'AIRFLOW_SELF_HOSTED_RUNNER="[\"self-hosted\"]"' >> /etc/environment
+set -a
+. /etc/environment
+set +a
+systemctl daemon-reload
+set -exu -o pipefail
+usermod -G docker -a runner
+mkdir -p ~runner/actions-runner
+find ~runner -exec  chown runner: {} +
+cd ~runner/actions-runner
+RUNNER_VERSION="$0"
+curl -L 
"https://github.com/ashb/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz";
 | tar -zx
+set -a
+. /etc/environment
+set +a
+aws s3 cp s3://airflow-ci-assets/runner-supervisor.py 
/opt/runner-supervisor/bin/runner-supervisor
+chmod 755 /opt/runner-supervisor/bin/runner-supervisor
+# Log in to a paid docker user to get unlimited docker pulls
+aws ssm get-parameter --with-decryption --name 
/runners/apache/airflow/dockerPassword | \
+jq .Parameter.Value -r | \
+sudo -u runner docker login --username airflowcirunners --password-stdin
+2.277.1-airflow1
+systemctl enable --now iptables.service
+# Restart docker after applying the user firewall -- else some rules/chains 
might be list!
+systemctl restart docker.service
+systemctl enable now vector.service
+systemctl enable --now actions.runner.service
+echo "Pre-loading commonly used docker images from S3"
+set -eux -o pipefail
+aws s3 cp s3://airflow-ci-assets/pre-baked-images.tar.gz - | docker load

Review comment:
       ```suggestion
   ```
   
   (We got rid of this)

##########
File path: github-runner-ami/packer/ubuntu2004.pkr.hcl
##########
@@ -0,0 +1,132 @@
+variable "vpc_id" {
+  type = string
+}
+variable "ami_name" {
+  type = string
+}
+variable "aws_region" {
+  type = string
+}
+variable "subnet_id" {
+  type = string
+}
+variable "packer_role_arn" {
+  type = string
+}
+variable "runner_version" {
+  type = string
+}
+variable "kms_key_arn" {
+  type = string
+}
+variable "session_manager_instance_profile_name" { 
+  type = string
+}
+
+source "amazon-ebs" "runner_builder" {
+  assume_role {
+    role_arn     = var.packer_role_arn
+    session_name = var.runner_version
+  }
+  #access_key = ""
+  #secret_key = ""
+  region = var.aws_region
+  ami_name = "${var.ami_name}-${var.runner_version}"
+  ami_regions = [var.aws_region]
+  tag {
+    key                 = "ami"
+    value               = "github-runner-ami"
+  }
+  encrypt_boot = true
+  kms_key_id = var.kms_key_arn
+  instance_type = "t2.micro"
+  communicator = "ssh"
+  ssh_username = "ubuntu"
+  ssh_interface = "session_manager"
+  iam_instance_profile = var.session_manager_instance_profile_name
+  subnet_id = var.subnet_id
+  vpc_id = var.vpc_id
+  source_ami_filter {
+    filters = {
+       virtualization-type = "hvm"
+       name = "ubuntu/images/*buntu-focal-20.04-amd64-server-*"
+       root-device-type = "ebs"
+    }
+    owners = ["099720109477"]
+    most_recent = true
+  }
+}
+
+build {
+  sources = [
+    "source.amazon-ebs.runner_builder"
+  ]
+
+  provisioner "shell" {
+      inline = [
+        "echo Connected via SSM at '${build.User}@${build.Host}:${build.Port}'"
+      ]
+  }
+  provisioner "file" {
+    destination = "/usr/local/sbin/mounts_setup.sh"
+    source      = "./files/mounts_setup.sh"
+  }
+  provisioner "shell" {
+    inline = ["sh mounts_setup.sh"]
+  }

Review comment:
       ```suggestion
   ```
   
   These mount suggestions need to be done at "runtime", not image build time, 
so these need to stay in the user data script




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to