From 638be8d8b674acfb56bf59d586859a4622b9ad22 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 25 Dec 2017 02:06:54 +0000 Subject: [PATCH 001/125] Initial import --- .gitignore | 3 + LICENSE.txt | 19 +++ Makefile | 22 ++++ README.md | 72 +++++++++++ alpine-ami.yaml | 57 +++++++++ make_ami.sh | 325 ++++++++++++++++++++++++++++++++++++++++++++++++ release.yaml | 21 ++++ 7 files changed, 519 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.txt create mode 100644 Makefile create mode 100644 README.md create mode 100644 alpine-ami.yaml create mode 100755 make_ami.sh create mode 100644 release.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..98c621a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/build/ +/.py3/ +/variables.json diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..736d3fe --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2017 Michael Crute + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..de19494 --- /dev/null +++ b/Makefile @@ -0,0 +1,22 @@ +.PHONY: ami +ami: build/convert + build/convert alpine-ami.yaml > build/alpine-ami.json + packer build -var-file=variables.json build/alpine-ami.json + +build/convert: + [ -d ".py3" ] || python3 -m venv .py3 + .py3/bin/pip install pyyaml + + [ -d "build" ] || mkdir build + + # Make stupid simple little YAML/JSON converter so we can maintain our + # packer configs in a sane format that allows comments but also use packer + # which only supports JSON + @echo "#!`pwd`/.py3/bin/python" > build/convert + @echo "import yaml, json, sys" >> build/convert + @echo "json.dump(yaml.load(open(sys.argv[1])), sys.stdout, indent=4, separators=(',', ': '))" >> build/convert + @chmod +x build/convert + +.PHONY: clean +clean: + rm -rf build .py3 diff --git a/README.md b/README.md new file mode 100644 index 0000000..369ae45 --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# Alpine Linux EC2 AMI Build + +**NOTE: This is not an official Amazon or AWS provided image. This is community +built and supported.** + +This repository contains a packer file and a script to create an EC2 AMI +containing Alpine Linux. The AMI is designed to work with most EC2 features +natively and thus should launch on any instance type. If anything is missing +please report a bug. + +This image can be launched on any modern instance type. Including T2, M5, C5, +I3, R4, P2, P3, X1, X1e, D2. Other instances may also work but have not been +tested. If you find an issue with instance support for any current generation +instance please file a bug against this project. + +To get started use one of the AMIs below. The default user is `alpine` and will +be configured to use whatever SSH keys you chose when you launched the image. +If user data is specified it must be a shell script that begins with `#!`. If a +script is provided it will be executed as root after the network is configured. + +**Note:** The AMI is not yet available in all regions. This file and +[releases.yaml](https://github.com/mcrute/alpine-ec2-ami/blob/master/releases.yaml) +will be updated as new regions are made available. + +| Alpine Version | Region Code | Region Name | AMI ID | +| -------------- | -------------- | ------------------------- | --------------------------------------------------------------------------------------------- | +| 3.7 | us-east-1 | US East (N. Virginia) | [ami-XXXXXXXX](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | us-east-2 | US East (Ohio) | [ami-XXXXXXXX](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | us-west-1 | US West (N. California) | [ami-XXXXXXXX](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | us-west-2 | US West (Oregon) | [ami-032b877b](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-032b877b) | +| 3.7 | ca-central-1 | Canada (Central) | [ami-XXXXXXXX](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | eu-central-1 | EU (Frankfurt) | [ami-XXXXXXXX](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | eu-west-1 | EU (Ireland) | [ami-XXXXXXXX](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | eu-west-2 | EU (London) | [ami-XXXXXXXX](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | eu-west-3 | EU (Paris) | [ami-XXXXXXXX](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | ap-northeast-1 | Asia Pacific (Tokyo) | [ami-XXXXXXXX](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | ap-northeast-2 | Asia Pacific (Seoul) | [ami-XXXXXXXX](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | ap-southeast-1 | Asia Pacific (Singapore) | [ami-XXXXXXXX](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | ap-southeast-2 | Asia Pacific (Sydney) | [ami-XXXXXXXX](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | ap-south-1 | Asia Pacific (Mumbai) | [ami-XXXXXXXX](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| 3.7 | sa-east-1 | South America (São Paulo) | [ami-XXXXXXXX](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | + +## Caveats + +This image is being used in production but it's still somewhat early stage in +its development and thus there are some sharp edges. + +- Only EBS-backed HVM instances are supported. While paravirtualized instances + are still available from AWS they are not supported on any of the newer + hardware so it seems unlikely that they will be supported going forward. Thus + this project does not support them. + +- Not all packages required have been merged into the upstream aports tree. + When they are they will still only be available on edge. Until then the image + sources a few packages from a testing repo managed by the owner of this + repository. The builds in this repository should be identical to what is + eventually merged into the official tree. + +- [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is not currently + supported on Alpine Linux. Instead this image uses + [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap). Hostname + setting will work as will setting the ssh keys for the Alpine user based on + what was configured during instance launch. User data is supported as long + as it's a shell script (starts with #!). See the tiny-ec2-bootstrap README + for more details. You can still install cloud-init using aports but the + version in the tree is somewhat old and may not work correctly for Alpine. + If full cloud-init support is important to you please file a bug against this + project. + +- CloudFormation support is still forthcoming. This requires patches and + packaging for the upstream cfn tools that have not yet been accepted. + Eventually full CloudFormation support will be available. diff --git a/alpine-ami.yaml b/alpine-ami.yaml new file mode 100644 index 0000000..26b75b1 --- /dev/null +++ b/alpine-ami.yaml @@ -0,0 +1,57 @@ +variables: + security_group: "" + subnet: "" + destination_regions: "" + alpine_release: "3.7" + + # Don't override this without a good reason and if you do just make sure it + # gets passed all the way through to the make_ami script + volume_name: "/dev/xvdf" + +builders: + - type: "amazon-ebssurrogate" + + # Image is built inside a custom VPC so let Packer use the existing + # resources + security_group_id: "{{user `security_group`}}" + subnet_id: "{{user `subnet`}}" + + # Input Instance Setting + instance_type: "t2.micro" + launch_block_device_mappings: + - volume_type: "gp2" + device_name: "{{user `volume_name`}}" + delete_on_termination: false + volume_size: 5 + + # Output AMI Settings + ena_support: true + ami_name: "Alpine-{{user `alpine_release`}}-Hardened-EC2" + ami_description: "Alpine Linux {{user `alpine_release`}} Release with Hardened Kernel and EC2 Optimizations" + ami_groups: + - "all" + ami_virtualization_type: "hvm" + ami_regions: "{{user `destination_regions`}}" + ami_root_device: + source_device_name: "{{user `volume_name`}}" + device_name: "/dev/xvda" + delete_on_termination: true + volume_size: 5 + volume_type: "gp2" + + # Use the most recent Amazon Linux AMI as our base + ssh_username: "ec2-user" + source_ami_filter: + filters: + virtualization-type: "hvm" + root-device-type: "ebs" + architecture: "x86_64" + name: "amzn-ami-hvm-*-x86_64-gp2" + owners: + - "137112412989" + most_recent: true + +provisioners: + - type: "shell" + script: "make_ami.sh" + execute_command: "sudo sh -c '{{ .Vars }} {{ .Path }} {{user `volume_name`}}'" diff --git a/make_ami.sh b/make_ami.sh new file mode 100755 index 0000000..6ad4b0d --- /dev/null +++ b/make_ami.sh @@ -0,0 +1,325 @@ +#!/bin/sh +# vim:set ts=4: + +set -eu + +: ${ALPINE_RELEASE:="3.7"} # not tested against edge +: ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.8.0/apk-tools-2.8.0-x86_64-linux.tar.gz"} +: ${APK_TOOLS_SHA256:="da21cefd2121e3a6cd4e8742b38118b2a1132aad7f707646ee946a6b32ee6df9"} +: ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/alpine-keys-2.1-r1.apk"} +: ${ALPINE_KEYS_SHA256:="7b2d1e9a00324c8eee49785dc22355be02534201e77473ba9762027e1a475cc7"} + +die() { + printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red + exit 1 +} + +einfo() { + printf '\n\033[1;36m> %s\033[0m\n' "$@" >&2 # bold cyan +} + +rc_add() { + local target="$1"; shift # target directory + local runlevel="$1"; shift # runlevel name + local services="$*" # names of services + + local svc; for svc in $services; do + mkdir -p "$target"/etc/runlevels/$runlevel + ln -s /etc/init.d/$svc "$target"/etc/runlevels/$runlevel/$svc + echo " * service $svc added to runlevel $runlevel" + done +} + +wgets() ( + local url="$1" # url to fetch + local sha256="$2" # expected SHA256 sum of output + local dest="$3" # output path and filename + + wget -T 10 -q -O "$dest" "$url" + echo "$sha256 $dest" | sha256sum -c > /dev/null +) + + +validate_block_device() { + local dev="$1" # target directory + + lsblk -P --fs "$dev" >/dev/null 2>&1 || \ + die "'$dev' is not a valid block device" + + if lsblk -P --fs "$dev" | grep -vq 'FSTYPE=""'; then + die "Block device '$dev' is not blank" + fi +} + +fetch_apk_tools() { + local store="$(mktemp -d)" + local tarball="$(basename $APK_TOOLS_URI)" + + wgets "$APK_TOOLS_URI" "$APK_TOOLS_SHA256" "$store/$tarball" + tar -C "$store" -xf "$store/$tarball" + + find "$store" -name apk +} + +make_filesystem() { + local device="$1" # target device path + local target="$2" # mount target + + mkfs.ext4 "$device" + e2label "$device" / + mount "$device" "$target" +} + +setup_repositories() { + local target="$1" # target directory + + mkdir -p "$target"/etc/apk/keys + cat > "$target"/etc/apk/repositories <<-EOF + http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/main + http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/community + EOF +} + +# This is mostly a temporary measure because some required packages have not +# yet been accepted upstream. This can be removed when the following pull +# requests are merged: +# +# - https://github.com/alpinelinux/aports/pull/2962 +# - https://github.com/alpinelinux/aports/pull/2961 +setup_staging_repos() { + local target="$1" # target directory + + echo "https://mcrute-build-artifacts.s3.us-west-2.amazonaws.com/alpine-packages/$ALPINE_RELEASE/testing" >> "$target"/etc/apk/repositories + + cat > "$target"/etc/apk/keys/mcrute-5a3eecec.rsa.pub <<-EOF + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5fW5dyTqgs9Yf93xKn5U + cYzY9t//M3TAaiDWH7rFxqBqTGnVGkP9QAGqsbXyoo/JpIalazkOfm/1L+XaK7NI + IUD/8KxfrnBW53cc/KOkPcGAga36aTBz/HmLQQvjWcizPxWepjdfvAnRTMV69Oud + zaRPGKx8nCRqLy1YFAEXn+zpHRh+OHCzzQFlkJop+2PCXqDFaMWC7+oWwrqFs1i0 + CXc4pq5oT6vAQyt6pUwN85sLVxtxXSt5G5ALYzQtaIj7IAR3jGlwU26wOAv5YP7z + xn/Z1ebQsPbAl3rw48v2T2ohPEX2TUtUq4OuwOG+z1pi3woIGOlOFVAP3k6lm8Z9 + 9QIDAQAB + -----END PUBLIC KEY----- + EOF +} + +fetch_keys() { + local target="$1" + local tmp="$(mktemp -d)" + + wgets "$ALPINE_KEYS" "$ALPINE_KEYS_SHA256" "$tmp/alpine-keys.apk" + tar -C "$target" -xvf "$tmp"/alpine-keys.apk etc/apk/keys + rm -rf "$tmp" +} + +setup_chroot() { + local target="$1" + + mount -t proc none "$target"/proc + mount --bind /dev "$target"/dev + mount --bind /sys "$target"/sys + + # Don't want to ship this but it's needed for bootstrap. Will be removed in + # the cleanup stage. + install -Dm644 /etc/resolv.conf "$target"/etc/resolv.conf +} + +install_core_packages() { + local target="$1" + + # Most from: https://git.alpinelinux.org/cgit/alpine-iso/tree/alpine-virt.packages + # + # acct - installed by some configurations, so added here + # aws-ena-driver-hardened - required for ENA enabled instances + # e2fsprogs - required by init scripts to maintain ext4 volumes + # linux-hardened - can't use virthardened because it's missing NVME support + # mkinitfs - required to build custom initfs + # sudo - to allow alpine user to become root, disallow root SSH logins + # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata + chroot "$target" apk --no-cache add \ + acct \ + alpine-mirrors \ + aws-ena-driver-hardened \ + chrony \ + e2fsprogs \ + linux-hardened \ + mkinitfs \ + openssh \ + sudo \ + tiny-ec2-bootstrap \ + tzdata + + chroot "$target" apk --no-cache add --no-scripts syslinux +} + +create_initfs() { + local target="$1" + + # Create ENA feature for mkinitfs + # Submitted upstream: https://github.com/alpinelinux/mkinitfs/pull/19 + echo "kernel/drivers/net/ethernet/amazon" > \ + "$target"/etc/mkinitfs/features.d/ena.modules + + # Enable ENA and NVME features these don't hurt for any instance and are + # hard requirements of the 5 series and i3 series of instances + sed -Ei 's/^features="([^"]+)"/features="\1 nvme ena"/' \ + "$target"/etc/mkinitfs/mkinitfs.conf + + chroot "$target" /sbin/mkinitfs $(basename $(find "$target"/lib/modules/* -maxdepth 0)) +} + +setup_extlinux() { + local target="$1" + + # Must use disk labels instead of UUID or devices paths so that this works + # across instance familes. UUID works for many instances but breaks on the + # NVME ones because EBS volumes are hidden behind NVME devices. + # + # Enable ext4 because the root device is formatted ext4 + # + # Shorten timeout because EC2 has no way to interact with instance console + sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ + -e "s|^[# ]*(default_kernel_opts)=.*|\1=|" \ + -e "s|^[# ]*(modules)=.*|\1=sd-mod,usb-storage,ext4|" \ + -e "s|^[# ]*(default)=.*|\1=hardened|" \ + -e "s|^[# ]*(timeout)=.*|\1=1|" \ + "$target"/etc/update-extlinux.conf +} + +install_extlinux() { + local target="$1" + + chroot "$target" /sbin/extlinux --install /boot + chroot "$target" /sbin/update-extlinux --warn-only +} + +setup_fstab() { + local target="$1" + + cat > "$target"/etc/fstab <<-EOF + # + LABEL=/ / ext4 defaults,noatime 1 1 + EOF +} + +setup_networking() { + local target="$1" + + cat > "$target"/etc/network/interfaces <<-EOF + auto lo + iface lo inet loopback + + auto eth0 + iface eth0 inet dhcp + EOF +} + +enable_services() { + local target="$1" + + rc_add "$target" default sshd chronyd networking tiny-ec2-bootstrap + rc_add "$target" sysinit devfs dmesg mdev hwdrivers + rc_add "$target" boot modules hwclock swap hostname sysctl bootmisc syslog + rc_add "$target" shutdown killprocs savecache mount-ro +} + +create_alpine_user() { + local target="$1" + + # Allow members of the wheel group to sudo without a password. By default + # this will only be the alpine user. This allows us to ship an AMI that is + # accessible via SSH using the user's configured SSH keys (thanks to + # tiny-ec2-bootstrap) but does not allow remote root access which is the + # best-practice. + sed -i '/%wheel .* NOPASSWD: .*/s/^# //' "$target"/etc/sudoers + + # There is no real standard ec2 username across AMIs, Amazon uses ec2-user + # for their Amazon Linux AMIs but Ubuntu uses ubuntu, Fedora uses fedora, + # etc... (see: https://alestic.com/2014/01/ec2-ssh-username/). So our user + # and group are alpine because this is Alpine Linux. On instance bootstrap + # the user can create whatever users they want and delete this one. + chroot "$target" /usr/sbin/addgroup alpine + chroot "$target" /usr/sbin/adduser -h /home/alpine -s /bin/sh -G alpine -D alpine + chroot "$target" /usr/sbin/addgroup alpine wheel + chroot "$target" /usr/bin/passwd -u alpine +} + +configure_ntp() { + local target="$1" + + # EC2 provides an instance-local NTP service syncronized with GPS and + # atomic clocks in-region. Prefer this over external NTP hosts when running + # in EC2. + # + # See: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html + sed -i 's/^server .*/server 169.254.169.123/' "$target"/etc/chrony/chrony.conf +} + +cleanup() { + local target="$1" + + # Sweep cruft out of the image that doesn't need to ship or will be + # re-generated when the image boots + rm -f \ + "$target"/var/cache/apk/* \ + "$target"/etc/resolv.conf \ + "$target"/root/.ash_history \ + "$target"/etc/*- + + umount \ + "$target"/dev \ + "$target"/proc \ + "$target"/sys + + umount "$target" +} + +main() { + [ "$#" -ne 1 ] && { echo "usage: $0 "; exit 1; } + + device="$1" + target="/mnt/target" + + validate_block_device "$device" + + [ -d "$target" ] || mkdir "$target" + + einfo "Fetching static APK tools" + apk="$(fetch_apk_tools)" + + einfo "Creating root filesystem" + make_filesystem "$device" "$target" + + setup_repositories "$target" + + einfo "Fetching Alpine signing keys" + fetch_keys "$target" + + setup_staging_repos "$target" + + einfo "Installing base system" + $apk add --root "$target" --update-cache --initdb alpine-base + + setup_chroot "$target" + + einfo "Installing core packages" + install_core_packages "$target" + + einfo "Configuring and enabling boot loader" + create_initfs "$target" + setup_extlinux "$target" + install_extlinux "$target" + + einfo "Configuring system" + setup_fstab "$target" + setup_networking "$target" + enable_services "$target" + create_alpine_user "$target" + configure_ntp "$target" + + einfo "All done, cleaning up" + cleanup "$target" +} + +main "$@" diff --git a/release.yaml b/release.yaml new file mode 100644 index 0000000..66d80c7 --- /dev/null +++ b/release.yaml @@ -0,0 +1,21 @@ +Alpine-3.7-Hardened-EC2: + description: "Alpine Linux 3.7 Release with Hardened Kernel and EC2 Optimizations" + alpine-release: 3.7 + kernel-flavor: hardened + ami-release-date: "2017-12-25 03:02:00" + region-identifiers: + #us-east-1: ami-XXXXXXXX + #us-east-2: ami-XXXXXXXX + #us-west-1: ami-XXXXXXXX + us-west-2: ami-032b877b + #ca-central-1: ami-XXXXXXXX + #eu-central-1: ami-XXXXXXXX + #eu-west-1: ami-XXXXXXXX + #eu-west-2: ami-XXXXXXXX + #eu-west-3: ami-XXXXXXXX + #ap-northeast-1: ami-XXXXXXXX + #ap-northeast-2: ami-XXXXXXXX + #ap-southeast-1: ami-XXXXXXXX + #ap-southeast-2: ami-XXXXXXXX + #ap-south-1: ami-XXXXXXXX + #sa-east-1: ami-XXXXXXXX From 24cac6b1a44f67e721f48fa5d76d096c7fd77d1e Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 25 Dec 2017 04:53:29 +0000 Subject: [PATCH 002/125] Add AMI scrub tool --- .gitignore | 1 + Makefile | 8 ++++-- scrub-old-amis.py.in | 67 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 scrub-old-amis.py.in diff --git a/.gitignore b/.gitignore index 98c621a..b9acab3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /build/ /.py3/ /variables.json +/scrub-old-amis.py diff --git a/Makefile b/Makefile index de19494..e7896ca 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ ami: build/convert build/convert: [ -d ".py3" ] || python3 -m venv .py3 - .py3/bin/pip install pyyaml + .py3/bin/pip install pyyaml boto3 [ -d "build" ] || mkdir build @@ -17,6 +17,10 @@ build/convert: @echo "json.dump(yaml.load(open(sys.argv[1])), sys.stdout, indent=4, separators=(',', ': '))" >> build/convert @chmod +x build/convert +scrub-old-amis.py: scrub-old-amis.py.in + sed "s|@PYTHON@|#!`pwd`/.py3/bin/python|" $< > $@ + chmod +x $@ + .PHONY: clean clean: - rm -rf build .py3 + rm -rf build .py3 scrub-old-amis.py diff --git a/scrub-old-amis.py.in b/scrub-old-amis.py.in new file mode 100644 index 0000000..756f537 --- /dev/null +++ b/scrub-old-amis.py.in @@ -0,0 +1,67 @@ +@PYTHON@ + +import re +import yaml +import boto3 + + +# All Alpine AMIs should match this regex if they're valid +AMI_RE = re.compile("^Alpine-(\d+\.\d+)(?:-r(\d+))?-Hardened-EC2") + + +# Load current AMI version from config +with open("alpine-ami.yaml") as fp: + ami_cfg = yaml.load(fp)["variables"] + current = (float(ami_cfg["alpine_release"]), int(ami_cfg["ami_release"])) + + +# Fetch all matching AMIs +amis = [] + +for region in boto3.session.Session().get_available_regions("ec2"): + ec2 = boto3.client("ec2", region_name=region) + + for image in ec2.describe_images(Owners=["self"])["Images"]: + match = AMI_RE.match(image["Name"]) + if not match: + continue + + os_rel, ami_rel = match.groups() + amis.append(( + region, image["ImageId"], float(os_rel), + int(ami_rel) if ami_rel else 0)) + + +# Determine the set to discard based region and version +ok_regions = set() +discards = [] + +# Cluster candidates by region/version pair, newest in a region first. +# This should result in the first match for a region always being the newest +# AMI for that region and all subsequent matches in the region being old. +# Even so we must keep track of regions with current images on the off-chance +# that a region only has old images. In that case we want to preserve the old +# images till we can publish new ones manually so users can still launch +# Alpine systems without interruption. +candidates = sorted(amis, key=lambda i: (i[0], (i[1], i[2])), reverse=True) + +for ami in candidates: + (region, ami), version = ami[:2], ami[2:] + + if version > current: + print("{} has AMI '{}' newer than current".format(region, ami)) + continue + elif version == current: + ok_regions.add(region) + continue + elif version < current and region in ok_regions: + discards.append((region, ami)) + else: + print("Not discarding old image in {}".format(region)) + continue + + +# Scrub the old ones +for region, image in discards: + print("Removing image '{}' in {}".format(image, region)) + boto3.client("ec2", region_name=region).deregister_image(ImageId=image) From 0a69d4dfe9a666bb8694b712a46cffaca95ae856 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 25 Dec 2017 05:03:24 +0000 Subject: [PATCH 003/125] Add gen-readme script --- .gitignore | 1 + Makefile | 4 ++-- gen-readme.py.in | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 gen-readme.py.in diff --git a/.gitignore b/.gitignore index b9acab3..00c9ff3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /.py3/ /variables.json /scrub-old-amis.py +/gen-readme.py diff --git a/Makefile b/Makefile index e7896ca..04ec2fb 100644 --- a/Makefile +++ b/Makefile @@ -17,10 +17,10 @@ build/convert: @echo "json.dump(yaml.load(open(sys.argv[1])), sys.stdout, indent=4, separators=(',', ': '))" >> build/convert @chmod +x build/convert -scrub-old-amis.py: scrub-old-amis.py.in +%.py: %.py.in sed "s|@PYTHON@|#!`pwd`/.py3/bin/python|" $< > $@ chmod +x $@ .PHONY: clean clean: - rm -rf build .py3 scrub-old-amis.py + rm -rf build .py3 scrub-old-amis.py gen-readme.py diff --git a/gen-readme.py.in b/gen-readme.py.in new file mode 100644 index 0000000..5ffd4db --- /dev/null +++ b/gen-readme.py.in @@ -0,0 +1,17 @@ +@PYTHON@ + +import yaml + +URI_TEMPLATE = "https://{region}.console.aws.amazon.com/ec2/home#launchAmi={ami}" +ROW_TEMPLATE = "| {release} | {region} | [{ami}]({uri}) |" + + +with open("release.yaml") as fp: + releases = yaml.load(fp) + +for metadata in releases.values(): + release = str(metadata["alpine-release"]) + + for region, ami in metadata["region-identifiers"].items(): + uri = URI_TEMPLATE.format(**locals()) + print(ROW_TEMPLATE.format(**locals())) From eb26234ebcb842419ca052dcfdb3e3259b7d1102 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 25 Dec 2017 05:03:53 +0000 Subject: [PATCH 004/125] Add all regions except eu-west-3 --- README.md | 40 ++++++++++++++++++++-------------------- alpine-ami.yaml | 34 +++++++++++++++++++++++++++++----- release.yaml | 28 ++++++++++++++-------------- 3 files changed, 63 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 369ae45..fe68b54 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ built and supported.** This repository contains a packer file and a script to create an EC2 AMI containing Alpine Linux. The AMI is designed to work with most EC2 features -natively and thus should launch on any instance type. If anything is missing -please report a bug. +such as Elastic Network Adapters and NVME EBS volumes by default. If anything +is missing please report a bug. This image can be launched on any modern instance type. Including T2, M5, C5, I3, R4, P2, P3, X1, X1e, D2. Other instances may also work but have not been @@ -18,27 +18,27 @@ be configured to use whatever SSH keys you chose when you launched the image. If user data is specified it must be a shell script that begins with `#!`. If a script is provided it will be executed as root after the network is configured. -**Note:** The AMI is not yet available in all regions. This file and +**Note:** This image will be updated as Alpine Linux changes over time and as +AWS adds regions. This file and [releases.yaml](https://github.com/mcrute/alpine-ec2-ami/blob/master/releases.yaml) will be updated as new regions are made available. -| Alpine Version | Region Code | Region Name | AMI ID | -| -------------- | -------------- | ------------------------- | --------------------------------------------------------------------------------------------- | -| 3.7 | us-east-1 | US East (N. Virginia) | [ami-XXXXXXXX](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | us-east-2 | US East (Ohio) | [ami-XXXXXXXX](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | us-west-1 | US West (N. California) | [ami-XXXXXXXX](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | us-west-2 | US West (Oregon) | [ami-032b877b](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-032b877b) | -| 3.7 | ca-central-1 | Canada (Central) | [ami-XXXXXXXX](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | eu-central-1 | EU (Frankfurt) | [ami-XXXXXXXX](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | eu-west-1 | EU (Ireland) | [ami-XXXXXXXX](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | eu-west-2 | EU (London) | [ami-XXXXXXXX](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | eu-west-3 | EU (Paris) | [ami-XXXXXXXX](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | ap-northeast-1 | Asia Pacific (Tokyo) | [ami-XXXXXXXX](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | ap-northeast-2 | Asia Pacific (Seoul) | [ami-XXXXXXXX](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | ap-southeast-1 | Asia Pacific (Singapore) | [ami-XXXXXXXX](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | ap-southeast-2 | Asia Pacific (Sydney) | [ami-XXXXXXXX](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | ap-south-1 | Asia Pacific (Mumbai) | [ami-XXXXXXXX](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | -| 3.7 | sa-east-1 | South America (São Paulo) | [ami-XXXXXXXX](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-XXXXXXXX) | +| Alpine Version | Region Code | AMI ID | +| -------------- | ----------- | ------ | +| 3.7 | ca-central-1 | [ami-ba3a80de](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-ba3a80de) | +| 3.7 | us-west-1 | [ami-971f19f7](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-971f19f7) | +| 3.7 | eu-west-2 | [ami-d8b2abbc](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-d8b2abbc) | +| 3.7 | sa-east-1 | [ami-e233738e](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-e233738e) | +| 3.7 | eu-west-1 | [ami-5589062c](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-5589062c) | +| 3.7 | ap-south-1 | [ami-77a8e218](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-77a8e218) | +| 3.7 | ap-southeast-1 | [ami-4fc8a133](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-4fc8a133) | +| 3.7 | ap-southeast-2 | [ami-afdb2bcd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-afdb2bcd) | +| 3.7 | ap-northeast-1 | [ami-0cd5416a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cd5416a) | +| 3.7 | ap-northeast-2 | [ami-909c3dfe](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-909c3dfe) | +| 3.7 | eu-central-1 | [ami-5cb92e33](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-5cb92e33) | +| 3.7 | us-east-1 | [ami-c3dc9ab9](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-c3dc9ab9) | +| 3.7 | us-west-2 | [ami-6ac26d12](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-6ac26d12) | +| 3.7 | us-east-2 | [ami-fc8aa299](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-fc8aa299) | ## Caveats diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 26b75b1..d07a59a 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -1,7 +1,16 @@ variables: security_group: "" subnet: "" - destination_regions: "" + + # Treat this similar to a ABUILD pkgrel variable and increment with every + # release. Packer will notice an exiting AMI at build start and fail unless + # it is rmoved. To prevent a period of time where no Alpine AMI exists, + # create a new variant. Old AMIs should be pruned at some point. + ami_release: "1" + + # Overriding this requires validating that the installation script still + # works as expected. It probably does but stuff changes between major + # version. alpine_release: "3.7" # Don't override this without a good reason and if you do just make sure it @@ -21,17 +30,32 @@ builders: launch_block_device_mappings: - volume_type: "gp2" device_name: "{{user `volume_name`}}" - delete_on_termination: false + delete_on_termination: true volume_size: 5 # Output AMI Settings ena_support: true - ami_name: "Alpine-{{user `alpine_release`}}-Hardened-EC2" - ami_description: "Alpine Linux {{user `alpine_release`}} Release with Hardened Kernel and EC2 Optimizations" + ami_name: "Alpine-{{user `alpine_release`}}-r{{user `ami_release`}}-Hardened-EC2" + ami_description: "Alpine Linux {{user `alpine_release`}}-r{{user `ami_release`}} Release with Hardened Kernel and EC2 Optimizations" ami_groups: - "all" ami_virtualization_type: "hvm" - ami_regions: "{{user `destination_regions`}}" + ami_regions: + - us-east-1 + - us-east-2 + - us-west-1 + - us-west-2 + - ca-central-1 + - eu-central-1 + - eu-west-1 + - eu-west-2 +# - eu-west-3 + - ap-northeast-1 + - ap-northeast-2 + - ap-southeast-1 + - ap-southeast-2 + - ap-south-1 + - sa-east-1 ami_root_device: source_device_name: "{{user `volume_name`}}" device_name: "/dev/xvda" diff --git a/release.yaml b/release.yaml index 66d80c7..faddaf6 100644 --- a/release.yaml +++ b/release.yaml @@ -4,18 +4,18 @@ Alpine-3.7-Hardened-EC2: kernel-flavor: hardened ami-release-date: "2017-12-25 03:02:00" region-identifiers: - #us-east-1: ami-XXXXXXXX - #us-east-2: ami-XXXXXXXX - #us-west-1: ami-XXXXXXXX - us-west-2: ami-032b877b - #ca-central-1: ami-XXXXXXXX - #eu-central-1: ami-XXXXXXXX - #eu-west-1: ami-XXXXXXXX - #eu-west-2: ami-XXXXXXXX + ap-northeast-1: ami-0cd5416a + ap-northeast-2: ami-909c3dfe + ap-south-1: ami-77a8e218 + ap-southeast-1: ami-4fc8a133 + ap-southeast-2: ami-afdb2bcd + ca-central-1: ami-ba3a80de + eu-central-1: ami-5cb92e33 + eu-west-1: ami-5589062c + eu-west-2: ami-d8b2abbc #eu-west-3: ami-XXXXXXXX - #ap-northeast-1: ami-XXXXXXXX - #ap-northeast-2: ami-XXXXXXXX - #ap-southeast-1: ami-XXXXXXXX - #ap-southeast-2: ami-XXXXXXXX - #ap-south-1: ami-XXXXXXXX - #sa-east-1: ami-XXXXXXXX + sa-east-1: ami-e233738e + us-east-1: ami-c3dc9ab9 + us-east-2: ami-fc8aa299 + us-west-1: ami-971f19f7 + us-west-2: ami-6ac26d12 From 6fbb4d8ead5762ed69b716eae70cbd23a4c77b5c Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 25 Dec 2017 05:25:14 +0000 Subject: [PATCH 005/125] Also delete snapshots --- scrub-old-amis.py.in | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/scrub-old-amis.py.in b/scrub-old-amis.py.in index 756f537..2cbbcf8 100644 --- a/scrub-old-amis.py.in +++ b/scrub-old-amis.py.in @@ -28,8 +28,9 @@ for region in boto3.session.Session().get_available_regions("ec2"): os_rel, ami_rel = match.groups() amis.append(( - region, image["ImageId"], float(os_rel), - int(ami_rel) if ami_rel else 0)) + region, image["ImageId"], + image["BlockDeviceMappings"][0]["Ebs"]["SnapshotId"], + float(os_rel), int(ami_rel) if ami_rel else 0)) # Determine the set to discard based region and version @@ -43,10 +44,10 @@ discards = [] # that a region only has old images. In that case we want to preserve the old # images till we can publish new ones manually so users can still launch # Alpine systems without interruption. -candidates = sorted(amis, key=lambda i: (i[0], (i[1], i[2])), reverse=True) +candidates = sorted(amis, key=lambda i: (i[0], (i[1], i[3])), reverse=True) for ami in candidates: - (region, ami), version = ami[:2], ami[2:] + (region, ami, snapshot), version = ami[:3], ami[3:] if version > current: print("{} has AMI '{}' newer than current".format(region, ami)) @@ -55,13 +56,17 @@ for ami in candidates: ok_regions.add(region) continue elif version < current and region in ok_regions: - discards.append((region, ami)) + discards.append((region, ami, snapshot)) else: print("Not discarding old image in {}".format(region)) continue # Scrub the old ones -for region, image in discards: - print("Removing image '{}' in {}".format(image, region)) - boto3.client("ec2", region_name=region).deregister_image(ImageId=image) +for region, image, snapshot in discards: + print("Removing image '{}', snapshot '{}' in {}".format( + image, snapshot, region)) + + ec2 = boto3.client("ec2", region_name=region) + ec2.deregister_image(ImageId=image) + ec2.delete_snapshot(SnapshotId=snapshot) From 73f4135f984823a93a848c72f6fe7b5cf802db7a Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Tue, 26 Dec 2017 04:06:59 +0000 Subject: [PATCH 006/125] Log boot output to console --- make_ami.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/make_ami.sh b/make_ami.sh index 6ad4b0d..974fc9e 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -179,8 +179,13 @@ setup_extlinux() { # Enable ext4 because the root device is formatted ext4 # # Shorten timeout because EC2 has no way to interact with instance console + # + # ttyS0 is the target for EC2s "Get System Log" feature whereas tty0 is the + # target for EC2s "Get Instance Screenshot" feature. Enabling the serial + # port early in extlinux gives the most complete output in the system log. sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ - -e "s|^[# ]*(default_kernel_opts)=.*|\1=|" \ + -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"console=ttyS0 console=tty0\"|" \ + -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ -e "s|^[# ]*(modules)=.*|\1=sd-mod,usb-storage,ext4|" \ -e "s|^[# ]*(default)=.*|\1=hardened|" \ -e "s|^[# ]*(timeout)=.*|\1=1|" \ From 31163ccb52528cbb935bd571484a0025057ac487 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Tue, 26 Dec 2017 04:07:12 +0000 Subject: [PATCH 007/125] Start acpid to handle power events --- make_ami.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make_ami.sh b/make_ami.sh index 974fc9e..ff3a04d 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -225,7 +225,7 @@ enable_services() { rc_add "$target" default sshd chronyd networking tiny-ec2-bootstrap rc_add "$target" sysinit devfs dmesg mdev hwdrivers - rc_add "$target" boot modules hwclock swap hostname sysctl bootmisc syslog + rc_add "$target" boot modules hwclock swap hostname sysctl bootmisc syslog acpid rc_add "$target" shutdown killprocs savecache mount-ro } From 6dbdc2327206c002540093b5a8b9a88f43d00858 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Tue, 26 Dec 2017 04:07:38 +0000 Subject: [PATCH 008/125] Disable getty allocations --- make_ami.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/make_ami.sh b/make_ami.sh index ff3a04d..743827c 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -151,6 +151,11 @@ install_core_packages() { tzdata chroot "$target" apk --no-cache add --no-scripts syslinux + + # Disable starting getty for physical ttys because they're all inaccessible + # anyhow. With this configuration boot messages will still display in the + # EC2 console. + sed -Ei '/^tty\d/s/^/#/' /etc/inittab } create_initfs() { From 4e881f09cb5fea38ef128ca2974e575ad355dcfc Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Tue, 26 Dec 2017 04:07:50 +0000 Subject: [PATCH 009/125] Make prompt more obvious --- make_ami.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/make_ami.sh b/make_ami.sh index 743827c..ec89fb7 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -156,6 +156,10 @@ install_core_packages() { # anyhow. With this configuration boot messages will still display in the # EC2 console. sed -Ei '/^tty\d/s/^/#/' /etc/inittab + + # Make it a little more obvious who is logged in by adding username to the + # prompt + sed -i "s/^export PS1='/&\\\\u@/" /etc/profile } create_initfs() { From 27bcd4a05e0ce1bc28886452355121501310df8f Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Tue, 26 Dec 2017 16:58:28 +0000 Subject: [PATCH 010/125] Release 3.7-r2 --- README.md | 28 ++++++++++++++-------------- alpine-ami.yaml | 2 +- release.yaml | 28 ++++++++++++++-------------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index fe68b54..e00891b 100644 --- a/README.md +++ b/README.md @@ -25,20 +25,20 @@ will be updated as new regions are made available. | Alpine Version | Region Code | AMI ID | | -------------- | ----------- | ------ | -| 3.7 | ca-central-1 | [ami-ba3a80de](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-ba3a80de) | -| 3.7 | us-west-1 | [ami-971f19f7](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-971f19f7) | -| 3.7 | eu-west-2 | [ami-d8b2abbc](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-d8b2abbc) | -| 3.7 | sa-east-1 | [ami-e233738e](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-e233738e) | -| 3.7 | eu-west-1 | [ami-5589062c](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-5589062c) | -| 3.7 | ap-south-1 | [ami-77a8e218](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-77a8e218) | -| 3.7 | ap-southeast-1 | [ami-4fc8a133](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-4fc8a133) | -| 3.7 | ap-southeast-2 | [ami-afdb2bcd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-afdb2bcd) | -| 3.7 | ap-northeast-1 | [ami-0cd5416a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cd5416a) | -| 3.7 | ap-northeast-2 | [ami-909c3dfe](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-909c3dfe) | -| 3.7 | eu-central-1 | [ami-5cb92e33](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-5cb92e33) | -| 3.7 | us-east-1 | [ami-c3dc9ab9](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-c3dc9ab9) | -| 3.7 | us-west-2 | [ami-6ac26d12](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-6ac26d12) | -| 3.7 | us-east-2 | [ami-fc8aa299](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-fc8aa299) | +| 3.7 | ap-southeast-2 | [ami-7628d814](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-7628d814) | +| 3.7 | sa-east-1 | [ami-ae5414c2](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-ae5414c2) | +| 3.7 | us-west-2 | [ami-e474db9c](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-e474db9c) | +| 3.7 | eu-central-1 | [ami-a96ff8c6](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-a96ff8c6) | +| 3.7 | eu-west-2 | [ami-9ea2bbfa](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-9ea2bbfa) | +| 3.7 | ap-south-1 | [ami-29c28846](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-29c28846) | +| 3.7 | eu-west-1 | [ami-66de501f](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-66de501f) | +| 3.7 | us-east-1 | [ami-976020ed](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-976020ed) | +| 3.7 | us-west-1 | [ami-1c393f7c](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-1c393f7c) | +| 3.7 | ap-northeast-2 | [ami-b96ccdd7](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-b96ccdd7) | +| 3.7 | ap-northeast-1 | [ami-361c8850](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-361c8850) | +| 3.7 | us-east-2 | [ami-c487afa1](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-c487afa1) | +| 3.7 | ap-southeast-1 | [ami-25a8c059](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-25a8c059) | +| 3.7 | ca-central-1 | [ami-293d874d](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-293d874d) | ## Caveats diff --git a/alpine-ami.yaml b/alpine-ami.yaml index d07a59a..9cf221e 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -6,7 +6,7 @@ variables: # release. Packer will notice an exiting AMI at build start and fail unless # it is rmoved. To prevent a period of time where no Alpine AMI exists, # create a new variant. Old AMIs should be pruned at some point. - ami_release: "1" + ami_release: "2" # Overriding this requires validating that the installation script still # works as expected. It probably does but stuff changes between major diff --git a/release.yaml b/release.yaml index faddaf6..ed0dac6 100644 --- a/release.yaml +++ b/release.yaml @@ -4,18 +4,18 @@ Alpine-3.7-Hardened-EC2: kernel-flavor: hardened ami-release-date: "2017-12-25 03:02:00" region-identifiers: - ap-northeast-1: ami-0cd5416a - ap-northeast-2: ami-909c3dfe - ap-south-1: ami-77a8e218 - ap-southeast-1: ami-4fc8a133 - ap-southeast-2: ami-afdb2bcd - ca-central-1: ami-ba3a80de - eu-central-1: ami-5cb92e33 - eu-west-1: ami-5589062c - eu-west-2: ami-d8b2abbc #eu-west-3: ami-XXXXXXXX - sa-east-1: ami-e233738e - us-east-1: ami-c3dc9ab9 - us-east-2: ami-fc8aa299 - us-west-1: ami-971f19f7 - us-west-2: ami-6ac26d12 + ap-northeast-1: ami-361c8850 + ap-northeast-2: ami-b96ccdd7 + ap-south-1: ami-29c28846 + ap-southeast-1: ami-25a8c059 + ap-southeast-2: ami-7628d814 + ca-central-1: ami-293d874d + eu-central-1: ami-a96ff8c6 + eu-west-1: ami-66de501f + eu-west-2: ami-9ea2bbfa + sa-east-1: ami-ae5414c2 + us-east-1: ami-976020ed + us-east-2: ami-c487afa1 + us-west-1: ami-1c393f7c + us-west-2: ami-e474db9c From 836d9a3e7ef0b664f2b33fc65bb5315b901dfe2e Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sat, 28 Jul 2018 18:28:29 -0700 Subject: [PATCH 011/125] * switch to alpine v3.8 * add public_ip variable, setting to 'true' allows packer to build from outside AWS * use smallest instance_type (t2.nano) and volume_size (1 GiB) * eu-west-3 region is live; ap-northeast-3 requires subscription * no longer need setup_staging_repos function... + tiny-ec2-bootstrap is available in main since v3.8 + aws-ena-driver-vanilla is only available in edge/testing * switched to linux-vanilla since linux-hardened is no longer available and linux-virt does not have NVME available + TODO? make kernel choice selectable (significant memory/disk savings linux-virt can be used) --- README.md | 8 +++----- alpine-ami.yaml | 19 +++++++++++-------- make_ami.sh | 47 +++++++++++------------------------------------ 3 files changed, 25 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index e00891b..5740f5c 100644 --- a/README.md +++ b/README.md @@ -50,11 +50,9 @@ its development and thus there are some sharp edges. hardware so it seems unlikely that they will be supported going forward. Thus this project does not support them. -- Not all packages required have been merged into the upstream aports tree. - When they are they will still only be available on edge. Until then the image - sources a few packages from a testing repo managed by the owner of this - repository. The builds in this repository should be identical to what is - eventually merged into the official tree. +- The aws-ena-driver-vanilla package is still in edge/testing. When it is + available in a release, the edge/testing repository can be removed from + /etc/apk/repositories. - [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is not currently supported on Alpine Linux. Instead this image uses diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 9cf221e..af97e49 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -1,17 +1,18 @@ variables: security_group: "" subnet: "" + public_ip: "false" # Treat this similar to a ABUILD pkgrel variable and increment with every # release. Packer will notice an exiting AMI at build start and fail unless # it is rmoved. To prevent a period of time where no Alpine AMI exists, # create a new variant. Old AMIs should be pruned at some point. - ami_release: "2" + ami_release: "0" # Overriding this requires validating that the installation script still # works as expected. It probably does but stuff changes between major # version. - alpine_release: "3.7" + alpine_release: "3.8" # Don't override this without a good reason and if you do just make sure it # gets passed all the way through to the make_ami script @@ -26,17 +27,18 @@ builders: subnet_id: "{{user `subnet`}}" # Input Instance Setting - instance_type: "t2.micro" + instance_type: "t2.nano" launch_block_device_mappings: - volume_type: "gp2" device_name: "{{user `volume_name`}}" delete_on_termination: true - volume_size: 5 + volume_size: 1 + associate_public_ip_address: "{{user `public_ip`}}" # Output AMI Settings ena_support: true - ami_name: "Alpine-{{user `alpine_release`}}-r{{user `ami_release`}}-Hardened-EC2" - ami_description: "Alpine Linux {{user `alpine_release`}}-r{{user `ami_release`}} Release with Hardened Kernel and EC2 Optimizations" + ami_name: "Alpine-{{user `alpine_release`}}-r{{user `ami_release`}}-EC2" + ami_description: "Alpine Linux {{user `alpine_release`}}-r{{user `ami_release`}} Release with EC2 Optimizations" ami_groups: - "all" ami_virtualization_type: "hvm" @@ -49,9 +51,10 @@ builders: - eu-central-1 - eu-west-1 - eu-west-2 -# - eu-west-3 + - eu-west-3 - ap-northeast-1 - ap-northeast-2 +# - ap-northeast-3 - ap-southeast-1 - ap-southeast-2 - ap-south-1 @@ -60,7 +63,7 @@ builders: source_device_name: "{{user `volume_name`}}" device_name: "/dev/xvda" delete_on_termination: true - volume_size: 5 + volume_size: 1 volume_type: "gp2" # Use the most recent Amazon Linux AMI as our base diff --git a/make_ami.sh b/make_ami.sh index ec89fb7..c85c160 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -3,11 +3,11 @@ set -eu -: ${ALPINE_RELEASE:="3.7"} # not tested against edge -: ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.8.0/apk-tools-2.8.0-x86_64-linux.tar.gz"} -: ${APK_TOOLS_SHA256:="da21cefd2121e3a6cd4e8742b38118b2a1132aad7f707646ee946a6b32ee6df9"} -: ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/alpine-keys-2.1-r1.apk"} -: ${ALPINE_KEYS_SHA256:="7b2d1e9a00324c8eee49785dc22355be02534201e77473ba9762027e1a475cc7"} +: ${ALPINE_RELEASE:="3.8"} # not tested against edge +: ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.10.0/apk-tools-2.10.0-x86_64-linux.tar.gz"} +: ${APK_TOOLS_SHA256:="77f2d256fcd5d6fdafadf43bb6a9c85c3da7bb471ee842dcd729175235cb9fed"} +: ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/alpine-keys-2.1-r1.apk"} +: ${ALPINE_KEYS_SHA256:="f7832b848cedca482b145011cf516e82392f02a10713875cb09f39c7221c6f17"} die() { printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red @@ -73,34 +73,12 @@ make_filesystem() { setup_repositories() { local target="$1" # target directory + # NOTE: we only need @testing for aws-ena-driver-vanilla, this can be removed if/when released mkdir -p "$target"/etc/apk/keys cat > "$target"/etc/apk/repositories <<-EOF http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/main http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/community - EOF -} - -# This is mostly a temporary measure because some required packages have not -# yet been accepted upstream. This can be removed when the following pull -# requests are merged: -# -# - https://github.com/alpinelinux/aports/pull/2962 -# - https://github.com/alpinelinux/aports/pull/2961 -setup_staging_repos() { - local target="$1" # target directory - - echo "https://mcrute-build-artifacts.s3.us-west-2.amazonaws.com/alpine-packages/$ALPINE_RELEASE/testing" >> "$target"/etc/apk/repositories - - cat > "$target"/etc/apk/keys/mcrute-5a3eecec.rsa.pub <<-EOF - -----BEGIN PUBLIC KEY----- - MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5fW5dyTqgs9Yf93xKn5U - cYzY9t//M3TAaiDWH7rFxqBqTGnVGkP9QAGqsbXyoo/JpIalazkOfm/1L+XaK7NI - IUD/8KxfrnBW53cc/KOkPcGAga36aTBz/HmLQQvjWcizPxWepjdfvAnRTMV69Oud - zaRPGKx8nCRqLy1YFAEXn+zpHRh+OHCzzQFlkJop+2PCXqDFaMWC7+oWwrqFs1i0 - CXc4pq5oT6vAQyt6pUwN85sLVxtxXSt5G5ALYzQtaIj7IAR3jGlwU26wOAv5YP7z - xn/Z1ebQsPbAl3rw48v2T2ohPEX2TUtUq4OuwOG+z1pi3woIGOlOFVAP3k6lm8Z9 - 9QIDAQAB - -----END PUBLIC KEY----- + @testing http://dl-cdn.alpinelinux.org/alpine/edge/testing EOF } @@ -131,19 +109,19 @@ install_core_packages() { # Most from: https://git.alpinelinux.org/cgit/alpine-iso/tree/alpine-virt.packages # # acct - installed by some configurations, so added here - # aws-ena-driver-hardened - required for ENA enabled instances + # aws-ena-driver-vanilla - required for ENA enabled instances (still in edge/testing) # e2fsprogs - required by init scripts to maintain ext4 volumes - # linux-hardened - can't use virthardened because it's missing NVME support + # linux-vanilla - can't use virt because it's missing NVME support # mkinitfs - required to build custom initfs # sudo - to allow alpine user to become root, disallow root SSH logins # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata chroot "$target" apk --no-cache add \ acct \ alpine-mirrors \ - aws-ena-driver-hardened \ + aws-ena-driver-vanilla@testing \ chrony \ e2fsprogs \ - linux-hardened \ + linux-vanilla \ mkinitfs \ openssh \ sudo \ @@ -166,7 +144,6 @@ create_initfs() { local target="$1" # Create ENA feature for mkinitfs - # Submitted upstream: https://github.com/alpinelinux/mkinitfs/pull/19 echo "kernel/drivers/net/ethernet/amazon" > \ "$target"/etc/mkinitfs/features.d/ena.modules @@ -310,8 +287,6 @@ main() { einfo "Fetching Alpine signing keys" fetch_keys "$target" - setup_staging_repos "$target" - einfo "Installing base system" $apk add --root "$target" --update-cache --initdb alpine-base From cb95f7fd1eed7be5acbd386a95b0ba17823c6624 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Tue, 31 Jul 2018 17:55:39 -0700 Subject: [PATCH 012/125] Improve Configurability * move config variables from alpine-ami.yaml to variables.json-* + variables.json-default - ready-for-action original default config + variables.json-example - original defaults with comments * clean up tabs vs. spaces in make_ami.sh * make_ami.sh handles custom kernel flavor, extra repos, and extra packages * tweak README with regards to aws-ena-driver caveat --- README.md | 7 ++-- alpine-ami.yaml | 93 +++++++++++++++--------------------------- make_ami.sh | 89 +++++++++++++++++++++------------------- variables.json-default | 22 ++++++++++ variables.json-example | 72 ++++++++++++++++++++++++++++++++ 5 files changed, 178 insertions(+), 105 deletions(-) create mode 100644 variables.json-default create mode 100644 variables.json-example diff --git a/README.md b/README.md index 5740f5c..0248607 100644 --- a/README.md +++ b/README.md @@ -50,9 +50,10 @@ its development and thus there are some sharp edges. hardware so it seems unlikely that they will be supported going forward. Thus this project does not support them. -- The aws-ena-driver-vanilla package is still in edge/testing. When it is - available in a release, the edge/testing repository can be removed from - /etc/apk/repositories. +- The aws-ena-driver-vanilla package is still in edge/testing, and requires the + matching linux-vanilla package from edge/main. When ENA is available in an + alpine version release, edge/testing and edge/main should no longer be + necessary. - [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is not currently supported on Alpine Linux. Instead this image uses diff --git a/alpine-ami.yaml b/alpine-ami.yaml index af97e49..bc39b89 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -1,84 +1,59 @@ variables: - security_group: "" - subnet: "" - public_ip: "false" - # Treat this similar to a ABUILD pkgrel variable and increment with every - # release. Packer will notice an exiting AMI at build start and fail unless - # it is rmoved. To prevent a period of time where no Alpine AMI exists, - # create a new variant. Old AMIs should be pruned at some point. - ami_release: "0" + # NOTE: Additional configuration is set via the `variables.json` file. + # To use default values, simply `cp variables.json-default variables.json`. + # See `variables.json-example` for full configuration variable descriptions. - # Overriding this requires validating that the installation script still - # works as expected. It probably does but stuff changes between major - # version. + # NOTE: Changing alpine_release requires modifying `make_ami.sh` -- don't + # override this in `variables.json`! alpine_release: "3.8" - # Don't override this without a good reason and if you do just make sure it - # gets passed all the way through to the make_ami script - volume_name: "/dev/xvdf" builders: - type: "amazon-ebssurrogate" - # Image is built inside a custom VPC so let Packer use the existing - # resources - security_group_id: "{{user `security_group`}}" - subnet_id: "{{user `subnet`}}" + ### Builder Instance Details - # Input Instance Setting - instance_type: "t2.nano" + vpc_id: "{{user `vpc`}}" + subnet_id: "{{user `subnet`}}" + security_group_id: "{{user `security_group`}}" + instance_type: "{{user `build_instance_type`}}" + associate_public_ip_address: "{{user `public_ip`}}" launch_block_device_mappings: - volume_type: "gp2" device_name: "{{user `volume_name`}}" - delete_on_termination: true - volume_size: 1 - associate_public_ip_address: "{{user `public_ip`}}" - - # Output AMI Settings - ena_support: true - ami_name: "Alpine-{{user `alpine_release`}}-r{{user `ami_release`}}-EC2" - ami_description: "Alpine Linux {{user `alpine_release`}}-r{{user `ami_release`}} Release with EC2 Optimizations" - ami_groups: - - "all" - ami_virtualization_type: "hvm" - ami_regions: - - us-east-1 - - us-east-2 - - us-west-1 - - us-west-2 - - ca-central-1 - - eu-central-1 - - eu-west-1 - - eu-west-2 - - eu-west-3 - - ap-northeast-1 - - ap-northeast-2 -# - ap-northeast-3 - - ap-southeast-1 - - ap-southeast-2 - - ap-south-1 - - sa-east-1 - ami_root_device: - source_device_name: "{{user `volume_name`}}" - device_name: "/dev/xvda" - delete_on_termination: true - volume_size: 1 - volume_type: "gp2" - - # Use the most recent Amazon Linux AMI as our base + delete_on_termination: "true" + volume_size: "{{user `volume_size`}}" ssh_username: "ec2-user" source_ami_filter: + # use the latest Amazon Linux AMI filters: virtualization-type: "hvm" root-device-type: "ebs" architecture: "x86_64" name: "amzn-ami-hvm-*-x86_64-gp2" - owners: + owners: - "137112412989" - most_recent: true + most_recent: "true" + + ### Built AMI Details + + ami_name: "{{user `ami_name_prefix`}}{{user `alpine_release`}}-r{{user `ami_release`}}{{user `ami_name_suffix`}}" + ami_description: "{{user `ami_desc_prefix`}}{{user `alpine_release`}}-r{{user `ami_release`}}{{user `ami_desc_suffix`}}" + ami_virtualization_type: "hvm" + ami_root_device: + source_device_name: "{{user `volume_name`}}" + device_name: "/dev/xvda" + delete_on_termination: "true" + volume_size: "{{user `volume_size`}}" + volume_type: "gp2" + ena_support: "{{user `ena_enable`}}" + sriov_support: "{{user `sriov_enable`}}" + ami_groups: "{{user `ami_access`}}" + ami_regions: "{{user `deploy_regions`}}" + provisioners: - type: "shell" script: "make_ami.sh" - execute_command: "sudo sh -c '{{ .Vars }} {{ .Path }} {{user `volume_name`}}'" + execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} {{user `volume_name`}} {{user `kernel_flavor`}} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}''"' diff --git a/make_ami.sh b/make_ami.sh index c85c160..1e5a0b3 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -1,9 +1,9 @@ #!/bin/sh -# vim:set ts=4: +# vim: set ts=4 noet: set -eu -: ${ALPINE_RELEASE:="3.8"} # not tested against edge +: ${ALPINE_RELEASE:="3.8"} # not tested against edge : ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.10.0/apk-tools-2.10.0-x86_64-linux.tar.gz"} : ${APK_TOOLS_SHA256:="77f2d256fcd5d6fdafadf43bb6a9c85c3da7bb471ee842dcd729175235cb9fed"} : ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/alpine-keys-2.1-r1.apk"} @@ -19,9 +19,9 @@ einfo() { } rc_add() { - local target="$1"; shift # target directory + local target="$1"; shift # target directory local runlevel="$1"; shift # runlevel name - local services="$*" # names of services + local services="$*" # names of services local svc; for svc in $services; do mkdir -p "$target"/etc/runlevels/$runlevel @@ -31,9 +31,9 @@ rc_add() { } wgets() ( - local url="$1" # url to fetch - local sha256="$2" # expected SHA256 sum of output - local dest="$3" # output path and filename + local url="$1" # url to fetch + local sha256="$2" # expected SHA256 sum of output + local dest="$3" # output path and filename wget -T 10 -q -O "$dest" "$url" echo "$sha256 $dest" | sha256sum -c > /dev/null @@ -41,7 +41,7 @@ wgets() ( validate_block_device() { - local dev="$1" # target directory + local dev="$1" # target directory lsblk -P --fs "$dev" >/dev/null 2>&1 || \ die "'$dev' is not a valid block device" @@ -62,8 +62,8 @@ fetch_apk_tools() { } make_filesystem() { - local device="$1" # target device path - local target="$2" # mount target + local device="$1" # target device path + local target="$2" # mount target mkfs.ext4 "$device" e2label "$device" / @@ -71,15 +71,15 @@ make_filesystem() { } setup_repositories() { - local target="$1" # target directory + local target="$1" # target directory + local add_repos="$2" # extra repo lines, comma separated - # NOTE: we only need @testing for aws-ena-driver-vanilla, this can be removed if/when released mkdir -p "$target"/etc/apk/keys cat > "$target"/etc/apk/repositories <<-EOF http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/main http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/community - @testing http://dl-cdn.alpinelinux.org/alpine/edge/testing EOF + echo "$add_repos" | tr , "\012" >> "$target"/etc/apk/repositories } fetch_keys() { @@ -99,45 +99,44 @@ setup_chroot() { mount --bind /sys "$target"/sys # Don't want to ship this but it's needed for bootstrap. Will be removed in - # the cleanup stage. + # the cleanup stage. install -Dm644 /etc/resolv.conf "$target"/etc/resolv.conf } install_core_packages() { - local target="$1" + local target="$1" # target directory + local flavor="$2" # kernel flavor + local add_pkgs="$3" # extra packages, space separated # Most from: https://git.alpinelinux.org/cgit/alpine-iso/tree/alpine-virt.packages # - # acct - installed by some configurations, so added here - # aws-ena-driver-vanilla - required for ENA enabled instances (still in edge/testing) + # linux-$flavor - linux kernel flavor to install # e2fsprogs - required by init scripts to maintain ext4 volumes - # linux-vanilla - can't use virt because it's missing NVME support # mkinitfs - required to build custom initfs # sudo - to allow alpine user to become root, disallow root SSH logins # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata chroot "$target" apk --no-cache add \ - acct \ + linux-"$flavor" \ alpine-mirrors \ - aws-ena-driver-vanilla@testing \ chrony \ e2fsprogs \ - linux-vanilla \ mkinitfs \ openssh \ sudo \ tiny-ec2-bootstrap \ - tzdata + tzdata \ + $add_pkgs chroot "$target" apk --no-cache add --no-scripts syslinux - # Disable starting getty for physical ttys because they're all inaccessible - # anyhow. With this configuration boot messages will still display in the - # EC2 console. - sed -Ei '/^tty\d/s/^/#/' /etc/inittab + # Disable starting getty for physical ttys because they're all inaccessible + # anyhow. With this configuration boot messages will still display in the + # EC2 console. + sed -Ei '/^tty\d/s/^/#/' /etc/inittab - # Make it a little more obvious who is logged in by adding username to the - # prompt - sed -i "s/^export PS1='/&\\\\u@/" /etc/profile + # Make it a little more obvious who is logged in by adding username to the + # prompt + sed -i "s/^export PS1='/&\\\\u@/" /etc/profile } create_initfs() { @@ -165,10 +164,10 @@ setup_extlinux() { # Enable ext4 because the root device is formatted ext4 # # Shorten timeout because EC2 has no way to interact with instance console - # - # ttyS0 is the target for EC2s "Get System Log" feature whereas tty0 is the - # target for EC2s "Get Instance Screenshot" feature. Enabling the serial - # port early in extlinux gives the most complete output in the system log. + # + # ttyS0 is the target for EC2s "Get System Log" feature whereas tty0 is the + # target for EC2s "Get Instance Screenshot" feature. Enabling the serial + # port early in extlinux gives the most complete output in the system log. sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"console=ttyS0 console=tty0\"|" \ -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ @@ -189,8 +188,8 @@ setup_fstab() { local target="$1" cat > "$target"/etc/fstab <<-EOF - # - LABEL=/ / ext4 defaults,noatime 1 1 + # + LABEL=/ / ext4 defaults,noatime 1 1 EOF } @@ -244,14 +243,14 @@ configure_ntp() { # in EC2. # # See: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html - sed -i 's/^server .*/server 169.254.169.123/' "$target"/etc/chrony/chrony.conf + sed -i 's/^server .*/server 169.254.169.123/' "$target"/etc/chrony/chrony.conf } cleanup() { local target="$1" # Sweep cruft out of the image that doesn't need to ship or will be - # re-generated when the image boots + # re-generated when the image boots rm -f \ "$target"/var/cache/apk/* \ "$target"/etc/resolv.conf \ @@ -263,26 +262,30 @@ cleanup() { "$target"/proc \ "$target"/sys - umount "$target" + umount "$target" } main() { - [ "$#" -ne 1 ] && { echo "usage: $0 "; exit 1; } + [ "$#" -ne 4 ] && { echo "usage: $0 '[,]' '[ ]'"; exit 1; } device="$1" + flavor="$2" + add_repos="$3" + add_pkgs="$4" + target="/mnt/target" validate_block_device "$device" - [ -d "$target" ] || mkdir "$target" + [ -d "$target" ] || mkdir "$target" einfo "Fetching static APK tools" apk="$(fetch_apk_tools)" einfo "Creating root filesystem" - make_filesystem "$device" "$target" + make_filesystem "$device" "$target" - setup_repositories "$target" + setup_repositories "$target" "$add_repos" einfo "Fetching Alpine signing keys" fetch_keys "$target" @@ -293,7 +296,7 @@ main() { setup_chroot "$target" einfo "Installing core packages" - install_core_packages "$target" + install_core_packages "$target" "$flavor" "$add_pkgs" einfo "Configuring and enabling boot loader" create_initfs "$target" diff --git a/variables.json-default b/variables.json-default new file mode 100644 index 0000000..a1f3ce0 --- /dev/null +++ b/variables.json-default @@ -0,0 +1,22 @@ +{ + "ami_release": "1", + "ami_name_prefix": "Alpine-", + "ami_name_suffix": "-EC2", + "ami_desc_prefix": "Alpine Linux ", + "ami_desc_suffix": " Release with EC2 Optimizations", + "kernel_flavor": "vanilla@edge-main", + "add_repos": "@edge-main http://dl-cdn.alpinelinux.org/alpine/edge/main,@edge-testing http://dl-cdn.alpinelinux.org/alpine/edge/testing", + "add_pkgs": "acct aws-ena-driver-vanilla@edge-testing", + "ena_enable": "true", + "sriov_enable": "false", + "volume_size": "1", + "ami_access": "all", + "deploy_regions": "us-east-1,us-east-2,us-west-1,us-west-2,ca-central-1,eu-central-1,eu-west-1,eu-west-2,eu-west-3,ap-northeast-1,ap-northeast-2,ap-southeast-1,ap-southeast-2,ap-south-1,sa-east-1", + + "vpc": "", + "subnet": "", + "security_group": "", + "public_ip": "false", + "build_instance_type": "t2.nano", + "volume_name": "/dev/xvdf" +} diff --git a/variables.json-example b/variables.json-example new file mode 100644 index 0000000..4660c1d --- /dev/null +++ b/variables.json-example @@ -0,0 +1,72 @@ +# NOTE: This is file not valid JSON. +{ + ### Build Options ### + + # Treat similar to a ABUILD pkgrel variable and increment with every release. + "ami_release": "1", + + # AMI name prefix and suffix + "ami_name_prefix": "Alpine-", + "ami_name_suffix": "-EC2", + + # AMI description prefix and suffix + "ami_desc_prefix": "Alpine Linux ", + "ami_desc_suffix": " Release with EC2 Optimizations", + + # Kernel "flavor" to install. 'virt' is a slim choice, but doesn't currently + # include NVME support and there is no matching 'aws-ena-driver' package. + # 'vanilla' installs a lot of unneeded stuff (for an AMI), but does support + # NVME; however, there is no matching ENA driver in the main repo. In order + # to support NVME and ENA, we need to use 'vanilla@edge-main', which matches + # the 'aws-ena-driver@edge-testing' package. + "kernel_flavor": "vanilla@edge-main", + + # Comma separated list of lines to add to /etc/apk/repositories. We need + # edge/main and edge/testing for simultaneous NVME and ENA support. + "add_repos": "@edge-main http://dl-cdn.alpinelinux.org/alpine/edge/main,@edge-testing http://dl-cdn.alpinelinux.org/alpine/edge/testing", + + # Space separated list of additional packages to add to the AMI. + # acct - system accounting utilities (sa, etc.) + # aws-ena-driver-vanilla - Enhanced Network Adapter kernel module + "add_pkgs": "acct aws-ena-driver-vanilla@edge-testing", + + # Enable ENA/SRIOV support on the AMI. + "ena_enable": "true", + "sriov_enable": "false", + + # Size of the AMI image (in GiB). + "volume_size": "1", + + # Comma separated list of groups that should have access to the AMI. However, + # only two values are currently supported: 'all' for public, '' for private. + "ami_access": "all", + + # Comma separated list of regions to where the AMI should be copied. + # NOTE: ap-northeast-3 skipped, as it is available by subscription-only. + "deploy_regions": "us-east-1,us-east-2,us-west-1,us-west-2,ca-central-1,eu-central-1,eu-west-1,eu-west-2,eu-west-3,ap-northeast-1,ap-northeast-2,ap-southeast-1,ap-southeast-2,ap-south-1,sa-east-1", + + + ### Builder-Instance Options ### + + # VPC in which the builder instance is to be launched; you must also provide + # a subnet. + "vpc": "", + + # Subnet in which the builder instance is to be launched. + "subnet": "", + + # Security group to apply to the builder instance. + "security_group": "", + + # Assign a public IP to the builder instance. Set to 'true' for if you need + # to initiate the build from somewhere that wouldn't normally be able to + # access the builder instance's private network. + "public_ip": "false", + + # Instance type to use for building. + "build_instance_type": "t2.nano", + + # Don't override this without a good reason, and if you do just make sure it + # gets passed all the way through to the make_ami script. + "volume_name": "/dev/xvdf" +} From 356105f23d0dc8cc50e629624892b223f209de37 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sun, 19 Aug 2018 07:31:44 -0700 Subject: [PATCH 013/125] incorporate additional fixes https://github.com/mcrute/alpine-ec2-ami/pull/8 - temporary fix until ec2-tiny-bootstrap deps are updated https://github.com/mcrute/alpine-ec2-ami/pull/9 https://github.com/mcrute/alpine-ec2-ami/pull/10 --- README.md | 2 +- make_ami.sh | 4 ++-- variables.json-default | 2 +- variables.json-example | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0248607..462899c 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ script is provided it will be executed as root after the network is configured. **Note:** This image will be updated as Alpine Linux changes over time and as AWS adds regions. This file and -[releases.yaml](https://github.com/mcrute/alpine-ec2-ami/blob/master/releases.yaml) +[release.yaml](https://github.com/mcrute/alpine-ec2-ami/blob/master/release.yaml) will be updated as new regions are made available. | Alpine Version | Region Code | AMI ID | diff --git a/make_ami.sh b/make_ami.sh index 1e5a0b3..2917445 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -132,11 +132,11 @@ install_core_packages() { # Disable starting getty for physical ttys because they're all inaccessible # anyhow. With this configuration boot messages will still display in the # EC2 console. - sed -Ei '/^tty\d/s/^/#/' /etc/inittab + sed -Ei '/^tty\d/s/^/#/' "$target"/etc/inittab # Make it a little more obvious who is logged in by adding username to the # prompt - sed -i "s/^export PS1='/&\\\\u@/" /etc/profile + sed -i "s/^export PS1='/&\\\\u@/" "$target"/etc/profile } create_initfs() { diff --git a/variables.json-default b/variables.json-default index a1f3ce0..c82e111 100644 --- a/variables.json-default +++ b/variables.json-default @@ -6,7 +6,7 @@ "ami_desc_suffix": " Release with EC2 Optimizations", "kernel_flavor": "vanilla@edge-main", "add_repos": "@edge-main http://dl-cdn.alpinelinux.org/alpine/edge/main,@edge-testing http://dl-cdn.alpinelinux.org/alpine/edge/testing", - "add_pkgs": "acct aws-ena-driver-vanilla@edge-testing", + "add_pkgs": "acct aws-ena-driver-vanilla@edge-testing e2fsprogs-extra", "ena_enable": "true", "sriov_enable": "false", "volume_size": "1", diff --git a/variables.json-example b/variables.json-example index 4660c1d..c422de5 100644 --- a/variables.json-example +++ b/variables.json-example @@ -28,7 +28,8 @@ # Space separated list of additional packages to add to the AMI. # acct - system accounting utilities (sa, etc.) # aws-ena-driver-vanilla - Enhanced Network Adapter kernel module - "add_pkgs": "acct aws-ena-driver-vanilla@edge-testing", + # e2fsprogs-extra - ec2-tiny-bootstrap's currently undeclared dependency (resize2fs) + "add_pkgs": "acct aws-ena-driver-vanilla@edge-testing e2fsprogs-extra", # Enable ENA/SRIOV support on the AMI. "ena_enable": "true", From 95b7837c9fc2b070bc9e44da1f6fdc0987eabf75 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 27 Aug 2018 22:26:28 -0700 Subject: [PATCH 014/125] PR updates * README.md + update list of modern instance types + add caveat regarding linux-vanilla vs. linux-virt * alpine-ami.yaml + build instance type is always t3.nano + block device where we build is always /dev/xvdf + add optional AMI encryption + always enable AMI SR-IOV flag (vanilla & virt both have the necessary driver) + no need to pass volume_name to make_ami.sh * make_ami.sh + replace hard tabs with 4 spaces + always set up edge repositories + no need to add mkinitfs package, it's a dependency of linux-* + fix update of /etc/inittab + fix configuration of NTP + declare local vars in main() + device is always /dev/xvdf * variables.json-default/example + improve comment for kernel_flavor + default add_repos is now empty + remove acct & e2fsprogs-extra from add_pkgs + add optional AMI encryption + remove sriov_enable, build_instance_type, and volume_name vars --- README.md | 13 +- alpine-ami.yaml | 13 +- make_ami.sh | 397 +++++++++++++++++++++-------------------- variables.json-default | 10 +- variables.json-example | 43 ++--- 5 files changed, 241 insertions(+), 235 deletions(-) diff --git a/README.md b/README.md index 462899c..10a1322 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,8 @@ containing Alpine Linux. The AMI is designed to work with most EC2 features such as Elastic Network Adapters and NVME EBS volumes by default. If anything is missing please report a bug. -This image can be launched on any modern instance type. Including T2, M5, C5, -I3, R4, P2, P3, X1, X1e, D2. Other instances may also work but have not been +This image can be launched on any modern instance type, including T3, M5, C5, +I3, R5, P3, X1, X1e, D2, Z1d. Other instances may also work but have not been tested. If you find an issue with instance support for any current generation instance please file a bug against this project. @@ -50,10 +50,15 @@ its development and thus there are some sharp edges. hardware so it seems unlikely that they will be supported going forward. Thus this project does not support them. +- The linux-vanilla kernel all the linux-firmware packages it installs is much + larger than is necessary for an AMI designed to run on EC2. Unfortunately, + the linux-virt kernel is currently missing NVMe support, which is required for + the newest generation of instance families. + - The aws-ena-driver-vanilla package is still in edge/testing, and requires the matching linux-vanilla package from edge/main. When ENA is available in an - alpine version release, edge/testing and edge/main should no longer be - necessary. + alpine version release (ideally with a 'virt' kernel flavor), edge/testing + and edge/main should no longer be necessary. - [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is not currently supported on Alpine Linux. Instead this image uses diff --git a/alpine-ami.yaml b/alpine-ami.yaml index bc39b89..09e0c4d 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -1,6 +1,6 @@ variables: - # NOTE: Additional configuration is set via the `variables.json` file. + # NOTE: Configuration is done with a `variables.json` file. # To use default values, simply `cp variables.json-default variables.json`. # See `variables.json-example` for full configuration variable descriptions. @@ -17,11 +17,11 @@ builders: vpc_id: "{{user `vpc`}}" subnet_id: "{{user `subnet`}}" security_group_id: "{{user `security_group`}}" - instance_type: "{{user `build_instance_type`}}" + instance_type: "t3.nano" associate_public_ip_address: "{{user `public_ip`}}" launch_block_device_mappings: - volume_type: "gp2" - device_name: "{{user `volume_name`}}" + device_name: "/dev/xvdf" delete_on_termination: "true" volume_size: "{{user `volume_size`}}" ssh_username: "ec2-user" @@ -42,13 +42,14 @@ builders: ami_description: "{{user `ami_desc_prefix`}}{{user `alpine_release`}}-r{{user `ami_release`}}{{user `ami_desc_suffix`}}" ami_virtualization_type: "hvm" ami_root_device: - source_device_name: "{{user `volume_name`}}" + source_device_name: "/dev/xvdf" device_name: "/dev/xvda" delete_on_termination: "true" volume_size: "{{user `volume_size`}}" volume_type: "gp2" + encrypt_boot: "{{user `encrypt_ami`}}" ena_support: "{{user `ena_enable`}}" - sriov_support: "{{user `sriov_enable`}}" + sriov_support: "true" ami_groups: "{{user `ami_access`}}" ami_regions: "{{user `deploy_regions`}}" @@ -56,4 +57,4 @@ builders: provisioners: - type: "shell" script: "make_ami.sh" - execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} {{user `volume_name`}} {{user `kernel_flavor`}} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}''"' + execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} {{user `kernel_flavor`}} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}''"' diff --git a/make_ami.sh b/make_ami.sh index 2917445..6218694 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -1,5 +1,5 @@ #!/bin/sh -# vim: set ts=4 noet: +# vim: set ts=4 et: set -eu @@ -10,308 +10,309 @@ set -eu : ${ALPINE_KEYS_SHA256:="f7832b848cedca482b145011cf516e82392f02a10713875cb09f39c7221c6f17"} die() { - printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red - exit 1 + printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red + exit 1 } einfo() { - printf '\n\033[1;36m> %s\033[0m\n' "$@" >&2 # bold cyan + printf '\n\033[1;36m> %s\033[0m\n' "$@" >&2 # bold cyan } rc_add() { - local target="$1"; shift # target directory - local runlevel="$1"; shift # runlevel name - local services="$*" # names of services + local target="$1"; shift # target directory + local runlevel="$1"; shift # runlevel name + local services="$*" # names of services - local svc; for svc in $services; do - mkdir -p "$target"/etc/runlevels/$runlevel - ln -s /etc/init.d/$svc "$target"/etc/runlevels/$runlevel/$svc - echo " * service $svc added to runlevel $runlevel" - done + local svc; for svc in $services; do + mkdir -p "$target"/etc/runlevels/$runlevel + ln -s /etc/init.d/$svc "$target"/etc/runlevels/$runlevel/$svc + echo " * service $svc added to runlevel $runlevel" + done } wgets() ( - local url="$1" # url to fetch - local sha256="$2" # expected SHA256 sum of output - local dest="$3" # output path and filename + local url="$1" # url to fetch + local sha256="$2" # expected SHA256 sum of output + local dest="$3" # output path and filename - wget -T 10 -q -O "$dest" "$url" - echo "$sha256 $dest" | sha256sum -c > /dev/null + wget -T 10 -q -O "$dest" "$url" + echo "$sha256 $dest" | sha256sum -c > /dev/null ) validate_block_device() { - local dev="$1" # target directory + local dev="$1" # target directory - lsblk -P --fs "$dev" >/dev/null 2>&1 || \ - die "'$dev' is not a valid block device" + lsblk -P --fs "$dev" >/dev/null 2>&1 || \ + die "'$dev' is not a valid block device" - if lsblk -P --fs "$dev" | grep -vq 'FSTYPE=""'; then - die "Block device '$dev' is not blank" - fi + if lsblk -P --fs "$dev" | grep -vq 'FSTYPE=""'; then + die "Block device '$dev' is not blank" + fi } fetch_apk_tools() { - local store="$(mktemp -d)" - local tarball="$(basename $APK_TOOLS_URI)" + local store="$(mktemp -d)" + local tarball="$(basename $APK_TOOLS_URI)" - wgets "$APK_TOOLS_URI" "$APK_TOOLS_SHA256" "$store/$tarball" - tar -C "$store" -xf "$store/$tarball" + wgets "$APK_TOOLS_URI" "$APK_TOOLS_SHA256" "$store/$tarball" + tar -C "$store" -xf "$store/$tarball" - find "$store" -name apk + find "$store" -name apk } make_filesystem() { - local device="$1" # target device path - local target="$2" # mount target + local device="$1" # target device path + local target="$2" # mount target - mkfs.ext4 "$device" - e2label "$device" / - mount "$device" "$target" + mkfs.ext4 "$device" + e2label "$device" / + mount "$device" "$target" } setup_repositories() { - local target="$1" # target directory - local add_repos="$2" # extra repo lines, comma separated + local target="$1" # target directory + local add_repos="$2" # extra repo lines, comma separated - mkdir -p "$target"/etc/apk/keys - cat > "$target"/etc/apk/repositories <<-EOF - http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/main - http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/community - EOF - echo "$add_repos" | tr , "\012" >> "$target"/etc/apk/repositories + mkdir -p "$target"/etc/apk/keys + cat > "$target"/etc/apk/repositories <> "$target"/etc/apk/repositories } fetch_keys() { - local target="$1" - local tmp="$(mktemp -d)" + local target="$1" + local tmp="$(mktemp -d)" - wgets "$ALPINE_KEYS" "$ALPINE_KEYS_SHA256" "$tmp/alpine-keys.apk" - tar -C "$target" -xvf "$tmp"/alpine-keys.apk etc/apk/keys - rm -rf "$tmp" + wgets "$ALPINE_KEYS" "$ALPINE_KEYS_SHA256" "$tmp/alpine-keys.apk" + tar -C "$target" -xvf "$tmp"/alpine-keys.apk etc/apk/keys + rm -rf "$tmp" } setup_chroot() { - local target="$1" + local target="$1" - mount -t proc none "$target"/proc - mount --bind /dev "$target"/dev - mount --bind /sys "$target"/sys + mount -t proc none "$target"/proc + mount --bind /dev "$target"/dev + mount --bind /sys "$target"/sys - # Don't want to ship this but it's needed for bootstrap. Will be removed in - # the cleanup stage. - install -Dm644 /etc/resolv.conf "$target"/etc/resolv.conf + # Don't want to ship this but it's needed for bootstrap. Will be removed in + # the cleanup stage. + install -Dm644 /etc/resolv.conf "$target"/etc/resolv.conf } install_core_packages() { - local target="$1" # target directory - local flavor="$2" # kernel flavor - local add_pkgs="$3" # extra packages, space separated + local target="$1" # target directory + local flavor="$2" # kernel flavor + local add_pkgs="$3" # extra packages, space separated - # Most from: https://git.alpinelinux.org/cgit/alpine-iso/tree/alpine-virt.packages - # - # linux-$flavor - linux kernel flavor to install - # e2fsprogs - required by init scripts to maintain ext4 volumes - # mkinitfs - required to build custom initfs - # sudo - to allow alpine user to become root, disallow root SSH logins - # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata - chroot "$target" apk --no-cache add \ - linux-"$flavor" \ - alpine-mirrors \ - chrony \ - e2fsprogs \ - mkinitfs \ - openssh \ - sudo \ - tiny-ec2-bootstrap \ - tzdata \ - $add_pkgs + # Most from: https://git.alpinelinux.org/cgit/alpine-iso/tree/alpine-virt.packages + # + # sudo - to allow alpine user to become root, disallow root SSH logins + # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata + # + chroot "$target" apk --no-cache add \ + linux-"$flavor" \ + alpine-mirrors \ + chrony \ + e2fsprogs \ + openssh \ + sudo \ + tiny-ec2-bootstrap \ + tzdata \ + $add_pkgs - chroot "$target" apk --no-cache add --no-scripts syslinux + chroot "$target" apk --no-cache add --no-scripts syslinux - # Disable starting getty for physical ttys because they're all inaccessible - # anyhow. With this configuration boot messages will still display in the - # EC2 console. - sed -Ei '/^tty\d/s/^/#/' "$target"/etc/inittab + # Disable starting getty for physical ttys because they're all inaccessible + # anyhow. With this configuration boot messages will still display in the + # EC2 console. + sed -Ei '/^tty[0-9]/s/^/#/' \ + "$target"/etc/inittab - # Make it a little more obvious who is logged in by adding username to the - # prompt - sed -i "s/^export PS1='/&\\\\u@/" "$target"/etc/profile + # Make it a little more obvious who is logged in by adding username to the + # prompt + sed -i "s/^export PS1='/&\\\\u@/" "$target"/etc/profile } create_initfs() { - local target="$1" + local target="$1" - # Create ENA feature for mkinitfs - echo "kernel/drivers/net/ethernet/amazon" > \ - "$target"/etc/mkinitfs/features.d/ena.modules + # Create ENA feature for mkinitfs + echo "kernel/drivers/net/ethernet/amazon" > \ + "$target"/etc/mkinitfs/features.d/ena.modules - # Enable ENA and NVME features these don't hurt for any instance and are - # hard requirements of the 5 series and i3 series of instances - sed -Ei 's/^features="([^"]+)"/features="\1 nvme ena"/' \ - "$target"/etc/mkinitfs/mkinitfs.conf + # Enable ENA and NVME features these don't hurt for any instance and are + # hard requirements of the 5 series and i3 series of instances + sed -Ei 's/^features="([^"]+)"/features="\1 nvme ena"/' \ + "$target"/etc/mkinitfs/mkinitfs.conf - chroot "$target" /sbin/mkinitfs $(basename $(find "$target"/lib/modules/* -maxdepth 0)) + chroot "$target" /sbin/mkinitfs $(basename $(find "$target"/lib/modules/* -maxdepth 0)) } setup_extlinux() { - local target="$1" + local target="$1" - # Must use disk labels instead of UUID or devices paths so that this works - # across instance familes. UUID works for many instances but breaks on the - # NVME ones because EBS volumes are hidden behind NVME devices. - # - # Enable ext4 because the root device is formatted ext4 - # - # Shorten timeout because EC2 has no way to interact with instance console - # - # ttyS0 is the target for EC2s "Get System Log" feature whereas tty0 is the - # target for EC2s "Get Instance Screenshot" feature. Enabling the serial - # port early in extlinux gives the most complete output in the system log. - sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ - -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"console=ttyS0 console=tty0\"|" \ - -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ - -e "s|^[# ]*(modules)=.*|\1=sd-mod,usb-storage,ext4|" \ - -e "s|^[# ]*(default)=.*|\1=hardened|" \ - -e "s|^[# ]*(timeout)=.*|\1=1|" \ - "$target"/etc/update-extlinux.conf + # Must use disk labels instead of UUID or devices paths so that this works + # across instance familes. UUID works for many instances but breaks on the + # NVME ones because EBS volumes are hidden behind NVME devices. + # + # Enable ext4 because the root device is formatted ext4 + # + # Shorten timeout because EC2 has no way to interact with instance console + # + # ttyS0 is the target for EC2s "Get System Log" feature whereas tty0 is the + # target for EC2s "Get Instance Screenshot" feature. Enabling the serial + # port early in extlinux gives the most complete output in the system log. + sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ + -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"console=ttyS0 console=tty0\"|" \ + -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ + -e "s|^[# ]*(modules)=.*|\1=sd-mod,usb-storage,ext4|" \ + -e "s|^[# ]*(default)=.*|\1=hardened|" \ + -e "s|^[# ]*(timeout)=.*|\1=1|" \ + "$target"/etc/update-extlinux.conf } install_extlinux() { - local target="$1" + local target="$1" - chroot "$target" /sbin/extlinux --install /boot - chroot "$target" /sbin/update-extlinux --warn-only + chroot "$target" /sbin/extlinux --install /boot + chroot "$target" /sbin/update-extlinux --warn-only } setup_fstab() { - local target="$1" + local target="$1" - cat > "$target"/etc/fstab <<-EOF - # - LABEL=/ / ext4 defaults,noatime 1 1 - EOF + cat > "$target"/etc/fstab < +LABEL=/ / ext4 defaults,noatime 1 1 +EOF } setup_networking() { - local target="$1" + local target="$1" - cat > "$target"/etc/network/interfaces <<-EOF - auto lo - iface lo inet loopback + cat > "$target"/etc/network/interfaces < '[,]' '[ ]'"; exit 1; } + [ "$#" -ne 3 ] && { echo "usage: $0 '[,]' '[ ]'"; exit 1; } - device="$1" - flavor="$2" - add_repos="$3" - add_pkgs="$4" + local flavor="$1" + local add_repos="$2" + local add_pkgs="$3" - target="/mnt/target" + local device="/dev/xvdf" + local target="/mnt/target" - validate_block_device "$device" + validate_block_device "$device" - [ -d "$target" ] || mkdir "$target" + [ -d "$target" ] || mkdir "$target" - einfo "Fetching static APK tools" - apk="$(fetch_apk_tools)" + einfo "Fetching static APK tools" + apk="$(fetch_apk_tools)" - einfo "Creating root filesystem" - make_filesystem "$device" "$target" + einfo "Creating root filesystem" + make_filesystem "$device" "$target" - setup_repositories "$target" "$add_repos" + setup_repositories "$target" "$add_repos" - einfo "Fetching Alpine signing keys" - fetch_keys "$target" + einfo "Fetching Alpine signing keys" + fetch_keys "$target" - einfo "Installing base system" - $apk add --root "$target" --update-cache --initdb alpine-base + einfo "Installing base system" + $apk add --root "$target" --update-cache --initdb alpine-base - setup_chroot "$target" + setup_chroot "$target" - einfo "Installing core packages" - install_core_packages "$target" "$flavor" "$add_pkgs" + einfo "Installing core packages" + install_core_packages "$target" "$flavor" "$add_pkgs" - einfo "Configuring and enabling boot loader" - create_initfs "$target" - setup_extlinux "$target" - install_extlinux "$target" + einfo "Configuring and enabling boot loader" + create_initfs "$target" + setup_extlinux "$target" + install_extlinux "$target" - einfo "Configuring system" - setup_fstab "$target" - setup_networking "$target" - enable_services "$target" - create_alpine_user "$target" - configure_ntp "$target" + einfo "Configuring system" + setup_fstab "$target" + setup_networking "$target" + enable_services "$target" + create_alpine_user "$target" + configure_ntp "$target" - einfo "All done, cleaning up" - cleanup "$target" + einfo "All done, cleaning up" + cleanup "$target" } main "$@" diff --git a/variables.json-default b/variables.json-default index c82e111..d45378f 100644 --- a/variables.json-default +++ b/variables.json-default @@ -5,18 +5,16 @@ "ami_desc_prefix": "Alpine Linux ", "ami_desc_suffix": " Release with EC2 Optimizations", "kernel_flavor": "vanilla@edge-main", - "add_repos": "@edge-main http://dl-cdn.alpinelinux.org/alpine/edge/main,@edge-testing http://dl-cdn.alpinelinux.org/alpine/edge/testing", - "add_pkgs": "acct aws-ena-driver-vanilla@edge-testing e2fsprogs-extra", + "add_repos": "", + "add_pkgs": "aws-ena-driver-vanilla@edge-testing", "ena_enable": "true", - "sriov_enable": "false", "volume_size": "1", + "encrypt_ami": "false", "ami_access": "all", "deploy_regions": "us-east-1,us-east-2,us-west-1,us-west-2,ca-central-1,eu-central-1,eu-west-1,eu-west-2,eu-west-3,ap-northeast-1,ap-northeast-2,ap-southeast-1,ap-southeast-2,ap-south-1,sa-east-1", "vpc": "", "subnet": "", "security_group": "", - "public_ip": "false", - "build_instance_type": "t2.nano", - "volume_name": "/dev/xvdf" + "public_ip": "false" } diff --git a/variables.json-example b/variables.json-example index c422de5..0e10c9a 100644 --- a/variables.json-example +++ b/variables.json-example @@ -1,4 +1,5 @@ -# NOTE: This is file not valid JSON. +# *** NOTE: This is file not valid JSON! *** + { ### Build Options ### @@ -13,31 +14,37 @@ "ami_desc_prefix": "Alpine Linux ", "ami_desc_suffix": " Release with EC2 Optimizations", - # Kernel "flavor" to install. 'virt' is a slim choice, but doesn't currently - # include NVME support and there is no matching 'aws-ena-driver' package. + # Kernel "flavor" to install. + # + # 'virt' is the slim choice, but doesn't currently include NVMe support and + # there is no matching 'aws-ena-driver' package. When these features are + # available, this kernel flavor will be the default (if not hardcoded). + # # 'vanilla' installs a lot of unneeded stuff (for an AMI), but does support - # NVME; however, there is no matching ENA driver in the main repo. In order - # to support NVME and ENA, we need to use 'vanilla@edge-main', which matches + # NVMe; however, there is no matching ENA driver in the main repo. In order + # to support NVMe and ENA, we need to use 'vanilla@edge-main', which matches # the 'aws-ena-driver@edge-testing' package. + # "kernel_flavor": "vanilla@edge-main", - # Comma separated list of lines to add to /etc/apk/repositories. We need - # edge/main and edge/testing for simultaneous NVME and ENA support. - "add_repos": "@edge-main http://dl-cdn.alpinelinux.org/alpine/edge/main,@edge-testing http://dl-cdn.alpinelinux.org/alpine/edge/testing", + # Comma separated list of custom lines to add to /etc/apk/repositories. + # @edge-main, @edge-community, and @edge-testing repos have been predefined. + "add_repos": "", # Space separated list of additional packages to add to the AMI. - # acct - system accounting utilities (sa, etc.) - # aws-ena-driver-vanilla - Enhanced Network Adapter kernel module - # e2fsprogs-extra - ec2-tiny-bootstrap's currently undeclared dependency (resize2fs) - "add_pkgs": "acct aws-ena-driver-vanilla@edge-testing e2fsprogs-extra", + # aws-ena-driver-vanilla - ENA driver (until we have a 'virt' flavor) + "add_pkgs": "aws-ena-driver-vanilla@edge-testing", - # Enable ENA/SRIOV support on the AMI. + # Enable ENA support on the AMI. + # When ENA is available for the 'virt' kernel, this will always be on. "ena_enable": "true", - "sriov_enable": "false", # Size of the AMI image (in GiB). "volume_size": "1", + # Encrypt the AMI? + "encrypt_ami": "false", + # Comma separated list of groups that should have access to the AMI. However, # only two values are currently supported: 'all' for public, '' for private. "ami_access": "all", @@ -62,12 +69,6 @@ # Assign a public IP to the builder instance. Set to 'true' for if you need # to initiate the build from somewhere that wouldn't normally be able to # access the builder instance's private network. - "public_ip": "false", + "public_ip": "false" - # Instance type to use for building. - "build_instance_type": "t2.nano", - - # Don't override this without a good reason, and if you do just make sure it - # gets passed all the way through to the make_ami script. - "volume_name": "/dev/xvdf" } From 4065c4ebb316dab2e9f66b5e3f903e0548271266 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Tue, 4 Sep 2018 22:23:24 -0700 Subject: [PATCH 015/125] Incorporate recent Alpine edge changes * standardize on 'linux-virt' kernel + no longer need 'kernel_flavor' variable + always install 'aws-ena-driver' package + always enable ena_support * switch to 'variables.yaml' for config + update build/convert script to stringify certain keys that may contain arrays + copy from 'variables.yaml-default' if it doesn't exist * drop 'vpc' variable, using 'subnet' derives the proper VPC to use * fix chrony.conf (all pool.ntp.org references are changed to 169.254.169.123) * update README.md caveats --- .gitignore | 2 +- Makefile | 10 ++++-- README.md | 17 ++++------ alpine-ami.yaml | 12 +++---- make_ami.sh | 24 +++++++------- variables.json-default | 20 ------------ variables.json-example | 74 ------------------------------------------ variables.yaml-default | 64 ++++++++++++++++++++++++++++++++++++ 8 files changed, 97 insertions(+), 126 deletions(-) delete mode 100644 variables.json-default delete mode 100644 variables.json-example create mode 100644 variables.yaml-default diff --git a/.gitignore b/.gitignore index 00c9ff3..ca3d4df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /build/ /.py3/ -/variables.json +/variables.yaml /scrub-old-amis.py /gen-readme.py diff --git a/Makefile b/Makefile index 04ec2fb..d2505b2 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,9 @@ .PHONY: ami ami: build/convert + [ -f variables.yaml ] || cp variables.yaml-default variables.yaml + build/convert variables.yaml > build/variables.json build/convert alpine-ami.yaml > build/alpine-ami.json - packer build -var-file=variables.json build/alpine-ami.json + packer build -var-file=build/variables.json build/alpine-ami.json build/convert: [ -d ".py3" ] || python3 -m venv .py3 @@ -14,7 +16,11 @@ build/convert: # which only supports JSON @echo "#!`pwd`/.py3/bin/python" > build/convert @echo "import yaml, json, sys" >> build/convert - @echo "json.dump(yaml.load(open(sys.argv[1])), sys.stdout, indent=4, separators=(',', ': '))" >> build/convert + @echo "y = yaml.load(open(sys.argv[1]))" >> build/convert + @echo "for k in ['ami_access','deploy_regions','add_repos','add_pkgs']:" >> build/convert + @echo " if k in y and isinstance(y[k], list):" >> build/convert + @echo " y[k] = ','.join(str(x) for x in y[k])" >> build/convert + @echo "json.dump(y, sys.stdout, indent=4, separators=(',', ': '))" >> build/convert @chmod +x build/convert %.py: %.py.in diff --git a/README.md b/README.md index 10a1322..a27c2f3 100644 --- a/README.md +++ b/README.md @@ -50,16 +50,6 @@ its development and thus there are some sharp edges. hardware so it seems unlikely that they will be supported going forward. Thus this project does not support them. -- The linux-vanilla kernel all the linux-firmware packages it installs is much - larger than is necessary for an AMI designed to run on EC2. Unfortunately, - the linux-virt kernel is currently missing NVMe support, which is required for - the newest generation of instance families. - -- The aws-ena-driver-vanilla package is still in edge/testing, and requires the - matching linux-vanilla package from edge/main. When ENA is available in an - alpine version release (ideally with a 'virt' kernel flavor), edge/testing - and edge/main should no longer be necessary. - - [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is not currently supported on Alpine Linux. Instead this image uses [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap). Hostname @@ -71,6 +61,13 @@ its development and thus there are some sharp edges. If full cloud-init support is important to you please file a bug against this project. +- Because several key packages in Alpine 3.8 are missing or lacking features, + we currently need to install some packages from edge. We expect that these + will be included in Alpine 3.9, or perhaps as a 3.8.x update. + - linux-virt @edge-main (includes necessary NVMe drivers) + - aws-ena-driver @edge-testing (installs 'virt' flavored subpackage) + - tiny-ec2-bootstrap @edge-main (updated to v1.2.0) + - CloudFormation support is still forthcoming. This requires patches and packaging for the upstream cfn tools that have not yet been accepted. Eventually full CloudFormation support will be available. diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 09e0c4d..0ec2e21 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -1,8 +1,7 @@ variables: - # NOTE: Configuration is done with a `variables.json` file. - # To use default values, simply `cp variables.json-default variables.json`. - # See `variables.json-example` for full configuration variable descriptions. + # NOTE: Configuration is done with a `variables.yaml` file. If it doesn't + # exist, default configuration is copied from `variables.yaml-default`. # NOTE: Changing alpine_release requires modifying `make_ami.sh` -- don't # override this in `variables.json`! @@ -14,7 +13,6 @@ builders: ### Builder Instance Details - vpc_id: "{{user `vpc`}}" subnet_id: "{{user `subnet`}}" security_group_id: "{{user `security_group`}}" instance_type: "t3.nano" @@ -36,7 +34,7 @@ builders: - "137112412989" most_recent: "true" - ### Built AMI Details + ### AMI Build Details ami_name: "{{user `ami_name_prefix`}}{{user `alpine_release`}}-r{{user `ami_release`}}{{user `ami_name_suffix`}}" ami_description: "{{user `ami_desc_prefix`}}{{user `alpine_release`}}-r{{user `ami_release`}}{{user `ami_desc_suffix`}}" @@ -48,7 +46,7 @@ builders: volume_size: "{{user `volume_size`}}" volume_type: "gp2" encrypt_boot: "{{user `encrypt_ami`}}" - ena_support: "{{user `ena_enable`}}" + ena_support: "true" sriov_support: "true" ami_groups: "{{user `ami_access`}}" ami_regions: "{{user `deploy_regions`}}" @@ -57,4 +55,4 @@ builders: provisioners: - type: "shell" script: "make_ami.sh" - execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} {{user `kernel_flavor`}} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}''"' + execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}''"' diff --git a/make_ami.sh b/make_ami.sh index 6218694..0d10058 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -108,8 +108,7 @@ setup_chroot() { install_core_packages() { local target="$1" # target directory - local flavor="$2" # kernel flavor - local add_pkgs="$3" # extra packages, space separated + local add_pkgs="$2" # extra packages, space separated # Most from: https://git.alpinelinux.org/cgit/alpine-iso/tree/alpine-virt.packages # @@ -117,15 +116,15 @@ install_core_packages() { # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata # chroot "$target" apk --no-cache add \ - linux-"$flavor" \ + linux-virt@edge-main \ + aws-ena-driver@edge-testing \ alpine-mirrors \ chrony \ - e2fsprogs \ openssh \ sudo \ - tiny-ec2-bootstrap \ + tiny-ec2-bootstrap@edge-main \ tzdata \ - $add_pkgs + $(echo "$add_pkgs" | tr , ' ') chroot "$target" apk --no-cache add --no-scripts syslinux @@ -244,7 +243,9 @@ configure_ntp() { # in EC2. # # See: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html - sed -i 's/^pool .*/server 169.254.169.123 iburst/' "$target"/etc/chrony/chrony.conf + sed -e 's/^pool /server /' \ + -e 's/pool.ntp.org/169.254.169.123/g' \ + -i "$target"/etc/chrony/chrony.conf } cleanup() { @@ -267,11 +268,10 @@ cleanup() { } main() { - [ "$#" -ne 3 ] && { echo "usage: $0 '[,]' '[ ]'"; exit 1; } + [ "$#" -ne 2 ] && { echo "usage: $0 '[,]' '[,]'"; exit 1; } - local flavor="$1" - local add_repos="$2" - local add_pkgs="$3" + local add_repos="$1" + local add_pkgs="$2" local device="/dev/xvdf" local target="/mnt/target" @@ -297,7 +297,7 @@ main() { setup_chroot "$target" einfo "Installing core packages" - install_core_packages "$target" "$flavor" "$add_pkgs" + install_core_packages "$target" "$add_pkgs" einfo "Configuring and enabling boot loader" create_initfs "$target" diff --git a/variables.json-default b/variables.json-default deleted file mode 100644 index d45378f..0000000 --- a/variables.json-default +++ /dev/null @@ -1,20 +0,0 @@ -{ - "ami_release": "1", - "ami_name_prefix": "Alpine-", - "ami_name_suffix": "-EC2", - "ami_desc_prefix": "Alpine Linux ", - "ami_desc_suffix": " Release with EC2 Optimizations", - "kernel_flavor": "vanilla@edge-main", - "add_repos": "", - "add_pkgs": "aws-ena-driver-vanilla@edge-testing", - "ena_enable": "true", - "volume_size": "1", - "encrypt_ami": "false", - "ami_access": "all", - "deploy_regions": "us-east-1,us-east-2,us-west-1,us-west-2,ca-central-1,eu-central-1,eu-west-1,eu-west-2,eu-west-3,ap-northeast-1,ap-northeast-2,ap-southeast-1,ap-southeast-2,ap-south-1,sa-east-1", - - "vpc": "", - "subnet": "", - "security_group": "", - "public_ip": "false" -} diff --git a/variables.json-example b/variables.json-example deleted file mode 100644 index 0e10c9a..0000000 --- a/variables.json-example +++ /dev/null @@ -1,74 +0,0 @@ -# *** NOTE: This is file not valid JSON! *** - -{ - ### Build Options ### - - # Treat similar to a ABUILD pkgrel variable and increment with every release. - "ami_release": "1", - - # AMI name prefix and suffix - "ami_name_prefix": "Alpine-", - "ami_name_suffix": "-EC2", - - # AMI description prefix and suffix - "ami_desc_prefix": "Alpine Linux ", - "ami_desc_suffix": " Release with EC2 Optimizations", - - # Kernel "flavor" to install. - # - # 'virt' is the slim choice, but doesn't currently include NVMe support and - # there is no matching 'aws-ena-driver' package. When these features are - # available, this kernel flavor will be the default (if not hardcoded). - # - # 'vanilla' installs a lot of unneeded stuff (for an AMI), but does support - # NVMe; however, there is no matching ENA driver in the main repo. In order - # to support NVMe and ENA, we need to use 'vanilla@edge-main', which matches - # the 'aws-ena-driver@edge-testing' package. - # - "kernel_flavor": "vanilla@edge-main", - - # Comma separated list of custom lines to add to /etc/apk/repositories. - # @edge-main, @edge-community, and @edge-testing repos have been predefined. - "add_repos": "", - - # Space separated list of additional packages to add to the AMI. - # aws-ena-driver-vanilla - ENA driver (until we have a 'virt' flavor) - "add_pkgs": "aws-ena-driver-vanilla@edge-testing", - - # Enable ENA support on the AMI. - # When ENA is available for the 'virt' kernel, this will always be on. - "ena_enable": "true", - - # Size of the AMI image (in GiB). - "volume_size": "1", - - # Encrypt the AMI? - "encrypt_ami": "false", - - # Comma separated list of groups that should have access to the AMI. However, - # only two values are currently supported: 'all' for public, '' for private. - "ami_access": "all", - - # Comma separated list of regions to where the AMI should be copied. - # NOTE: ap-northeast-3 skipped, as it is available by subscription-only. - "deploy_regions": "us-east-1,us-east-2,us-west-1,us-west-2,ca-central-1,eu-central-1,eu-west-1,eu-west-2,eu-west-3,ap-northeast-1,ap-northeast-2,ap-southeast-1,ap-southeast-2,ap-south-1,sa-east-1", - - - ### Builder-Instance Options ### - - # VPC in which the builder instance is to be launched; you must also provide - # a subnet. - "vpc": "", - - # Subnet in which the builder instance is to be launched. - "subnet": "", - - # Security group to apply to the builder instance. - "security_group": "", - - # Assign a public IP to the builder instance. Set to 'true' for if you need - # to initiate the build from somewhere that wouldn't normally be able to - # access the builder instance's private network. - "public_ip": "false" - -} diff --git a/variables.yaml-default b/variables.yaml-default new file mode 100644 index 0000000..3ec54f4 --- /dev/null +++ b/variables.yaml-default @@ -0,0 +1,64 @@ +### Builder-Instance Options ### + +# Subnet ID in which the builder instance is to be launched. VPC will be +# automatically determined. +subnet: + +# Optional security group to apply to the builder instance. +security_group: + +# Assign a public IP to the builder instance. Set to "true" for if you need +# to initiate the build from somewhere that wouldn't normally be able to access +# the builder instance's private network and a private IP is not auto-assigned. +public_ip: "false" + + +### Build Options ### + +# Treat similar to a ABUILD pkgrel variable and increment with every release. +ami_release: "1" + +# AMI name prefix and suffix +ami_name_prefix: "Alpine-" +ami_name_suffix: "-EC2" + +# AMI description prefix and suffix +ami_desc_prefix: "Alpine Linux " +ami_desc_suffix: " Release with EC2 Optimizations" + +# List of custom lines to add to /etc/apk/repositories. Note that @edge-main, +# @edge-community, and @edge-testing repos have been predefined. +add_repos: + +# List of additional packages to add to the AMI. +add_pkgs: + +# Size of the AMI image (in GiB). +volume_size: "1" + +# Encrypt the AMI? +encrypt_ami: "false" + +# List of groups that should have access to the AMI. However, only two +# values are currently supported: 'all' for public, '' or unset for private. +ami_access: + - "all" + +# List of regions to where the AMI should be copied. +deploy_regions: + - "us-east-1" + - "us-east-2" + - "us-west-1" + - "us-west-2" + - "ca-central-1" + - "eu-central-1" + - "eu-west-1" + - "eu-west-2" + - "eu-west-3" + - "ap-northeast-1" + - "ap-northeast-2" +# - "ap-northeast-3" # skipped, available by subscription only + - "ap-southeast-1" + - "ap-southeast-2" + - "ap-south-1" + - "sa-east-1" From 86596057321716b77b1a38098e730284dd962822 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Fri, 7 Sep 2018 08:15:19 -0700 Subject: [PATCH 016/125] make edge * Add the ability to 'make edge' to create an AMI based on the latest Alpine edge repository * Force 'ami_revision' to be 'rYYYYMMDDHHSS' --- Makefile | 11 +++++++++-- alpine-ami.yaml | 9 +++++---- make_ami.sh | 21 +++++++++++++++++++-- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index d2505b2..3f08dd0 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,16 @@ .PHONY: ami -ami: build/convert + +ami: convert + packer build -var-file=build/variables.json build/alpine-ami.json + +edge: convert + @echo '{ "alpine_release": "edge", "ami_release": "'`date +%Y%m%d%H%M%S`'" }' > build/edge.json + packer build -var-file=build/variables.json -var-file=build/edge.json build/alpine-ami.json + +convert: build/convert [ -f variables.yaml ] || cp variables.yaml-default variables.yaml build/convert variables.yaml > build/variables.json build/convert alpine-ami.yaml > build/alpine-ami.json - packer build -var-file=build/variables.json build/alpine-ami.json build/convert: [ -d ".py3" ] || python3 -m venv .py3 diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 0ec2e21..8baabc0 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -1,10 +1,9 @@ variables: - # NOTE: Configuration is done with a `variables.yaml` file. If it doesn't - # exist, default configuration is copied from `variables.yaml-default`. + # NOTE: Configuration is done with a 'variables.yaml' file. If it doesn't + # exist, default configuration is copied from 'variables.yaml-default'. - # NOTE: Changing alpine_release requires modifying `make_ami.sh` -- don't - # override this in `variables.json`! + # NOTE: Changing alpine_release may require modifying 'make_ami.sh'. alpine_release: "3.8" @@ -55,4 +54,6 @@ builders: provisioners: - type: "shell" script: "make_ami.sh" + environment_vars: + - "ALPINE_RELEASE={{user `alpine_release`}}" execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}''"' diff --git a/make_ami.sh b/make_ami.sh index 0d10058..9b24227 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -3,12 +3,14 @@ set -eu -: ${ALPINE_RELEASE:="3.8"} # not tested against edge +: ${MIN_RELEASE:="3.8"} : ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.10.0/apk-tools-2.10.0-x86_64-linux.tar.gz"} : ${APK_TOOLS_SHA256:="77f2d256fcd5d6fdafadf43bb6a9c85c3da7bb471ee842dcd729175235cb9fed"} : ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/alpine-keys-2.1-r1.apk"} : ${ALPINE_KEYS_SHA256:="f7832b848cedca482b145011cf516e82392f02a10713875cb09f39c7221c6f17"} +: ${ALPINE_RELEASE:="${MIN_RELEASE}"} # unless otherwise specified + die() { printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red exit 1 @@ -75,13 +77,26 @@ setup_repositories() { local add_repos="$2" # extra repo lines, comma separated mkdir -p "$target"/etc/apk/keys - cat > "$target"/etc/apk/repositories < "$target"/etc/apk/repositories < "$target"/etc/apk/repositories <> "$target"/etc/apk/repositories <> "$target"/etc/apk/repositories } @@ -269,6 +284,8 @@ cleanup() { main() { [ "$#" -ne 2 ] && { echo "usage: $0 '[,]' '[,]'"; exit 1; } + [ "$ALPINE_RELEASE" != 'edge' ] && [[ "$ALPINE_RELEASE" -lt "$MIN_RELEASE" ]] && \ + { echo "ERR: minimum alpine_release value must be '$MIN_RELEASE'"; exit 1; } local add_repos="$1" local add_pkgs="$2" From 5a06b6d8806ed9c1013894f99496bc72bc10f4f7 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sun, 2 Dec 2018 10:57:25 -0800 Subject: [PATCH 017/125] * aws-ena-driver moved from testing to community * improve minimum release version test * clarify public_ip variable; uses subnet's default when unset * add 'distclean' Makefile target * add 'variables.yaml_*' to .gitignore to exclude custom build profiles --- .gitignore | 1 + Makefile | 3 +++ README.md | 2 +- make_ami.sh | 14 ++++++++++---- variables.yaml-default | 8 ++++---- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index ca3d4df..0bf92c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /build/ /.py3/ /variables.yaml +/variables.yaml_* /scrub-old-amis.py /gen-readme.py diff --git a/Makefile b/Makefile index 3f08dd0..f3e4c8a 100644 --- a/Makefile +++ b/Makefile @@ -37,3 +37,6 @@ build/convert: .PHONY: clean clean: rm -rf build .py3 scrub-old-amis.py gen-readme.py + +distclean: clean + rm -f variables.yaml diff --git a/README.md b/README.md index a27c2f3..2cb9b78 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ its development and thus there are some sharp edges. we currently need to install some packages from edge. We expect that these will be included in Alpine 3.9, or perhaps as a 3.8.x update. - linux-virt @edge-main (includes necessary NVMe drivers) - - aws-ena-driver @edge-testing (installs 'virt' flavored subpackage) + - aws-ena-driver @edge-community (installs 'virt' flavored subpackage) - tiny-ec2-bootstrap @edge-main (updated to v1.2.0) - CloudFormation support is still forthcoming. This requires patches and diff --git a/make_ami.sh b/make_ami.sh index 9b24227..45d8ab3 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -132,7 +132,7 @@ install_core_packages() { # chroot "$target" apk --no-cache add \ linux-virt@edge-main \ - aws-ena-driver@edge-testing \ + aws-ena-driver@edge-community \ alpine-mirrors \ chrony \ openssh \ @@ -282,10 +282,16 @@ cleanup() { umount "$target" } +version_sorted() { + # falsey if $1 version > $2 version + printf "%s\n%s" $1 $2 | sort -VC +} + main() { - [ "$#" -ne 2 ] && { echo "usage: $0 '[,]' '[,]'"; exit 1; } - [ "$ALPINE_RELEASE" != 'edge' ] && [[ "$ALPINE_RELEASE" -lt "$MIN_RELEASE" ]] && \ - { echo "ERR: minimum alpine_release value must be '$MIN_RELEASE'"; exit 1; } + [ "$#" -ne 2 ] && die "Expecting two parameters\nUsage: $0 '[,]' '[,]'" + [ "$ALPINE_RELEASE" != 'edge' ] && { + version_sorted $MIN_RELEASE $ALPINE_RELEASE || die "Minimum alpine_release is '$MIN_RELEASE'" + } local add_repos="$1" local add_pkgs="$2" diff --git a/variables.yaml-default b/variables.yaml-default index 3ec54f4..3ae3cd6 100644 --- a/variables.yaml-default +++ b/variables.yaml-default @@ -7,10 +7,10 @@ subnet: # Optional security group to apply to the builder instance. security_group: -# Assign a public IP to the builder instance. Set to "true" for if you need -# to initiate the build from somewhere that wouldn't normally be able to access -# the builder instance's private network and a private IP is not auto-assigned. -public_ip: "false" +# By default, public IPs are assigned (or not) per the subnet's configuration. +# Set to "true" or "false" to explicitly override the subnet's public IP auto- +# assign configuration. +public_ip: "" ### Build Options ### From 013c57122a89a94070afe264269293ae6bed5d8e Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sun, 2 Dec 2018 19:38:49 -0800 Subject: [PATCH 018/125] fix issue #24 * Latest Amazon Linux enables 64bid when creating ext4 partitions, which is incompatible with syslinux/extlinux bootloader. Explicitly disable 64bit support, as it's highly unlikely we'll need a boot volume >16 TiB. * update-extlinux.conf - switch kernel default to 'virt', as 'hardened' no longer exists. --- make_ami.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/make_ami.sh b/make_ami.sh index 45d8ab3..8d2c652 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -67,7 +67,7 @@ make_filesystem() { local device="$1" # target device path local target="$2" # mount target - mkfs.ext4 "$device" + mkfs.ext4 -O ^64bit "$device" e2label "$device" / mount "$device" "$target" } @@ -187,7 +187,7 @@ setup_extlinux() { -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"console=ttyS0 console=tty0\"|" \ -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ -e "s|^[# ]*(modules)=.*|\1=sd-mod,usb-storage,ext4|" \ - -e "s|^[# ]*(default)=.*|\1=hardened|" \ + -e "s|^[# ]*(default)=.*|\1=virt|" \ -e "s|^[# ]*(timeout)=.*|\1=1|" \ "$target"/etc/update-extlinux.conf } From a8f8c499e7bdd618de5c9ba13adc3c172d6b2c7c Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Wed, 26 Dec 2018 16:14:10 -0800 Subject: [PATCH 019/125] packer region tweak, alpine 3.8.2 was released --- alpine-ami.yaml | 1 + variables.yaml-default | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 8baabc0..18e14e0 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -12,6 +12,7 @@ builders: ### Builder Instance Details + region: "{{user `region`}}" subnet_id: "{{user `subnet`}}" security_group_id: "{{user `security_group`}}" instance_type: "t3.nano" diff --git a/variables.yaml-default b/variables.yaml-default index 3ae3cd6..668233a 100644 --- a/variables.yaml-default +++ b/variables.yaml-default @@ -1,5 +1,8 @@ ### Builder-Instance Options ### +# Region to build in, if we initiate a build from outside AWS +region: + # Subnet ID in which the builder instance is to be launched. VPC will be # automatically determined. subnet: @@ -16,7 +19,7 @@ public_ip: "" ### Build Options ### # Treat similar to a ABUILD pkgrel variable and increment with every release. -ami_release: "1" +ami_release: "2" # AMI name prefix and suffix ami_name_prefix: "Alpine-" From 80807fa647fa92b14d27cfe53d8dfb6b10478b41 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Fri, 11 Jan 2019 07:30:33 -0800 Subject: [PATCH 020/125] * no longer need aws-ena-driver, it's in linux-virt * no longer need to install edge linux-virt package --- make_ami.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/make_ami.sh b/make_ami.sh index 8d2c652..3db2eb1 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -131,8 +131,7 @@ install_core_packages() { # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata # chroot "$target" apk --no-cache add \ - linux-virt@edge-main \ - aws-ena-driver@edge-community \ + linux-virt \ alpine-mirrors \ chrony \ openssh \ From b669fc0a215500b02bfb3edd659be7533758332f Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sun, 30 Dec 2018 12:29:27 -0800 Subject: [PATCH 021/125] add mdev conf, links NVMEe devs to EBS xvd/sd devs --- alpine-ami.yaml | 6 ++++++ make_ami.sh | 9 +++++++++ nvme-ebs-links.sh | 20 ++++++++++++++++++++ nvme-ebs-mdev.conf | 3 +++ 4 files changed, 38 insertions(+) create mode 100755 nvme-ebs-links.sh create mode 100644 nvme-ebs-mdev.conf diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 18e14e0..5991115 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -53,6 +53,12 @@ builders: provisioners: + - type: "file" + source: "nvme-ebs-links.sh" + destination: "/tmp/" + - type: "file" + source: "nvme-ebs-mdev.conf" + destination: "/tmp/" - type: "shell" script: "make_ami.sh" environment_vars: diff --git a/make_ami.sh b/make_ami.sh index 3db2eb1..7652edc 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -133,6 +133,7 @@ install_core_packages() { chroot "$target" apk --no-cache add \ linux-virt \ alpine-mirrors \ + nvme-cli \ chrony \ openssh \ sudo \ @@ -153,6 +154,13 @@ install_core_packages() { sed -i "s/^export PS1='/&\\\\u@/" "$target"/etc/profile } +setup_mdev() { + local target="$1" + + cp -a /tmp/nvme-ebs-links.sh "$target"/lib/mdev + sed -n -i -e '/# fallback/r /tmp/nvme-ebs-mdev.conf' -e 1x -e '2,${x;p}' -e '${x;p}' "$target"/etc/mdev.conf +} + create_initfs() { local target="$1" @@ -327,6 +335,7 @@ main() { install_extlinux "$target" einfo "Configuring system" + setup_mdev "$target" setup_fstab "$target" setup_networking "$target" enable_services "$target" diff --git a/nvme-ebs-links.sh b/nvme-ebs-links.sh new file mode 100755 index 0000000..ca8c4f6 --- /dev/null +++ b/nvme-ebs-links.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +[ -x /usr/sbin/nvme ] || exit + +case $ACTION in + add|"") + BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') + PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') + EBS=$(/usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null | tr -d ' ') + EBS=${EBS#/dev/}$PART + ln -sf $MDEV ${EBS/xvd/sd} + ln -sf $MDEV ${EBS/sd/xvd} + ;; + remove) + for TARGET in sd* xvd* + do + [ "$(readlink $TARGET 2>/dev/null)" = $MDEV ] && rm -f $TARGET + done + ;; +esac diff --git a/nvme-ebs-mdev.conf b/nvme-ebs-mdev.conf new file mode 100644 index 0000000..2d60927 --- /dev/null +++ b/nvme-ebs-mdev.conf @@ -0,0 +1,3 @@ +# ebs nvme links +nvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links.sh + From 80c014d702a2e62061067f9644637a65ffa8280e Mon Sep 17 00:00:00 2001 From: tomalok Date: Sat, 19 Jan 2019 11:58:34 -0800 Subject: [PATCH 022/125] fix 3.8 ena drivers (#33) * go back to using linux-virt@edge-main, which has ena drivers * other misc fixes * update README * use --no-cache when installing alpine-base --- README.md | 13 ++++++------- make_ami.sh | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 2cb9b78..893075a 100644 --- a/README.md +++ b/README.md @@ -56,16 +56,15 @@ its development and thus there are some sharp edges. setting will work as will setting the ssh keys for the Alpine user based on what was configured during instance launch. User data is supported as long as it's a shell script (starts with #!). See the tiny-ec2-bootstrap README - for more details. You can still install cloud-init using aports but the - version in the tree is somewhat old and may not work correctly for Alpine. - If full cloud-init support is important to you please file a bug against this - project. + for more details. You can still install cloud-init (from the edge/3.9 testing + repositories), but we haven't tested whether it will not work correctly for + this AMI. If full cloud-init support is important to you please file a bug + against this project. - Because several key packages in Alpine 3.8 are missing or lacking features, we currently need to install some packages from edge. We expect that these - will be included in Alpine 3.9, or perhaps as a 3.8.x update. - - linux-virt @edge-main (includes necessary NVMe drivers) - - aws-ena-driver @edge-community (installs 'virt' flavored subpackage) + will be included in Alpine 3.9. + - linux-virt @edge-main (includes necessary ENA drivers) - tiny-ec2-bootstrap @edge-main (updated to v1.2.0) - CloudFormation support is still forthcoming. This requires patches and diff --git a/make_ami.sh b/make_ami.sh index 7652edc..b5097ab 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -131,7 +131,7 @@ install_core_packages() { # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata # chroot "$target" apk --no-cache add \ - linux-virt \ + linux-virt@edge-main \ alpine-mirrors \ nvme-cli \ chrony \ @@ -322,7 +322,7 @@ main() { fetch_keys "$target" einfo "Installing base system" - $apk add --root "$target" --update-cache --initdb alpine-base + $apk add --root "$target" --no-cache --initdb alpine-base setup_chroot "$target" From 4680ecd85e672540fa9b5e1f3366094306d540ee Mon Sep 17 00:00:00 2001 From: tomalok Date: Sat, 26 Jan 2019 13:32:54 -0800 Subject: [PATCH 023/125] Add add_svcs, fix nvme, add eu-north-1 (#34) * Allow additional services on the AMI's runlevels I'm using this with my AMIs to add haveged to the boot runlevel to boost the amount of initial entropy on smaller instance types, so sshd can start in under 6s instead of over 2m. add_svcs: boot: - haveged * fix race condition with nvme-ebs /dev linking * copy nvme stuff to build target in one operation * add eu-north-1 region --- Makefile | 4 +++- alpine-ami.yaml | 9 +++------ make_ami.sh | 15 ++++++++++++--- nvme-ebs-links.sh | 20 -------------------- nvme-ebs-mdev.conf | 3 --- nvme/nvme-ebs-links | 22 ++++++++++++++++++++++ nvme/nvme-ebs-mdev.conf | 3 +++ variables.yaml-default | 8 ++++++++ 8 files changed, 51 insertions(+), 33 deletions(-) delete mode 100755 nvme-ebs-links.sh delete mode 100644 nvme-ebs-mdev.conf create mode 100755 nvme/nvme-ebs-links create mode 100644 nvme/nvme-ebs-mdev.conf diff --git a/Makefile b/Makefile index f3e4c8a..6a76c0a 100644 --- a/Makefile +++ b/Makefile @@ -24,9 +24,11 @@ build/convert: @echo "#!`pwd`/.py3/bin/python" > build/convert @echo "import yaml, json, sys" >> build/convert @echo "y = yaml.load(open(sys.argv[1]))" >> build/convert - @echo "for k in ['ami_access','deploy_regions','add_repos','add_pkgs']:" >> build/convert + @echo "for k in ['ami_access','deploy_regions','add_repos','add_pkgs','add_svcs']:" >> build/convert @echo " if k in y and isinstance(y[k], list):" >> build/convert @echo " y[k] = ','.join(str(x) for x in y[k])" >> build/convert + @echo " if k in y and isinstance(y[k], dict):" >> build/convert + @echo " y[k] = ':'.join(str(l) + '=' + ','.join(str(s) for s in ss) for l, ss in y[k].items())" >> build/convert @echo "json.dump(y, sys.stdout, indent=4, separators=(',', ': '))" >> build/convert @chmod +x build/convert diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 5991115..a4ba2c0 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -54,13 +54,10 @@ builders: provisioners: - type: "file" - source: "nvme-ebs-links.sh" - destination: "/tmp/" - - type: "file" - source: "nvme-ebs-mdev.conf" - destination: "/tmp/" + source: "nvme/" + destination: "/tmp" - type: "shell" script: "make_ami.sh" environment_vars: - "ALPINE_RELEASE={{user `alpine_release`}}" - execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}''"' + execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}'' ''{{user `add_svcs`}}''"' diff --git a/make_ami.sh b/make_ami.sh index b5097ab..c8dde78 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -157,7 +157,7 @@ install_core_packages() { setup_mdev() { local target="$1" - cp -a /tmp/nvme-ebs-links.sh "$target"/lib/mdev + cp /tmp/nvme-ebs-links "$target"/lib/mdev sed -n -i -e '/# fallback/r /tmp/nvme-ebs-mdev.conf' -e 1x -e '2,${x;p}' -e '${x;p}' "$target"/etc/mdev.conf } @@ -229,11 +229,18 @@ EOF enable_services() { local target="$1" + local add_svcs="$2" rc_add "$target" default sshd chronyd networking tiny-ec2-bootstrap rc_add "$target" sysinit devfs dmesg mdev hwdrivers rc_add "$target" boot modules hwclock swap hostname sysctl bootmisc syslog acpid rc_add "$target" shutdown killprocs savecache mount-ro + + if [ -n "$add_svcs" ]; then + local lvl_svcs; for lvl_svcs in $(echo "$add_svcs" | tr : ' '); do + rc_add "$target" $(echo "$lvl_svcs" | tr =, ' ') + done + fi } create_alpine_user() { @@ -295,13 +302,14 @@ version_sorted() { } main() { - [ "$#" -ne 2 ] && die "Expecting two parameters\nUsage: $0 '[,]' '[,]'" + [ "$#" -ne 3 ] && die "Expecting three parameters\nUsage: $0 '[[,...]]' '[[,...]]' '[=[,...][:...]]'" [ "$ALPINE_RELEASE" != 'edge' ] && { version_sorted $MIN_RELEASE $ALPINE_RELEASE || die "Minimum alpine_release is '$MIN_RELEASE'" } local add_repos="$1" local add_pkgs="$2" + local add_svcs="$3" local device="/dev/xvdf" local target="/mnt/target" @@ -316,6 +324,7 @@ main() { einfo "Creating root filesystem" make_filesystem "$device" "$target" + einfo "Configuring Alpine repositories" setup_repositories "$target" "$add_repos" einfo "Fetching Alpine signing keys" @@ -338,7 +347,7 @@ main() { setup_mdev "$target" setup_fstab "$target" setup_networking "$target" - enable_services "$target" + enable_services "$target" "$add_svcs" create_alpine_user "$target" configure_ntp "$target" diff --git a/nvme-ebs-links.sh b/nvme-ebs-links.sh deleted file mode 100755 index ca8c4f6..0000000 --- a/nvme-ebs-links.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -[ -x /usr/sbin/nvme ] || exit - -case $ACTION in - add|"") - BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') - PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') - EBS=$(/usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null | tr -d ' ') - EBS=${EBS#/dev/}$PART - ln -sf $MDEV ${EBS/xvd/sd} - ln -sf $MDEV ${EBS/sd/xvd} - ;; - remove) - for TARGET in sd* xvd* - do - [ "$(readlink $TARGET 2>/dev/null)" = $MDEV ] && rm -f $TARGET - done - ;; -esac diff --git a/nvme-ebs-mdev.conf b/nvme-ebs-mdev.conf deleted file mode 100644 index 2d60927..0000000 --- a/nvme-ebs-mdev.conf +++ /dev/null @@ -1,3 +0,0 @@ -# ebs nvme links -nvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links.sh - diff --git a/nvme/nvme-ebs-links b/nvme/nvme-ebs-links new file mode 100755 index 0000000..c197a73 --- /dev/null +++ b/nvme/nvme-ebs-links @@ -0,0 +1,22 @@ +#!/bin/sh + +[ -x /usr/sbin/nvme ] || exit + +case $ACTION in + add|"") + BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') + PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') + until [ -n "$EBS" ]; do + EBS=$(/usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null | tr -d ' ') + done + EBS=${EBS#/dev/}$PART + ln -sf "$MDEV" "${EBS/xvd/sd}" + ln -sf "$MDEV" "${EBS/sd/xvd}" + ;; + remove) + for TARGET in sd* xvd* + do + [ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" + done + ;; +esac diff --git a/nvme/nvme-ebs-mdev.conf b/nvme/nvme-ebs-mdev.conf new file mode 100644 index 0000000..c30b6fd --- /dev/null +++ b/nvme/nvme-ebs-mdev.conf @@ -0,0 +1,3 @@ +# ebs nvme links +nvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links + diff --git a/variables.yaml-default b/variables.yaml-default index 668233a..d9dff95 100644 --- a/variables.yaml-default +++ b/variables.yaml-default @@ -36,6 +36,13 @@ add_repos: # List of additional packages to add to the AMI. add_pkgs: +# Additional services to start at the specified level. +add_svcs: +# boot: +# - service1 +# default: +# - service2 + # Size of the AMI image (in GiB). volume_size: "1" @@ -55,6 +62,7 @@ deploy_regions: - "us-west-2" - "ca-central-1" - "eu-central-1" + - "eu-north-1" - "eu-west-1" - "eu-west-2" - "eu-west-3" From 0b15db8bb555cf128b7660170e4afdd7a0a5d2d0 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sun, 3 Feb 2019 14:53:40 -0800 Subject: [PATCH 024/125] * Re-baseline to the newly-released Alpine 3.9 * Match meanings of 'version' and 'release' to how Alpine uses them * Use optional 'revision' to denote any same-release AMI rebuild * Include CPU 'arch' in naming/description (may also offer 'aarch64' AMIs someday) * Upgrade build instance to use Amazon Linux 2 AMIs * Use env vars to pass details to 'make_ami.sh' instead of via CLI parameters * make_ami.sh + minimum version/release shouldn't be overrideable + update APK tools & Alpine keys + check build's release vs. installed /etc/alpine-release --- .gitignore | 2 ++ Makefile | 2 +- README.md | 58 ++++++++++++++++++++---------------------- alpine-ami.yaml | 23 +++++++++++------ make_ami.sh | 57 ++++++++++++++++++++++++----------------- variables.yaml-default | 22 ++++++++-------- 6 files changed, 90 insertions(+), 74 deletions(-) diff --git a/.gitignore b/.gitignore index 0bf92c9..efc91a3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +**/*~ +**/*.swp /build/ /.py3/ /variables.yaml diff --git a/Makefile b/Makefile index 6a76c0a..bd8d329 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ ami: convert packer build -var-file=build/variables.json build/alpine-ami.json edge: convert - @echo '{ "alpine_release": "edge", "ami_release": "'`date +%Y%m%d%H%M%S`'" }' > build/edge.json + @echo '{ "version": "edge", "release": "edge", "revision": "'-`date +%Y%m%d%H%M%S`'" }' > build/edge.json packer build -var-file=build/variables.json -var-file=build/edge.json build/alpine-ami.json convert: build/convert diff --git a/README.md b/README.md index 893075a..10862f1 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,29 @@ # Alpine Linux EC2 AMI Build -**NOTE: This is not an official Amazon or AWS provided image. This is community -built and supported.** +**NOTE: This is not an official Amazon or AWS provided image. This is +community built and supported.** This repository contains a packer file and a script to create an EC2 AMI -containing Alpine Linux. The AMI is designed to work with most EC2 features -such as Elastic Network Adapters and NVME EBS volumes by default. If anything +containing Alpine Linux. The AMI is designed to work with most EC2 features +such as Elastic Network Adapters and NVME EBS volumes by default. If anything is missing please report a bug. -This image can be launched on any modern instance type, including T3, M5, C5, -I3, R5, P3, X1, X1e, D2, Z1d. Other instances may also work but have not been -tested. If you find an issue with instance support for any current generation -instance please file a bug against this project. +This image can be launched on any modern x86_64 instance type, including T3, +M5, C5, I3, R5, P3, X1, X1e, D2, Z1d. Other instances may also work but have +not been tested. If you find an issue with instance support for any current +generation instance please file a bug against this project. -To get started use one of the AMIs below. The default user is `alpine` and will -be configured to use whatever SSH keys you chose when you launched the image. -If user data is specified it must be a shell script that begins with `#!`. If a -script is provided it will be executed as root after the network is configured. +To get started use one of the AMIs below. The default user is `alpine` and +will be configured to use whatever SSH keys you chose when you launched the +image. If user data is specified it must be a shell script that begins with +`#!`. If a script is provided it will be executed as root after the network is +configured. -**Note:** This image will be updated as Alpine Linux changes over time and as -AWS adds regions. This file and +**NOTE:** *The images listed below are currently very much out of date. We are +working on providing a set of updated 3.9 AMIs for all current AWS regions, and +hope to automate AMI builds and updates to this file and [release.yaml](https://github.com/mcrute/alpine-ec2-ami/blob/master/release.yaml) -will be updated as new regions are made available. +in the not-too-distant future.* | Alpine Version | Region Code | AMI ID | | -------------- | ----------- | ------ | @@ -45,28 +47,22 @@ will be updated as new regions are made available. This image is being used in production but it's still somewhat early stage in its development and thus there are some sharp edges. -- Only EBS-backed HVM instances are supported. While paravirtualized instances +- Only EBS-backed HVM instances are supported. While paravirtualized instances are still available from AWS they are not supported on any of the newer - hardware so it seems unlikely that they will be supported going forward. Thus - this project does not support them. + hardware so it seems unlikely that they will be supported going forward. + Thus this project does not support them. - [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is not currently - supported on Alpine Linux. Instead this image uses - [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap). Hostname - setting will work as will setting the ssh keys for the Alpine user based on - what was configured during instance launch. User data is supported as long - as it's a shell script (starts with #!). See the tiny-ec2-bootstrap README - for more details. You can still install cloud-init (from the edge/3.9 testing + supported on Alpine Linux. Instead this image uses + [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap). Hostname + setting will work, as will setting the ssh keys for the Alpine user based on + what was configured during instance launch. User data is supported as long + as it's a shell script (starts with #!). See the tiny-ec2-bootstrap README + for more details. You can still install cloud-init (from the edge testing repositories), but we haven't tested whether it will not work correctly for this AMI. If full cloud-init support is important to you please file a bug against this project. -- Because several key packages in Alpine 3.8 are missing or lacking features, - we currently need to install some packages from edge. We expect that these - will be included in Alpine 3.9. - - linux-virt @edge-main (includes necessary ENA drivers) - - tiny-ec2-bootstrap @edge-main (updated to v1.2.0) - -- CloudFormation support is still forthcoming. This requires patches and +- CloudFormation support is still forthcoming. This requires patches and packaging for the upstream cfn tools that have not yet been accepted. Eventually full CloudFormation support will be available. diff --git a/alpine-ami.yaml b/alpine-ami.yaml index a4ba2c0..71f26fc 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -3,9 +3,11 @@ variables: # NOTE: Configuration is done with a 'variables.yaml' file. If it doesn't # exist, default configuration is copied from 'variables.yaml-default'. - # NOTE: Changing alpine_release may require modifying 'make_ami.sh'. - alpine_release: "3.8" - + # NOTE: Changing arch/version/release may require modifying 'make_ami.sh'. + arch: x86_64 + version: "3.9" + release: "3.9.0" + revision: "" builders: - type: "amazon-ebssurrogate" @@ -29,15 +31,15 @@ builders: virtualization-type: "hvm" root-device-type: "ebs" architecture: "x86_64" - name: "amzn-ami-hvm-*-x86_64-gp2" + name: "amzn2-ami-hvm-2.0.*-gp2" owners: - "137112412989" most_recent: "true" ### AMI Build Details - ami_name: "{{user `ami_name_prefix`}}{{user `alpine_release`}}-r{{user `ami_release`}}{{user `ami_name_suffix`}}" - ami_description: "{{user `ami_desc_prefix`}}{{user `alpine_release`}}-r{{user `ami_release`}}{{user `ami_desc_suffix`}}" + ami_name: "{{user `ami_name_prefix`}}{{user `release`}}{{user `revision`}}-{{user `arch`}}{{user `ami_name_suffix`}}" + ami_description: "{{user `ami_desc_prefix`}}{{user `release`}}{{user `revision`}} {{user `arch`}}{{user `ami_desc_suffix`}}" ami_virtualization_type: "hvm" ami_root_device: source_device_name: "/dev/xvdf" @@ -59,5 +61,10 @@ provisioners: - type: "shell" script: "make_ami.sh" environment_vars: - - "ALPINE_RELEASE={{user `alpine_release`}}" - execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}'' ''{{user `add_svcs`}}''"' + - "VERSION={{user `version`}}" + - "RELEASE={{user `release`}}" + - "REVISION={{user `revision`}}" + - "ADD_REPOS='{{user `add_repos`}}'" + - "ADD_PKGS='{{user `add_pkgs`}}'" + - "ADD_SVCS='{{user `add_svcs`}}'" + execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }}"' diff --git a/make_ami.sh b/make_ami.sh index c8dde78..8c00a6c 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -3,13 +3,16 @@ set -eu -: ${MIN_RELEASE:="3.8"} -: ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.10.0/apk-tools-2.10.0-x86_64-linux.tar.gz"} -: ${APK_TOOLS_SHA256:="77f2d256fcd5d6fdafadf43bb6a9c85c3da7bb471ee842dcd729175235cb9fed"} -: ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/alpine-keys-2.1-r1.apk"} -: ${ALPINE_KEYS_SHA256:="f7832b848cedca482b145011cf516e82392f02a10713875cb09f39c7221c6f17"} +MIN_VERSION="3.9" +MIN_RELEASE="3.9.0" -: ${ALPINE_RELEASE:="${MIN_RELEASE}"} # unless otherwise specified +: ${VERSION:="${MIN_VERSION}"} # unless otherwise specified +: ${RELEASE:="${MIN_RELEASE}"} # unless otherwise specified + +: ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.10.3/apk-tools-2.10.3-x86_64-linux.tar.gz"} +: ${APK_TOOLS_SHA256:="4d0b2cda606720624589e6171c374ec6d138867e03576d9f518dddde85c33839"} +: ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/alpine-keys-2.1-r1.apk"} +: ${ALPINE_KEYS_SHA256:="9c7bc5d2e24c36982da7aa49b3cfcb8d13b20f7a03720f25625fa821225f5fbc"} die() { printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red @@ -78,7 +81,7 @@ setup_repositories() { mkdir -p "$target"/etc/apk/keys - if [ "$ALPINE_RELEASE" = 'edge' ]; then + if [ "$VERSION" = 'edge' ]; then cat > "$target"/etc/apk/repositories < "$target"/etc/apk/repositories <> "$target"/etc/apk/repositories <> "$target"/etc/apk/repositories } @@ -109,6 +106,18 @@ fetch_keys() { rm -rf "$tmp" } +install_base() { + local target="$1" + + $apk add --root "$target" --no-cache --initdb alpine-base + # verify release matches + if [ "$VERSION" != "edge" ]; then + ALPINE_RELEASE=$(cat "$target/etc/alpine-release") + [ "$RELEASE" = "$ALPINE_RELEASE" ] || \ + die "Current Alpine $VERSION release ($ALPINE_RELEASE) does not match build ($RELEASE)" + fi +} + setup_chroot() { local target="$1" @@ -131,13 +140,13 @@ install_core_packages() { # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata # chroot "$target" apk --no-cache add \ - linux-virt@edge-main \ + linux-virt \ alpine-mirrors \ nvme-cli \ chrony \ openssh \ sudo \ - tiny-ec2-bootstrap@edge-main \ + tiny-ec2-bootstrap \ tzdata \ $(echo "$add_pkgs" | tr , ' ') @@ -302,14 +311,14 @@ version_sorted() { } main() { - [ "$#" -ne 3 ] && die "Expecting three parameters\nUsage: $0 '[[,...]]' '[[,...]]' '[=[,...][:...]]'" - [ "$ALPINE_RELEASE" != 'edge' ] && { - version_sorted $MIN_RELEASE $ALPINE_RELEASE || die "Minimum alpine_release is '$MIN_RELEASE'" + [ "$VERSION" != 'edge' ] && { + version_sorted $MIN_VERSION $VERSION || die "Minimum Alpine version is '$MIN_RELEASE'" + version_sorted $MIN_RELEASE $RELEASE || die "Minimum Alpine release is '$MIN_RELEASE'" } - local add_repos="$1" - local add_pkgs="$2" - local add_svcs="$3" + local add_repos="$ADD_REPOS" + local add_pkgs="$ADD_PKGS" + local add_svcs="$ADD_SVCS" local device="/dev/xvdf" local target="/mnt/target" @@ -331,7 +340,7 @@ main() { fetch_keys "$target" einfo "Installing base system" - $apk add --root "$target" --no-cache --initdb alpine-base + install_base "$target" setup_chroot "$target" diff --git a/variables.yaml-default b/variables.yaml-default index d9dff95..10a10a6 100644 --- a/variables.yaml-default +++ b/variables.yaml-default @@ -7,7 +7,7 @@ region: # automatically determined. subnet: -# Optional security group to apply to the builder instance. +# Optional security group to apply to the builder instance security_group: # By default, public IPs are assigned (or not) per the subnet's configuration. @@ -18,25 +18,27 @@ public_ip: "" ### Build Options ### -# Treat similar to a ABUILD pkgrel variable and increment with every release. -ami_release: "2" +# Uncomment/increment every for every rebuild of an Alpine release; +# re-comment/zero for every new Alpine release +#revision: "-0" # AMI name prefix and suffix -ami_name_prefix: "Alpine-" -ami_name_suffix: "-EC2" +ami_name_prefix: "alpine-ami-" +ami_name_suffix: "" # AMI description prefix and suffix ami_desc_prefix: "Alpine Linux " -ami_desc_suffix: " Release with EC2 Optimizations" +ami_desc_suffix: "" -# List of custom lines to add to /etc/apk/repositories. Note that @edge-main, -# @edge-community, and @edge-testing repos have been predefined. +# List of custom lines to add to /etc/apk/repositories add_repos: +# - "@my-repo http://my-repo.tld/path" # List of additional packages to add to the AMI. add_pkgs: +# - package-name -# Additional services to start at the specified level. +# Additional services to start at the specified level add_svcs: # boot: # - service1 @@ -54,7 +56,7 @@ encrypt_ami: "false" ami_access: - "all" -# List of regions to where the AMI should be copied. +# List of regions to where the AMI should be copied deploy_regions: - "us-east-1" - "us-east-2" From cfa0bdebad22490ed08e712238d57d49fb64310a Mon Sep 17 00:00:00 2001 From: tomalok Date: Thu, 7 Feb 2019 17:29:33 -0800 Subject: [PATCH 025/125] Release Alpine Linux 3.9.0 AMIs (#38) * Release Alpine Linux 3.9.0 AMIs * Update README.md and release.yaml with a fresh batch of 3.9.0 AMIs * Append GitHub project link to AMI description * really minor caveat fix --- README.md | 42 +++++++++++++++++++++--------------------- release.yaml | 41 +++++++++++++++++++++-------------------- variables.yaml-default | 2 +- 3 files changed, 43 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 10862f1..7b38ac4 100644 --- a/README.md +++ b/README.md @@ -19,28 +19,28 @@ image. If user data is specified it must be a shell script that begins with `#!`. If a script is provided it will be executed as root after the network is configured. -**NOTE:** *The images listed below are currently very much out of date. We are -working on providing a set of updated 3.9 AMIs for all current AWS regions, and -hope to automate AMI builds and updates to this file and +**NOTE:** *We are working to automate AMI builds and updates to this file and [release.yaml](https://github.com/mcrute/alpine-ec2-ami/blob/master/release.yaml) in the not-too-distant future.* -| Alpine Version | Region Code | AMI ID | -| -------------- | ----------- | ------ | -| 3.7 | ap-southeast-2 | [ami-7628d814](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-7628d814) | -| 3.7 | sa-east-1 | [ami-ae5414c2](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-ae5414c2) | -| 3.7 | us-west-2 | [ami-e474db9c](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-e474db9c) | -| 3.7 | eu-central-1 | [ami-a96ff8c6](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-a96ff8c6) | -| 3.7 | eu-west-2 | [ami-9ea2bbfa](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-9ea2bbfa) | -| 3.7 | ap-south-1 | [ami-29c28846](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-29c28846) | -| 3.7 | eu-west-1 | [ami-66de501f](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-66de501f) | -| 3.7 | us-east-1 | [ami-976020ed](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-976020ed) | -| 3.7 | us-west-1 | [ami-1c393f7c](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-1c393f7c) | -| 3.7 | ap-northeast-2 | [ami-b96ccdd7](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-b96ccdd7) | -| 3.7 | ap-northeast-1 | [ami-361c8850](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-361c8850) | -| 3.7 | us-east-2 | [ami-c487afa1](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-c487afa1) | -| 3.7 | ap-southeast-1 | [ami-25a8c059](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-25a8c059) | -| 3.7 | ca-central-1 | [ami-293d874d](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-293d874d) | +| Alpine Release | Region Code | AMI ID | +| :------------: | ----------- | ------ | +| 3.9.0 | ap-northeast-1 | [ami-025126171658214aa](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-025126171658214aa) | +| 3.9.0 | ap-northeast-2 | [ami-05094dd0e72c458fb](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05094dd0e72c458fb) | +| 3.9.0 | ap-south-1 | [ami-07cb8c31eabcd3b4e](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07cb8c31eabcd3b4e) | +| 3.9.0 | ap-southeast-1 | [ami-0928dec71013505b0](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0928dec71013505b0) | +| 3.9.0 | ap-southeast-2 | [ami-0a5abea120f732aea](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5abea120f732aea) | +| 3.9.0 | ca-central-1 | [ami-08548db765868091d](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08548db765868091d) | +| 3.9.0 | eu-central-1 | [ami-0a42df7e65590651e](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a42df7e65590651e) | +| 3.9.0 | eu-north-1 | [ami-08b5a6088d1592e5b](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b5a6088d1592e5b) | +| 3.9.0 | eu-west-1 | [ami-07bf2c996b3bec293](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bf2c996b3bec293) | +| 3.9.0 | eu-west-2 | [ami-07642a3118c43a4e6](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07642a3118c43a4e6) | +| 3.9.0 | eu-west-3 | [ami-0916d5db3c81d60ce](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0916d5db3c81d60ce) | +| 3.9.0 | sa-east-1 | [ami-0a96fe9195efbba2b](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a96fe9195efbba2b) | +| 3.9.0 | us-east-1 | [ami-00e433019a9c7aa76](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00e433019a9c7aa76) | +| 3.9.0 | us-east-2 | [ami-029e1787b7a57b032](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-029e1787b7a57b032) | +| 3.9.0 | us-west-1 | [ami-0091bd0c0b9ad4b6b](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0091bd0c0b9ad4b6b) | +| 3.9.0 | us-west-2 | [ami-0fa1d403af627f066](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa1d403af627f066) | ## Caveats @@ -59,8 +59,8 @@ its development and thus there are some sharp edges. what was configured during instance launch. User data is supported as long as it's a shell script (starts with #!). See the tiny-ec2-bootstrap README for more details. You can still install cloud-init (from the edge testing - repositories), but we haven't tested whether it will not work correctly for - this AMI. If full cloud-init support is important to you please file a bug + repositories), but we haven't tested whether it will work correctly for this + AMI. If full cloud-init support is important to you please file a bug against this project. - CloudFormation support is still forthcoming. This requires patches and diff --git a/release.yaml b/release.yaml index ed0dac6..505a34d 100644 --- a/release.yaml +++ b/release.yaml @@ -1,21 +1,22 @@ -Alpine-3.7-Hardened-EC2: - description: "Alpine Linux 3.7 Release with Hardened Kernel and EC2 Optimizations" - alpine-release: 3.7 - kernel-flavor: hardened - ami-release-date: "2017-12-25 03:02:00" +alpine-ami-3.9.0-x86_64: + description: "Alpine Linux 3.9.0 x86_64" + alpine-release: 3.9.0 + kernel-flavor: virt + ami-release-date: "2019-02-06 01:42:52" region-identifiers: - #eu-west-3: ami-XXXXXXXX - ap-northeast-1: ami-361c8850 - ap-northeast-2: ami-b96ccdd7 - ap-south-1: ami-29c28846 - ap-southeast-1: ami-25a8c059 - ap-southeast-2: ami-7628d814 - ca-central-1: ami-293d874d - eu-central-1: ami-a96ff8c6 - eu-west-1: ami-66de501f - eu-west-2: ami-9ea2bbfa - sa-east-1: ami-ae5414c2 - us-east-1: ami-976020ed - us-east-2: ami-c487afa1 - us-west-1: ami-1c393f7c - us-west-2: ami-e474db9c + ap-northeast-1: ami-025126171658214aa + ap-northeast-2: ami-05094dd0e72c458fb + ap-south-1: ami-07cb8c31eabcd3b4e + ap-southeast-1: ami-0928dec71013505b0 + ap-southeast-2: ami-0a5abea120f732aea + ca-central-1: ami-08548db765868091d + eu-central-1: ami-0a42df7e65590651e + eu-north-1: ami-08b5a6088d1592e5b + eu-west-1: ami-07bf2c996b3bec293 + eu-west-2: ami-07642a3118c43a4e6 + eu-west-3: ami-0916d5db3c81d60ce + sa-east-1: ami-0a96fe9195efbba2b + us-east-1: ami-00e433019a9c7aa76 + us-east-2: ami-029e1787b7a57b032 + us-west-1: ami-0091bd0c0b9ad4b6b + us-west-2: ami-0fa1d403af627f066 diff --git a/variables.yaml-default b/variables.yaml-default index 10a10a6..61d4b8c 100644 --- a/variables.yaml-default +++ b/variables.yaml-default @@ -28,7 +28,7 @@ ami_name_suffix: "" # AMI description prefix and suffix ami_desc_prefix: "Alpine Linux " -ami_desc_suffix: "" +ami_desc_suffix: " - https://github.com/mcrute/alpine-ec2-ami" # List of custom lines to add to /etc/apk/repositories add_repos: From d92bbfc7c98655640caf5d7a05f64ec4273950e2 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Fri, 15 Feb 2019 18:09:59 -0800 Subject: [PATCH 026/125] fix nvme-ebs-links Ensure that the EBS volume alias matches what we expect it to be. Should fix issue #40. --- nvme/nvme-ebs-links | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nvme/nvme-ebs-links b/nvme/nvme-ebs-links index c197a73..f3e0a0a 100755 --- a/nvme/nvme-ebs-links +++ b/nvme/nvme-ebs-links @@ -7,7 +7,12 @@ case $ACTION in BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') until [ -n "$EBS" ]; do - EBS=$(/usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null | tr -d ' ') + EBS=$( + /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | + dd bs=32 skip=96 count=1 2>/dev/null | + sed -nre '/^(s|xv)d[a-z]{1,2} +$/p' | + tr -d ' ' + ) done EBS=${EBS#/dev/}$PART ln -sf "$MDEV" "${EBS/xvd/sd}" From e65e381b20b855cbd1d9f70adafd09054f9c2154 Mon Sep 17 00:00:00 2001 From: tomalok Date: Mon, 25 Feb 2019 18:09:09 -0800 Subject: [PATCH 027/125] release 3.9.0-1 (#42) Release a revised set of Alpine Linux AMIs, including... * improved nvme-ebs-links mdev script (issue #40) * start haveged at boot runlevel (issue #39) --- README.md | 37 +++++++++++++++++++++---------------- make_ami.sh | 11 ++++++----- release.yaml | 40 ++++++++++++++++++++-------------------- variables.yaml-default | 2 +- 4 files changed, 48 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 7b38ac4..8ad78a1 100644 --- a/README.md +++ b/README.md @@ -25,28 +25,33 @@ in the not-too-distant future.* | Alpine Release | Region Code | AMI ID | | :------------: | ----------- | ------ | -| 3.9.0 | ap-northeast-1 | [ami-025126171658214aa](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-025126171658214aa) | -| 3.9.0 | ap-northeast-2 | [ami-05094dd0e72c458fb](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05094dd0e72c458fb) | -| 3.9.0 | ap-south-1 | [ami-07cb8c31eabcd3b4e](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07cb8c31eabcd3b4e) | -| 3.9.0 | ap-southeast-1 | [ami-0928dec71013505b0](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0928dec71013505b0) | -| 3.9.0 | ap-southeast-2 | [ami-0a5abea120f732aea](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5abea120f732aea) | -| 3.9.0 | ca-central-1 | [ami-08548db765868091d](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08548db765868091d) | -| 3.9.0 | eu-central-1 | [ami-0a42df7e65590651e](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a42df7e65590651e) | -| 3.9.0 | eu-north-1 | [ami-08b5a6088d1592e5b](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b5a6088d1592e5b) | -| 3.9.0 | eu-west-1 | [ami-07bf2c996b3bec293](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bf2c996b3bec293) | -| 3.9.0 | eu-west-2 | [ami-07642a3118c43a4e6](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07642a3118c43a4e6) | -| 3.9.0 | eu-west-3 | [ami-0916d5db3c81d60ce](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0916d5db3c81d60ce) | -| 3.9.0 | sa-east-1 | [ami-0a96fe9195efbba2b](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a96fe9195efbba2b) | -| 3.9.0 | us-east-1 | [ami-00e433019a9c7aa76](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00e433019a9c7aa76) | -| 3.9.0 | us-east-2 | [ami-029e1787b7a57b032](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-029e1787b7a57b032) | -| 3.9.0 | us-west-1 | [ami-0091bd0c0b9ad4b6b](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0091bd0c0b9ad4b6b) | -| 3.9.0 | us-west-2 | [ami-0fa1d403af627f066](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa1d403af627f066) | +| 3.9.0-1 | ap-northeast-1 | [ami-0eaff92f5f149a429](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eaff92f5f149a429) | +| 3.9.0-1 | ap-northeast-2 | [ami-0def256d4730ba94a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0def256d4730ba94a) | +| 3.9.0-1 | ap-south-1 | [ami-026f34bef63412f33](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026f34bef63412f33) | +| 3.9.0-1 | ap-southeast-1 | [ami-04a2ad17b9b13d4ec](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a2ad17b9b13d4ec) | +| 3.9.0-1 | ap-southeast-2 | [ami-03c7885750c554d30](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03c7885750c554d30) | +| 3.9.0-1 | ca-central-1 | [ami-0ef17552c0ecbfc4e](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef17552c0ecbfc4e) | +| 3.9.0-1 | eu-central-1 | [ami-036c913a519569a6d](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-036c913a519569a6d) | +| 3.9.0-1 | eu-north-1 | [ami-0e86b5fc1e6414006](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e86b5fc1e6414006) | +| 3.9.0-1 | eu-west-1 | [ami-069efddebf851614d](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-069efddebf851614d) | +| 3.9.0-1 | eu-west-2 | [ami-0aa8ab64c1c6a2a3a](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0aa8ab64c1c6a2a3a) | +| 3.9.0-1 | eu-west-3 | [ami-00d39f7e016c2dd2b](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00d39f7e016c2dd2b) | +| 3.9.0-1 | sa-east-1 | [ami-028a5b577032629ee](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-028a5b577032629ee) | +| 3.9.0-1 | us-east-1 | [ami-0b62ea2089812c46b](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b62ea2089812c46b) | +| 3.9.0-1 | us-east-2 | [ami-083b8d0f14c76dfd7](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-083b8d0f14c76dfd7) | +| 3.9.0-1 | us-west-1 | [ami-0dd01136582d41914](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd01136582d41914) | +| 3.9.0-1 | us-west-2 | [ami-0efc4434c74bde9fe](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0efc4434c74bde9fe) | ## Caveats This image is being used in production but it's still somewhat early stage in its development and thus there are some sharp edges. +- As of 3.9.0-1, this AMI starts `haveged` at the boot runlevel, to provide + additional initial entropy as discussed in issue #39. In the long term, we + expect the official Alpine Linux kernel configs will be updated to resolve + the situation. + - Only EBS-backed HVM instances are supported. While paravirtualized instances are still available from AWS they are not supported on any of the newer hardware so it seems unlikely that they will be supported going forward. diff --git a/make_ami.sh b/make_ami.sh index 8c00a6c..d6c65f7 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -142,8 +142,9 @@ install_core_packages() { chroot "$target" apk --no-cache add \ linux-virt \ alpine-mirrors \ - nvme-cli \ chrony \ + haveged \ + nvme-cli \ openssh \ sudo \ tiny-ec2-bootstrap \ @@ -240,10 +241,10 @@ enable_services() { local target="$1" local add_svcs="$2" - rc_add "$target" default sshd chronyd networking tiny-ec2-bootstrap - rc_add "$target" sysinit devfs dmesg mdev hwdrivers - rc_add "$target" boot modules hwclock swap hostname sysctl bootmisc syslog acpid - rc_add "$target" shutdown killprocs savecache mount-ro + rc_add "$target" default chronyd networking sshd tiny-ec2-bootstrap + rc_add "$target" sysinit devfs dmesg hwdrivers mdev + rc_add "$target" boot acpid bootmisc haveged hostname hwclock modules swap sysctl syslog + rc_add "$target" shutdown killprocs mount-ro savecache if [ -n "$add_svcs" ]; then local lvl_svcs; for lvl_svcs in $(echo "$add_svcs" | tr : ' '); do diff --git a/release.yaml b/release.yaml index 505a34d..1613db7 100644 --- a/release.yaml +++ b/release.yaml @@ -1,22 +1,22 @@ -alpine-ami-3.9.0-x86_64: - description: "Alpine Linux 3.9.0 x86_64" - alpine-release: 3.9.0 +alpine-ami-3.9.0-1-x86_64: + description: "Alpine Linux 3.9.0-1 x86_64" + alpine-release: 3.9.0-1 kernel-flavor: virt - ami-release-date: "2019-02-06 01:42:52" + ami-release-date: "2019-02-24 21:18:47" region-identifiers: - ap-northeast-1: ami-025126171658214aa - ap-northeast-2: ami-05094dd0e72c458fb - ap-south-1: ami-07cb8c31eabcd3b4e - ap-southeast-1: ami-0928dec71013505b0 - ap-southeast-2: ami-0a5abea120f732aea - ca-central-1: ami-08548db765868091d - eu-central-1: ami-0a42df7e65590651e - eu-north-1: ami-08b5a6088d1592e5b - eu-west-1: ami-07bf2c996b3bec293 - eu-west-2: ami-07642a3118c43a4e6 - eu-west-3: ami-0916d5db3c81d60ce - sa-east-1: ami-0a96fe9195efbba2b - us-east-1: ami-00e433019a9c7aa76 - us-east-2: ami-029e1787b7a57b032 - us-west-1: ami-0091bd0c0b9ad4b6b - us-west-2: ami-0fa1d403af627f066 + ap-northeast-1: ami-0eaff92f5f149a429 + ap-northeast-2: ami-0def256d4730ba94a + ap-south-1: ami-026f34bef63412f33 + ap-southeast-1: ami-04a2ad17b9b13d4ec + ap-southeast-2: ami-03c7885750c554d30 + ca-central-1: ami-0ef17552c0ecbfc4e + eu-central-1: ami-036c913a519569a6d + eu-north-1: ami-0e86b5fc1e6414006 + eu-west-1: ami-069efddebf851614d + eu-west-2: ami-0aa8ab64c1c6a2a3a + eu-west-3: ami-00d39f7e016c2dd2b + sa-east-1: ami-028a5b577032629ee + us-east-1: ami-0b62ea2089812c46b + us-east-2: ami-083b8d0f14c76dfd7 + us-west-1: ami-0dd01136582d41914 + us-west-2: ami-0efc4434c74bde9fe diff --git a/variables.yaml-default b/variables.yaml-default index 61d4b8c..817efc6 100644 --- a/variables.yaml-default +++ b/variables.yaml-default @@ -20,7 +20,7 @@ public_ip: "" # Uncomment/increment every for every rebuild of an Alpine release; # re-comment/zero for every new Alpine release -#revision: "-0" +revision: "-1" # AMI name prefix and suffix ami_name_prefix: "alpine-ami-" From 00aec03281c9e3f4c4980a2e03455590e2d1a12b Mon Sep 17 00:00:00 2001 From: tomalok Date: Sat, 2 Mar 2019 17:32:15 -0800 Subject: [PATCH 028/125] Alpine 3.9.1 (#43) --- README.md | 35 +++++++++++++++++------------------ alpine-ami.yaml | 2 +- release.yaml | 40 ++++++++++++++++++++-------------------- variables.yaml-default | 2 +- 4 files changed, 39 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 8ad78a1..584ef66 100644 --- a/README.md +++ b/README.md @@ -25,22 +25,22 @@ in the not-too-distant future.* | Alpine Release | Region Code | AMI ID | | :------------: | ----------- | ------ | -| 3.9.0-1 | ap-northeast-1 | [ami-0eaff92f5f149a429](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eaff92f5f149a429) | -| 3.9.0-1 | ap-northeast-2 | [ami-0def256d4730ba94a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0def256d4730ba94a) | -| 3.9.0-1 | ap-south-1 | [ami-026f34bef63412f33](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026f34bef63412f33) | -| 3.9.0-1 | ap-southeast-1 | [ami-04a2ad17b9b13d4ec](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a2ad17b9b13d4ec) | -| 3.9.0-1 | ap-southeast-2 | [ami-03c7885750c554d30](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03c7885750c554d30) | -| 3.9.0-1 | ca-central-1 | [ami-0ef17552c0ecbfc4e](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef17552c0ecbfc4e) | -| 3.9.0-1 | eu-central-1 | [ami-036c913a519569a6d](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-036c913a519569a6d) | -| 3.9.0-1 | eu-north-1 | [ami-0e86b5fc1e6414006](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e86b5fc1e6414006) | -| 3.9.0-1 | eu-west-1 | [ami-069efddebf851614d](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-069efddebf851614d) | -| 3.9.0-1 | eu-west-2 | [ami-0aa8ab64c1c6a2a3a](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0aa8ab64c1c6a2a3a) | -| 3.9.0-1 | eu-west-3 | [ami-00d39f7e016c2dd2b](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00d39f7e016c2dd2b) | -| 3.9.0-1 | sa-east-1 | [ami-028a5b577032629ee](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-028a5b577032629ee) | -| 3.9.0-1 | us-east-1 | [ami-0b62ea2089812c46b](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b62ea2089812c46b) | -| 3.9.0-1 | us-east-2 | [ami-083b8d0f14c76dfd7](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-083b8d0f14c76dfd7) | -| 3.9.0-1 | us-west-1 | [ami-0dd01136582d41914](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd01136582d41914) | -| 3.9.0-1 | us-west-2 | [ami-0efc4434c74bde9fe](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0efc4434c74bde9fe) | +| 3.9.1 | ap-northeast-1 | [ami-0ea7c699bf8c8dbdb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea7c699bf8c8dbdb) | +| 3.9.1 | ap-northeast-2 | [ami-073bfec8980f57d41](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-073bfec8980f57d41) | +| 3.9.1 | ap-south-1 | [ami-0c305b2e446b07208](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c305b2e446b07208) | +| 3.9.1 | ap-southeast-1 | [ami-054428bd9a4f1da32](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054428bd9a4f1da32) | +| 3.9.1 | ap-southeast-2 | [ami-0162473012357913f](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0162473012357913f) | +| 3.9.1 | ca-central-1 | [ami-034123f6e4bf47ebe](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034123f6e4bf47ebe) | +| 3.9.1 | eu-central-1 | [ami-041e9f940aa47cc57](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-041e9f940aa47cc57) | +| 3.9.1 | eu-north-1 | [ami-02c9b9573dd51be66](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02c9b9573dd51be66) | +| 3.9.1 | eu-west-1 | [ami-08189341fffe63299](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08189341fffe63299) | +| 3.9.1 | eu-west-2 | [ami-0f77a3082ff94976e](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f77a3082ff94976e) | +| 3.9.1 | eu-west-3 | [ami-01a9f762e03dc71c4](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01a9f762e03dc71c4) | +| 3.9.1 | sa-east-1 | [ami-074d84594f4b09480](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-074d84594f4b09480) | +| 3.9.1 | us-east-1 | [ami-0a788795af2d924bd](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a788795af2d924bd) | +| 3.9.1 | us-east-2 | [ami-09056926c45de21cd](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09056926c45de21cd) | +| 3.9.1 | us-west-1 | [ami-0daf0dfadc0840523](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0daf0dfadc0840523) | +| 3.9.1 | us-west-2 | [ami-0829c32e97b009f6f](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0829c32e97b009f6f) | ## Caveats @@ -49,8 +49,7 @@ its development and thus there are some sharp edges. - As of 3.9.0-1, this AMI starts `haveged` at the boot runlevel, to provide additional initial entropy as discussed in issue #39. In the long term, we - expect the official Alpine Linux kernel configs will be updated to resolve - the situation. + hope to find an alternative solution. - Only EBS-backed HVM instances are supported. While paravirtualized instances are still available from AWS they are not supported on any of the newer diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 71f26fc..bb16cc2 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -6,7 +6,7 @@ variables: # NOTE: Changing arch/version/release may require modifying 'make_ami.sh'. arch: x86_64 version: "3.9" - release: "3.9.0" + release: "3.9.1" revision: "" builders: diff --git a/release.yaml b/release.yaml index 1613db7..213713d 100644 --- a/release.yaml +++ b/release.yaml @@ -1,22 +1,22 @@ -alpine-ami-3.9.0-1-x86_64: - description: "Alpine Linux 3.9.0-1 x86_64" - alpine-release: 3.9.0-1 +alpine-ami-3.9.1-x86_64: + description: "Alpine Linux 3.9.1 x86_64" + alpine-release: 3.9.1 kernel-flavor: virt - ami-release-date: "2019-02-24 21:18:47" + ami-release-date: "2019-03-03 01:03:41" region-identifiers: - ap-northeast-1: ami-0eaff92f5f149a429 - ap-northeast-2: ami-0def256d4730ba94a - ap-south-1: ami-026f34bef63412f33 - ap-southeast-1: ami-04a2ad17b9b13d4ec - ap-southeast-2: ami-03c7885750c554d30 - ca-central-1: ami-0ef17552c0ecbfc4e - eu-central-1: ami-036c913a519569a6d - eu-north-1: ami-0e86b5fc1e6414006 - eu-west-1: ami-069efddebf851614d - eu-west-2: ami-0aa8ab64c1c6a2a3a - eu-west-3: ami-00d39f7e016c2dd2b - sa-east-1: ami-028a5b577032629ee - us-east-1: ami-0b62ea2089812c46b - us-east-2: ami-083b8d0f14c76dfd7 - us-west-1: ami-0dd01136582d41914 - us-west-2: ami-0efc4434c74bde9fe + ap-northeast-1: ami-0ea7c699bf8c8dbdb + ap-northeast-2: ami-073bfec8980f57d41 + ap-south-1: ami-0c305b2e446b07208 + ap-southeast-1: ami-054428bd9a4f1da32 + ap-southeast-2: ami-0162473012357913f + ca-central-1: ami-034123f6e4bf47ebe + eu-central-1: ami-041e9f940aa47cc57 + eu-north-1: ami-02c9b9573dd51be66 + eu-west-1: ami-08189341fffe63299 + eu-west-2: ami-0f77a3082ff94976e + eu-west-3: ami-01a9f762e03dc71c4 + sa-east-1: ami-074d84594f4b09480 + us-east-1: ami-0a788795af2d924bd + us-east-2: ami-09056926c45de21cd + us-west-1: ami-0daf0dfadc0840523 + us-west-2: ami-0829c32e97b009f6f diff --git a/variables.yaml-default b/variables.yaml-default index 817efc6..0cd3cc2 100644 --- a/variables.yaml-default +++ b/variables.yaml-default @@ -20,7 +20,7 @@ public_ip: "" # Uncomment/increment every for every rebuild of an Alpine release; # re-comment/zero for every new Alpine release -revision: "-1" +#revision: "-1" # AMI name prefix and suffix ami_name_prefix: "alpine-ami-" From 052cab891417feb432151f5733c507578c72929f Mon Sep 17 00:00:00 2001 From: tomalok Date: Sun, 3 Mar 2019 21:57:28 -0800 Subject: [PATCH 029/125] Fix nvme-ebs-links (issue #44) (#45) * EBS may prepend '/dev/' in front of the EBS alias, adjust the sanity sed to account for this. * Attempt to get a sane EBS alias up to 50x, sleep 1/10s in between (max duration ~5 secs). * Log when we add/fail-to-add/remove EBS alias symlinks. --- nvme/nvme-ebs-links | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/nvme/nvme-ebs-links b/nvme/nvme-ebs-links index f3e0a0a..f2c470b 100755 --- a/nvme/nvme-ebs-links +++ b/nvme/nvme-ebs-links @@ -2,26 +2,42 @@ [ -x /usr/sbin/nvme ] || exit +PROC="$(basename $0)[$$]" + +log() { + FACILITY="kern.$1" + shift + logger -s -p "$FACILITY" -t "$PROC" "$@" +} + +raw_ebs_alias() { + /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null +} + case $ACTION in add|"") BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') + MAXTRY=50 + TRY=0 until [ -n "$EBS" ]; do - EBS=$( - /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | - dd bs=32 skip=96 count=1 2>/dev/null | - sed -nre '/^(s|xv)d[a-z]{1,2} +$/p' | - tr -d ' ' - ) + EBS=$(raw_ebs_alias | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' | tr -d ' ') + [ -n "$EBS" ] && break + TRY=$((TRY + 1)) + if [ $TRY -eq $MAXTRY ]; then + log err "Failed to get EBS volume alias for $MDEV after $MAXTRY attempts ($(raw_ebs_alias))" + exit 1 + fi + sleep 0.1 done EBS=${EBS#/dev/}$PART - ln -sf "$MDEV" "${EBS/xvd/sd}" - ln -sf "$MDEV" "${EBS/sd/xvd}" + ln -sf "$MDEV" "${EBS/xvd/sd}" && log notice "Added ${EBS/xvd/sd} symlink for $MDEV" + ln -sf "$MDEV" "${EBS/sd/xvd}" && log notice "Added ${EBS/sd/xvd} symlink for $MDEV" ;; remove) for TARGET in sd* xvd* do - [ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" + [ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV" done ;; esac From 15dc2ba223fe539c7e5088df9dca4e8227cf6089 Mon Sep 17 00:00:00 2001 From: tomalok Date: Mon, 4 Mar 2019 18:14:36 -0800 Subject: [PATCH 030/125] Alpine release 3.9.2 (#46) --- README.md | 32 ++++++++++++++++---------------- alpine-ami.yaml | 2 +- release.yaml | 38 +++++++++++++++++++------------------- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 584ef66..f378b0d 100644 --- a/README.md +++ b/README.md @@ -25,22 +25,22 @@ in the not-too-distant future.* | Alpine Release | Region Code | AMI ID | | :------------: | ----------- | ------ | -| 3.9.1 | ap-northeast-1 | [ami-0ea7c699bf8c8dbdb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea7c699bf8c8dbdb) | -| 3.9.1 | ap-northeast-2 | [ami-073bfec8980f57d41](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-073bfec8980f57d41) | -| 3.9.1 | ap-south-1 | [ami-0c305b2e446b07208](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c305b2e446b07208) | -| 3.9.1 | ap-southeast-1 | [ami-054428bd9a4f1da32](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054428bd9a4f1da32) | -| 3.9.1 | ap-southeast-2 | [ami-0162473012357913f](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0162473012357913f) | -| 3.9.1 | ca-central-1 | [ami-034123f6e4bf47ebe](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034123f6e4bf47ebe) | -| 3.9.1 | eu-central-1 | [ami-041e9f940aa47cc57](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-041e9f940aa47cc57) | -| 3.9.1 | eu-north-1 | [ami-02c9b9573dd51be66](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02c9b9573dd51be66) | -| 3.9.1 | eu-west-1 | [ami-08189341fffe63299](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08189341fffe63299) | -| 3.9.1 | eu-west-2 | [ami-0f77a3082ff94976e](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f77a3082ff94976e) | -| 3.9.1 | eu-west-3 | [ami-01a9f762e03dc71c4](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01a9f762e03dc71c4) | -| 3.9.1 | sa-east-1 | [ami-074d84594f4b09480](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-074d84594f4b09480) | -| 3.9.1 | us-east-1 | [ami-0a788795af2d924bd](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a788795af2d924bd) | -| 3.9.1 | us-east-2 | [ami-09056926c45de21cd](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09056926c45de21cd) | -| 3.9.1 | us-west-1 | [ami-0daf0dfadc0840523](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0daf0dfadc0840523) | -| 3.9.1 | us-west-2 | [ami-0829c32e97b009f6f](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0829c32e97b009f6f) | +| 3.9.2 | ap-northeast-1 | [ami-09d219b1c464db917](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09d219b1c464db917) | +| 3.9.2 | ap-northeast-2 | [ami-043701e133b99f4c4](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-043701e133b99f4c4) | +| 3.9.2 | ap-south-1 | [ami-006cb3cc1e86815e8](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-006cb3cc1e86815e8) | +| 3.9.2 | ap-southeast-1 | [ami-0a5d51100fbad6534](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5d51100fbad6534) | +| 3.9.2 | ap-southeast-2 | [ami-082a9d093a693e412](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-082a9d093a693e412) | +| 3.9.2 | ca-central-1 | [ami-0ec17b6f3076af75c](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ec17b6f3076af75c) | +| 3.9.2 | eu-central-1 | [ami-0cb14722a657df41b](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb14722a657df41b) | +| 3.9.2 | eu-north-1 | [ami-0ab528159f4fdc29f](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ab528159f4fdc29f) | +| 3.9.2 | eu-west-1 | [ami-09411a0f755d83b85](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09411a0f755d83b85) | +| 3.9.2 | eu-west-2 | [ami-0d41697972c9b8bc0](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d41697972c9b8bc0) | +| 3.9.2 | eu-west-3 | [ami-01d74bb07689bda40](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01d74bb07689bda40) | +| 3.9.2 | sa-east-1 | [ami-02f2c79c63d1f4a41](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02f2c79c63d1f4a41) | +| 3.9.2 | us-east-1 | [ami-0fe2769f64d520d1c](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe2769f64d520d1c) | +| 3.9.2 | us-east-2 | [ami-0065dce2cc30e41f5](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0065dce2cc30e41f5) | +| 3.9.2 | us-west-1 | [ami-0cb6df99641faedde](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb6df99641faedde) | +| 3.9.2 | us-west-2 | [ami-0d41eeb15d6f487e4](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d41eeb15d6f487e4) | ## Caveats diff --git a/alpine-ami.yaml b/alpine-ami.yaml index bb16cc2..fb56e47 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -6,7 +6,7 @@ variables: # NOTE: Changing arch/version/release may require modifying 'make_ami.sh'. arch: x86_64 version: "3.9" - release: "3.9.1" + release: "3.9.2" revision: "" builders: diff --git a/release.yaml b/release.yaml index 213713d..52f0b2c 100644 --- a/release.yaml +++ b/release.yaml @@ -1,22 +1,22 @@ -alpine-ami-3.9.1-x86_64: - description: "Alpine Linux 3.9.1 x86_64" - alpine-release: 3.9.1 +alpine-ami-3.9.2-x86_64: + description: "Alpine Linux 3.9.2 x86_64" + alpine-release: 3.9.2 kernel-flavor: virt ami-release-date: "2019-03-03 01:03:41" region-identifiers: - ap-northeast-1: ami-0ea7c699bf8c8dbdb - ap-northeast-2: ami-073bfec8980f57d41 - ap-south-1: ami-0c305b2e446b07208 - ap-southeast-1: ami-054428bd9a4f1da32 - ap-southeast-2: ami-0162473012357913f - ca-central-1: ami-034123f6e4bf47ebe - eu-central-1: ami-041e9f940aa47cc57 - eu-north-1: ami-02c9b9573dd51be66 - eu-west-1: ami-08189341fffe63299 - eu-west-2: ami-0f77a3082ff94976e - eu-west-3: ami-01a9f762e03dc71c4 - sa-east-1: ami-074d84594f4b09480 - us-east-1: ami-0a788795af2d924bd - us-east-2: ami-09056926c45de21cd - us-west-1: ami-0daf0dfadc0840523 - us-west-2: ami-0829c32e97b009f6f + ap-northeast-1: ami-09d219b1c464db917 + ap-northeast-2: ami-043701e133b99f4c4 + ap-south-1: ami-006cb3cc1e86815e8 + ap-southeast-1: ami-0a5d51100fbad6534 + ap-southeast-2: ami-082a9d093a693e412 + ca-central-1: ami-0ec17b6f3076af75c + eu-central-1: ami-0cb14722a657df41b + eu-north-1: ami-0ab528159f4fdc29f + eu-west-1: ami-09411a0f755d83b85 + eu-west-2: ami-0d41697972c9b8bc0 + eu-west-3: ami-01d74bb07689bda40 + sa-east-1: ami-02f2c79c63d1f4a41 + us-east-1: ami-0fe2769f64d520d1c + us-east-2: ami-0065dce2cc30e41f5 + us-west-1: ami-0cb6df99641faedde + us-west-2: ami-0d41eeb15d6f487e4 From 24144391d61723da5217539f7b22b5ea37b959f0 Mon Sep 17 00:00:00 2001 From: tomalok Date: Tue, 9 Apr 2019 07:31:03 -0700 Subject: [PATCH 031/125] * Alpine release 3.9.3 (#47) * take care of YAML.load(input) deprecation, per https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation --- Makefile | 2 +- README.md | 32 ++++++++++++++++---------------- alpine-ami.yaml | 2 +- gen-readme.py.in | 2 +- release.yaml | 38 +++++++++++++++++++------------------- scrub-old-amis.py.in | 2 +- 6 files changed, 39 insertions(+), 39 deletions(-) diff --git a/Makefile b/Makefile index bd8d329..a624e9e 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ build/convert: # which only supports JSON @echo "#!`pwd`/.py3/bin/python" > build/convert @echo "import yaml, json, sys" >> build/convert - @echo "y = yaml.load(open(sys.argv[1]))" >> build/convert + @echo "y = yaml.full_load(open(sys.argv[1]))" >> build/convert @echo "for k in ['ami_access','deploy_regions','add_repos','add_pkgs','add_svcs']:" >> build/convert @echo " if k in y and isinstance(y[k], list):" >> build/convert @echo " y[k] = ','.join(str(x) for x in y[k])" >> build/convert diff --git a/README.md b/README.md index f378b0d..0e3ae25 100644 --- a/README.md +++ b/README.md @@ -25,22 +25,22 @@ in the not-too-distant future.* | Alpine Release | Region Code | AMI ID | | :------------: | ----------- | ------ | -| 3.9.2 | ap-northeast-1 | [ami-09d219b1c464db917](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09d219b1c464db917) | -| 3.9.2 | ap-northeast-2 | [ami-043701e133b99f4c4](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-043701e133b99f4c4) | -| 3.9.2 | ap-south-1 | [ami-006cb3cc1e86815e8](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-006cb3cc1e86815e8) | -| 3.9.2 | ap-southeast-1 | [ami-0a5d51100fbad6534](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5d51100fbad6534) | -| 3.9.2 | ap-southeast-2 | [ami-082a9d093a693e412](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-082a9d093a693e412) | -| 3.9.2 | ca-central-1 | [ami-0ec17b6f3076af75c](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ec17b6f3076af75c) | -| 3.9.2 | eu-central-1 | [ami-0cb14722a657df41b](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb14722a657df41b) | -| 3.9.2 | eu-north-1 | [ami-0ab528159f4fdc29f](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ab528159f4fdc29f) | -| 3.9.2 | eu-west-1 | [ami-09411a0f755d83b85](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09411a0f755d83b85) | -| 3.9.2 | eu-west-2 | [ami-0d41697972c9b8bc0](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d41697972c9b8bc0) | -| 3.9.2 | eu-west-3 | [ami-01d74bb07689bda40](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01d74bb07689bda40) | -| 3.9.2 | sa-east-1 | [ami-02f2c79c63d1f4a41](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02f2c79c63d1f4a41) | -| 3.9.2 | us-east-1 | [ami-0fe2769f64d520d1c](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe2769f64d520d1c) | -| 3.9.2 | us-east-2 | [ami-0065dce2cc30e41f5](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0065dce2cc30e41f5) | -| 3.9.2 | us-west-1 | [ami-0cb6df99641faedde](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb6df99641faedde) | -| 3.9.2 | us-west-2 | [ami-0d41eeb15d6f487e4](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d41eeb15d6f487e4) | +| 3.9.3 | ap-northeast-1 | [ami-001e74131496d0212](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-001e74131496d0212) | +| 3.9.3 | ap-northeast-2 | [ami-09a26b03424d75667](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09a26b03424d75667) | +| 3.9.3 | ap-south-1 | [ami-03534f64f8b87aafc](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03534f64f8b87aafc) | +| 3.9.3 | ap-southeast-1 | [ami-0d5f2950efcd55b0e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5f2950efcd55b0e) | +| 3.9.3 | ap-southeast-2 | [ami-0660edcba4ba7c8a0](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0660edcba4ba7c8a0) | +| 3.9.3 | ca-central-1 | [ami-0bf4ea1f0f86283bb](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf4ea1f0f86283bb) | +| 3.9.3 | eu-central-1 | [ami-060d9bbde8d5047e8](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-060d9bbde8d5047e8) | +| 3.9.3 | eu-north-1 | [ami-0a5284750fcf11d18](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5284750fcf11d18) | +| 3.9.3 | eu-west-1 | [ami-0af60b964eb2f09d3](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0af60b964eb2f09d3) | +| 3.9.3 | eu-west-2 | [ami-097405edd3790cf8b](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-097405edd3790cf8b) | +| 3.9.3 | eu-west-3 | [ami-0078916a37514bb9a](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0078916a37514bb9a) | +| 3.9.3 | sa-east-1 | [ami-09e0025e60328ea6d](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e0025e60328ea6d) | +| 3.9.3 | us-east-1 | [ami-05c8c48601c2303af](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05c8c48601c2303af) | +| 3.9.3 | us-east-2 | [ami-064d64386a89de1e6](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-064d64386a89de1e6) | +| 3.9.3 | us-west-1 | [ami-04a4711d62db12ba0](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a4711d62db12ba0) | +| 3.9.3 | us-west-2 | [ami-0ff56870cf29d4f02](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ff56870cf29d4f02) | ## Caveats diff --git a/alpine-ami.yaml b/alpine-ami.yaml index fb56e47..1505055 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -6,7 +6,7 @@ variables: # NOTE: Changing arch/version/release may require modifying 'make_ami.sh'. arch: x86_64 version: "3.9" - release: "3.9.2" + release: "3.9.3" revision: "" builders: diff --git a/gen-readme.py.in b/gen-readme.py.in index 5ffd4db..84e6ed4 100644 --- a/gen-readme.py.in +++ b/gen-readme.py.in @@ -7,7 +7,7 @@ ROW_TEMPLATE = "| {release} | {region} | [{ami}]({uri}) |" with open("release.yaml") as fp: - releases = yaml.load(fp) + releases = yaml.full_load(fp) for metadata in releases.values(): release = str(metadata["alpine-release"]) diff --git a/release.yaml b/release.yaml index 52f0b2c..f97beb3 100644 --- a/release.yaml +++ b/release.yaml @@ -1,22 +1,22 @@ -alpine-ami-3.9.2-x86_64: - description: "Alpine Linux 3.9.2 x86_64" - alpine-release: 3.9.2 +alpine-ami-3.9.3-x86_64: + description: "Alpine Linux 3.9.3 x86_64" + alpine-release: 3.9.3 kernel-flavor: virt ami-release-date: "2019-03-03 01:03:41" region-identifiers: - ap-northeast-1: ami-09d219b1c464db917 - ap-northeast-2: ami-043701e133b99f4c4 - ap-south-1: ami-006cb3cc1e86815e8 - ap-southeast-1: ami-0a5d51100fbad6534 - ap-southeast-2: ami-082a9d093a693e412 - ca-central-1: ami-0ec17b6f3076af75c - eu-central-1: ami-0cb14722a657df41b - eu-north-1: ami-0ab528159f4fdc29f - eu-west-1: ami-09411a0f755d83b85 - eu-west-2: ami-0d41697972c9b8bc0 - eu-west-3: ami-01d74bb07689bda40 - sa-east-1: ami-02f2c79c63d1f4a41 - us-east-1: ami-0fe2769f64d520d1c - us-east-2: ami-0065dce2cc30e41f5 - us-west-1: ami-0cb6df99641faedde - us-west-2: ami-0d41eeb15d6f487e4 + ap-northeast-1: ami-001e74131496d0212 + ap-northeast-2: ami-09a26b03424d75667 + ap-south-1: ami-03534f64f8b87aafc + ap-southeast-1: ami-0d5f2950efcd55b0e + ap-southeast-2: ami-0660edcba4ba7c8a0 + ca-central-1: ami-0bf4ea1f0f86283bb + eu-central-1: ami-060d9bbde8d5047e8 + eu-north-1: ami-0a5284750fcf11d18 + eu-west-1: ami-0af60b964eb2f09d3 + eu-west-2: ami-097405edd3790cf8b + eu-west-3: ami-0078916a37514bb9a + sa-east-1: ami-09e0025e60328ea6d + us-east-1: ami-05c8c48601c2303af + us-east-2: ami-064d64386a89de1e6 + us-west-1: ami-04a4711d62db12ba0 + us-west-2: ami-0ff56870cf29d4f02 diff --git a/scrub-old-amis.py.in b/scrub-old-amis.py.in index 2cbbcf8..34d7be3 100644 --- a/scrub-old-amis.py.in +++ b/scrub-old-amis.py.in @@ -11,7 +11,7 @@ AMI_RE = re.compile("^Alpine-(\d+\.\d+)(?:-r(\d+))?-Hardened-EC2") # Load current AMI version from config with open("alpine-ami.yaml") as fp: - ami_cfg = yaml.load(fp)["variables"] + ami_cfg = yaml.full_load(fp)["variables"] current = (float(ami_cfg["alpine_release"]), int(ami_cfg["ami_release"])) From 396bb8ab867d46217c943c0387979e862b9a05d5 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 27 May 2019 22:27:55 -0700 Subject: [PATCH 032/125] Build Profiles and 3.9.4 * Build Profiles (completion of PR #49) + auto-updates version profile when new release detected + updates releases/.yaml after successful builds * Prune AMIs (in AWS and in releases/.yaml + 'revision' - keep latest revision per release + 'release' - keep latest release per version + 'version' - remove end-of-life versions * releases/README.md updater script * README overhaul + Pre-built AMIs --> releases/README.md + profiles/README.md for profile configuration details + main README.md overhauled to go over how to build and manage custom AMIs --- .gitignore | 17 +- LICENSE.txt | 2 +- Makefile | 67 ++-- README.md | 163 ++++++---- alpine-ami.yaml | 70 ---- gen-readme.py.in | 17 - make_ami.sh | 368 ---------------------- packer.conf | 108 +++++++ profiles/README.md | 157 +++++++++ profiles/alpine.conf | 47 +++ profiles/arch/aarch64 | 1 + profiles/arch/aarch64-1 | 10 + profiles/arch/x86_64 | 1 + profiles/arch/x86_64-1 | 9 + profiles/base/1 | 87 +++++ profiles/base/current | 1 + profiles/test.conf | 31 ++ profiles/version/3.9 | 14 + profiles/version/current | 1 + profiles/version/edge | 18 ++ release.yaml | 22 -- releases/README.md | 77 +++++ releases/alpine.yaml | 58 ++++ scripts/gen-release-readme.py.in | 115 +++++++ scripts/make-amis | 61 ++++ {nvme => scripts/nvme}/nvme-ebs-links | 15 +- {nvme => scripts/nvme}/nvme-ebs-mdev.conf | 0 scripts/prune-amis.py.in | 133 ++++++++ scripts/resolve-profile.py.in | 105 ++++++ scripts/setup-ami | 344 ++++++++++++++++++++ scripts/update-release.py.in | 62 ++++ scrub-old-amis.py.in | 72 ----- variables.yaml-default | 77 ----- 33 files changed, 1595 insertions(+), 735 deletions(-) delete mode 100644 alpine-ami.yaml delete mode 100644 gen-readme.py.in delete mode 100755 make_ami.sh create mode 100644 packer.conf create mode 100644 profiles/README.md create mode 100644 profiles/alpine.conf create mode 120000 profiles/arch/aarch64 create mode 100644 profiles/arch/aarch64-1 create mode 120000 profiles/arch/x86_64 create mode 100644 profiles/arch/x86_64-1 create mode 100644 profiles/base/1 create mode 120000 profiles/base/current create mode 100644 profiles/test.conf create mode 100644 profiles/version/3.9 create mode 120000 profiles/version/current create mode 100644 profiles/version/edge delete mode 100644 release.yaml create mode 100644 releases/README.md create mode 100644 releases/alpine.yaml create mode 100644 scripts/gen-release-readme.py.in create mode 100755 scripts/make-amis rename {nvme => scripts/nvme}/nvme-ebs-links (56%) rename {nvme => scripts/nvme}/nvme-ebs-mdev.conf (100%) create mode 100644 scripts/prune-amis.py.in create mode 100644 scripts/resolve-profile.py.in create mode 100755 scripts/setup-ami create mode 100644 scripts/update-release.py.in delete mode 100644 scrub-old-amis.py.in delete mode 100644 variables.yaml-default diff --git a/.gitignore b/.gitignore index efc91a3..89f22ab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,15 @@ **/*~ +**/*.bak **/*.swp /build/ -/.py3/ -/variables.yaml -/variables.yaml_* -/scrub-old-amis.py -/gen-readme.py +/profiles/* +!/profiles/README.md +!/profiles/base/ +!/profiles/arch/ +!/profiles/version/ +!/profiles/alpine.conf +!/profiles/example.conf +!/profiles/test.conf +/releases/* +!/releases/README.md +!/releases/alpine.yaml diff --git a/LICENSE.txt b/LICENSE.txt index 736d3fe..bb205ac 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2017 Michael Crute +Copyright (c) 2017-2019 Michael Crute, Jake Buchholz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/Makefile b/Makefile index a624e9e..626f6c8 100644 --- a/Makefile +++ b/Makefile @@ -1,44 +1,43 @@ -.PHONY: ami +# vim: ts=8 noet: -ami: convert - packer build -var-file=build/variables.json build/alpine-ami.json +ALL_SCRIPTS := $(wildcard scripts/*) +CORE_PROFILES := $(wildcard profiles/*/*) +TARGET_PROFILES := $(wildcard profiles/*.conf) +PROFILE := +BUILD := +BUILDS := $(BUILD) +LEVEL := -edge: convert - @echo '{ "version": "edge", "release": "edge", "revision": "'-`date +%Y%m%d%H%M%S`'" }' > build/edge.json - packer build -var-file=build/variables.json -var-file=build/edge.json build/alpine-ami.json +# by default, use the 'packer' in the path +PACKER := packer +export PACKER -convert: build/convert - [ -f variables.yaml ] || cp variables.yaml-default variables.yaml - build/convert variables.yaml > build/variables.json - build/convert alpine-ami.yaml > build/alpine-ami.json +.PHONY: amis prune release-readme clean -build/convert: - [ -d ".py3" ] || python3 -m venv .py3 - .py3/bin/pip install pyyaml boto3 +amis: build build/packer.json build/profile/$(PROFILE) build/update-release.py + build/make-amis $(PROFILE) $(BUILDS) - [ -d "build" ] || mkdir build +prune: build build/prune-amis.py + build/prune-amis.py $(LEVEL) $(PROFILE) $(BUILD) - # Make stupid simple little YAML/JSON converter so we can maintain our - # packer configs in a sane format that allows comments but also use packer - # which only supports JSON - @echo "#!`pwd`/.py3/bin/python" > build/convert - @echo "import yaml, json, sys" >> build/convert - @echo "y = yaml.full_load(open(sys.argv[1]))" >> build/convert - @echo "for k in ['ami_access','deploy_regions','add_repos','add_pkgs','add_svcs']:" >> build/convert - @echo " if k in y and isinstance(y[k], list):" >> build/convert - @echo " y[k] = ','.join(str(x) for x in y[k])" >> build/convert - @echo " if k in y and isinstance(y[k], dict):" >> build/convert - @echo " y[k] = ':'.join(str(l) + '=' + ','.join(str(s) for s in ss) for l, ss in y[k].items())" >> build/convert - @echo "json.dump(y, sys.stdout, indent=4, separators=(',', ': '))" >> build/convert - @chmod +x build/convert +release-readme: build build/gen-release-readme.py + build/gen-release-readme.py $(PROFILE) -%.py: %.py.in - sed "s|@PYTHON@|#!`pwd`/.py3/bin/python|" $< > $@ +build: $(SCRIPTS) + [ -d build/profile ] || mkdir -p build/profile + python3 -m venv build/.py3 + build/.py3/bin/pip install pyhocon pyyaml boto3 + (cd build; for i in $(ALL_SCRIPTS); do ln -sf ../$$i .; done) + +build/packer.json: build packer.conf + build/.py3/bin/pyhocon -i packer.conf -f json > build/packer.json + +build/profile/$(PROFILE): build build/resolve-profile.py $(CORE_PROFILES) $(TARGET_PROFILES) + build/resolve-profile.py $(PROFILE) + +%.py: %.py.in build + sed "s|@PYTHON@|#!`pwd`/build/.py3/bin/python|" $< > $@ chmod +x $@ -.PHONY: clean clean: - rm -rf build .py3 scrub-old-amis.py gen-readme.py - -distclean: clean - rm -f variables.yaml + rm -rf build diff --git a/README.md b/README.md index 0e3ae25..a08da13 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,111 @@ -# Alpine Linux EC2 AMI Build +# Alpine Linux EC2 AMI Builder -**NOTE: This is not an official Amazon or AWS provided image. This is -community built and supported.** +**NOTE: This is not an official AWS or Alpine project. This is community built +and supported.** -This repository contains a packer file and a script to create an EC2 AMI -containing Alpine Linux. The AMI is designed to work with most EC2 features -such as Elastic Network Adapters and NVME EBS volumes by default. If anything -is missing please report a bug. +## Pre-Built AMIs -This image can be launched on any modern x86_64 instance type, including T3, -M5, C5, I3, R5, P3, X1, X1e, D2, Z1d. Other instances may also work but have -not been tested. If you find an issue with instance support for any current -generation instance please file a bug against this project. +***To get started with one of our pre-built minimalist AMIs, please refer to the +[README](releases/README.md) in the [releases](releases) subdirectory.*** -To get started use one of the AMIs below. The default user is `alpine` and -will be configured to use whatever SSH keys you chose when you launched the -image. If user data is specified it must be a shell script that begins with -`#!`. If a script is provided it will be executed as root after the network is -configured. +## Custom AMIs -**NOTE:** *We are working to automate AMI builds and updates to this file and -[release.yaml](https://github.com/mcrute/alpine-ec2-ami/blob/master/release.yaml) -in the not-too-distant future.* +Using the scripts and configuration in this project, you can build your own +custom Alpine Linux AMIs. If you experience any problems building custom AMIs, +please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues) and +include as much detailed information as possible. -| Alpine Release | Region Code | AMI ID | -| :------------: | ----------- | ------ | -| 3.9.3 | ap-northeast-1 | [ami-001e74131496d0212](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-001e74131496d0212) | -| 3.9.3 | ap-northeast-2 | [ami-09a26b03424d75667](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09a26b03424d75667) | -| 3.9.3 | ap-south-1 | [ami-03534f64f8b87aafc](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03534f64f8b87aafc) | -| 3.9.3 | ap-southeast-1 | [ami-0d5f2950efcd55b0e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5f2950efcd55b0e) | -| 3.9.3 | ap-southeast-2 | [ami-0660edcba4ba7c8a0](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0660edcba4ba7c8a0) | -| 3.9.3 | ca-central-1 | [ami-0bf4ea1f0f86283bb](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf4ea1f0f86283bb) | -| 3.9.3 | eu-central-1 | [ami-060d9bbde8d5047e8](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-060d9bbde8d5047e8) | -| 3.9.3 | eu-north-1 | [ami-0a5284750fcf11d18](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5284750fcf11d18) | -| 3.9.3 | eu-west-1 | [ami-0af60b964eb2f09d3](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0af60b964eb2f09d3) | -| 3.9.3 | eu-west-2 | [ami-097405edd3790cf8b](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-097405edd3790cf8b) | -| 3.9.3 | eu-west-3 | [ami-0078916a37514bb9a](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0078916a37514bb9a) | -| 3.9.3 | sa-east-1 | [ami-09e0025e60328ea6d](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e0025e60328ea6d) | -| 3.9.3 | us-east-1 | [ami-05c8c48601c2303af](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05c8c48601c2303af) | -| 3.9.3 | us-east-2 | [ami-064d64386a89de1e6](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-064d64386a89de1e6) | -| 3.9.3 | us-west-1 | [ami-04a4711d62db12ba0](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a4711d62db12ba0) | -| 3.9.3 | us-west-2 | [ami-0ff56870cf29d4f02](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ff56870cf29d4f02) | +### Build Requirements + +* [Packer](https://packer.io) >= 1.4.1 +* [Python 3.x](https://python.org) (3.7 is known to work) +* `make` (GNU Make is known to work) +* an AWS account with an existing subnet in an AWS Virtual Private Cloud + +### Profile Configuration + +Target profile config files reside in the [profiles](profiles) subdirectory, +where you will also find the [config](profiles/alpine.conf) we use for our +pre-built AMIs. Refer to the [README](profiles/README.md) in that subdirectory +for more details and information about how AMI profile configs work. + +### AWS Credentials + +These scripts use the `boto3` library to interact with AWS, enabling you to +provide your AWS account credentials in a number of different ways. see the +offical `boto3` documentation's section on +[configuring credentials](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#configuring-credentials) +for more details. *Please note that these scripts do not implement the first +two methods on the list.* + +### Building AMIs + +To build all build targets in a target profile, simply... +``` +make PROFILE= +``` + +You can also build specfic build targets within a profile: +``` +make PROFILE= BUILDS=" " +``` + +If the `packer` binary is not in your `PATH`, or you would like to specify a +different one, use... +``` +make PACKER= PROFILE= +``` + +Before each build, new Alpine Linux *releases* are detected and the version's +core profile is updated. + +If there's already an AMI with the same name as the profile build's, that build +will be skipped and the process moves on to build the other profile's build +targets (if any). + +After each successful build, `releases/.yaml` is updated with the +build's details, including (most importantly) the ids of the AMI artifacts that +were built. + +Additional information about using your custom AMIs can be found in the +[README](releases/README.md) in the [releases](releases) subdirectory. + +### Pruning AMIs + +Every now and then, you may want to clean up old AMIs from your EC2 account and +your profile's `releases/.yaml`. There are three different levels of +pruning: +* `revision` - keep only the latest revision for each release +* `release` - keep only the latest release for each version +* `version` - remove any end-of-life versions + +To prune a profile (or optionally one build target of a profile... +``` +make prune LEVEL= PROFILE= [BUILD=] +``` + +Any AMIs in the account which are "unknown" (to the profile/build target, at +least) will be called out as such, but will not be pruned. + +### Updating the Release README + +This make target updates the [releases README](releases/README.md), primarily +for updating the list of our pre-built AMIs. This may-or-may-not be useful for +other target profiles. +``` +make release-readme PROFILE= +``` + +### Cleaning up the Build Environment + +`make clean` will remove the temporary `build` subdirectory, which contains the +resolved profile and Packer configs, the Python virtual environment, and other +temporary build-related artifacts. ## Caveats -This image is being used in production but it's still somewhat early stage in -its development and thus there are some sharp edges. +* New Alpine Linux *versions* are currently not auto-detected and added as a + core version profile; this process is, at the moment, still a manual task. -- As of 3.9.0-1, this AMI starts `haveged` at the boot runlevel, to provide - additional initial entropy as discussed in issue #39. In the long term, we - hope to find an alternative solution. - -- Only EBS-backed HVM instances are supported. While paravirtualized instances - are still available from AWS they are not supported on any of the newer - hardware so it seems unlikely that they will be supported going forward. - Thus this project does not support them. - -- [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is not currently - supported on Alpine Linux. Instead this image uses - [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap). Hostname - setting will work, as will setting the ssh keys for the Alpine user based on - what was configured during instance launch. User data is supported as long - as it's a shell script (starts with #!). See the tiny-ec2-bootstrap README - for more details. You can still install cloud-init (from the edge testing - repositories), but we haven't tested whether it will work correctly for this - AMI. If full cloud-init support is important to you please file a bug - against this project. - -- CloudFormation support is still forthcoming. This requires patches and - packaging for the upstream cfn tools that have not yet been accepted. - Eventually full CloudFormation support will be available. +* Although it's possible to build "aarch64" (arm64) AMIs, they don't quite work + yet. diff --git a/alpine-ami.yaml b/alpine-ami.yaml deleted file mode 100644 index 1505055..0000000 --- a/alpine-ami.yaml +++ /dev/null @@ -1,70 +0,0 @@ -variables: - - # NOTE: Configuration is done with a 'variables.yaml' file. If it doesn't - # exist, default configuration is copied from 'variables.yaml-default'. - - # NOTE: Changing arch/version/release may require modifying 'make_ami.sh'. - arch: x86_64 - version: "3.9" - release: "3.9.3" - revision: "" - -builders: - - type: "amazon-ebssurrogate" - - ### Builder Instance Details - - region: "{{user `region`}}" - subnet_id: "{{user `subnet`}}" - security_group_id: "{{user `security_group`}}" - instance_type: "t3.nano" - associate_public_ip_address: "{{user `public_ip`}}" - launch_block_device_mappings: - - volume_type: "gp2" - device_name: "/dev/xvdf" - delete_on_termination: "true" - volume_size: "{{user `volume_size`}}" - ssh_username: "ec2-user" - source_ami_filter: - # use the latest Amazon Linux AMI - filters: - virtualization-type: "hvm" - root-device-type: "ebs" - architecture: "x86_64" - name: "amzn2-ami-hvm-2.0.*-gp2" - owners: - - "137112412989" - most_recent: "true" - - ### AMI Build Details - - ami_name: "{{user `ami_name_prefix`}}{{user `release`}}{{user `revision`}}-{{user `arch`}}{{user `ami_name_suffix`}}" - ami_description: "{{user `ami_desc_prefix`}}{{user `release`}}{{user `revision`}} {{user `arch`}}{{user `ami_desc_suffix`}}" - ami_virtualization_type: "hvm" - ami_root_device: - source_device_name: "/dev/xvdf" - device_name: "/dev/xvda" - delete_on_termination: "true" - volume_size: "{{user `volume_size`}}" - volume_type: "gp2" - encrypt_boot: "{{user `encrypt_ami`}}" - ena_support: "true" - sriov_support: "true" - ami_groups: "{{user `ami_access`}}" - ami_regions: "{{user `deploy_regions`}}" - - -provisioners: - - type: "file" - source: "nvme/" - destination: "/tmp" - - type: "shell" - script: "make_ami.sh" - environment_vars: - - "VERSION={{user `version`}}" - - "RELEASE={{user `release`}}" - - "REVISION={{user `revision`}}" - - "ADD_REPOS='{{user `add_repos`}}'" - - "ADD_PKGS='{{user `add_pkgs`}}'" - - "ADD_SVCS='{{user `add_svcs`}}'" - execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }}"' diff --git a/gen-readme.py.in b/gen-readme.py.in deleted file mode 100644 index 84e6ed4..0000000 --- a/gen-readme.py.in +++ /dev/null @@ -1,17 +0,0 @@ -@PYTHON@ - -import yaml - -URI_TEMPLATE = "https://{region}.console.aws.amazon.com/ec2/home#launchAmi={ami}" -ROW_TEMPLATE = "| {release} | {region} | [{ami}]({uri}) |" - - -with open("release.yaml") as fp: - releases = yaml.full_load(fp) - -for metadata in releases.values(): - release = str(metadata["alpine-release"]) - - for region, ami in metadata["region-identifiers"].items(): - uri = URI_TEMPLATE.format(**locals()) - print(ROW_TEMPLATE.format(**locals())) diff --git a/make_ami.sh b/make_ami.sh deleted file mode 100755 index d6c65f7..0000000 --- a/make_ami.sh +++ /dev/null @@ -1,368 +0,0 @@ -#!/bin/sh -# vim: set ts=4 et: - -set -eu - -MIN_VERSION="3.9" -MIN_RELEASE="3.9.0" - -: ${VERSION:="${MIN_VERSION}"} # unless otherwise specified -: ${RELEASE:="${MIN_RELEASE}"} # unless otherwise specified - -: ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.10.3/apk-tools-2.10.3-x86_64-linux.tar.gz"} -: ${APK_TOOLS_SHA256:="4d0b2cda606720624589e6171c374ec6d138867e03576d9f518dddde85c33839"} -: ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/alpine-keys-2.1-r1.apk"} -: ${ALPINE_KEYS_SHA256:="9c7bc5d2e24c36982da7aa49b3cfcb8d13b20f7a03720f25625fa821225f5fbc"} - -die() { - printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red - exit 1 -} - -einfo() { - printf '\n\033[1;36m> %s\033[0m\n' "$@" >&2 # bold cyan -} - -rc_add() { - local target="$1"; shift # target directory - local runlevel="$1"; shift # runlevel name - local services="$*" # names of services - - local svc; for svc in $services; do - mkdir -p "$target"/etc/runlevels/$runlevel - ln -s /etc/init.d/$svc "$target"/etc/runlevels/$runlevel/$svc - echo " * service $svc added to runlevel $runlevel" - done -} - -wgets() ( - local url="$1" # url to fetch - local sha256="$2" # expected SHA256 sum of output - local dest="$3" # output path and filename - - wget -T 10 -q -O "$dest" "$url" - echo "$sha256 $dest" | sha256sum -c > /dev/null -) - - -validate_block_device() { - local dev="$1" # target directory - - lsblk -P --fs "$dev" >/dev/null 2>&1 || \ - die "'$dev' is not a valid block device" - - if lsblk -P --fs "$dev" | grep -vq 'FSTYPE=""'; then - die "Block device '$dev' is not blank" - fi -} - -fetch_apk_tools() { - local store="$(mktemp -d)" - local tarball="$(basename $APK_TOOLS_URI)" - - wgets "$APK_TOOLS_URI" "$APK_TOOLS_SHA256" "$store/$tarball" - tar -C "$store" -xf "$store/$tarball" - - find "$store" -name apk -} - -make_filesystem() { - local device="$1" # target device path - local target="$2" # mount target - - mkfs.ext4 -O ^64bit "$device" - e2label "$device" / - mount "$device" "$target" -} - -setup_repositories() { - local target="$1" # target directory - local add_repos="$2" # extra repo lines, comma separated - - mkdir -p "$target"/etc/apk/keys - - if [ "$VERSION" = 'edge' ]; then - cat > "$target"/etc/apk/repositories < "$target"/etc/apk/repositories <> "$target"/etc/apk/repositories -} - -fetch_keys() { - local target="$1" - local tmp="$(mktemp -d)" - - wgets "$ALPINE_KEYS" "$ALPINE_KEYS_SHA256" "$tmp/alpine-keys.apk" - tar -C "$target" -xvf "$tmp"/alpine-keys.apk etc/apk/keys - rm -rf "$tmp" -} - -install_base() { - local target="$1" - - $apk add --root "$target" --no-cache --initdb alpine-base - # verify release matches - if [ "$VERSION" != "edge" ]; then - ALPINE_RELEASE=$(cat "$target/etc/alpine-release") - [ "$RELEASE" = "$ALPINE_RELEASE" ] || \ - die "Current Alpine $VERSION release ($ALPINE_RELEASE) does not match build ($RELEASE)" - fi -} - -setup_chroot() { - local target="$1" - - mount -t proc none "$target"/proc - mount --bind /dev "$target"/dev - mount --bind /sys "$target"/sys - - # Don't want to ship this but it's needed for bootstrap. Will be removed in - # the cleanup stage. - install -Dm644 /etc/resolv.conf "$target"/etc/resolv.conf -} - -install_core_packages() { - local target="$1" # target directory - local add_pkgs="$2" # extra packages, space separated - - # Most from: https://git.alpinelinux.org/cgit/alpine-iso/tree/alpine-virt.packages - # - # sudo - to allow alpine user to become root, disallow root SSH logins - # tiny-ec2-bootstrap - to bootstrap system from EC2 metadata - # - chroot "$target" apk --no-cache add \ - linux-virt \ - alpine-mirrors \ - chrony \ - haveged \ - nvme-cli \ - openssh \ - sudo \ - tiny-ec2-bootstrap \ - tzdata \ - $(echo "$add_pkgs" | tr , ' ') - - chroot "$target" apk --no-cache add --no-scripts syslinux - - # Disable starting getty for physical ttys because they're all inaccessible - # anyhow. With this configuration boot messages will still display in the - # EC2 console. - sed -Ei '/^tty[0-9]/s/^/#/' \ - "$target"/etc/inittab - - # Make it a little more obvious who is logged in by adding username to the - # prompt - sed -i "s/^export PS1='/&\\\\u@/" "$target"/etc/profile -} - -setup_mdev() { - local target="$1" - - cp /tmp/nvme-ebs-links "$target"/lib/mdev - sed -n -i -e '/# fallback/r /tmp/nvme-ebs-mdev.conf' -e 1x -e '2,${x;p}' -e '${x;p}' "$target"/etc/mdev.conf -} - -create_initfs() { - local target="$1" - - # Create ENA feature for mkinitfs - echo "kernel/drivers/net/ethernet/amazon" > \ - "$target"/etc/mkinitfs/features.d/ena.modules - - # Enable ENA and NVME features these don't hurt for any instance and are - # hard requirements of the 5 series and i3 series of instances - sed -Ei 's/^features="([^"]+)"/features="\1 nvme ena"/' \ - "$target"/etc/mkinitfs/mkinitfs.conf - - chroot "$target" /sbin/mkinitfs $(basename $(find "$target"/lib/modules/* -maxdepth 0)) -} - -setup_extlinux() { - local target="$1" - - # Must use disk labels instead of UUID or devices paths so that this works - # across instance familes. UUID works for many instances but breaks on the - # NVME ones because EBS volumes are hidden behind NVME devices. - # - # Enable ext4 because the root device is formatted ext4 - # - # Shorten timeout because EC2 has no way to interact with instance console - # - # ttyS0 is the target for EC2s "Get System Log" feature whereas tty0 is the - # target for EC2s "Get Instance Screenshot" feature. Enabling the serial - # port early in extlinux gives the most complete output in the system log. - sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ - -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"console=ttyS0 console=tty0\"|" \ - -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ - -e "s|^[# ]*(modules)=.*|\1=sd-mod,usb-storage,ext4|" \ - -e "s|^[# ]*(default)=.*|\1=virt|" \ - -e "s|^[# ]*(timeout)=.*|\1=1|" \ - "$target"/etc/update-extlinux.conf -} - -install_extlinux() { - local target="$1" - - chroot "$target" /sbin/extlinux --install /boot - chroot "$target" /sbin/update-extlinux --warn-only -} - -setup_fstab() { - local target="$1" - - cat > "$target"/etc/fstab < -LABEL=/ / ext4 defaults,noatime 1 1 -EOF -} - -setup_networking() { - local target="$1" - - cat > "$target"/etc/network/interfaces < $2 version - printf "%s\n%s" $1 $2 | sort -VC -} - -main() { - [ "$VERSION" != 'edge' ] && { - version_sorted $MIN_VERSION $VERSION || die "Minimum Alpine version is '$MIN_RELEASE'" - version_sorted $MIN_RELEASE $RELEASE || die "Minimum Alpine release is '$MIN_RELEASE'" - } - - local add_repos="$ADD_REPOS" - local add_pkgs="$ADD_PKGS" - local add_svcs="$ADD_SVCS" - - local device="/dev/xvdf" - local target="/mnt/target" - - validate_block_device "$device" - - [ -d "$target" ] || mkdir "$target" - - einfo "Fetching static APK tools" - apk="$(fetch_apk_tools)" - - einfo "Creating root filesystem" - make_filesystem "$device" "$target" - - einfo "Configuring Alpine repositories" - setup_repositories "$target" "$add_repos" - - einfo "Fetching Alpine signing keys" - fetch_keys "$target" - - einfo "Installing base system" - install_base "$target" - - setup_chroot "$target" - - einfo "Installing core packages" - install_core_packages "$target" "$add_pkgs" - - einfo "Configuring and enabling boot loader" - create_initfs "$target" - setup_extlinux "$target" - install_extlinux "$target" - - einfo "Configuring system" - setup_mdev "$target" - setup_fstab "$target" - setup_networking "$target" - enable_services "$target" "$add_svcs" - create_alpine_user "$target" - configure_ntp "$target" - - einfo "All done, cleaning up" - cleanup "$target" -} - -main "$@" diff --git a/packer.conf b/packer.conf new file mode 100644 index 0000000..cfe3086 --- /dev/null +++ b/packer.conf @@ -0,0 +1,108 @@ +# This Packer config file is in HOCON, and is converted to JSON at build time. +# https://github.com/lightbend/config/blob/master/HOCON.md +# vim: ts=2 et: + +builders = [ + { + type = "amazon-ebssurrogate" + + ### Builder Instance Details + + region = "{{user `build_region`}}" + subnet_id = "{{user `build_subnet`}}" + instance_type = "{{user `build_instance_type`}}" + associate_public_ip_address = "{{user `build_public_ip`}}" + source_ami_filter { + # use the latest Amazon Linux AMI + owners = [ "{{user `build_ami_owner`}}" ] + most_recent = "{{user `build_ami_latest`}}" + filters { + virtualization-type = "hvm" + root-device-type = "ebs" + architecture = "{{user `build_arch`}}" + name = "{{user `build_ami_name`}}" + } + } + launch_block_device_mappings = [ + { + volume_type = "gp2" + device_name = "/dev/xvdf" + delete_on_termination = "true" + volume_size = "{{user `ami_volume_size`}}" + } + ] + shutdown_behavior = "terminate" + ssh_username = "{{user `build_user`}}" + + ### AMI Build Details + + ami_name = "{{user `ami_name`}}" + ami_description = "{{user `ami_desc`}}" + tags { + Name = "{{user `ami_name`}}" + } + ami_virtualization_type = "hvm" + ami_architecture = "{{user `build_arch`}}" # need packer 1.4.1 + ami_root_device { + volume_type = "gp2" + source_device_name = "/dev/xvdf" + device_name = "/dev/xvda" + delete_on_termination = "true" + volume_size = "{{user `ami_volume_size`}}" + } + encrypt_boot = "{{user `ami_encrypt`}}" + ena_support = "true" + sriov_support = "true" + ami_groups = "{{user `ami_access`}}" + ami_regions = "{{user `ami_regions`}}" + } +] + + +provisioners = [ + { + type = "file" + source = "nvme/" + destination = "/tmp" + } + { + type = "shell" + script = "setup-ami" + environment_vars = [ + "VERSION={{user `version`}}" + "RELEASE={{user `release`}}" + "REVISION={{user `revision`}}" + "ARCH={{user `arch`}}" + "APK_TOOLS={{user `apk_tools`}}" + "APK_TOOLS_SHA256={{user `apk_tools_sha256`}}" + "ALPINE_KEYS={{user `alpine_keys`}}" + "ALPINE_KEYS_SHA256={{user `alpine_keys_sha256`}}" + "REPOS={{user `repos`}}" + "PKGS={{user `pkgs`}}" + "SVCS={{user `svcs`}}" + "KERNEL_MODS={{user `kernel_modules`}}" + "KERNEL_OPTS={{user `kernel_options`}}" + ] + use_env_var_file = "true" + execute_command = "sudo sh -c '. {{.EnvVarFile}} && {{.Path}}'" + } +] + + +post-processors = [ + { + type = "manifest" + output = "profile/{{user `profile`}}/{{user `profile_build`}}/manifest.json" + custom_data { + ami_name = "{{user `ami_name`}}" + ami_desc = "{{user `ami_desc`}}" + profile = "{{user `profile`}}" + profile_build = "{{user `profile_build`}}" + version = "{{user `version`}}" + release = "{{user `release`}}" + arch = "{{user `arch`}}" + revision = "{{user `revision`}}" + end_of_life = "{{user `end_of_life`}}" + } + } +] diff --git a/profiles/README.md b/profiles/README.md new file mode 100644 index 0000000..107b59e --- /dev/null +++ b/profiles/README.md @@ -0,0 +1,157 @@ +# Profiles + +Profiles are collections of related build definitions, which are used to +generate the `variables.yaml` files that [Packer](https://packer.io) consumes +when building AMIs. + +Profiles use [HOCON](https://github.com/lightbend/config/blob/master/HOCON.md) +(Human-Optimized Config Object Notation) which allows importing common configs +from other files, simple variable interpolation, and easy merging of objects. +This flexibility helps keep configuration for related build targets +[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). + +## Core Profiles + +Core profile configurations are found in the `base`, `version`, and `arch` +subdirectories. Core profiles do not have a `.conf` suffix because they're not +meant to be directly used like target profiles with `make`. + +Base core profiles define all build vars with default values -- those left +empty or null are usually set in version, arch, or target profile configs. +Base profiles are included in version profiles, and do not need to be included +in target profiles. + +Version core profiles expand on the base profile they include, and set the +`version`, `release`, `end_of_life` (if known), and the associated Alpine Linux +`repos`. + +Arch core profiles further define architecture-specific variables, such as +which `apk-tools` and `alpine-keys` to use (and their SHA256 checksums). + +## Target Profiles + +Target profiles, defined in this directory, are the top-level configuration +used with `make PROFILE=`; they must have a `.conf` suffix. Several +configuration objects are defined and later merged within the `BUILDS` object, +ultimately defining each individual build. + +Simple profiles have an object that loads a "version" core profile and +another that loads an "arch" core profile. A more complicated version-arch +matrix profile would have an object for each version and arch. + +Additionally, there are one or more objects that define profile-specific +settings. + +The `BUILDS` object's elements merge core and profile configs (with optional +inline build settings) into named build definitions; these build names can be +used to specify a subset of a profile's builds: +`make PROFILE= BUILDS=" ..."` + +**Please note that merge order matters!** The merge sequence is version --> +architecture --> profile --> build. + +## Customization + +The most important variables to set in your custom profile is `build_region` +and `build_subnet`. Without these, Packer will not know where to build. + +`version` and `release` are meant to match Alpine; however,`revision` can be +used to track changes to profile or situations where the AMIs needed to be +rebuilt. The "edge" core version profile sets `revision` to the current +datetime, otherwise the default is `r0`. + +You will probably want to personalize the name and description of your AMI. +Set `ami_name_prefix` and `ami_name_suffix`; setting `ami_desc_suffix` and +`ami_desc_suffix` is optional. + +Set `build_instance_type` if you want/need to use a different instance type to +build the image; the default is `t3.nano`. + +If 1 GiB is not enough to install the packages in your base AMI, you can set +the `ami_volume_size` to the number of GiB you need. Note, however, that the +[tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) init script +will expand the root partition to use the instance's entire EBS root volume +during the first boot, so you shouldn't need to make space for anything other +than installed packages. + +Set `ami_encrypt` to "true" to create an encrypted AMI image. Launching images +from an encrypted AMI results in an encrypted EBS root volume. + +To copy newly built AMIs to regions other than the `build_region` region, set +`ami_regions`. This variable is a *hash*, which allows for finer control over +inherited values when merging configs. Region identifiers are the keys, a +value of `true` means the AMI should be copied to that region; `null` or +`false` indicate that it shouldn't be copied to that region. If you want to +ensure that the `ami_regions` hash does not inherit any values, set it to +`null` before configuring your regions. For example: +``` +ami_regions = null # don't inherit any previous values +ami_regions { + us-west-2 = true + eu-north-1 = true +} +``` + +Controlling what packages are installed and enabled in the AMI is the number +one reason for creating custom profile. The `repos`, `pkgs`, and `svcs` hash +variables serve precisely that purpose. With some exceptions (noted below), +they work the same as the `ami_regions` hash: `true` values enable, `false` +and `null` values disable, and inherited values can be cleared by first setting +the variable itself to `null`. + +With `repos`, the keys are double-quoted URLs to the `apk` repos that you want +set up; these are initially set in the "version" core profiles. In addition +to the `true`, `false`, and `null` values, you can also use a "repo alias" +string value, allowing you to pin packages to be sourced from that particular +repo. For example, with a profile based from a non-edge core profile, you may +want to be able to pull packages from the edge testing repo: +``` +repos { + "http://dl-cdn.alpinelinux.org/alpine/edge/testing" = "edge-testing" +} +``` + +The `pkgs` hash's default is set in the base core profile; its keys are +simply the Alpine package to install (or not install, if the value is `false` +or `null`). A `true` value installs the package from the default repos; if the +value is a repo alias string, the package will be pinned to explicitly install +from that repo. For example: +``` +pkgs { + # install docker-compose from edge-testing repo + docker-compose = "edge-testing" +} +``` + +To control when (or whether) a system service starts, use the `svcs` hash +variable. Its keys are the service names, as they appear in `/etc/init.d`; +default values are set in the base core profile. Like the other hash +variables, setting `false` or `null` disable the service, `true` will enable +the service at the "default" runlevel. The service can be enabled at a +different runlevel by using that runlevel as the value. + +By default, the AMIs built are accessible only by the owning account. To +make your AMIs publicly available, set the `ami_access` hash variable: +``` +ami_access { + all = true +} +``` + +## Limitations and Caveats + +* Hash variables that are reset to clear inherited values *must* be + re-defined as a hash, even if it is to remain empty: + ``` + hash_var = null # drops inherited values + hash_var {} # re-defines as an empty hash + ``` + +* The AMI's login user is currently hard coded to be `alpine`. Changes to + [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) are + required before we can truly make `ami_user` configurable. + +* Currently, it is not possible to add/modify/remove arbitrary files (such as + service config files) on the filesystem which ultimately becomes the AMI. + One workaround is to use a "user data" script to make any necessary changes + (during the "default" runlevel) when an instance first launches. diff --git a/profiles/alpine.conf b/profiles/alpine.conf new file mode 100644 index 0000000..3727753 --- /dev/null +++ b/profiles/alpine.conf @@ -0,0 +1,47 @@ +### Profile for Building the Publically-Available Alpine Linux AMIs +# vim: ts=2 et: + +version-current { include required("version/current") } +version-edge { include required("version/edge") } +arch-x86_64 { include required("arch/x86_64") } + +# profile vars +alpine { + # default profile revision is 'r0', reset for each new version release! + #revision = "r0" + + ami_desc_suffix = " - https://github.com/mcrute/alpine-ec2-ami" + + build_region = "us-west-2" + build_subnet = "subnet-b80c36e2" + ami_access { + all = true # these AMIs are publicly available + } + ami_regions { + #ap-east-1 = true # needs to be enabled first + ap-northeast-1 = true + ap-northeast-2 = true + #ap-northeast-3 = false # available by subscription only + ap-southeast-1 = true + ap-southeast-2 = true + ap-south-1 = true + ca-central-1 = true + eu-central-1 = true + eu-north-1 = true + eu-west-1 = true + eu-west-2 = true + eu-west-3 = true + sa-east-1 = true + us-east-1 = true + us-east-2 = true + us-west-1 = true + us-west-2 = true + } +} + +# Build definitions +BUILDS { + # merge version, arch, and profile vars + current-x86_64 = ${version-current} ${arch-x86_64} ${alpine} + edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} +} diff --git a/profiles/arch/aarch64 b/profiles/arch/aarch64 new file mode 120000 index 0000000..f1b77e5 --- /dev/null +++ b/profiles/arch/aarch64 @@ -0,0 +1 @@ +aarch64-1 \ No newline at end of file diff --git a/profiles/arch/aarch64-1 b/profiles/arch/aarch64-1 new file mode 100644 index 0000000..37564e5 --- /dev/null +++ b/profiles/arch/aarch64-1 @@ -0,0 +1,10 @@ +### aarch64 vars, revision 1 +# vim: ts=2 et: + +arch = "aarch64" +build_arch = "arm64" +build_instance_type = "a1.medium" +apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.3/apk-tools-2.10.3-aarch64-linux.tar.gz" +apk_tools_sha256 = "58a07e547c83c3a30eb0a0bd73db57d6bbaf92cc093df7a1d9805631f7d349e3" +alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.9/main/aarch64/alpine-keys-2.1-r1.apk" +alpine_keys_sha256 = "1ae4cebb43adee47a68aa891660e69a1ac6467690daca6f211aabff36a17cad1" diff --git a/profiles/arch/x86_64 b/profiles/arch/x86_64 new file mode 120000 index 0000000..f3c4f51 --- /dev/null +++ b/profiles/arch/x86_64 @@ -0,0 +1 @@ +x86_64-1 \ No newline at end of file diff --git a/profiles/arch/x86_64-1 b/profiles/arch/x86_64-1 new file mode 100644 index 0000000..40b60dc --- /dev/null +++ b/profiles/arch/x86_64-1 @@ -0,0 +1,9 @@ +### x86_64 vars, revision 1 +# vim: ts=2 et: + +arch = "x86_64" +build_arch = "x86_64" +apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.3/apk-tools-2.10.3-x86_64-linux.tar.gz" +apk_tools_sha256 = "4d0b2cda606720624589e6171c374ec6d138867e03576d9f518dddde85c33839" +alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/alpine-keys-2.1-r1.apk" +alpine_keys_sha256 = "9c7bc5d2e24c36982da7aa49b3cfcb8d13b20f7a03720f25625fa821225f5fbc" diff --git a/profiles/base/1 b/profiles/base/1 new file mode 100644 index 0000000..fdda3f0 --- /dev/null +++ b/profiles/base/1 @@ -0,0 +1,87 @@ +### base vars, revision 1 +# vim: ts=2 et: + +# Profile/Build +profile = null +profile_build = null +revision = "r0" + +# Versioning +version = null +release = null +end_of_life = null + +# Architecture +arch = null +build_arch = null + +# Builder-instance +build_region = null +build_subnet = null +build_instance_type = "t3.nano" +build_public_ip = null +build_user = "ec2-user" +build_ami_name = "amzn2-ami-hvm-2.0.*-gp2" +build_ami_owner = "137112412989" +build_ami_latest = "true" + +# AMI build/deploy +ami_name_prefix = "alpine-ami-" +ami_name_suffix = "" +ami_desc_prefix = "Alpine Linux " +ami_desc_suffix = "" +ami_volume_size = "1" +ami_encrypt = "false" +ami_user = "alpine" # modification currently not supported +ami_access = {} +ami_regions = {} +# NOTE: the following are python format strings, resolved in resolve-profile.py +ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" +ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" + +# AMI configuration +apk_tools = null +apk_tools_sha256 = null +alpine_keys = null +alpine_keys_sha256 = null +repos {} +pkgs { + linux-virt = true + alpine-mirrors = true + chrony = true + nvme-cli = true + openssh = true + sudo = true + tiny-ec2-bootstrap = true + tzdata = true +} +svcs { + devfs = "sysinit" + dmesg = "sysinit" + hwdrivers = "sysinit" + mdev = "sysinit" + acpid = "boot" + bootmisc = "boot" + hostname = "boot" + hwclock = "boot" + modules = "boot" + swap = "boot" + sysctl = "boot" + syslog = "boot" + chronyd = "default" + networking = "default" + sshd = "default" + tiny-ec2-bootstrap = "default" + killprocs = "shutdown" + mount-ro = "shutdown" + savecache = "shutdown" +} +kernel_modules { + sd-mod = true + usb-storage = true + ext4 = true +} +kernel_options { + "console=ttyS0" = true + "console=tty0" = true +} diff --git a/profiles/base/current b/profiles/base/current new file mode 120000 index 0000000..56a6051 --- /dev/null +++ b/profiles/base/current @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/profiles/test.conf b/profiles/test.conf new file mode 100644 index 0000000..eb7f2a3 --- /dev/null +++ b/profiles/test.conf @@ -0,0 +1,31 @@ +### Profile for Testing Builds +# vim: ts=2 et: + +version-current { include required("version/current") } +version-edge { include required("version/edge") } +arch-x86_64 { include required("arch/x86_64") } +arch-aarch64 { include required("arch/aarch64") } + +# specific to this profile's builds +test { + # default revision is 'r0', recomment/reset for each new version release! + #revision = "r0" + + ami_name_prefix = "test-" + ami_desc_prefix = "Alpine Test " + build_region = "us-west-2" + build_subnet = "subnet-033a30d7b5220d177" +} + +# Build definitions +BUILDS { + # merge version, arch, profile, and build vars + current-x86_64 = ${version-current} ${arch-x86_64} ${test} + edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} + + # aarch64 AMI builds are under development + edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} { + # other subnet doesn't do a1.* instances + build_subnet = "subnet-08dfc622745f7d96a" + } +} diff --git a/profiles/version/3.9 b/profiles/version/3.9 new file mode 100644 index 0000000..a08c079 --- /dev/null +++ b/profiles/version/3.9 @@ -0,0 +1,14 @@ +### version 3.9 vars +# vim: ts=2 et: + +# start with base vars +include required("../base/current") + +# set version-specific vars +version = "3.9" +release = "3.9.4" +end_of_life = "2021-01-01" +repos { + "http://dl-cdn.alpinelinux.org/alpine/v3.9/main" = true + "http://dl-cdn.alpinelinux.org/alpine/v3.9/community" = true +} diff --git a/profiles/version/current b/profiles/version/current new file mode 120000 index 0000000..a02597f --- /dev/null +++ b/profiles/version/current @@ -0,0 +1 @@ +3.9 \ No newline at end of file diff --git a/profiles/version/edge b/profiles/version/edge new file mode 100644 index 0000000..07a04b0 --- /dev/null +++ b/profiles/version/edge @@ -0,0 +1,18 @@ +### edge vars +# vim: ts=2 et: + +# based on current +include required("current") + +# add edge-specific tweaks... +version = "edge" +release = "edge" +end_of_life = "@TOMORROW@" +revision = "@NOW@" + +repos = null # remove all values from 'current' +repos { + "http://dl-cdn.alpinelinux.org/alpine/edge/main" = true + "http://dl-cdn.alpinelinux.org/alpine/edge/community" = true + "http://dl-cdn.alpinelinux.org/alpine/edge/testing" = true +} diff --git a/release.yaml b/release.yaml deleted file mode 100644 index f97beb3..0000000 --- a/release.yaml +++ /dev/null @@ -1,22 +0,0 @@ -alpine-ami-3.9.3-x86_64: - description: "Alpine Linux 3.9.3 x86_64" - alpine-release: 3.9.3 - kernel-flavor: virt - ami-release-date: "2019-03-03 01:03:41" - region-identifiers: - ap-northeast-1: ami-001e74131496d0212 - ap-northeast-2: ami-09a26b03424d75667 - ap-south-1: ami-03534f64f8b87aafc - ap-southeast-1: ami-0d5f2950efcd55b0e - ap-southeast-2: ami-0660edcba4ba7c8a0 - ca-central-1: ami-0bf4ea1f0f86283bb - eu-central-1: ami-060d9bbde8d5047e8 - eu-north-1: ami-0a5284750fcf11d18 - eu-west-1: ami-0af60b964eb2f09d3 - eu-west-2: ami-097405edd3790cf8b - eu-west-3: ami-0078916a37514bb9a - sa-east-1: ami-09e0025e60328ea6d - us-east-1: ami-05c8c48601c2303af - us-east-2: ami-064d64386a89de1e6 - us-west-1: ami-04a4711d62db12ba0 - us-west-2: ami-0ff56870cf29d4f02 diff --git a/releases/README.md b/releases/README.md new file mode 100644 index 0000000..2121038 --- /dev/null +++ b/releases/README.md @@ -0,0 +1,77 @@ +# Alpine Linux EC2 AMIs + +**These are not official AWS or Alpine images. They are community built and +supported.** + +These AMIs should work with most EC2 features such as Elastic Network Adapters +and NVMe EBS volumes. If you find any problems launching them on current +generation instances, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues) +and include as much detailed information as possible. + +During the *first boot* of instances created with these AMIs, the lightweight +[tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) init +script... +- sets the instance's hostname, +- installs the SSH authorized_keys for the 'alpine' user, +- disables 'root' and 'alpine' users' passwords, +- expands the root partition to use all available EBS volume space, +- and executes a "user data" script (must be a shell script that starts with `#!`) + +If you launch these AMIs to build other images (via [Packer](https://packer.io), +etc.), don't forget to remove `/var/lib/cloud/.bootstrap-complete` -- +otherwise, instances launched from those second-generation AMIs will not run +`tiny-ec2-bootstrap` on their first boot. + +The more popular [cloud-init](https://cloudinit.readthedocs.io/en/latest/) +is currently not supported on Alpine Linux. If `cloud-init` support is +important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). + +## AMIs + +### Alpine Linux 3.9.4 (2019-05-28) +
click to show/hide

+ +| Region | alpine-ami-3.9.4-x86_64-r0 | +| ------ | --- | +| ap-northeast-1 | [ami-0251fa7f8f8ed0a3b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0251fa7f8f8ed0a3b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0251fa7f8f8ed0a3b)) | +| ap-northeast-2 | [ami-0bb32f18ed247323e](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb32f18ed247323e) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb32f18ed247323e)) | +| ap-south-1 | [ami-0ca42c8d33ec3ef66](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca42c8d33ec3ef66) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca42c8d33ec3ef66)) | +| ap-southeast-1 | [ami-032330b6de2f39f75](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-032330b6de2f39f75) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-032330b6de2f39f75)) | +| ap-southeast-2 | [ami-0681743c5235cb677](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0681743c5235cb677) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0681743c5235cb677)) | +| ca-central-1 | [ami-0dfcf967a696ee901](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dfcf967a696ee901) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dfcf967a696ee901)) | +| eu-central-1 | [ami-07a8060b90f208cf2](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a8060b90f208cf2) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a8060b90f208cf2)) | +| eu-north-1 | [ami-0f25dd1f2ab208b34](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f25dd1f2ab208b34) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f25dd1f2ab208b34)) | +| eu-west-1 | [ami-07453094c6d42a07e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07453094c6d42a07e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07453094c6d42a07e)) | +| eu-west-2 | [ami-03fa8e7cff9293332](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03fa8e7cff9293332) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03fa8e7cff9293332)) | +| eu-west-3 | [ami-07aad42fdc4a7e79b](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07aad42fdc4a7e79b) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07aad42fdc4a7e79b)) | +| sa-east-1 | [ami-04cac088d12e5ebf0](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04cac088d12e5ebf0) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04cac088d12e5ebf0)) | +| us-east-1 | [ami-0c2c618b193741157](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c2c618b193741157) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c2c618b193741157)) | +| us-east-2 | [ami-012e1a22371695544](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-012e1a22371695544) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-012e1a22371695544)) | +| us-west-1 | [ami-00f0f067a7d90b7e4](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00f0f067a7d90b7e4) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00f0f067a7d90b7e4)) | +| us-west-2 | [ami-0ed0fed8f127914fb](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed0fed8f127914fb) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed0fed8f127914fb)) | + +

+ +### Alpine Linux Edge (2019-05-28) +
click to show/hide

+ +| Region | alpine-ami-edge-x86_64-20190528032210 | +| ------ | --- | +| ap-northeast-1 | [ami-03a19ed410069a4d8](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03a19ed410069a4d8) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03a19ed410069a4d8)) | +| ap-northeast-2 | [ami-05988a6c4660792ce](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05988a6c4660792ce) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05988a6c4660792ce)) | +| ap-south-1 | [ami-08aaeba360cdab5a4](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08aaeba360cdab5a4) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08aaeba360cdab5a4)) | +| ap-southeast-1 | [ami-01ae6c2b20966a358](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ae6c2b20966a358) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01ae6c2b20966a358)) | +| ap-southeast-2 | [ami-00193ff2f592dc22c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00193ff2f592dc22c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00193ff2f592dc22c)) | +| ca-central-1 | [ami-086b7f5aa4cf0194e](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-086b7f5aa4cf0194e) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-086b7f5aa4cf0194e)) | +| eu-central-1 | [ami-089db5b316937779b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089db5b316937779b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089db5b316937779b)) | +| eu-north-1 | [ami-02ed2f6e56115d6f2](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02ed2f6e56115d6f2) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02ed2f6e56115d6f2)) | +| eu-west-1 | [ami-0afa00bfa1c870509](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0afa00bfa1c870509) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0afa00bfa1c870509)) | +| eu-west-2 | [ami-0b1e309dfd74525f2](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1e309dfd74525f2) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1e309dfd74525f2)) | +| eu-west-3 | [ami-0404d34bb3376e370](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0404d34bb3376e370) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0404d34bb3376e370)) | +| sa-east-1 | [ami-053be80e8c7b1ad62](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053be80e8c7b1ad62) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-053be80e8c7b1ad62)) | +| us-east-1 | [ami-0d1ea89d2b00334f5](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d1ea89d2b00334f5) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d1ea89d2b00334f5)) | +| us-east-2 | [ami-0939714c9fe9ec10e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0939714c9fe9ec10e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0939714c9fe9ec10e)) | +| us-west-1 | [ami-0b9c5086efa0f067b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9c5086efa0f067b) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9c5086efa0f067b)) | +| us-west-2 | [ami-0719ffe4d94e67432](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0719ffe4d94e67432) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0719ffe4d94e67432)) | + +

diff --git a/releases/alpine.yaml b/releases/alpine.yaml new file mode 100644 index 0000000..9823199 --- /dev/null +++ b/releases/alpine.yaml @@ -0,0 +1,58 @@ +current-x86_64: + 3.9.4: + alpine-ami-3.9.4-x86_64-r0: + description: Alpine Linux 3.9.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: current-x86_64 + version: '3.9' + release: 3.9.4 + arch: x86_64 + revision: r0 + end_of_life: '2021-01-01T00:00:00' + build_time: 1559014278 + artifacts: + ap-northeast-1: ami-0251fa7f8f8ed0a3b + ap-northeast-2: ami-0bb32f18ed247323e + ap-south-1: ami-0ca42c8d33ec3ef66 + ap-southeast-1: ami-032330b6de2f39f75 + ap-southeast-2: ami-0681743c5235cb677 + ca-central-1: ami-0dfcf967a696ee901 + eu-central-1: ami-07a8060b90f208cf2 + eu-north-1: ami-0f25dd1f2ab208b34 + eu-west-1: ami-07453094c6d42a07e + eu-west-2: ami-03fa8e7cff9293332 + eu-west-3: ami-07aad42fdc4a7e79b + sa-east-1: ami-04cac088d12e5ebf0 + us-east-1: ami-0c2c618b193741157 + us-east-2: ami-012e1a22371695544 + us-west-1: ami-00f0f067a7d90b7e4 + us-west-2: ami-0ed0fed8f127914fb +edge-x86_64: + edge: + alpine-ami-edge-x86_64-20190528032210: + description: Alpine Linux edge x86_64 20190528032210 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20190528032210' + end_of_life: '2019-05-29T03:22:10' + build_time: 1559014836 + artifacts: + ap-northeast-1: ami-03a19ed410069a4d8 + ap-northeast-2: ami-05988a6c4660792ce + ap-south-1: ami-08aaeba360cdab5a4 + ap-southeast-1: ami-01ae6c2b20966a358 + ap-southeast-2: ami-00193ff2f592dc22c + ca-central-1: ami-086b7f5aa4cf0194e + eu-central-1: ami-089db5b316937779b + eu-north-1: ami-02ed2f6e56115d6f2 + eu-west-1: ami-0afa00bfa1c870509 + eu-west-2: ami-0b1e309dfd74525f2 + eu-west-3: ami-0404d34bb3376e370 + sa-east-1: ami-053be80e8c7b1ad62 + us-east-1: ami-0d1ea89d2b00334f5 + us-east-2: ami-0939714c9fe9ec10e + us-west-1: ami-0b9c5086efa0f067b + us-west-2: ami-0719ffe4d94e67432 diff --git a/scripts/gen-release-readme.py.in b/scripts/gen-release-readme.py.in new file mode 100644 index 0000000..764869d --- /dev/null +++ b/scripts/gen-release-readme.py.in @@ -0,0 +1,115 @@ +@PYTHON@ +# vim: ts=4 et: + +from datetime import datetime +from distutils.version import StrictVersion +import functools +import os +import re +import sys +import yaml + +if len(sys.argv) != 2: + sys.exit("Usage: " + os.path.basename(__file__) + "") + +PROFILE = sys.argv[1] + +RELEASE_DIR = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + '..', 'releases' +) + +README_MD = os.path.join( RELEASE_DIR, 'README.md') +RELEASE_YAML = os.path.join( RELEASE_DIR, PROFILE + '.yaml') + +# read in releases/.yaml +with open(RELEASE_YAML, 'r') as data: + RELEASES = yaml.safe_load(data) + +sections = {} + +for build, releases in RELEASES.items(): + for release, amis in releases.items(): + if release in sections: + rel = sections[release] + else: + rel = { + 'built': {}, + 'name': {}, + 'ami': {} + } + for name, info in amis.items(): + arch = info['arch'] + built = info['build_time'] + if (arch not in rel['built'] or + rel['built'][arch] < built): + rel['name'][arch] = name + rel['built'][arch] = built + for region, ami in info['artifacts'].items(): + if region not in rel['ami']: + rel['ami'][region] = {} + rel['ami'][region][arch] = ami + sections[release] = rel + +SECTION = """ +### Alpine Linux {release} ({date}) +
click to show/hide

+ +{rows} + +

+""" + +AMI = " [{id}](https://{r}.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId={id}) " + \ + "([launch](https://{r}.console.aws.amazon.com/ec2/home#launchAmi={id})) |" + +ARCHS = ['x86_64', 'aarch64'] + + +# most -> least recent version, edge at end +def ver_cmp(a, b): + try: + if StrictVersion(a) < StrictVersion(b): + return 1 + if StrictVersion(a) > StrictVersion(b): + return -1 + return 0 + except ValueError: + # "edge" doesn't work with StrictVersion + if a == 'edge': + return 1 + if b == 'edge': + return -1 + return 0 + + +ami_list = "## AMIs\n" + +for release in sorted(list(sections.keys()), key=functools.cmp_to_key(ver_cmp)): + info = sections[release] + rows = [] + rows.append('| Region |') + rows.append('| ------ |') + for arch in ARCHS: + if arch in info['name']: + rows[0] += ' {n} |'.format(n=info['name'][arch]) + rows[1] += ' --- |' + for region, amis in info['ami'].items(): + row = '| {r} |'.format(r=region) + for arch in ARCHS: + if arch in amis: + row += AMI.format(r=region, id=amis[arch]) + rows.append(row) + ami_list += SECTION.format( + release=release.capitalize(), + date=datetime.utcfromtimestamp(max(info['built'].values())).date(), + rows="\n".join(rows) + ) + +with open(README_MD, 'r') as file: + readme = file.read() + +readme_re = re.compile('## AMIs.*\Z', re.S) + +with open(README_MD, 'w') as file: + file.write(readme_re.sub(ami_list, readme)) diff --git a/scripts/make-amis b/scripts/make-amis new file mode 100755 index 0000000..d93a266 --- /dev/null +++ b/scripts/make-amis @@ -0,0 +1,61 @@ +#!/bin/sh +# vim: set ts=4 et: + +export PACKER=${PACKER:-packer} + +cd build || exit 1 + +# we need a profile, at least +if [ $# -eq 0 ]; then + echo "Usage: $(basename "$0") [ ... ]" >&2 + exit 1 +fi + +PROFILE=$1; shift + +# no build(s) specified? do all the builds! +[ $# -gt 0 ] && BUILDS="$*" || BUILDS=$(ls "profile/$PROFILE") + +for BUILD in $BUILDS +do + printf "\n*** $BUILD ***\n\n" + + BUILD_DIR="profile/$PROFILE/$BUILD" + + # get version, release, and arch + eval "$( + grep -E '"(version|release|arch)"' "$BUILD_DIR/vars.json" | \ + sed -e 's/[ ",]//g' -e 's/:/=/g' + )" + + if [ "$version" != 'edge' ]; then + # get current Alpine release for this version + alpine_release=$( + curl -s "http://dl-cdn.alpinelinux.org/alpine/v$version/main/$arch/" | \ + grep '"alpine-base-' | cut -d'"' -f2 | cut -d- -f3 + ) + # update core version profile's release if necessary + if [ "$alpine_release" != "$release" ]; then + printf "=== New release ($alpine_release) detected! ===\n\n" + sed -i '' -e "s/$release/$alpine_release/" "../profiles/version/$version" + ./resolve-profile.py "$PROFILE" + # NOTE: this does NOT update 'revision', it's at target profile/build level + fi + fi + + # execute packer, capture output and exit code + ( + "$PACKER" build -var-file="$BUILD_DIR/vars.json" packer.json + echo $? >"$BUILD_DIR/exit" + ) | tee "$BUILD_DIR/output" + EXIT=$(cat "$BUILD_DIR/exit") + + if [ "$EXIT" = "0" ]; then + ./update-release.py "$PROFILE" "$BUILD" + else + # unless AMI revision already exists, exit + grep -q 'is used by an existing AMI' "$BUILD_DIR/output" || exit "$EXIT" + fi +done + +# TODO? if PROFILE = alpine-amis then prune?, gen-releases? diff --git a/nvme/nvme-ebs-links b/scripts/nvme/nvme-ebs-links similarity index 56% rename from nvme/nvme-ebs-links rename to scripts/nvme/nvme-ebs-links index f2c470b..e418657 100755 --- a/nvme/nvme-ebs-links +++ b/scripts/nvme/nvme-ebs-links @@ -2,7 +2,7 @@ [ -x /usr/sbin/nvme ] || exit -PROC="$(basename $0)[$$]" +PROC="$(basename "$0")[$$]" log() { FACILITY="kern.$1" @@ -16,8 +16,8 @@ raw_ebs_alias() { case $ACTION in add|"") - BASE=$(echo $MDEV | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') - PART=$(echo $MDEV | sed -re 's/nvme[0-9]+n[0-9]+p?//g') + BASE=$(echo "$MDEV" | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') + PART=$(echo "$MDEV" | sed -re 's/nvme[0-9]+n[0-9]+p?//g') MAXTRY=50 TRY=0 until [ -n "$EBS" ]; do @@ -30,14 +30,15 @@ case $ACTION in fi sleep 0.1 done - EBS=${EBS#/dev/}$PART - ln -sf "$MDEV" "${EBS/xvd/sd}" && log notice "Added ${EBS/xvd/sd} symlink for $MDEV" - ln -sf "$MDEV" "${EBS/sd/xvd}" && log notice "Added ${EBS/sd/xvd} symlink for $MDEV" + # remove any leading '/dev/', 'sd', or 'xvd', and append partition + EBS="${${${EBS#/dev/}#sd}#xvd}$PART" + ln -sf "$MDEV" "sd$EBS" && log notice "Added sd$EBS symlink for $MDEV" + ln -sf "$MDEV" "xvd$EBS" && log notice "Added xvd$EBS symlink for $MDEV" ;; remove) for TARGET in sd* xvd* do - [ "$(readlink $TARGET 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV" + [ "$(readlink "$TARGET" 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV" done ;; esac diff --git a/nvme/nvme-ebs-mdev.conf b/scripts/nvme/nvme-ebs-mdev.conf similarity index 100% rename from nvme/nvme-ebs-mdev.conf rename to scripts/nvme/nvme-ebs-mdev.conf diff --git a/scripts/prune-amis.py.in b/scripts/prune-amis.py.in new file mode 100644 index 0000000..dd6f6d8 --- /dev/null +++ b/scripts/prune-amis.py.in @@ -0,0 +1,133 @@ +@PYTHON@ +# vim: ts=4 et: + +from datetime import datetime +import os +import sys +import boto3 +import yaml + +LEVELS = ['revision', 'release', 'version'] + +if 3 < len(sys.argv) > 4 or sys.argv[1] not in LEVELS: + sys.exit("Usage: " + os.path.basename(__file__) + """ [] + :- + revision - keep only the latest revision per release + release - keep only the latest release per version + version - keep only the versions that aren't end-of-life""") + +NOW = datetime.utcnow() +LEVEL = sys.argv[1] +PROFILE = sys.argv[2] +BUILD = None if len(sys.argv) == 3 else sys.argv[3] + +RELEASE_YAML = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + '..', 'releases', PROFILE + '.yaml' +) + +with open(RELEASE_YAML, 'r') as data: + BEFORE = yaml.safe_load(data) + +known = {} +prune = {} +after = {} + +# for all builds in the profile... +for build_name, releases in BEFORE.items(): + + # this is not the build that was specified + if BUILD is not None and BUILD != build_name: + print('< skipping {0}/{1}'.format(PROFILE, build_name)) + # ensure its release data remains intact + after[build_name] = BEFORE[build_name] + continue + else: + print('> PRUNING {0}/{1} for {2}'.format(PROFILE, build_name, LEVEL)) + + criteria = {} + + # scan releases for pruning criteria + for release, amis in releases.items(): + for ami_name, info in amis.items(): + version = info['version'] + if info['end_of_life']: + eol = datetime.fromisoformat(info['end_of_life']) + else: + eol = None + built = info['build_time'] + for region, ami_id in info['artifacts'].items(): + if region not in known: + known[region] = [] + known[region].append(ami_id) + + if LEVEL == 'revision': + # find build timestamp of most recent revision, per release + if release not in criteria or built > criteria[release]: + criteria[release] = built + elif LEVEL == 'release': + # find build timestamp of most recent revision, per version + if version not in criteria or built > criteria[version]: + criteria[version] = built + elif LEVEL == 'version': + # find latest EOL date, per version + if (version not in criteria or not criteria[version]) or ( + eol and eol > criteria[version]): + criteria[version] = eol + + # rescan again to determine what doesn't make the cut + for release, amis in releases.items(): + for ami_name, info in amis.items(): + version = info['version'] + if info['end_of_life']: + eol = datetime.fromisoformat(info['end_of_life']) + else: + eol = None + built = info['build_time'] + if ((LEVEL == 'revision' and built < criteria[release]) or + (LEVEL == 'release' and built < criteria[version]) or + (LEVEL == 'version' and criteria[version] and ( + (version != 'edge' and criteria[version] < NOW) or + (version == 'edge' and ((not eol) or (eol < NOW))) + ))): + for region, ami_id in info['artifacts'].items(): + if region not in prune: + prune[region] = [] + prune[region].append(ami_id) + else: + if build_name not in after: + after[build_name] = {} + if release not in after[build_name]: + after[build_name][release] = {} + after[build_name][release][ami_name] = info + +# scan all regions for AMIs +AWS = boto3.session.Session() +for region in AWS.get_available_regions('ec2'): + print("* scanning: " + region + '...') + EC2 = AWS.client('ec2', region_name=region) + + for image in EC2.describe_images(Owners=['self'])['Images']: + + action = '? UNKNOWN' + if region in prune and image['ImageId'] in prune[region]: + action = '- REMOVING' + elif region in known and image['ImageId'] in known[region]: + action = '+ KEEPING' + + print(' ' + action + ': ' + image['Name'] + + "\n = " + image['ImageId'], end='', flush=True) + if action[0] == '-': + EC2.deregister_image(ImageId=image['ImageId']) + for blockdev in image['BlockDeviceMappings']: + if 'Ebs' in blockdev: + print(', ' + blockdev['Ebs']['SnapshotId'], + end='', flush=True) + if action[0] == '-': + EC2.delete_snapshot( + SnapshotId=blockdev['Ebs']['SnapshotId']) + print() + +# update releases/.yaml +with open(RELEASE_YAML, 'w') as data: + yaml.dump(after, data, sort_keys=False) diff --git a/scripts/resolve-profile.py.in b/scripts/resolve-profile.py.in new file mode 100644 index 0000000..d784cf3 --- /dev/null +++ b/scripts/resolve-profile.py.in @@ -0,0 +1,105 @@ +@PYTHON@ +# vim: set ts=4 et: + +import json +import os +import shutil +import sys +from datetime import datetime, timedelta +from pyhocon import ConfigFactory + +if len(sys.argv) != 2: + sys.exit("Usage: " + os.path.basename(__file__) + " ") + +PROFILE = sys.argv[1] + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) + +# path to the profile config file +PROFILE_CONF = os.path.join(SCRIPT_DIR, '..', 'profiles', PROFILE + '.conf') + +# load the profile's build configuration +BUILDS = ConfigFactory.parse_file(PROFILE_CONF)['BUILDS'] + +# where we store the profile's builds' config/output +PROFILE_DIR = os.path.join(SCRIPT_DIR, 'profile', PROFILE) +if not os.path.exists(PROFILE_DIR): + os.makedirs(PROFILE_DIR) + +# fold these build config keys' dict to scalar +FOLD_DICTS = { + 'ami_access': ',{0}', + 'ami_regions': ',{0}', + 'repos': "\n@{1} {0}", + 'pkgs': ' {0}@{1}', + 'kernel_modules': ',{0}', + 'kernel_options': ' {0}' +} + +NOW = datetime.utcnow() +ONE_DAY = timedelta(days=1) + + +# func to fold dict down to scalar +def fold(fdict, ffmt): + folded = '' + for fkey, fval in fdict.items(): + fkey = fkey.strip('"') # complex keys may be in quotes + if fval is True: + folded += ffmt[0] + fkey + elif not (fval is None or fval is False): + folded += ffmt.format(fkey, fval) + return folded[1:] + + +# parse/resolve HOCON profile's builds' config +for build, cfg in BUILDS.items(): + build_dir = os.path.join(PROFILE_DIR, build) + + # make a fresh profile build directory + if os.path.exists(build_dir): + shutil.rmtree(build_dir) + os.makedirs(build_dir) + + # populate profile build vars + cfg['profile'] = PROFILE + cfg['profile_build'] = build + + # mostly edge-related temporal substitutions + if cfg['end_of_life'] == '@TOMORROW@': + cfg['end_of_life'] = (NOW + ONE_DAY).isoformat(timespec='seconds') + elif cfg['end_of_life'] is not None: + # to explicitly UTC-ify end_of_life + cfg['end_of_life'] = datetime.fromisoformat( + cfg['end_of_life'] + '+00:00').isoformat(timespec='seconds') + if cfg['revision'] == '@NOW@': + cfg['revision'] = NOW.strftime('%Y%m%d%H%M%S') + + # fold dict vars to scalars + for foldkey, foldfmt in FOLD_DICTS.items(): + cfg[foldkey] = fold(cfg[foldkey], foldfmt) + + # fold 'svcs' dict to scalar + lvls = {} + for svc, lvl in cfg['svcs'].items(): + if lvl is True: + # service in default runlevel + lvls['default'].append(svc) + elif not (lvl is None or lvl is False): + # service in specified runlevel (skip svc when false/null) + if lvl not in lvls.keys(): + lvls[lvl] = [] + lvls[lvl].append(svc) + cfg['svcs'] = ' '.join( + str(lvl) + '=' + ','.join( + str(svc) for svc in svcs + ) for lvl, svcs in lvls.items() + ) + + # resolve ami_name and ami_desc + cfg['ami_name'] = cfg['ami_name'].format(var=cfg) + cfg['ami_desc'] = cfg['ami_desc'].format(var=cfg) + + # write build vars file + with open(os.path.join(build_dir, 'vars.json'), 'w') as out: + json.dump(cfg, out, indent=4, separators=(',', ': ')) diff --git a/scripts/setup-ami b/scripts/setup-ami new file mode 100755 index 0000000..aaa0472 --- /dev/null +++ b/scripts/setup-ami @@ -0,0 +1,344 @@ +#!/bin/sh +# vim: set ts=4 et: + +set -eu + +DEVICE=/dev/xvdf +TARGET=/mnt/target + +# what bootloader should we use? +[ -d "/sys/firmware/efi" ] && BOOTLOADER=grub-efi || BOOTLOADER=syslinux + +die() { + printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red + exit 1 +} + +einfo() { + printf '\n\033[1;36m> %s\033[0m\n' "$@" >&2 # bold cyan +} + +rc_add() { + runlevel="$1"; shift # runlevel name + services="$*" # names of services + + for svc in $services; do + mkdir -p "$TARGET/etc/runlevels/$runlevel" + ln -s "/etc/init.d/$svc" "$TARGET/etc/runlevels/$runlevel/$svc" + echo " * service $svc added to runlevel $runlevel" + done +} + +wgets() ( + url="$1" # url to fetch + sha256="$2" # expected SHA256 sum of output + dest="$3" # output path and filename + + wget -T 10 -q -O "$dest" "$url" + echo "$sha256 $dest" | sha256sum -c > /dev/null +) + +validate_block_device() { + lsblk -P --fs "$DEVICE" >/dev/null 2>&1 || \ + die "'$DEVICE' is not a valid block device" + + if lsblk -P --fs "$DEVICE" | grep -vq 'FSTYPE=""'; then + die "Block device '$DEVICE' is not blank" + fi +} + +fetch_apk_tools() { + store="$(mktemp -d)" + tarball="$(basename "$APK_TOOLS")" + + wgets "$APK_TOOLS" "$APK_TOOLS_SHA256" "$store/$tarball" + tar -C "$store" -xf "$store/$tarball" + + find "$store" -name apk +} + +# mostly from Alpine's /sbin/setup-disk +setup_partitions() { + start=1M # TODO: do we really need to waste 1M? + line= + + # create new partitions + ( + for line in "$@"; do + case "$line" in + 0M*) ;; + *) echo "$start,$line"; start= ;; + esac + done + ) | sfdisk --quiet --label dos "$DEVICE" + + # we assume that the build host will create the new devices within 5s + tries=5 + while [ ! -e "${DEVICE}1" ]; do + [ $tries -eq 0 ] && break + sleep 1 + tries=$(( tries - 1 )) + done + [ -e "${DEVICE}1" ] || die "Expected new device ${DEVICE}1 not created" +} + +make_filesystem() { + root_dev="$DEVICE" + + if [ "$BOOTLOADER" = 'grub-efi' ]; then + # create a small EFI partition (remainder for root), and mount it + setup_partitions '5M,EF' ',L' + root_dev="${DEVICE}2" + mkfs.vfat -n EFI "${DEVICE}1" + fi + + mkfs.ext4 -O ^64bit -L / "$root_dev" + mount "$root_dev" "$TARGET" + + if [ "$BOOTLOADER" = 'grub-efi' ]; then + mkdir -p "$TARGET/boot/efi" + mount -t vfat "${DEVICE}1" "$TARGET/boot/efi" + fi +} + +setup_repositories() { + mkdir -p "$TARGET/etc/apk/keys" + echo "$REPOS" > "$TARGET/etc/apk/repositories" +} + +fetch_keys() { + tmp="$(mktemp -d)" + + wgets "$ALPINE_KEYS" "$ALPINE_KEYS_SHA256" "$tmp/alpine-keys.apk" + tar -C "$TARGET" --warning=no-unknown-keyword -xvf "$tmp/alpine-keys.apk" etc/apk/keys + rm -rf "$tmp" +} + +install_base() { + $apk add --root "$TARGET" --no-cache --initdb alpine-base + # verify release matches + if [ "$VERSION" != "edge" ]; then + ALPINE_RELEASE=$(cat "$TARGET/etc/alpine-release") + [ "$RELEASE" = "$ALPINE_RELEASE" ] || \ + die "Newer Alpine release detected: $ALPINE_RELEASE" + fi +} + +setup_chroot() { + mount -t proc none "$TARGET/proc" + mount --bind /dev "$TARGET/dev" + mount --bind /sys "$TARGET/sys" + + # Needed for bootstrap, will be removed in the cleanup stage. + install -Dm644 /etc/resolv.conf "$TARGET/etc/resolv.conf" +} + +install_core_packages() { + chroot "$TARGET" apk --no-cache add $PKGS + chroot "$TARGET" apk --no-cache add --no-scripts $BOOTLOADER + + # Disable starting getty for physical ttys because they're all inaccessible + # anyhow. With this configuration boot messages will still display in the + # EC2 console. + sed -Ei '/^tty[0-9]/s/^/#/' "$TARGET/etc/inittab" + + # Make it a little more obvious who is logged in by adding username to the + # prompt + sed -i "s/^export PS1='/&\\\\u@/" "$TARGET/etc/profile" +} + +setup_mdev() { + cp /tmp/nvme-ebs-links "$TARGET/lib/mdev" + # insert nvme ebs mdev configs just above "# fallback" comment + sed -n -i -e '/# fallback/r /tmp/nvme-ebs-mdev.conf' -e 1x -e '2,${x;p}' -e '${x;p}' "$TARGET/etc/mdev.conf" +} + +create_initfs() { + # Enable ENA and NVME features these don't hurt for any instance and are + # hard requirements of the 5 series and i3 series of instances + # TODO: profile-ize? + sed -Ei 's/^features="([^"]+)"/features="\1 nvme ena"/' \ + "$TARGET/etc/mkinitfs/mkinitfs.conf" + + chroot "$TARGET" /sbin/mkinitfs $(basename $(find "$TARGET/lib/modules/"* -maxdepth 0)) +} + +install_bootloader() { + case "$BOOTLOADER" in + syslinux) install_extlinux ;; + grub-efi) install_grub_efi ;; + *) die "unknown bootloader '$BOOTLOADER'" ;; + esac +} + +install_extlinux() { + # Must use disk labels instead of UUID or devices paths so that this works + # across instance familes. UUID works for many instances but breaks on the + # NVME ones because EBS volumes are hidden behind NVME devices. + # + # Enable ext4 because the root device is formatted ext4 + # + # Shorten timeout (1/10s) as EC2 has no way to interact with instance console + # + # ttyS0 is the target for EC2s "Get System Log" feature whereas tty0 is the + # target for EC2s "Get Instance Screenshot" feature. Enabling the serial + # port early in extlinux gives the most complete output in the system log. + sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ + -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"$KERNEL_OPTS\"|" \ + -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ + -e "s|^[# ]*(modules)=.*|\1=$KERNEL_MODS|" \ + -e "s|^[# ]*(default)=.*|\1=virt|" \ + -e "s|^[# ]*(timeout)=.*|\1=1|" \ + "$TARGET/etc/update-extlinux.conf" + + chroot "$TARGET" /sbin/extlinux --install /boot + chroot "$TARGET" /sbin/update-extlinux --warn-only +} + +# TODO: this isn't quite working for some reason +install_grub_efi() { + case "$ARCH" in + x86_64) grub_target=x86_64-efi ; fwa=x64 ;; + aarch64) grub_target=arm64-efi ; fwa=aa64 ;; + *) die "ARCH=$ARCH is currently unsupported" ;; + esac + + # disable nvram so grub doesn't call efibootmgr + chroot "$TARGET" /usr/sbin/grub-install --target="$grub_target" --efi-directory=/boot/efi \ + --bootloader-id=alpine --boot-directory=/boot --no-nvram + + # fallback mode + install -D "$TARGET/boot/efi/EFI/alpine/grub$fwa.efi" "$TARGET/boot/efi/EFI/boot/$fwa.efi" + + # add cmdline linux defaults to /etc/default/grub + echo "GRUB_CMDLINE_LINUX_DEFAULT=\"modules=$KERNEL_MODS $KERNEL_OPTS\"" >> "$TARGET"/etc/default/grub + + # eliminate grub pause + sed -ie 's/^GRUB_TIMEOUT=.$/GRUB_TIMEOUT=0/' "$TARGET/etc/default/grub" + + # generate/install new config + [ -e "$TARGET/boot/grub/grub.cfg" ] && cp "$TARGET/boot/grub/grub.cfg" "$TARGET/boot/grub/grub.cfg.backup" + chroot "$TARGET" grub-mkconfig -o /boot/grub/grub.cfg +} + +setup_fstab() { + cat > "$TARGET/etc/fstab" < +LABEL=/ / ext4 defaults,noatime 1 1 +EOF + + # if we're using grub-efi bootloader, add extra line for EFI partition + if [ "$BOOTLOADER" = 'grub-efi' ]; then + echo "LABEL=EFI /boot/efi vfat defaults,noatime,uid=0,gid=0,umask=077 0 0" >> "$TARGET/etc/fstab" + fi +} + +setup_networking() { + cat > "$TARGET/etc/network/interfaces" < ") + +PROFILE = sys.argv[1] +BUILD = sys.argv[2] + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +MANIFEST_JSON = os.path.join( + SCRIPT_DIR, 'profile', PROFILE, BUILD, 'manifest.json' +) + +RELEASE_DIR = os.path.join(SCRIPT_DIR, '..', 'releases') +RELEASE_YAML = os.path.join(RELEASE_DIR, PROFILE + '.yaml') + +if not os.path.exists(RELEASE_DIR): + os.makedirs(RELEASE_DIR) + +releases = {} +if os.path.exists(RELEASE_YAML): + with open(RELEASE_YAML, 'r') as data: + releases = yaml.safe_load(data) + +with open(MANIFEST_JSON, 'r') as data: + MANIFEST = json.load(data) + +A = re.split(':|,', MANIFEST['builds'][0]['artifact_id']) +ARTIFACTS = dict(zip(A[0::2], A[1::2])) +BUILD_TIME = MANIFEST['builds'][0]['build_time'] +DATA = MANIFEST['builds'][0]['custom_data'] +RELEASE = DATA['release'] + +if BUILD not in releases: + releases[BUILD] = {} +if RELEASE not in releases[BUILD]: + releases[BUILD][RELEASE] = {} + +REVISION = { + 'description': DATA['ami_desc'], + 'profile': PROFILE, + 'profile_build': BUILD, + 'version': DATA['version'], + 'release': RELEASE, + 'arch': DATA['arch'], + 'revision': DATA['revision'], + 'end_of_life': DATA['end_of_life'], + 'build_time': BUILD_TIME, + 'artifacts': ARTIFACTS +} + +releases[BUILD][RELEASE][DATA['ami_name']] = REVISION + +with open(RELEASE_YAML, 'w') as data: + yaml.dump(releases, data, sort_keys=False) diff --git a/scrub-old-amis.py.in b/scrub-old-amis.py.in deleted file mode 100644 index 34d7be3..0000000 --- a/scrub-old-amis.py.in +++ /dev/null @@ -1,72 +0,0 @@ -@PYTHON@ - -import re -import yaml -import boto3 - - -# All Alpine AMIs should match this regex if they're valid -AMI_RE = re.compile("^Alpine-(\d+\.\d+)(?:-r(\d+))?-Hardened-EC2") - - -# Load current AMI version from config -with open("alpine-ami.yaml") as fp: - ami_cfg = yaml.full_load(fp)["variables"] - current = (float(ami_cfg["alpine_release"]), int(ami_cfg["ami_release"])) - - -# Fetch all matching AMIs -amis = [] - -for region in boto3.session.Session().get_available_regions("ec2"): - ec2 = boto3.client("ec2", region_name=region) - - for image in ec2.describe_images(Owners=["self"])["Images"]: - match = AMI_RE.match(image["Name"]) - if not match: - continue - - os_rel, ami_rel = match.groups() - amis.append(( - region, image["ImageId"], - image["BlockDeviceMappings"][0]["Ebs"]["SnapshotId"], - float(os_rel), int(ami_rel) if ami_rel else 0)) - - -# Determine the set to discard based region and version -ok_regions = set() -discards = [] - -# Cluster candidates by region/version pair, newest in a region first. -# This should result in the first match for a region always being the newest -# AMI for that region and all subsequent matches in the region being old. -# Even so we must keep track of regions with current images on the off-chance -# that a region only has old images. In that case we want to preserve the old -# images till we can publish new ones manually so users can still launch -# Alpine systems without interruption. -candidates = sorted(amis, key=lambda i: (i[0], (i[1], i[3])), reverse=True) - -for ami in candidates: - (region, ami, snapshot), version = ami[:3], ami[3:] - - if version > current: - print("{} has AMI '{}' newer than current".format(region, ami)) - continue - elif version == current: - ok_regions.add(region) - continue - elif version < current and region in ok_regions: - discards.append((region, ami, snapshot)) - else: - print("Not discarding old image in {}".format(region)) - continue - - -# Scrub the old ones -for region, image, snapshot in discards: - print("Removing image '{}', snapshot '{}' in {}".format( - image, snapshot, region)) - - ec2 = boto3.client("ec2", region_name=region) - ec2.deregister_image(ImageId=image) - ec2.delete_snapshot(SnapshotId=snapshot) diff --git a/variables.yaml-default b/variables.yaml-default deleted file mode 100644 index 0cd3cc2..0000000 --- a/variables.yaml-default +++ /dev/null @@ -1,77 +0,0 @@ -### Builder-Instance Options ### - -# Region to build in, if we initiate a build from outside AWS -region: - -# Subnet ID in which the builder instance is to be launched. VPC will be -# automatically determined. -subnet: - -# Optional security group to apply to the builder instance -security_group: - -# By default, public IPs are assigned (or not) per the subnet's configuration. -# Set to "true" or "false" to explicitly override the subnet's public IP auto- -# assign configuration. -public_ip: "" - - -### Build Options ### - -# Uncomment/increment every for every rebuild of an Alpine release; -# re-comment/zero for every new Alpine release -#revision: "-1" - -# AMI name prefix and suffix -ami_name_prefix: "alpine-ami-" -ami_name_suffix: "" - -# AMI description prefix and suffix -ami_desc_prefix: "Alpine Linux " -ami_desc_suffix: " - https://github.com/mcrute/alpine-ec2-ami" - -# List of custom lines to add to /etc/apk/repositories -add_repos: -# - "@my-repo http://my-repo.tld/path" - -# List of additional packages to add to the AMI. -add_pkgs: -# - package-name - -# Additional services to start at the specified level -add_svcs: -# boot: -# - service1 -# default: -# - service2 - -# Size of the AMI image (in GiB). -volume_size: "1" - -# Encrypt the AMI? -encrypt_ami: "false" - -# List of groups that should have access to the AMI. However, only two -# values are currently supported: 'all' for public, '' or unset for private. -ami_access: - - "all" - -# List of regions to where the AMI should be copied -deploy_regions: - - "us-east-1" - - "us-east-2" - - "us-west-1" - - "us-west-2" - - "ca-central-1" - - "eu-central-1" - - "eu-north-1" - - "eu-west-1" - - "eu-west-2" - - "eu-west-3" - - "ap-northeast-1" - - "ap-northeast-2" -# - "ap-northeast-3" # skipped, available by subscription only - - "ap-southeast-1" - - "ap-southeast-2" - - "ap-south-1" - - "sa-east-1" From d28214fc5054199efa2046ed95c5e4e891c6b521 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Thu, 30 May 2019 21:04:11 -0700 Subject: [PATCH 033/125] simple updates... * .gitignore - don't ignore whole dirs and then opt-in specific files * Makefile - fail if required vars aren't set - SCRIPTS --> ALL_SCRIPTS * profiles/README.md - variables.yaml --> vars.json - drop 'not possible to add/modify/remove arbitrary files' comment * make-amis - use -eq for integer comparison - make shellcheck happier with printf's - remove old bad-idea TODO --- .gitignore | 11 ----------- Makefile | 9 ++++++++- profiles/README.md | 7 +------ scripts/make-amis | 8 +++----- 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 89f22ab..ff26dbe 100644 --- a/.gitignore +++ b/.gitignore @@ -2,14 +2,3 @@ **/*.bak **/*.swp /build/ -/profiles/* -!/profiles/README.md -!/profiles/base/ -!/profiles/arch/ -!/profiles/version/ -!/profiles/alpine.conf -!/profiles/example.conf -!/profiles/test.conf -/releases/* -!/releases/README.md -!/releases/alpine.yaml diff --git a/Makefile b/Makefile index 626f6c8..8247c9b 100644 --- a/Makefile +++ b/Makefile @@ -12,18 +12,24 @@ LEVEL := PACKER := packer export PACKER +require_var = $(if $(value $1),,$(error $1=... required)) + .PHONY: amis prune release-readme clean amis: build build/packer.json build/profile/$(PROFILE) build/update-release.py + @:$(call require_var, PROFILE) build/make-amis $(PROFILE) $(BUILDS) prune: build build/prune-amis.py + @:$(call require_var, LEVEL) + @:$(call require_var, PROFILE) build/prune-amis.py $(LEVEL) $(PROFILE) $(BUILD) release-readme: build build/gen-release-readme.py + @:$(call require_var, PROFILE) build/gen-release-readme.py $(PROFILE) -build: $(SCRIPTS) +build: $(ALL_SCRIPTS) [ -d build/profile ] || mkdir -p build/profile python3 -m venv build/.py3 build/.py3/bin/pip install pyhocon pyyaml boto3 @@ -33,6 +39,7 @@ build/packer.json: build packer.conf build/.py3/bin/pyhocon -i packer.conf -f json > build/packer.json build/profile/$(PROFILE): build build/resolve-profile.py $(CORE_PROFILES) $(TARGET_PROFILES) + @:$(call require_var, PROFILE) build/resolve-profile.py $(PROFILE) %.py: %.py.in build diff --git a/profiles/README.md b/profiles/README.md index 107b59e..2dfd50e 100644 --- a/profiles/README.md +++ b/profiles/README.md @@ -1,7 +1,7 @@ # Profiles Profiles are collections of related build definitions, which are used to -generate the `variables.yaml` files that [Packer](https://packer.io) consumes +generate the `vars.json` files that [Packer](https://packer.io) consumes when building AMIs. Profiles use [HOCON](https://github.com/lightbend/config/blob/master/HOCON.md) @@ -150,8 +150,3 @@ ami_access { * The AMI's login user is currently hard coded to be `alpine`. Changes to [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) are required before we can truly make `ami_user` configurable. - -* Currently, it is not possible to add/modify/remove arbitrary files (such as - service config files) on the filesystem which ultimately becomes the AMI. - One workaround is to use a "user data" script to make any necessary changes - (during the "default" runlevel) when an instance first launches. diff --git a/scripts/make-amis b/scripts/make-amis index d93a266..9ea3a16 100755 --- a/scripts/make-amis +++ b/scripts/make-amis @@ -18,7 +18,7 @@ PROFILE=$1; shift for BUILD in $BUILDS do - printf "\n*** $BUILD ***\n\n" + printf "\n*** %s ***\n\n" "$BUILD" BUILD_DIR="profile/$PROFILE/$BUILD" @@ -36,7 +36,7 @@ do ) # update core version profile's release if necessary if [ "$alpine_release" != "$release" ]; then - printf "=== New release ($alpine_release) detected! ===\n\n" + printf "=== New release (%s) detected! ===\n\n" "$alpine_release" sed -i '' -e "s/$release/$alpine_release/" "../profiles/version/$version" ./resolve-profile.py "$PROFILE" # NOTE: this does NOT update 'revision', it's at target profile/build level @@ -50,12 +50,10 @@ do ) | tee "$BUILD_DIR/output" EXIT=$(cat "$BUILD_DIR/exit") - if [ "$EXIT" = "0" ]; then + if [ "$EXIT" -eq 0 ]; then ./update-release.py "$PROFILE" "$BUILD" else # unless AMI revision already exists, exit grep -q 'is used by an existing AMI' "$BUILD_DIR/output" || exit "$EXIT" fi done - -# TODO? if PROFILE = alpine-amis then prune?, gen-releases? From 8f563aa4f1b33651a87399e73bfcf82fef858605 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 3 Jun 2019 17:35:07 -0700 Subject: [PATCH 034/125] more changes based on review... * Makefile - improve/fix check for required make vars * resolve-profile.py.in + build a list of all regions & probe to see which ones are enabled (unknown if special subscription regions like ap-northeast-3 would show up in this list) + expand 'ami_regions' 'ALL' meta key to all enabled regions, 'ALL' key's value is preserved (that is, a value of None or False will disable all regions) + warn/remove regions in profile config that are found to be disabled. + improve checks for [None, False] values --- Makefile | 19 ++++++++++---- profiles/alpine.conf | 19 +------------- profiles/test.conf | 4 +++ scripts/resolve-profile.py.in | 48 +++++++++++++++++++++++++++++++++-- 4 files changed, 65 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 8247c9b..851ed7e 100644 --- a/Makefile +++ b/Makefile @@ -12,20 +12,29 @@ LEVEL := PACKER := packer export PACKER -require_var = $(if $(value $1),,$(error $1=... required)) + +check_defined = \ + $(strip $(foreach 1,$1, \ + $(call __check_defined,$1,$(strip $(value 2))))) +__check_defined = \ + $(if $(value $1),, \ + $(error Undefined $1$(if $2, ($2))$(if $(value @), \ + required by target `$@'))) + .PHONY: amis prune release-readme clean amis: build build/packer.json build/profile/$(PROFILE) build/update-release.py - @:$(call require_var, PROFILE) + @:$(call check_defined, PROFILE, target profile name) build/make-amis $(PROFILE) $(BUILDS) prune: build build/prune-amis.py - @:$(call require_var, LEVEL) - @:$(call require_var, PROFILE) + @:$(call check_defined, LEVEL, pruning level) + @:$(call check_defined, PROFILE, target profile name) build/prune-amis.py $(LEVEL) $(PROFILE) $(BUILD) release-readme: build build/gen-release-readme.py + @:$(call check_defined, PROFILE, target profile name) @:$(call require_var, PROFILE) build/gen-release-readme.py $(PROFILE) @@ -39,7 +48,7 @@ build/packer.json: build packer.conf build/.py3/bin/pyhocon -i packer.conf -f json > build/packer.json build/profile/$(PROFILE): build build/resolve-profile.py $(CORE_PROFILES) $(TARGET_PROFILES) - @:$(call require_var, PROFILE) + @:$(call check_defined, PROFILE, target profile name) build/resolve-profile.py $(PROFILE) %.py: %.py.in build diff --git a/profiles/alpine.conf b/profiles/alpine.conf index 3727753..b5ada55 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -18,24 +18,7 @@ alpine { all = true # these AMIs are publicly available } ami_regions { - #ap-east-1 = true # needs to be enabled first - ap-northeast-1 = true - ap-northeast-2 = true - #ap-northeast-3 = false # available by subscription only - ap-southeast-1 = true - ap-southeast-2 = true - ap-south-1 = true - ca-central-1 = true - eu-central-1 = true - eu-north-1 = true - eu-west-1 = true - eu-west-2 = true - eu-west-3 = true - sa-east-1 = true - us-east-1 = true - us-east-2 = true - us-west-1 = true - us-west-2 = true + ALL = true } } diff --git a/profiles/test.conf b/profiles/test.conf index eb7f2a3..b4ecab8 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -15,6 +15,10 @@ test { ami_desc_prefix = "Alpine Test " build_region = "us-west-2" build_subnet = "subnet-033a30d7b5220d177" + ami_regions { + us-west-1 = true + ap-east-1 = true + } } # Build definitions diff --git a/scripts/resolve-profile.py.in b/scripts/resolve-profile.py.in index d784cf3..5aca4d7 100644 --- a/scripts/resolve-profile.py.in +++ b/scripts/resolve-profile.py.in @@ -5,6 +5,8 @@ import json import os import shutil import sys +import boto3 +from botocore.exceptions import ClientError from datetime import datetime, timedelta from pyhocon import ConfigFactory @@ -47,13 +49,39 @@ def fold(fdict, ffmt): fkey = fkey.strip('"') # complex keys may be in quotes if fval is True: folded += ffmt[0] + fkey - elif not (fval is None or fval is False): + elif fval not in [None, False]: folded += ffmt.format(fkey, fval) return folded[1:] +# list of AWS regions, and whether they're enabled +all_regions = {} +AWS = boto3.session.Session() +sys.stderr.write("\n>>> Determining region availability...") +sys.stderr.flush() +for region in AWS.get_available_regions('ec2'): + ec2 = AWS.client('ec2', region_name=region) + try: + ec2.describe_regions() + except ClientError as e: + if e.response['Error']['Code'] == 'AuthFailure': + sys.stderr.write('-') + sys.stderr.flush() + all_regions[region] = False + continue + elif e.response['Error']['Code'] == 'UnauthorizedOperation': + # have access to the region, but not to ec2:DescribeRegions + pass + else: + raise + sys.stderr.write('+') + sys.stderr.flush() + all_regions[region] = True +sys.stderr.write("\n") + # parse/resolve HOCON profile's builds' config for build, cfg in BUILDS.items(): + sys.stderr.write(f">>> Resolving configuration for '{build}'\n") build_dir = os.path.join(PROFILE_DIR, build) # make a fresh profile build directory @@ -75,6 +103,22 @@ for build, cfg in BUILDS.items(): if cfg['revision'] == '@NOW@': cfg['revision'] = NOW.strftime('%Y%m%d%H%M%S') + # 'ALL' region expansion (or retraction) + if 'ALL' in cfg['ami_regions']: + all_val = cfg['ami_regions']['ALL'] + if all_val not in [None, False]: + cfg['ami_regions'] = all_regions + else: + cfg['ami_regions'] = {} + else: + # warn/remove disabled regions + for region, enabled in all_regions.items(): + if enabled is not False or region not in cfg['ami_regions']: + continue + if cfg['ami_regions'][region] not in [None, False]: + sys.stderr.write(f"*** WARNING: skipping disabled region {region}\n") + cfg['ami_regions'][region] = False + # fold dict vars to scalars for foldkey, foldfmt in FOLD_DICTS.items(): cfg[foldkey] = fold(cfg[foldkey], foldfmt) @@ -85,7 +129,7 @@ for build, cfg in BUILDS.items(): if lvl is True: # service in default runlevel lvls['default'].append(svc) - elif not (lvl is None or lvl is False): + elif lvl not in [None, False]: # service in specified runlevel (skip svc when false/null) if lvl not in lvls.keys(): lvls[lvl] = [] From b517dda7b8e66d610172c70ea15ffd9853807f62 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 3 Jun 2019 19:38:33 -0700 Subject: [PATCH 035/125] remove new release detection/auto-update of version -- future feature --- scripts/make-amis | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/scripts/make-amis b/scripts/make-amis index 9ea3a16..bc9826f 100755 --- a/scripts/make-amis +++ b/scripts/make-amis @@ -19,30 +19,8 @@ PROFILE=$1; shift for BUILD in $BUILDS do printf "\n*** %s ***\n\n" "$BUILD" - BUILD_DIR="profile/$PROFILE/$BUILD" - # get version, release, and arch - eval "$( - grep -E '"(version|release|arch)"' "$BUILD_DIR/vars.json" | \ - sed -e 's/[ ",]//g' -e 's/:/=/g' - )" - - if [ "$version" != 'edge' ]; then - # get current Alpine release for this version - alpine_release=$( - curl -s "http://dl-cdn.alpinelinux.org/alpine/v$version/main/$arch/" | \ - grep '"alpine-base-' | cut -d'"' -f2 | cut -d- -f3 - ) - # update core version profile's release if necessary - if [ "$alpine_release" != "$release" ]; then - printf "=== New release (%s) detected! ===\n\n" "$alpine_release" - sed -i '' -e "s/$release/$alpine_release/" "../profiles/version/$version" - ./resolve-profile.py "$PROFILE" - # NOTE: this does NOT update 'revision', it's at target profile/build level - fi - fi - # execute packer, capture output and exit code ( "$PACKER" build -var-file="$BUILD_DIR/vars.json" packer.json From dbae7521785de26a25437731398f660b40eac770 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 3 Jun 2019 19:46:29 -0700 Subject: [PATCH 036/125] tag AMIs and snapshots with additional metadata --- packer.conf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packer.conf b/packer.conf index cfe3086..f7e1548 100644 --- a/packer.conf +++ b/packer.conf @@ -39,7 +39,14 @@ builders = [ ami_name = "{{user `ami_name`}}" ami_description = "{{user `ami_desc`}}" tags { - Name = "{{user `ami_name`}}" + Name = "{{user `ami_name`}}" + profile = "{{user `profile`}}" + profile_build = "{{user `profile_build`}}" + version = "{{user `version`}}" + release = "{{user `release`}}" + arch = "{{user `arch`}}" + revision = "{{user `revision`}}" + end_of_life = "{{user `end_of_life`}}" } ami_virtualization_type = "hvm" ami_architecture = "{{user `build_arch`}}" # need packer 1.4.1 From d206223baead6e2d3a477ba69b4d6a2990fd3e3d Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 3 Jun 2019 20:44:52 -0700 Subject: [PATCH 037/125] minor output formatting tweak to resolve-profile.py --- scripts/resolve-profile.py.in | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/resolve-profile.py.in b/scripts/resolve-profile.py.in index 5aca4d7..d348f32 100644 --- a/scripts/resolve-profile.py.in +++ b/scripts/resolve-profile.py.in @@ -81,7 +81,7 @@ sys.stderr.write("\n") # parse/resolve HOCON profile's builds' config for build, cfg in BUILDS.items(): - sys.stderr.write(f">>> Resolving configuration for '{build}'\n") + print(f"\n>>> Resolving configuration for '{build}'") build_dir = os.path.join(PROFILE_DIR, build) # make a fresh profile build directory @@ -147,3 +147,5 @@ for build, cfg in BUILDS.items(): # write build vars file with open(os.path.join(build_dir, 'vars.json'), 'w') as out: json.dump(cfg, out, indent=4, separators=(',', ': ')) + +print() From ed0559ef726dfc9754d6d2718d28db97b81357f2 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 3 Jun 2019 23:27:17 -0700 Subject: [PATCH 038/125] README: add example aws cli command for listing the latest current-x86_64 build --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index a08da13..cd69742 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,23 @@ and supported.** ***To get started with one of our pre-built minimalist AMIs, please refer to the [README](releases/README.md) in the [releases](releases) subdirectory.*** +Alternately, with the right filters, you can query the EC2 API to programmatically +find our most recent AMIs. For example, using the `aws` command line tool... +``` +aws ec2 describe-images \ + --output text \ + --filters \ + Name=owner-id,Values=538276064493 \ + Name=name,Values='alpine-ami-*' \ + Name=state,Values=available \ + Name=tag:profile_build,Values=current-x86_64 \ + --query 'max_by(Images[], &CreationDate).ImageId' +``` +...will list the latest AMI id from our collection of 'current-x86_64' builds. +Refer to the AWS CLI Command Reference for +[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) +for more details. + ## Custom AMIs Using the scripts and configuration in this project, you can build your own From bc4e1ec30f9ac38685c6861d6ebd6ee80a307305 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 3 Jun 2019 23:32:19 -0700 Subject: [PATCH 039/125] README: missing ) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cd69742..e767162 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ pruning: * `release` - keep only the latest release for each version * `version` - remove any end-of-life versions -To prune a profile (or optionally one build target of a profile... +To prune a profile (or optionally one build target of a profile)... ``` make prune LEVEL= PROFILE= [BUILD=] ``` From def572e470d4d3ce6378d8b9b26b7716896ca536 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 10 Jun 2019 20:52:04 -0700 Subject: [PATCH 040/125] new AMIs (with metadata tags), handle ClientError in prune-amis.py --- releases/alpine.yaml | 103 ++++++++++++++++++++++++--------------- scripts/prune-amis.py.in | 6 ++- 2 files changed, 70 insertions(+), 39 deletions(-) diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 9823199..1b40d41 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -9,50 +9,77 @@ current-x86_64: arch: x86_64 revision: r0 end_of_life: '2021-01-01T00:00:00' - build_time: 1559014278 + build_time: 1560223551 artifacts: - ap-northeast-1: ami-0251fa7f8f8ed0a3b - ap-northeast-2: ami-0bb32f18ed247323e - ap-south-1: ami-0ca42c8d33ec3ef66 - ap-southeast-1: ami-032330b6de2f39f75 - ap-southeast-2: ami-0681743c5235cb677 - ca-central-1: ami-0dfcf967a696ee901 - eu-central-1: ami-07a8060b90f208cf2 - eu-north-1: ami-0f25dd1f2ab208b34 - eu-west-1: ami-07453094c6d42a07e - eu-west-2: ami-03fa8e7cff9293332 - eu-west-3: ami-07aad42fdc4a7e79b - sa-east-1: ami-04cac088d12e5ebf0 - us-east-1: ami-0c2c618b193741157 - us-east-2: ami-012e1a22371695544 - us-west-1: ami-00f0f067a7d90b7e4 - us-west-2: ami-0ed0fed8f127914fb + ap-northeast-1: ami-0bb4073495ff2021e + ap-northeast-2: ami-028d3d1675161319e + ap-south-1: ami-0f94a69d1ff0a7860 + ap-southeast-1: ami-0f1c039e595dd2d02 + ap-southeast-2: ami-0ca5b7ca3caa92758 + ca-central-1: ami-05a3c167410bf6b35 + eu-central-1: ami-02df82b83ad2cdaec + eu-north-1: ami-0f7b7e2bef1209f6c + eu-west-1: ami-09234e83a8015efa4 + eu-west-2: ami-091a16ac6bd29bdd3 + eu-west-3: ami-084cb673481c3f793 + sa-east-1: ami-014d631c23ebf306a + us-east-1: ami-04a29b11e34acf54d + us-east-2: ami-0d9445885a19e00ca + us-west-1: ami-0bef2dc6d3f4e19a2 + us-west-2: ami-0af07dadd734834a7 edge-x86_64: edge: - alpine-ami-edge-x86_64-20190528032210: - description: Alpine Linux edge x86_64 20190528032210 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-edge-x86_64-20190611013502: + description: Alpine Linux edge x86_64 20190611013502 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: edge-x86_64 version: edge release: edge arch: x86_64 - revision: '20190528032210' - end_of_life: '2019-05-29T03:22:10' - build_time: 1559014836 + revision: '20190611013502' + end_of_life: '2019-06-12T01:35:02' + build_time: 1560217495 artifacts: - ap-northeast-1: ami-03a19ed410069a4d8 - ap-northeast-2: ami-05988a6c4660792ce - ap-south-1: ami-08aaeba360cdab5a4 - ap-southeast-1: ami-01ae6c2b20966a358 - ap-southeast-2: ami-00193ff2f592dc22c - ca-central-1: ami-086b7f5aa4cf0194e - eu-central-1: ami-089db5b316937779b - eu-north-1: ami-02ed2f6e56115d6f2 - eu-west-1: ami-0afa00bfa1c870509 - eu-west-2: ami-0b1e309dfd74525f2 - eu-west-3: ami-0404d34bb3376e370 - sa-east-1: ami-053be80e8c7b1ad62 - us-east-1: ami-0d1ea89d2b00334f5 - us-east-2: ami-0939714c9fe9ec10e - us-west-1: ami-0b9c5086efa0f067b - us-west-2: ami-0719ffe4d94e67432 + ap-northeast-1: ami-0e4ad0a988beaadd0 + ap-northeast-2: ami-0fa8819de67a529ed + ap-south-1: ami-007b857e93d455a5d + ap-southeast-1: ami-06c7dbd709213a1af + ap-southeast-2: ami-0640965542f4783f9 + ca-central-1: ami-07d1273f35efb64d0 + eu-central-1: ami-0d19961f6fbb14cf2 + eu-north-1: ami-0c90cce137ba0a365 + eu-west-1: ami-0c902d47d3941eba5 + eu-west-2: ami-0ac5ef7a7cc272443 + eu-west-3: ami-0e5b8927e00c7d6fa + sa-east-1: ami-061957e3677b43094 + us-east-1: ami-012598956fe159ff9 + us-east-2: ami-039647ff1acb463a3 + us-west-1: ami-0edcc6f8b14fb9e29 + us-west-2: ami-08e91c3b5d1331347 + alpine-ami-edge-x86_64-20190611031724: + description: Alpine Linux edge x86_64 20190611031724 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20190611031724' + end_of_life: '2019-06-12T03:17:24' + build_time: 1560224089 + artifacts: + ap-northeast-1: ami-0c97e7cdda534346b + ap-northeast-2: ami-00cceaf8288ee7386 + ap-south-1: ami-09e1d1ef7cd517a64 + ap-southeast-1: ami-037323416789f3ce1 + ap-southeast-2: ami-0d182653643257211 + ca-central-1: ami-008c0bd239c168b34 + eu-central-1: ami-0d808164dace58b4e + eu-north-1: ami-0c3152b1fd3b21ae9 + eu-west-1: ami-031b9d6c98019452b + eu-west-2: ami-029d4646a3ea4fc0f + eu-west-3: ami-0d1e6f66f5a7fc568 + sa-east-1: ami-0b00f41d3df265296 + us-east-1: ami-014a8bfc05b292686 + us-east-2: ami-0d99a25549626e548 + us-west-1: ami-03f03158096a615cd + us-west-2: ami-09a619850cd514295 diff --git a/scripts/prune-amis.py.in b/scripts/prune-amis.py.in index dd6f6d8..3009204 100644 --- a/scripts/prune-amis.py.in +++ b/scripts/prune-amis.py.in @@ -5,6 +5,7 @@ from datetime import datetime import os import sys import boto3 +from botocore.exceptions import ClientError import yaml LEVELS = ['revision', 'release', 'version'] @@ -107,7 +108,8 @@ for region in AWS.get_available_regions('ec2'): print("* scanning: " + region + '...') EC2 = AWS.client('ec2', region_name=region) - for image in EC2.describe_images(Owners=['self'])['Images']: + try: + for image in EC2.describe_images(Owners=['self'])['Images']: action = '? UNKNOWN' if region in prune and image['ImageId'] in prune[region]: @@ -127,6 +129,8 @@ for region in AWS.get_available_regions('ec2'): EC2.delete_snapshot( SnapshotId=blockdev['Ebs']['SnapshotId']) print() + except ClientError as e: + print(e) # update releases/.yaml with open(RELEASE_YAML, 'w') as data: From 12b73e4e0a7752bf207189dd76c5506dd344cae1 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 10 Jun 2019 20:53:47 -0700 Subject: [PATCH 041/125] update releases/README.md with latest AMIs with metadata tags --- releases/README.md | 70 +++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/releases/README.md b/releases/README.md index 2121038..3894bc0 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,50 +28,50 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.9.4 (2019-05-28) +### Alpine Linux 3.9.4 (2019-06-11)
click to show/hide

| Region | alpine-ami-3.9.4-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-0251fa7f8f8ed0a3b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0251fa7f8f8ed0a3b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0251fa7f8f8ed0a3b)) | -| ap-northeast-2 | [ami-0bb32f18ed247323e](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb32f18ed247323e) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb32f18ed247323e)) | -| ap-south-1 | [ami-0ca42c8d33ec3ef66](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca42c8d33ec3ef66) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca42c8d33ec3ef66)) | -| ap-southeast-1 | [ami-032330b6de2f39f75](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-032330b6de2f39f75) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-032330b6de2f39f75)) | -| ap-southeast-2 | [ami-0681743c5235cb677](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0681743c5235cb677) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0681743c5235cb677)) | -| ca-central-1 | [ami-0dfcf967a696ee901](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dfcf967a696ee901) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dfcf967a696ee901)) | -| eu-central-1 | [ami-07a8060b90f208cf2](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a8060b90f208cf2) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a8060b90f208cf2)) | -| eu-north-1 | [ami-0f25dd1f2ab208b34](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f25dd1f2ab208b34) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f25dd1f2ab208b34)) | -| eu-west-1 | [ami-07453094c6d42a07e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07453094c6d42a07e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07453094c6d42a07e)) | -| eu-west-2 | [ami-03fa8e7cff9293332](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03fa8e7cff9293332) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03fa8e7cff9293332)) | -| eu-west-3 | [ami-07aad42fdc4a7e79b](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07aad42fdc4a7e79b) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07aad42fdc4a7e79b)) | -| sa-east-1 | [ami-04cac088d12e5ebf0](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04cac088d12e5ebf0) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04cac088d12e5ebf0)) | -| us-east-1 | [ami-0c2c618b193741157](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c2c618b193741157) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c2c618b193741157)) | -| us-east-2 | [ami-012e1a22371695544](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-012e1a22371695544) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-012e1a22371695544)) | -| us-west-1 | [ami-00f0f067a7d90b7e4](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00f0f067a7d90b7e4) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00f0f067a7d90b7e4)) | -| us-west-2 | [ami-0ed0fed8f127914fb](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed0fed8f127914fb) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed0fed8f127914fb)) | +| ap-northeast-1 | [ami-0bb4073495ff2021e](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb4073495ff2021e) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb4073495ff2021e)) | +| ap-northeast-2 | [ami-028d3d1675161319e](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-028d3d1675161319e) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-028d3d1675161319e)) | +| ap-south-1 | [ami-0f94a69d1ff0a7860](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f94a69d1ff0a7860) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f94a69d1ff0a7860)) | +| ap-southeast-1 | [ami-0f1c039e595dd2d02](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1c039e595dd2d02) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1c039e595dd2d02)) | +| ap-southeast-2 | [ami-0ca5b7ca3caa92758](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca5b7ca3caa92758) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca5b7ca3caa92758)) | +| ca-central-1 | [ami-05a3c167410bf6b35](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05a3c167410bf6b35) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05a3c167410bf6b35)) | +| eu-central-1 | [ami-02df82b83ad2cdaec](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02df82b83ad2cdaec) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02df82b83ad2cdaec)) | +| eu-north-1 | [ami-0f7b7e2bef1209f6c](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7b7e2bef1209f6c) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7b7e2bef1209f6c)) | +| eu-west-1 | [ami-09234e83a8015efa4](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09234e83a8015efa4) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09234e83a8015efa4)) | +| eu-west-2 | [ami-091a16ac6bd29bdd3](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091a16ac6bd29bdd3) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-091a16ac6bd29bdd3)) | +| eu-west-3 | [ami-084cb673481c3f793](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-084cb673481c3f793) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-084cb673481c3f793)) | +| sa-east-1 | [ami-014d631c23ebf306a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014d631c23ebf306a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-014d631c23ebf306a)) | +| us-east-1 | [ami-04a29b11e34acf54d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04a29b11e34acf54d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a29b11e34acf54d)) | +| us-east-2 | [ami-0d9445885a19e00ca](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d9445885a19e00ca) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d9445885a19e00ca)) | +| us-west-1 | [ami-0bef2dc6d3f4e19a2](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bef2dc6d3f4e19a2) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bef2dc6d3f4e19a2)) | +| us-west-2 | [ami-0af07dadd734834a7](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0af07dadd734834a7) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0af07dadd734834a7)) |

-### Alpine Linux Edge (2019-05-28) +### Alpine Linux Edge (2019-06-11)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20190528032210 | +| Region | alpine-ami-edge-x86_64-20190611031724 | | ------ | --- | -| ap-northeast-1 | [ami-03a19ed410069a4d8](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03a19ed410069a4d8) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03a19ed410069a4d8)) | -| ap-northeast-2 | [ami-05988a6c4660792ce](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05988a6c4660792ce) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05988a6c4660792ce)) | -| ap-south-1 | [ami-08aaeba360cdab5a4](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08aaeba360cdab5a4) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08aaeba360cdab5a4)) | -| ap-southeast-1 | [ami-01ae6c2b20966a358](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ae6c2b20966a358) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01ae6c2b20966a358)) | -| ap-southeast-2 | [ami-00193ff2f592dc22c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00193ff2f592dc22c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00193ff2f592dc22c)) | -| ca-central-1 | [ami-086b7f5aa4cf0194e](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-086b7f5aa4cf0194e) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-086b7f5aa4cf0194e)) | -| eu-central-1 | [ami-089db5b316937779b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089db5b316937779b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089db5b316937779b)) | -| eu-north-1 | [ami-02ed2f6e56115d6f2](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02ed2f6e56115d6f2) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02ed2f6e56115d6f2)) | -| eu-west-1 | [ami-0afa00bfa1c870509](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0afa00bfa1c870509) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0afa00bfa1c870509)) | -| eu-west-2 | [ami-0b1e309dfd74525f2](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1e309dfd74525f2) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1e309dfd74525f2)) | -| eu-west-3 | [ami-0404d34bb3376e370](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0404d34bb3376e370) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0404d34bb3376e370)) | -| sa-east-1 | [ami-053be80e8c7b1ad62](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053be80e8c7b1ad62) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-053be80e8c7b1ad62)) | -| us-east-1 | [ami-0d1ea89d2b00334f5](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d1ea89d2b00334f5) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d1ea89d2b00334f5)) | -| us-east-2 | [ami-0939714c9fe9ec10e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0939714c9fe9ec10e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0939714c9fe9ec10e)) | -| us-west-1 | [ami-0b9c5086efa0f067b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9c5086efa0f067b) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9c5086efa0f067b)) | -| us-west-2 | [ami-0719ffe4d94e67432](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0719ffe4d94e67432) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0719ffe4d94e67432)) | +| ap-northeast-1 | [ami-0c97e7cdda534346b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c97e7cdda534346b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c97e7cdda534346b)) | +| ap-northeast-2 | [ami-00cceaf8288ee7386](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00cceaf8288ee7386) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00cceaf8288ee7386)) | +| ap-south-1 | [ami-09e1d1ef7cd517a64](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e1d1ef7cd517a64) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e1d1ef7cd517a64)) | +| ap-southeast-1 | [ami-037323416789f3ce1](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-037323416789f3ce1) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-037323416789f3ce1)) | +| ap-southeast-2 | [ami-0d182653643257211](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d182653643257211) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d182653643257211)) | +| ca-central-1 | [ami-008c0bd239c168b34](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008c0bd239c168b34) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008c0bd239c168b34)) | +| eu-central-1 | [ami-0d808164dace58b4e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d808164dace58b4e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d808164dace58b4e)) | +| eu-north-1 | [ami-0c3152b1fd3b21ae9](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3152b1fd3b21ae9) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3152b1fd3b21ae9)) | +| eu-west-1 | [ami-031b9d6c98019452b](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-031b9d6c98019452b) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-031b9d6c98019452b)) | +| eu-west-2 | [ami-029d4646a3ea4fc0f](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029d4646a3ea4fc0f) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-029d4646a3ea4fc0f)) | +| eu-west-3 | [ami-0d1e6f66f5a7fc568](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d1e6f66f5a7fc568) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d1e6f66f5a7fc568)) | +| sa-east-1 | [ami-0b00f41d3df265296](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b00f41d3df265296) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b00f41d3df265296)) | +| us-east-1 | [ami-014a8bfc05b292686](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014a8bfc05b292686) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-014a8bfc05b292686)) | +| us-east-2 | [ami-0d99a25549626e548](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d99a25549626e548) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d99a25549626e548)) | +| us-west-1 | [ami-03f03158096a615cd](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03f03158096a615cd) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03f03158096a615cd)) | +| us-west-2 | [ami-09a619850cd514295](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a619850cd514295) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09a619850cd514295)) |

From 2ef5df09277e2fe653b0b9e73c70777acbc2a753 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Wed, 19 Jun 2019 22:34:47 -0700 Subject: [PATCH 042/125] * 3.10.0 has landed! * switch build name from 'current-x86_64' to 'v#_#-x86_64' to avoid any confusion when new versions roll out * resolvie-alpine.py.in - only warn about disabled regions once, instead of for each profile build * make-amis - tweak script output * new set of AMIs for edge, 3.10.0, and 3.9.4 --- README.md | 4 +- profiles/alpine.conf | 12 +-- profiles/test.conf | 17 ++-- profiles/version/3.10 | 14 ++++ profiles/version/current | 2 +- releases/README.md | 94 +++++++++++++-------- releases/alpine.yaml | 152 +++++++++++++++++----------------- scripts/make-amis | 4 +- scripts/resolve-profile.py.in | 9 +- 9 files changed, 179 insertions(+), 129 deletions(-) create mode 100644 profiles/version/3.10 diff --git a/README.md b/README.md index e767162..55f9a35 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,10 @@ aws ec2 describe-images \ Name=owner-id,Values=538276064493 \ Name=name,Values='alpine-ami-*' \ Name=state,Values=available \ - Name=tag:profile_build,Values=current-x86_64 \ + Name=tag:profile_build,Values=v3_10-x86_64 \ --query 'max_by(Images[], &CreationDate).ImageId' ``` -...will list the latest AMI id from our collection of 'current-x86_64' builds. +...will list the latest AMI id from our collection of 'v3_10-x86_64' builds. Refer to the AWS CLI Command Reference for [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) for more details. diff --git a/profiles/alpine.conf b/profiles/alpine.conf index b5ada55..e282e6f 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -1,9 +1,10 @@ ### Profile for Building the Publically-Available Alpine Linux AMIs # vim: ts=2 et: -version-current { include required("version/current") } -version-edge { include required("version/edge") } -arch-x86_64 { include required("arch/x86_64") } +version-3_10 { include required("version/3.10") } +version-3_9 { include required("version/3.9") } +version-edge { include required("version/edge") } +arch-x86_64 { include required("arch/x86_64") } # profile vars alpine { @@ -25,6 +26,7 @@ alpine { # Build definitions BUILDS { # merge version, arch, and profile vars - current-x86_64 = ${version-current} ${arch-x86_64} ${alpine} - edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} + v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} + v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} + edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} } diff --git a/profiles/test.conf b/profiles/test.conf index b4ecab8..ad0c1ff 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -1,10 +1,11 @@ ### Profile for Testing Builds # vim: ts=2 et: -version-current { include required("version/current") } -version-edge { include required("version/edge") } -arch-x86_64 { include required("arch/x86_64") } -arch-aarch64 { include required("arch/aarch64") } +version-3_10 { include required("version/3.10") } +version-3_9 { include required("version/3.9") } +version-edge { include required("version/edge") } +arch-x86_64 { include required("arch/x86_64") } +arch-aarch64 { include required("arch/aarch64") } # specific to this profile's builds test { @@ -16,7 +17,6 @@ test { build_region = "us-west-2" build_subnet = "subnet-033a30d7b5220d177" ami_regions { - us-west-1 = true ap-east-1 = true } } @@ -24,12 +24,13 @@ test { # Build definitions BUILDS { # merge version, arch, profile, and build vars - current-x86_64 = ${version-current} ${arch-x86_64} ${test} - edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} + v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} + v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${test} + edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} # aarch64 AMI builds are under development edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} { - # other subnet doesn't do a1.* instances + # other us-west-2 subnet doesn't do a1.* instances build_subnet = "subnet-08dfc622745f7d96a" } } diff --git a/profiles/version/3.10 b/profiles/version/3.10 new file mode 100644 index 0000000..efc938b --- /dev/null +++ b/profiles/version/3.10 @@ -0,0 +1,14 @@ +### version 3.10 vars +# vim: ts=2 et: + +# start with base vars +include required("../base/current") + +# set version-specific vars +version = "3.10" +release = "3.10.0" +end_of_life = "2021-05-01" +repos { + "http://dl-cdn.alpinelinux.org/alpine/v3.10/main" = true + "http://dl-cdn.alpinelinux.org/alpine/v3.10/community" = true +} diff --git a/profiles/version/current b/profiles/version/current index a02597f..7c7a975 120000 --- a/profiles/version/current +++ b/profiles/version/current @@ -1 +1 @@ -3.9 \ No newline at end of file +3.10 \ No newline at end of file diff --git a/releases/README.md b/releases/README.md index 3894bc0..9ec5dd8 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,50 +28,74 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.9.4 (2019-06-11) +### Alpine Linux 3.10.0 (2019-06-20) +
click to show/hide

+ +| Region | alpine-ami-3.10.0-x86_64-r0 | +| ------ | --- | +| ap-northeast-1 | [ami-00d72ba9e4e50e6f0](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00d72ba9e4e50e6f0) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00d72ba9e4e50e6f0)) | +| ap-northeast-2 | [ami-0b2ab59439d69c87f](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b2ab59439d69c87f) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b2ab59439d69c87f)) | +| ap-south-1 | [ami-06ab2e1b19df43403](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06ab2e1b19df43403) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06ab2e1b19df43403)) | +| ap-southeast-1 | [ami-097e487f602370726](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097e487f602370726) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097e487f602370726)) | +| ap-southeast-2 | [ami-0f2248216c030f2ea](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2248216c030f2ea) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2248216c030f2ea)) | +| ca-central-1 | [ami-035f9ddc53b8e3c94](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035f9ddc53b8e3c94) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035f9ddc53b8e3c94)) | +| eu-central-1 | [ami-0c2583ed13862fb17](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c2583ed13862fb17) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c2583ed13862fb17)) | +| eu-north-1 | [ami-069c11c7844825375](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-069c11c7844825375) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-069c11c7844825375)) | +| eu-west-1 | [ami-076b4d480f72a117f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-076b4d480f72a117f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-076b4d480f72a117f)) | +| eu-west-2 | [ami-0a5d209eea58688c2](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5d209eea58688c2) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5d209eea58688c2)) | +| eu-west-3 | [ami-0385dc3d759aaa464](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0385dc3d759aaa464) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0385dc3d759aaa464)) | +| sa-east-1 | [ami-04ddd371cd342921d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ddd371cd342921d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ddd371cd342921d)) | +| us-east-1 | [ami-0647412cf72f247d9](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0647412cf72f247d9) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0647412cf72f247d9)) | +| us-east-2 | [ami-0fb394548acf15691](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb394548acf15691) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb394548acf15691)) | +| us-west-1 | [ami-04d80966c446c3f58](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d80966c446c3f58) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04d80966c446c3f58)) | +| us-west-2 | [ami-0c71a8664131b42b3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c71a8664131b42b3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c71a8664131b42b3)) | + +

+ +### Alpine Linux 3.9.4 (2019-06-20)
click to show/hide

| Region | alpine-ami-3.9.4-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-0bb4073495ff2021e](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb4073495ff2021e) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb4073495ff2021e)) | -| ap-northeast-2 | [ami-028d3d1675161319e](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-028d3d1675161319e) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-028d3d1675161319e)) | -| ap-south-1 | [ami-0f94a69d1ff0a7860](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f94a69d1ff0a7860) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f94a69d1ff0a7860)) | -| ap-southeast-1 | [ami-0f1c039e595dd2d02](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1c039e595dd2d02) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1c039e595dd2d02)) | -| ap-southeast-2 | [ami-0ca5b7ca3caa92758](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca5b7ca3caa92758) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca5b7ca3caa92758)) | -| ca-central-1 | [ami-05a3c167410bf6b35](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05a3c167410bf6b35) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05a3c167410bf6b35)) | -| eu-central-1 | [ami-02df82b83ad2cdaec](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02df82b83ad2cdaec) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02df82b83ad2cdaec)) | -| eu-north-1 | [ami-0f7b7e2bef1209f6c](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7b7e2bef1209f6c) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7b7e2bef1209f6c)) | -| eu-west-1 | [ami-09234e83a8015efa4](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09234e83a8015efa4) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09234e83a8015efa4)) | -| eu-west-2 | [ami-091a16ac6bd29bdd3](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091a16ac6bd29bdd3) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-091a16ac6bd29bdd3)) | -| eu-west-3 | [ami-084cb673481c3f793](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-084cb673481c3f793) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-084cb673481c3f793)) | -| sa-east-1 | [ami-014d631c23ebf306a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014d631c23ebf306a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-014d631c23ebf306a)) | -| us-east-1 | [ami-04a29b11e34acf54d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04a29b11e34acf54d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a29b11e34acf54d)) | -| us-east-2 | [ami-0d9445885a19e00ca](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d9445885a19e00ca) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d9445885a19e00ca)) | -| us-west-1 | [ami-0bef2dc6d3f4e19a2](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bef2dc6d3f4e19a2) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bef2dc6d3f4e19a2)) | -| us-west-2 | [ami-0af07dadd734834a7](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0af07dadd734834a7) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0af07dadd734834a7)) | +| ap-northeast-1 | [ami-03d9fcbacd2999688](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d9fcbacd2999688) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03d9fcbacd2999688)) | +| ap-northeast-2 | [ami-004989011ec957b83](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004989011ec957b83) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-004989011ec957b83)) | +| ap-south-1 | [ami-0cb67b835ca871537](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cb67b835ca871537) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb67b835ca871537)) | +| ap-southeast-1 | [ami-03f6391214dbfd225](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03f6391214dbfd225) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03f6391214dbfd225)) | +| ap-southeast-2 | [ami-0074f16503a9ebe8c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0074f16503a9ebe8c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0074f16503a9ebe8c)) | +| ca-central-1 | [ami-0a3cf4fc46141c449](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3cf4fc46141c449) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3cf4fc46141c449)) | +| eu-central-1 | [ami-007081891d730c5f1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007081891d730c5f1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-007081891d730c5f1)) | +| eu-north-1 | [ami-09267b5c6d7722fdd](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09267b5c6d7722fdd) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09267b5c6d7722fdd)) | +| eu-west-1 | [ami-0587fd7b04af5d01d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0587fd7b04af5d01d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0587fd7b04af5d01d)) | +| eu-west-2 | [ami-09b9943895590f23e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09b9943895590f23e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09b9943895590f23e)) | +| eu-west-3 | [ami-01dcaa2533a49748d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01dcaa2533a49748d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01dcaa2533a49748d)) | +| sa-east-1 | [ami-0645cb90aca8de136](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0645cb90aca8de136) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0645cb90aca8de136)) | +| us-east-1 | [ami-0ac744c9e5e2dcbcf](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ac744c9e5e2dcbcf) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ac744c9e5e2dcbcf)) | +| us-east-2 | [ami-074a01fd0b7de0135](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-074a01fd0b7de0135) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-074a01fd0b7de0135)) | +| us-west-1 | [ami-0a70d6f1ce22ddfb1](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a70d6f1ce22ddfb1) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a70d6f1ce22ddfb1)) | +| us-west-2 | [ami-006aeb6d57c92f978](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-006aeb6d57c92f978) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-006aeb6d57c92f978)) |

-### Alpine Linux Edge (2019-06-11) +### Alpine Linux Edge (2019-06-20)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20190611031724 | +| Region | alpine-ami-edge-x86_64-20190620045615 | | ------ | --- | -| ap-northeast-1 | [ami-0c97e7cdda534346b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c97e7cdda534346b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c97e7cdda534346b)) | -| ap-northeast-2 | [ami-00cceaf8288ee7386](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00cceaf8288ee7386) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00cceaf8288ee7386)) | -| ap-south-1 | [ami-09e1d1ef7cd517a64](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e1d1ef7cd517a64) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e1d1ef7cd517a64)) | -| ap-southeast-1 | [ami-037323416789f3ce1](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-037323416789f3ce1) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-037323416789f3ce1)) | -| ap-southeast-2 | [ami-0d182653643257211](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d182653643257211) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d182653643257211)) | -| ca-central-1 | [ami-008c0bd239c168b34](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008c0bd239c168b34) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008c0bd239c168b34)) | -| eu-central-1 | [ami-0d808164dace58b4e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d808164dace58b4e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d808164dace58b4e)) | -| eu-north-1 | [ami-0c3152b1fd3b21ae9](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3152b1fd3b21ae9) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3152b1fd3b21ae9)) | -| eu-west-1 | [ami-031b9d6c98019452b](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-031b9d6c98019452b) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-031b9d6c98019452b)) | -| eu-west-2 | [ami-029d4646a3ea4fc0f](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029d4646a3ea4fc0f) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-029d4646a3ea4fc0f)) | -| eu-west-3 | [ami-0d1e6f66f5a7fc568](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d1e6f66f5a7fc568) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d1e6f66f5a7fc568)) | -| sa-east-1 | [ami-0b00f41d3df265296](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b00f41d3df265296) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b00f41d3df265296)) | -| us-east-1 | [ami-014a8bfc05b292686](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014a8bfc05b292686) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-014a8bfc05b292686)) | -| us-east-2 | [ami-0d99a25549626e548](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d99a25549626e548) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d99a25549626e548)) | -| us-west-1 | [ami-03f03158096a615cd](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03f03158096a615cd) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03f03158096a615cd)) | -| us-west-2 | [ami-09a619850cd514295](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a619850cd514295) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09a619850cd514295)) | +| ap-northeast-1 | [ami-0367295ac0c2084ca](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0367295ac0c2084ca) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0367295ac0c2084ca)) | +| ap-northeast-2 | [ami-07a4067a66f4e23b6](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a4067a66f4e23b6) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07a4067a66f4e23b6)) | +| ap-south-1 | [ami-04ebb4432c4397e2e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ebb4432c4397e2e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ebb4432c4397e2e)) | +| ap-southeast-1 | [ami-0217796240e307162](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0217796240e307162) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0217796240e307162)) | +| ap-southeast-2 | [ami-0142f8bf8086dfd0c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0142f8bf8086dfd0c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0142f8bf8086dfd0c)) | +| ca-central-1 | [ami-0247aee175851e274](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0247aee175851e274) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0247aee175851e274)) | +| eu-central-1 | [ami-0c91f38db398f2f7f](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c91f38db398f2f7f) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c91f38db398f2f7f)) | +| eu-north-1 | [ami-002e8129cc99fd093](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-002e8129cc99fd093) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-002e8129cc99fd093)) | +| eu-west-1 | [ami-0fee135c59cc71f25](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fee135c59cc71f25) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fee135c59cc71f25)) | +| eu-west-2 | [ami-0310b08601e54617c](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0310b08601e54617c) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0310b08601e54617c)) | +| eu-west-3 | [ami-073c30e97d249582c](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073c30e97d249582c) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-073c30e97d249582c)) | +| sa-east-1 | [ami-0e2101521aaea4e64](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2101521aaea4e64) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2101521aaea4e64)) | +| us-east-1 | [ami-0ec61d009ea7c2ebf](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ec61d009ea7c2ebf) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ec61d009ea7c2ebf)) | +| us-east-2 | [ami-0b5da2ec658fc5f22](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b5da2ec658fc5f22) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b5da2ec658fc5f22)) | +| us-west-1 | [ami-0a581a1332d5ab453](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a581a1332d5ab453) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a581a1332d5ab453)) | +| us-west-2 | [ami-0c5e68fa70b5ebec3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c5e68fa70b5ebec3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c5e68fa70b5ebec3)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 1b40d41..ffa4572 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,85 +1,87 @@ -current-x86_64: +edge-x86_64: + edge: + alpine-ami-edge-x86_64-20190620045615: + description: Alpine Linux edge x86_64 20190620045615 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20190620045615' + end_of_life: '2019-06-21T04:56:15' + build_time: 1561007140 + artifacts: + ap-northeast-1: ami-0367295ac0c2084ca + ap-northeast-2: ami-07a4067a66f4e23b6 + ap-south-1: ami-04ebb4432c4397e2e + ap-southeast-1: ami-0217796240e307162 + ap-southeast-2: ami-0142f8bf8086dfd0c + ca-central-1: ami-0247aee175851e274 + eu-central-1: ami-0c91f38db398f2f7f + eu-north-1: ami-002e8129cc99fd093 + eu-west-1: ami-0fee135c59cc71f25 + eu-west-2: ami-0310b08601e54617c + eu-west-3: ami-073c30e97d249582c + sa-east-1: ami-0e2101521aaea4e64 + us-east-1: ami-0ec61d009ea7c2ebf + us-east-2: ami-0b5da2ec658fc5f22 + us-west-1: ami-0a581a1332d5ab453 + us-west-2: ami-0c5e68fa70b5ebec3 +v3_10-x86_64: + 3.10.0: + alpine-ami-3.10.0-x86_64-r0: + description: Alpine Linux 3.10.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.0 + arch: x86_64 + revision: r0 + end_of_life: '2021-05-01T00:00:00' + build_time: 1561007696 + artifacts: + ap-northeast-1: ami-00d72ba9e4e50e6f0 + ap-northeast-2: ami-0b2ab59439d69c87f + ap-south-1: ami-06ab2e1b19df43403 + ap-southeast-1: ami-097e487f602370726 + ap-southeast-2: ami-0f2248216c030f2ea + ca-central-1: ami-035f9ddc53b8e3c94 + eu-central-1: ami-0c2583ed13862fb17 + eu-north-1: ami-069c11c7844825375 + eu-west-1: ami-076b4d480f72a117f + eu-west-2: ami-0a5d209eea58688c2 + eu-west-3: ami-0385dc3d759aaa464 + sa-east-1: ami-04ddd371cd342921d + us-east-1: ami-0647412cf72f247d9 + us-east-2: ami-0fb394548acf15691 + us-west-1: ami-04d80966c446c3f58 + us-west-2: ami-0c71a8664131b42b3 +v3_9-x86_64: 3.9.4: alpine-ami-3.9.4-x86_64-r0: description: Alpine Linux 3.9.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine - profile_build: current-x86_64 + profile_build: v3_9-x86_64 version: '3.9' release: 3.9.4 arch: x86_64 revision: r0 end_of_life: '2021-01-01T00:00:00' - build_time: 1560223551 + build_time: 1561008208 artifacts: - ap-northeast-1: ami-0bb4073495ff2021e - ap-northeast-2: ami-028d3d1675161319e - ap-south-1: ami-0f94a69d1ff0a7860 - ap-southeast-1: ami-0f1c039e595dd2d02 - ap-southeast-2: ami-0ca5b7ca3caa92758 - ca-central-1: ami-05a3c167410bf6b35 - eu-central-1: ami-02df82b83ad2cdaec - eu-north-1: ami-0f7b7e2bef1209f6c - eu-west-1: ami-09234e83a8015efa4 - eu-west-2: ami-091a16ac6bd29bdd3 - eu-west-3: ami-084cb673481c3f793 - sa-east-1: ami-014d631c23ebf306a - us-east-1: ami-04a29b11e34acf54d - us-east-2: ami-0d9445885a19e00ca - us-west-1: ami-0bef2dc6d3f4e19a2 - us-west-2: ami-0af07dadd734834a7 -edge-x86_64: - edge: - alpine-ami-edge-x86_64-20190611013502: - description: Alpine Linux edge x86_64 20190611013502 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20190611013502' - end_of_life: '2019-06-12T01:35:02' - build_time: 1560217495 - artifacts: - ap-northeast-1: ami-0e4ad0a988beaadd0 - ap-northeast-2: ami-0fa8819de67a529ed - ap-south-1: ami-007b857e93d455a5d - ap-southeast-1: ami-06c7dbd709213a1af - ap-southeast-2: ami-0640965542f4783f9 - ca-central-1: ami-07d1273f35efb64d0 - eu-central-1: ami-0d19961f6fbb14cf2 - eu-north-1: ami-0c90cce137ba0a365 - eu-west-1: ami-0c902d47d3941eba5 - eu-west-2: ami-0ac5ef7a7cc272443 - eu-west-3: ami-0e5b8927e00c7d6fa - sa-east-1: ami-061957e3677b43094 - us-east-1: ami-012598956fe159ff9 - us-east-2: ami-039647ff1acb463a3 - us-west-1: ami-0edcc6f8b14fb9e29 - us-west-2: ami-08e91c3b5d1331347 - alpine-ami-edge-x86_64-20190611031724: - description: Alpine Linux edge x86_64 20190611031724 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20190611031724' - end_of_life: '2019-06-12T03:17:24' - build_time: 1560224089 - artifacts: - ap-northeast-1: ami-0c97e7cdda534346b - ap-northeast-2: ami-00cceaf8288ee7386 - ap-south-1: ami-09e1d1ef7cd517a64 - ap-southeast-1: ami-037323416789f3ce1 - ap-southeast-2: ami-0d182653643257211 - ca-central-1: ami-008c0bd239c168b34 - eu-central-1: ami-0d808164dace58b4e - eu-north-1: ami-0c3152b1fd3b21ae9 - eu-west-1: ami-031b9d6c98019452b - eu-west-2: ami-029d4646a3ea4fc0f - eu-west-3: ami-0d1e6f66f5a7fc568 - sa-east-1: ami-0b00f41d3df265296 - us-east-1: ami-014a8bfc05b292686 - us-east-2: ami-0d99a25549626e548 - us-west-1: ami-03f03158096a615cd - us-west-2: ami-09a619850cd514295 + ap-northeast-1: ami-03d9fcbacd2999688 + ap-northeast-2: ami-004989011ec957b83 + ap-south-1: ami-0cb67b835ca871537 + ap-southeast-1: ami-03f6391214dbfd225 + ap-southeast-2: ami-0074f16503a9ebe8c + ca-central-1: ami-0a3cf4fc46141c449 + eu-central-1: ami-007081891d730c5f1 + eu-north-1: ami-09267b5c6d7722fdd + eu-west-1: ami-0587fd7b04af5d01d + eu-west-2: ami-09b9943895590f23e + eu-west-3: ami-01dcaa2533a49748d + sa-east-1: ami-0645cb90aca8de136 + us-east-1: ami-0ac744c9e5e2dcbcf + us-east-2: ami-074a01fd0b7de0135 + us-west-1: ami-0a70d6f1ce22ddfb1 + us-west-2: ami-006aeb6d57c92f978 diff --git a/scripts/make-amis b/scripts/make-amis index bc9826f..45bccfd 100755 --- a/scripts/make-amis +++ b/scripts/make-amis @@ -18,7 +18,7 @@ PROFILE=$1; shift for BUILD in $BUILDS do - printf "\n*** %s ***\n\n" "$BUILD" + printf "\n*** Building %s/%s ***\n\n" "$PROFILE" "$BUILD" BUILD_DIR="profile/$PROFILE/$BUILD" # execute packer, capture output and exit code @@ -35,3 +35,5 @@ do grep -q 'is used by an existing AMI' "$BUILD_DIR/output" || exit "$EXIT" fi done + +echo "\n=== DONE ===\n" diff --git a/scripts/resolve-profile.py.in b/scripts/resolve-profile.py.in index d348f32..884cd2d 100644 --- a/scripts/resolve-profile.py.in +++ b/scripts/resolve-profile.py.in @@ -79,9 +79,15 @@ for region in AWS.get_available_regions('ec2'): all_regions[region] = True sys.stderr.write("\n") +for region, available in all_regions.items(): + if available is False: + sys.stderr.write(f"*** WARNING: skipping disabled region {region}\n") + +print() + # parse/resolve HOCON profile's builds' config for build, cfg in BUILDS.items(): - print(f"\n>>> Resolving configuration for '{build}'") + print(f">>> Resolving configuration for '{build}'") build_dir = os.path.join(PROFILE_DIR, build) # make a fresh profile build directory @@ -116,7 +122,6 @@ for build, cfg in BUILDS.items(): if enabled is not False or region not in cfg['ami_regions']: continue if cfg['ami_regions'][region] not in [None, False]: - sys.stderr.write(f"*** WARNING: skipping disabled region {region}\n") cfg['ami_regions'][region] = False # fold dict vars to scalars From b4baa30e52d5115102470ad49e04b102a3c559ff Mon Sep 17 00:00:00 2001 From: tomalok Date: Fri, 12 Jul 2019 09:00:48 -0700 Subject: [PATCH 043/125] alpine 3.10.1 release (#52) --- profiles/version/3.10 | 2 +- releases/README.md | 60 ++++++++++++++++++++++++++----------- releases/alpine.yaml | 70 ++++++++++++++++++++++++++++++------------- 3 files changed, 92 insertions(+), 40 deletions(-) diff --git a/profiles/version/3.10 b/profiles/version/3.10 index efc938b..412908a 100644 --- a/profiles/version/3.10 +++ b/profiles/version/3.10 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.10" -release = "3.10.0" +release = "3.10.1" end_of_life = "2021-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.10/main" = true diff --git a/releases/README.md b/releases/README.md index 9ec5dd8..d1f923c 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,6 +28,30 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs +### Alpine Linux 3.10.1 (2019-07-12) +
click to show/hide

+ +| Region | alpine-ami-3.10.1-x86_64-r0 | +| ------ | --- | +| ap-northeast-1 | [ami-039a6734ca3e107c2](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039a6734ca3e107c2) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-039a6734ca3e107c2)) | +| ap-northeast-2 | [ami-0fc9157e14e1701ea](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc9157e14e1701ea) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc9157e14e1701ea)) | +| ap-south-1 | [ami-0f704cf587a1bd591](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f704cf587a1bd591) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f704cf587a1bd591)) | +| ap-southeast-1 | [ami-04ee093ad3986c1e2](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ee093ad3986c1e2) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ee093ad3986c1e2)) | +| ap-southeast-2 | [ami-08b686d005668aa12](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b686d005668aa12) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08b686d005668aa12)) | +| ca-central-1 | [ami-073a7bdf1f93fdf07](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073a7bdf1f93fdf07) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-073a7bdf1f93fdf07)) | +| eu-central-1 | [ami-02b0787907fb72c16](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02b0787907fb72c16) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02b0787907fb72c16)) | +| eu-north-1 | [ami-020c6eab877f87e9c](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020c6eab877f87e9c) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-020c6eab877f87e9c)) | +| eu-west-1 | [ami-08f5d4eaae3855536](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f5d4eaae3855536) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08f5d4eaae3855536)) | +| eu-west-2 | [ami-01fe12a7b5f0ae5e4](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01fe12a7b5f0ae5e4) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01fe12a7b5f0ae5e4)) | +| eu-west-3 | [ami-07098b9dc4e34adee](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07098b9dc4e34adee) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07098b9dc4e34adee)) | +| sa-east-1 | [ami-06b3a596069b29720](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b3a596069b29720) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b3a596069b29720)) | +| us-east-1 | [ami-0cce76b5f0a9c52f3](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cce76b5f0a9c52f3) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cce76b5f0a9c52f3)) | +| us-east-2 | [ami-0e0eea8fb3cea9bf6](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e0eea8fb3cea9bf6) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e0eea8fb3cea9bf6)) | +| us-west-1 | [ami-0db3b834555de24aa](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0db3b834555de24aa) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0db3b834555de24aa)) | +| us-west-2 | [ami-01ddc73ca7c75f53d](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ddc73ca7c75f53d) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01ddc73ca7c75f53d)) | + +

+ ### Alpine Linux 3.10.0 (2019-06-20)
click to show/hide

@@ -76,26 +100,26 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am

-### Alpine Linux Edge (2019-06-20) +### Alpine Linux Edge (2019-07-12)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20190620045615 | +| Region | alpine-ami-edge-x86_64-20190712152706 | | ------ | --- | -| ap-northeast-1 | [ami-0367295ac0c2084ca](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0367295ac0c2084ca) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0367295ac0c2084ca)) | -| ap-northeast-2 | [ami-07a4067a66f4e23b6](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a4067a66f4e23b6) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07a4067a66f4e23b6)) | -| ap-south-1 | [ami-04ebb4432c4397e2e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ebb4432c4397e2e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ebb4432c4397e2e)) | -| ap-southeast-1 | [ami-0217796240e307162](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0217796240e307162) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0217796240e307162)) | -| ap-southeast-2 | [ami-0142f8bf8086dfd0c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0142f8bf8086dfd0c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0142f8bf8086dfd0c)) | -| ca-central-1 | [ami-0247aee175851e274](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0247aee175851e274) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0247aee175851e274)) | -| eu-central-1 | [ami-0c91f38db398f2f7f](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c91f38db398f2f7f) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c91f38db398f2f7f)) | -| eu-north-1 | [ami-002e8129cc99fd093](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-002e8129cc99fd093) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-002e8129cc99fd093)) | -| eu-west-1 | [ami-0fee135c59cc71f25](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fee135c59cc71f25) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fee135c59cc71f25)) | -| eu-west-2 | [ami-0310b08601e54617c](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0310b08601e54617c) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0310b08601e54617c)) | -| eu-west-3 | [ami-073c30e97d249582c](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073c30e97d249582c) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-073c30e97d249582c)) | -| sa-east-1 | [ami-0e2101521aaea4e64](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2101521aaea4e64) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2101521aaea4e64)) | -| us-east-1 | [ami-0ec61d009ea7c2ebf](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ec61d009ea7c2ebf) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ec61d009ea7c2ebf)) | -| us-east-2 | [ami-0b5da2ec658fc5f22](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b5da2ec658fc5f22) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b5da2ec658fc5f22)) | -| us-west-1 | [ami-0a581a1332d5ab453](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a581a1332d5ab453) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a581a1332d5ab453)) | -| us-west-2 | [ami-0c5e68fa70b5ebec3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c5e68fa70b5ebec3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c5e68fa70b5ebec3)) | +| ap-northeast-1 | [ami-03529f4b01b3ff4d2](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03529f4b01b3ff4d2) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03529f4b01b3ff4d2)) | +| ap-northeast-2 | [ami-033415c5ef8fc23a5](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-033415c5ef8fc23a5) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-033415c5ef8fc23a5)) | +| ap-south-1 | [ami-0467b6e5e38f5085f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0467b6e5e38f5085f) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0467b6e5e38f5085f)) | +| ap-southeast-1 | [ami-03fe517dfde26c76d](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03fe517dfde26c76d) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03fe517dfde26c76d)) | +| ap-southeast-2 | [ami-0c115523398cf0074](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c115523398cf0074) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c115523398cf0074)) | +| ca-central-1 | [ami-030c1fe435b2a6b42](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030c1fe435b2a6b42) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-030c1fe435b2a6b42)) | +| eu-central-1 | [ami-0faa56a118e5d5107](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0faa56a118e5d5107) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0faa56a118e5d5107)) | +| eu-north-1 | [ami-04dbb65ab0d53d6ae](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04dbb65ab0d53d6ae) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04dbb65ab0d53d6ae)) | +| eu-west-1 | [ami-0b6628874c765750e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6628874c765750e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6628874c765750e)) | +| eu-west-2 | [ami-07bb0e2fe1405fb68](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bb0e2fe1405fb68) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb0e2fe1405fb68)) | +| eu-west-3 | [ami-056ef01cbdab4ff2d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-056ef01cbdab4ff2d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-056ef01cbdab4ff2d)) | +| sa-east-1 | [ami-0806e34494b838a44](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0806e34494b838a44) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0806e34494b838a44)) | +| us-east-1 | [ami-0a43d81e6daed9bb6](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a43d81e6daed9bb6) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a43d81e6daed9bb6)) | +| us-east-2 | [ami-0fd554560b36e0626](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fd554560b36e0626) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fd554560b36e0626)) | +| us-west-1 | [ami-079d3be78a25ec349](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-079d3be78a25ec349) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-079d3be78a25ec349)) | +| us-west-2 | [ami-0e8ecf7c0ae98cb6a](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e8ecf7c0ae98cb6a) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e8ecf7c0ae98cb6a)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index ffa4572..c71c9f6 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,32 +1,32 @@ edge-x86_64: edge: - alpine-ami-edge-x86_64-20190620045615: - description: Alpine Linux edge x86_64 20190620045615 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-edge-x86_64-20190712152706: + description: Alpine Linux edge x86_64 20190712152706 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: edge-x86_64 version: edge release: edge arch: x86_64 - revision: '20190620045615' - end_of_life: '2019-06-21T04:56:15' - build_time: 1561007140 + revision: '20190712152706' + end_of_life: '2019-07-13T15:27:06' + build_time: 1562945782 artifacts: - ap-northeast-1: ami-0367295ac0c2084ca - ap-northeast-2: ami-07a4067a66f4e23b6 - ap-south-1: ami-04ebb4432c4397e2e - ap-southeast-1: ami-0217796240e307162 - ap-southeast-2: ami-0142f8bf8086dfd0c - ca-central-1: ami-0247aee175851e274 - eu-central-1: ami-0c91f38db398f2f7f - eu-north-1: ami-002e8129cc99fd093 - eu-west-1: ami-0fee135c59cc71f25 - eu-west-2: ami-0310b08601e54617c - eu-west-3: ami-073c30e97d249582c - sa-east-1: ami-0e2101521aaea4e64 - us-east-1: ami-0ec61d009ea7c2ebf - us-east-2: ami-0b5da2ec658fc5f22 - us-west-1: ami-0a581a1332d5ab453 - us-west-2: ami-0c5e68fa70b5ebec3 + ap-northeast-1: ami-03529f4b01b3ff4d2 + ap-northeast-2: ami-033415c5ef8fc23a5 + ap-south-1: ami-0467b6e5e38f5085f + ap-southeast-1: ami-03fe517dfde26c76d + ap-southeast-2: ami-0c115523398cf0074 + ca-central-1: ami-030c1fe435b2a6b42 + eu-central-1: ami-0faa56a118e5d5107 + eu-north-1: ami-04dbb65ab0d53d6ae + eu-west-1: ami-0b6628874c765750e + eu-west-2: ami-07bb0e2fe1405fb68 + eu-west-3: ami-056ef01cbdab4ff2d + sa-east-1: ami-0806e34494b838a44 + us-east-1: ami-0a43d81e6daed9bb6 + us-east-2: ami-0fd554560b36e0626 + us-west-1: ami-079d3be78a25ec349 + us-west-2: ami-0e8ecf7c0ae98cb6a v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -56,6 +56,34 @@ v3_10-x86_64: us-east-2: ami-0fb394548acf15691 us-west-1: ami-04d80966c446c3f58 us-west-2: ami-0c71a8664131b42b3 + 3.10.1: + alpine-ami-3.10.1-x86_64-r0: + description: Alpine Linux 3.10.1 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.1 + arch: x86_64 + revision: r0 + end_of_life: '2021-05-01T00:00:00' + build_time: 1562946814 + artifacts: + ap-northeast-1: ami-039a6734ca3e107c2 + ap-northeast-2: ami-0fc9157e14e1701ea + ap-south-1: ami-0f704cf587a1bd591 + ap-southeast-1: ami-04ee093ad3986c1e2 + ap-southeast-2: ami-08b686d005668aa12 + ca-central-1: ami-073a7bdf1f93fdf07 + eu-central-1: ami-02b0787907fb72c16 + eu-north-1: ami-020c6eab877f87e9c + eu-west-1: ami-08f5d4eaae3855536 + eu-west-2: ami-01fe12a7b5f0ae5e4 + eu-west-3: ami-07098b9dc4e34adee + sa-east-1: ami-06b3a596069b29720 + us-east-1: ami-0cce76b5f0a9c52f3 + us-east-2: ami-0e0eea8fb3cea9bf6 + us-west-1: ami-0db3b834555de24aa + us-west-2: ami-01ddc73ca7c75f53d v3_9-x86_64: 3.9.4: alpine-ami-3.9.4-x86_64-r0: From 0f1cc5c4b2ebdb50c145c2708ee7b41f35ea64f9 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sat, 13 Jul 2019 10:12:40 -0700 Subject: [PATCH 044/125] Latest AMIs per Version in releases/README.md Only keep the latest AMIs per version in releases/README.md instead of per release. --- releases/README.md | 24 ------------------- scripts/gen-release-readme.py.in | 40 ++++++++++++++++++-------------- 2 files changed, 22 insertions(+), 42 deletions(-) diff --git a/releases/README.md b/releases/README.md index d1f923c..7955ac3 100644 --- a/releases/README.md +++ b/releases/README.md @@ -52,30 +52,6 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am

-### Alpine Linux 3.10.0 (2019-06-20) -
click to show/hide

- -| Region | alpine-ami-3.10.0-x86_64-r0 | -| ------ | --- | -| ap-northeast-1 | [ami-00d72ba9e4e50e6f0](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00d72ba9e4e50e6f0) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00d72ba9e4e50e6f0)) | -| ap-northeast-2 | [ami-0b2ab59439d69c87f](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b2ab59439d69c87f) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b2ab59439d69c87f)) | -| ap-south-1 | [ami-06ab2e1b19df43403](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06ab2e1b19df43403) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06ab2e1b19df43403)) | -| ap-southeast-1 | [ami-097e487f602370726](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097e487f602370726) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097e487f602370726)) | -| ap-southeast-2 | [ami-0f2248216c030f2ea](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2248216c030f2ea) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2248216c030f2ea)) | -| ca-central-1 | [ami-035f9ddc53b8e3c94](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035f9ddc53b8e3c94) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035f9ddc53b8e3c94)) | -| eu-central-1 | [ami-0c2583ed13862fb17](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c2583ed13862fb17) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c2583ed13862fb17)) | -| eu-north-1 | [ami-069c11c7844825375](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-069c11c7844825375) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-069c11c7844825375)) | -| eu-west-1 | [ami-076b4d480f72a117f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-076b4d480f72a117f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-076b4d480f72a117f)) | -| eu-west-2 | [ami-0a5d209eea58688c2](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5d209eea58688c2) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5d209eea58688c2)) | -| eu-west-3 | [ami-0385dc3d759aaa464](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0385dc3d759aaa464) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0385dc3d759aaa464)) | -| sa-east-1 | [ami-04ddd371cd342921d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ddd371cd342921d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ddd371cd342921d)) | -| us-east-1 | [ami-0647412cf72f247d9](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0647412cf72f247d9) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0647412cf72f247d9)) | -| us-east-2 | [ami-0fb394548acf15691](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb394548acf15691) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb394548acf15691)) | -| us-west-1 | [ami-04d80966c446c3f58](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d80966c446c3f58) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04d80966c446c3f58)) | -| us-west-2 | [ami-0c71a8664131b42b3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c71a8664131b42b3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c71a8664131b42b3)) | - -

- ### Alpine Linux 3.9.4 (2019-06-20)
click to show/hide

diff --git a/scripts/gen-release-readme.py.in b/scripts/gen-release-readme.py.in index 764869d..679d4f3 100644 --- a/scripts/gen-release-readme.py.in +++ b/scripts/gen-release-readme.py.in @@ -30,26 +30,29 @@ sections = {} for build, releases in RELEASES.items(): for release, amis in releases.items(): - if release in sections: - rel = sections[release] - else: - rel = { - 'built': {}, - 'name': {}, - 'ami': {} - } for name, info in amis.items(): + version = info['version'] arch = info['arch'] built = info['build_time'] - if (arch not in rel['built'] or - rel['built'][arch] < built): - rel['name'][arch] = name - rel['built'][arch] = built + if version in sections: + ver = sections[version] + else: + ver = { + 'release': '', + 'built': {}, + 'name': {}, + 'ami': {} + } + if (arch not in ver['built'] or + ver['built'][arch] < built): + ver['release'] = release + ver['name'][arch] = name + ver['built'][arch] = built for region, ami in info['artifacts'].items(): - if region not in rel['ami']: - rel['ami'][region] = {} - rel['ami'][region][arch] = ami - sections[release] = rel + if region not in ver['ami']: + ver['ami'][region] = {} + ver['ami'][region][arch] = ami + sections[version] = ver SECTION = """ ### Alpine Linux {release} ({date}) @@ -85,8 +88,9 @@ def ver_cmp(a, b): ami_list = "## AMIs\n" -for release in sorted(list(sections.keys()), key=functools.cmp_to_key(ver_cmp)): - info = sections[release] +for version in sorted(list(sections.keys()), key=functools.cmp_to_key(ver_cmp)): + info = sections[version] + release = info['release'] rows = [] rows.append('| Region |') rows.append('| ------ |') From 8a46e41b770702324ee7f0ba2fa4d3b1cf3e4abb Mon Sep 17 00:00:00 2001 From: tomalok Date: Sat, 27 Jul 2019 03:02:20 +0200 Subject: [PATCH 045/125] fix regression on nvme mdev script (#55) * sh doesn't allow nesting of prefix strip * also update some minor test profile bits * new AMI revisions (fixed nvme) * edge AMI release should remain a timestamp --- profiles/alpine.conf | 6 +- profiles/test.conf | 10 +-- releases/README.md | 108 +++++++++++++++---------------- releases/alpine.yaml | 123 ++++++++++++++++++++++++++++++------ scripts/nvme/nvme-ebs-links | 4 +- 5 files changed, 168 insertions(+), 83 deletions(-) diff --git a/profiles/alpine.conf b/profiles/alpine.conf index e282e6f..f89d8a6 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -9,7 +9,7 @@ arch-x86_64 { include required("arch/x86_64") } # profile vars alpine { # default profile revision is 'r0', reset for each new version release! - #revision = "r0" + revision = "r1" ami_desc_suffix = " - https://github.com/mcrute/alpine-ec2-ami" @@ -28,5 +28,7 @@ BUILDS { # merge version, arch, and profile vars v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} - edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} + edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} { + revision = "@NOW@" + } } diff --git a/profiles/test.conf b/profiles/test.conf index ad0c1ff..f6755a1 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -15,10 +15,10 @@ test { ami_name_prefix = "test-" ami_desc_prefix = "Alpine Test " build_region = "us-west-2" - build_subnet = "subnet-033a30d7b5220d177" - ami_regions { - ap-east-1 = true - } + build_subnet = "subnet-00c202262d97c0536" +# ami_regions { +# ap-east-1 = true +# } } # Build definitions @@ -31,6 +31,6 @@ BUILDS { # aarch64 AMI builds are under development edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} { # other us-west-2 subnet doesn't do a1.* instances - build_subnet = "subnet-08dfc622745f7d96a" + #build_subnet = "subnet-08dfc622745f7d96a" } } diff --git a/releases/README.md b/releases/README.md index 7955ac3..0b6b7bc 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,74 +28,74 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.10.1 (2019-07-12) +### Alpine Linux 3.10.1 (2019-07-26)

click to show/hide

-| Region | alpine-ami-3.10.1-x86_64-r0 | +| Region | alpine-ami-3.10.1-x86_64-r1 | | ------ | --- | -| ap-northeast-1 | [ami-039a6734ca3e107c2](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039a6734ca3e107c2) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-039a6734ca3e107c2)) | -| ap-northeast-2 | [ami-0fc9157e14e1701ea](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc9157e14e1701ea) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc9157e14e1701ea)) | -| ap-south-1 | [ami-0f704cf587a1bd591](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f704cf587a1bd591) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f704cf587a1bd591)) | -| ap-southeast-1 | [ami-04ee093ad3986c1e2](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ee093ad3986c1e2) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ee093ad3986c1e2)) | -| ap-southeast-2 | [ami-08b686d005668aa12](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b686d005668aa12) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08b686d005668aa12)) | -| ca-central-1 | [ami-073a7bdf1f93fdf07](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073a7bdf1f93fdf07) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-073a7bdf1f93fdf07)) | -| eu-central-1 | [ami-02b0787907fb72c16](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02b0787907fb72c16) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02b0787907fb72c16)) | -| eu-north-1 | [ami-020c6eab877f87e9c](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020c6eab877f87e9c) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-020c6eab877f87e9c)) | -| eu-west-1 | [ami-08f5d4eaae3855536](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f5d4eaae3855536) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08f5d4eaae3855536)) | -| eu-west-2 | [ami-01fe12a7b5f0ae5e4](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01fe12a7b5f0ae5e4) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01fe12a7b5f0ae5e4)) | -| eu-west-3 | [ami-07098b9dc4e34adee](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07098b9dc4e34adee) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07098b9dc4e34adee)) | -| sa-east-1 | [ami-06b3a596069b29720](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b3a596069b29720) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b3a596069b29720)) | -| us-east-1 | [ami-0cce76b5f0a9c52f3](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cce76b5f0a9c52f3) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cce76b5f0a9c52f3)) | -| us-east-2 | [ami-0e0eea8fb3cea9bf6](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e0eea8fb3cea9bf6) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e0eea8fb3cea9bf6)) | -| us-west-1 | [ami-0db3b834555de24aa](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0db3b834555de24aa) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0db3b834555de24aa)) | -| us-west-2 | [ami-01ddc73ca7c75f53d](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ddc73ca7c75f53d) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01ddc73ca7c75f53d)) | +| ap-northeast-1 | [ami-0adeee26a46805278](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adeee26a46805278) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0adeee26a46805278)) | +| ap-northeast-2 | [ami-06637cd011ec49efa](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06637cd011ec49efa) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06637cd011ec49efa)) | +| ap-south-1 | [ami-09e1bd549945283a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e1bd549945283a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e1bd549945283a2)) | +| ap-southeast-1 | [ami-081de8e0c4d9e28e5](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-081de8e0c4d9e28e5) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-081de8e0c4d9e28e5)) | +| ap-southeast-2 | [ami-0e2c774fdc1d38ba1](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2c774fdc1d38ba1) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2c774fdc1d38ba1)) | +| ca-central-1 | [ami-02fed61c453469d90](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fed61c453469d90) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fed61c453469d90)) | +| eu-central-1 | [ami-0659cf3939d5818e6](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0659cf3939d5818e6) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0659cf3939d5818e6)) | +| eu-north-1 | [ami-0859a31a742c902ed](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0859a31a742c902ed) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0859a31a742c902ed)) | +| eu-west-1 | [ami-00fcd74ef57d7f27d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00fcd74ef57d7f27d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00fcd74ef57d7f27d)) | +| eu-west-2 | [ami-06e36c52d4a7c245a](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06e36c52d4a7c245a) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06e36c52d4a7c245a)) | +| eu-west-3 | [ami-06a5559ce996d5bac](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a5559ce996d5bac) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06a5559ce996d5bac)) | +| sa-east-1 | [ami-0087fd3ce3d62d34d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0087fd3ce3d62d34d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0087fd3ce3d62d34d)) | +| us-east-1 | [ami-063929a9ea787ced6](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063929a9ea787ced6) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063929a9ea787ced6)) | +| us-east-2 | [ami-0a5ef71ab2deee8fd](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5ef71ab2deee8fd) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5ef71ab2deee8fd)) | +| us-west-1 | [ami-04165aa967c5fb241](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04165aa967c5fb241) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04165aa967c5fb241)) | +| us-west-2 | [ami-08147c2b1a80b44c4](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08147c2b1a80b44c4) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08147c2b1a80b44c4)) |

-### Alpine Linux 3.9.4 (2019-06-20) +### Alpine Linux 3.9.4 (2019-07-26)
click to show/hide

-| Region | alpine-ami-3.9.4-x86_64-r0 | +| Region | alpine-ami-3.9.4-x86_64-r1 | | ------ | --- | -| ap-northeast-1 | [ami-03d9fcbacd2999688](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d9fcbacd2999688) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03d9fcbacd2999688)) | -| ap-northeast-2 | [ami-004989011ec957b83](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004989011ec957b83) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-004989011ec957b83)) | -| ap-south-1 | [ami-0cb67b835ca871537](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cb67b835ca871537) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb67b835ca871537)) | -| ap-southeast-1 | [ami-03f6391214dbfd225](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03f6391214dbfd225) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03f6391214dbfd225)) | -| ap-southeast-2 | [ami-0074f16503a9ebe8c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0074f16503a9ebe8c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0074f16503a9ebe8c)) | -| ca-central-1 | [ami-0a3cf4fc46141c449](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3cf4fc46141c449) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3cf4fc46141c449)) | -| eu-central-1 | [ami-007081891d730c5f1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007081891d730c5f1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-007081891d730c5f1)) | -| eu-north-1 | [ami-09267b5c6d7722fdd](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09267b5c6d7722fdd) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09267b5c6d7722fdd)) | -| eu-west-1 | [ami-0587fd7b04af5d01d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0587fd7b04af5d01d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0587fd7b04af5d01d)) | -| eu-west-2 | [ami-09b9943895590f23e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09b9943895590f23e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09b9943895590f23e)) | -| eu-west-3 | [ami-01dcaa2533a49748d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01dcaa2533a49748d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01dcaa2533a49748d)) | -| sa-east-1 | [ami-0645cb90aca8de136](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0645cb90aca8de136) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0645cb90aca8de136)) | -| us-east-1 | [ami-0ac744c9e5e2dcbcf](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ac744c9e5e2dcbcf) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ac744c9e5e2dcbcf)) | -| us-east-2 | [ami-074a01fd0b7de0135](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-074a01fd0b7de0135) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-074a01fd0b7de0135)) | -| us-west-1 | [ami-0a70d6f1ce22ddfb1](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a70d6f1ce22ddfb1) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a70d6f1ce22ddfb1)) | -| us-west-2 | [ami-006aeb6d57c92f978](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-006aeb6d57c92f978) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-006aeb6d57c92f978)) | +| ap-northeast-1 | [ami-0d12649cf98b9c29b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d12649cf98b9c29b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d12649cf98b9c29b)) | +| ap-northeast-2 | [ami-004372232cf1a20ac](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004372232cf1a20ac) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-004372232cf1a20ac)) | +| ap-south-1 | [ami-091de53a3582f2779](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091de53a3582f2779) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-091de53a3582f2779)) | +| ap-southeast-1 | [ami-07f6f363322b884d5](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f6f363322b884d5) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f6f363322b884d5)) | +| ap-southeast-2 | [ami-0eeff0d7c1943665c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eeff0d7c1943665c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0eeff0d7c1943665c)) | +| ca-central-1 | [ami-011ad5e9b2fcfa1d5](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011ad5e9b2fcfa1d5) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011ad5e9b2fcfa1d5)) | +| eu-central-1 | [ami-0d4f6bb2a4f857256](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d4f6bb2a4f857256) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d4f6bb2a4f857256)) | +| eu-north-1 | [ami-01c04b1d21717da2d](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c04b1d21717da2d) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c04b1d21717da2d)) | +| eu-west-1 | [ami-0c9ac6e4570bad5c1](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9ac6e4570bad5c1) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9ac6e4570bad5c1)) | +| eu-west-2 | [ami-0bc07c10c240525e4](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc07c10c240525e4) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc07c10c240525e4)) | +| eu-west-3 | [ami-0ebda60768a596a7f](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ebda60768a596a7f) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ebda60768a596a7f)) | +| sa-east-1 | [ami-0a2d4fb282401447a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2d4fb282401447a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2d4fb282401447a)) | +| us-east-1 | [ami-0a8b8edcf88c2e496](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8b8edcf88c2e496) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8b8edcf88c2e496)) | +| us-east-2 | [ami-030ce78952c4c097c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030ce78952c4c097c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-030ce78952c4c097c)) | +| us-west-1 | [ami-0e27a7d83365f16be](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e27a7d83365f16be) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e27a7d83365f16be)) | +| us-west-2 | [ami-07f10e32e0621a4eb](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f10e32e0621a4eb) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07f10e32e0621a4eb)) |

-### Alpine Linux Edge (2019-07-12) +### Alpine Linux Edge (2019-07-27)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20190712152706 | +| Region | alpine-ami-edge-x86_64-20190727002240 | | ------ | --- | -| ap-northeast-1 | [ami-03529f4b01b3ff4d2](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03529f4b01b3ff4d2) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03529f4b01b3ff4d2)) | -| ap-northeast-2 | [ami-033415c5ef8fc23a5](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-033415c5ef8fc23a5) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-033415c5ef8fc23a5)) | -| ap-south-1 | [ami-0467b6e5e38f5085f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0467b6e5e38f5085f) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0467b6e5e38f5085f)) | -| ap-southeast-1 | [ami-03fe517dfde26c76d](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03fe517dfde26c76d) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03fe517dfde26c76d)) | -| ap-southeast-2 | [ami-0c115523398cf0074](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c115523398cf0074) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c115523398cf0074)) | -| ca-central-1 | [ami-030c1fe435b2a6b42](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030c1fe435b2a6b42) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-030c1fe435b2a6b42)) | -| eu-central-1 | [ami-0faa56a118e5d5107](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0faa56a118e5d5107) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0faa56a118e5d5107)) | -| eu-north-1 | [ami-04dbb65ab0d53d6ae](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04dbb65ab0d53d6ae) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04dbb65ab0d53d6ae)) | -| eu-west-1 | [ami-0b6628874c765750e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6628874c765750e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6628874c765750e)) | -| eu-west-2 | [ami-07bb0e2fe1405fb68](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bb0e2fe1405fb68) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb0e2fe1405fb68)) | -| eu-west-3 | [ami-056ef01cbdab4ff2d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-056ef01cbdab4ff2d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-056ef01cbdab4ff2d)) | -| sa-east-1 | [ami-0806e34494b838a44](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0806e34494b838a44) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0806e34494b838a44)) | -| us-east-1 | [ami-0a43d81e6daed9bb6](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a43d81e6daed9bb6) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a43d81e6daed9bb6)) | -| us-east-2 | [ami-0fd554560b36e0626](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fd554560b36e0626) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fd554560b36e0626)) | -| us-west-1 | [ami-079d3be78a25ec349](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-079d3be78a25ec349) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-079d3be78a25ec349)) | -| us-west-2 | [ami-0e8ecf7c0ae98cb6a](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e8ecf7c0ae98cb6a) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e8ecf7c0ae98cb6a)) | +| ap-northeast-1 | [ami-0c4b05d8ac25f8333](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c4b05d8ac25f8333) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c4b05d8ac25f8333)) | +| ap-northeast-2 | [ami-0b7287e80730d405a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b7287e80730d405a) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b7287e80730d405a)) | +| ap-south-1 | [ami-0668e96d07b4c5cd0](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0668e96d07b4c5cd0) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0668e96d07b4c5cd0)) | +| ap-southeast-1 | [ami-051fa7a03bd74b58d](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051fa7a03bd74b58d) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051fa7a03bd74b58d)) | +| ap-southeast-2 | [ami-0d3bd765176e0489b](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d3bd765176e0489b) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d3bd765176e0489b)) | +| ca-central-1 | [ami-001b638763735e3d7](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-001b638763735e3d7) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-001b638763735e3d7)) | +| eu-central-1 | [ami-06638105f6e72062b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06638105f6e72062b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06638105f6e72062b)) | +| eu-north-1 | [ami-02652b5900d1d6b2d](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02652b5900d1d6b2d) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02652b5900d1d6b2d)) | +| eu-west-1 | [ami-064c071f028660b8e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064c071f028660b8e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-064c071f028660b8e)) | +| eu-west-2 | [ami-01b93011a9e8fb2f9](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01b93011a9e8fb2f9) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01b93011a9e8fb2f9)) | +| eu-west-3 | [ami-0dc28d63cbf57a03f](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc28d63cbf57a03f) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc28d63cbf57a03f)) | +| sa-east-1 | [ami-08e65c7559326c353](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e65c7559326c353) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08e65c7559326c353)) | +| us-east-1 | [ami-042fef15f7a3cecb8](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042fef15f7a3cecb8) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042fef15f7a3cecb8)) | +| us-east-2 | [ami-08edf1150ecd85e18](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08edf1150ecd85e18) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08edf1150ecd85e18)) | +| us-west-1 | [ami-002a540d70018332e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-002a540d70018332e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-002a540d70018332e)) | +| us-west-2 | [ami-04e6cbf239d3d6723](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e6cbf239d3d6723) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04e6cbf239d3d6723)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index c71c9f6..79138b0 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,32 +1,59 @@ edge-x86_64: edge: - alpine-ami-edge-x86_64-20190712152706: - description: Alpine Linux edge x86_64 20190712152706 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-edge-x86_64-r1: + description: Alpine Linux edge x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: edge-x86_64 version: edge release: edge arch: x86_64 - revision: '20190712152706' - end_of_life: '2019-07-13T15:27:06' - build_time: 1562945782 + revision: r1 + end_of_life: '2019-07-27T23:26:24' + build_time: 1564184157 artifacts: - ap-northeast-1: ami-03529f4b01b3ff4d2 - ap-northeast-2: ami-033415c5ef8fc23a5 - ap-south-1: ami-0467b6e5e38f5085f - ap-southeast-1: ami-03fe517dfde26c76d - ap-southeast-2: ami-0c115523398cf0074 - ca-central-1: ami-030c1fe435b2a6b42 - eu-central-1: ami-0faa56a118e5d5107 - eu-north-1: ami-04dbb65ab0d53d6ae - eu-west-1: ami-0b6628874c765750e - eu-west-2: ami-07bb0e2fe1405fb68 - eu-west-3: ami-056ef01cbdab4ff2d - sa-east-1: ami-0806e34494b838a44 - us-east-1: ami-0a43d81e6daed9bb6 - us-east-2: ami-0fd554560b36e0626 - us-west-1: ami-079d3be78a25ec349 - us-west-2: ami-0e8ecf7c0ae98cb6a + ap-northeast-1: ami-0bf33aa7c22d9baa2 + ap-northeast-2: ami-0c70ff6aa9e968c53 + ap-south-1: ami-00837ab20c320f641 + ap-southeast-1: ami-0d62bf83d0ae6b478 + ap-southeast-2: ami-0534b78492e708ad8 + ca-central-1: ami-0fbcb246fd84682da + eu-central-1: ami-0b922ce94b41883a0 + eu-north-1: ami-04620f1f6b8407f65 + eu-west-1: ami-0cc1b66070b640f01 + eu-west-2: ami-09baff4c00e3e0ce2 + eu-west-3: ami-0f3788c21dfe04c22 + sa-east-1: ami-079c7b7aa0d0ee0a1 + us-east-1: ami-0acf9e7ac49698b80 + us-east-2: ami-094fc92fddc3a3be2 + us-west-1: ami-09d5e6573daf78927 + us-west-2: ami-0708c17fb90521af2 + alpine-ami-edge-x86_64-20190727002240: + description: Alpine Linux edge x86_64 20190727002240 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20190727002240' + end_of_life: '2019-07-28T00:22:40' + build_time: 1564187566 + artifacts: + ap-northeast-1: ami-0c4b05d8ac25f8333 + ap-northeast-2: ami-0b7287e80730d405a + ap-south-1: ami-0668e96d07b4c5cd0 + ap-southeast-1: ami-051fa7a03bd74b58d + ap-southeast-2: ami-0d3bd765176e0489b + ca-central-1: ami-001b638763735e3d7 + eu-central-1: ami-06638105f6e72062b + eu-north-1: ami-02652b5900d1d6b2d + eu-west-1: ami-064c071f028660b8e + eu-west-2: ami-01b93011a9e8fb2f9 + eu-west-3: ami-0dc28d63cbf57a03f + sa-east-1: ami-08e65c7559326c353 + us-east-1: ami-042fef15f7a3cecb8 + us-east-2: ami-08edf1150ecd85e18 + us-west-1: ami-002a540d70018332e + us-west-2: ami-04e6cbf239d3d6723 v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -84,6 +111,33 @@ v3_10-x86_64: us-east-2: ami-0e0eea8fb3cea9bf6 us-west-1: ami-0db3b834555de24aa us-west-2: ami-01ddc73ca7c75f53d + alpine-ami-3.10.1-x86_64-r1: + description: Alpine Linux 3.10.1 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.1 + arch: x86_64 + revision: r1 + end_of_life: '2021-05-01T00:00:00' + build_time: 1564184744 + artifacts: + ap-northeast-1: ami-0adeee26a46805278 + ap-northeast-2: ami-06637cd011ec49efa + ap-south-1: ami-09e1bd549945283a2 + ap-southeast-1: ami-081de8e0c4d9e28e5 + ap-southeast-2: ami-0e2c774fdc1d38ba1 + ca-central-1: ami-02fed61c453469d90 + eu-central-1: ami-0659cf3939d5818e6 + eu-north-1: ami-0859a31a742c902ed + eu-west-1: ami-00fcd74ef57d7f27d + eu-west-2: ami-06e36c52d4a7c245a + eu-west-3: ami-06a5559ce996d5bac + sa-east-1: ami-0087fd3ce3d62d34d + us-east-1: ami-063929a9ea787ced6 + us-east-2: ami-0a5ef71ab2deee8fd + us-west-1: ami-04165aa967c5fb241 + us-west-2: ami-08147c2b1a80b44c4 v3_9-x86_64: 3.9.4: alpine-ami-3.9.4-x86_64-r0: @@ -113,3 +167,30 @@ v3_9-x86_64: us-east-2: ami-074a01fd0b7de0135 us-west-1: ami-0a70d6f1ce22ddfb1 us-west-2: ami-006aeb6d57c92f978 + alpine-ami-3.9.4-x86_64-r1: + description: Alpine Linux 3.9.4 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_9-x86_64 + version: '3.9' + release: 3.9.4 + arch: x86_64 + revision: r1 + end_of_life: '2021-01-01T00:00:00' + build_time: 1564185305 + artifacts: + ap-northeast-1: ami-0d12649cf98b9c29b + ap-northeast-2: ami-004372232cf1a20ac + ap-south-1: ami-091de53a3582f2779 + ap-southeast-1: ami-07f6f363322b884d5 + ap-southeast-2: ami-0eeff0d7c1943665c + ca-central-1: ami-011ad5e9b2fcfa1d5 + eu-central-1: ami-0d4f6bb2a4f857256 + eu-north-1: ami-01c04b1d21717da2d + eu-west-1: ami-0c9ac6e4570bad5c1 + eu-west-2: ami-0bc07c10c240525e4 + eu-west-3: ami-0ebda60768a596a7f + sa-east-1: ami-0a2d4fb282401447a + us-east-1: ami-0a8b8edcf88c2e496 + us-east-2: ami-030ce78952c4c097c + us-west-1: ami-0e27a7d83365f16be + us-west-2: ami-07f10e32e0621a4eb diff --git a/scripts/nvme/nvme-ebs-links b/scripts/nvme/nvme-ebs-links index e418657..6ebdb10 100755 --- a/scripts/nvme/nvme-ebs-links +++ b/scripts/nvme/nvme-ebs-links @@ -31,7 +31,9 @@ case $ACTION in sleep 0.1 done # remove any leading '/dev/', 'sd', or 'xvd', and append partition - EBS="${${${EBS#/dev/}#sd}#xvd}$PART" + EBS=${EBS#/dev/} + EBS=${EBS#sd} + EBS=${EBS#xvd}$PART ln -sf "$MDEV" "sd$EBS" && log notice "Added sd$EBS symlink for $MDEV" ln -sf "$MDEV" "xvd$EBS" && log notice "Added xvd$EBS symlink for $MDEV" ;; From 6b5596e0e3ba875385d2f61759b83f47d1bffd8c Mon Sep 17 00:00:00 2001 From: tomalok Date: Sun, 25 Aug 2019 20:51:23 -0700 Subject: [PATCH 046/125] alpine 3.10.2 (and latest edge) AMIs (#56) --- profiles/version/3.10 | 2 +- releases/README.md | 72 ++++++++++++++++---------------- releases/alpine.yaml | 97 ++++++++++++++++++++++--------------------- 3 files changed, 86 insertions(+), 85 deletions(-) diff --git a/profiles/version/3.10 b/profiles/version/3.10 index 412908a..92046e8 100644 --- a/profiles/version/3.10 +++ b/profiles/version/3.10 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.10" -release = "3.10.1" +release = "3.10.2" end_of_life = "2021-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.10/main" = true diff --git a/releases/README.md b/releases/README.md index 0b6b7bc..8ba0b82 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,27 +28,27 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.10.1 (2019-07-26) +### Alpine Linux 3.10.2 (2019-08-26)
click to show/hide

-| Region | alpine-ami-3.10.1-x86_64-r1 | +| Region | alpine-ami-3.10.2-x86_64-r1 | | ------ | --- | -| ap-northeast-1 | [ami-0adeee26a46805278](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adeee26a46805278) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0adeee26a46805278)) | -| ap-northeast-2 | [ami-06637cd011ec49efa](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06637cd011ec49efa) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06637cd011ec49efa)) | -| ap-south-1 | [ami-09e1bd549945283a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e1bd549945283a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e1bd549945283a2)) | -| ap-southeast-1 | [ami-081de8e0c4d9e28e5](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-081de8e0c4d9e28e5) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-081de8e0c4d9e28e5)) | -| ap-southeast-2 | [ami-0e2c774fdc1d38ba1](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2c774fdc1d38ba1) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2c774fdc1d38ba1)) | -| ca-central-1 | [ami-02fed61c453469d90](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fed61c453469d90) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fed61c453469d90)) | -| eu-central-1 | [ami-0659cf3939d5818e6](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0659cf3939d5818e6) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0659cf3939d5818e6)) | -| eu-north-1 | [ami-0859a31a742c902ed](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0859a31a742c902ed) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0859a31a742c902ed)) | -| eu-west-1 | [ami-00fcd74ef57d7f27d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00fcd74ef57d7f27d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00fcd74ef57d7f27d)) | -| eu-west-2 | [ami-06e36c52d4a7c245a](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06e36c52d4a7c245a) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06e36c52d4a7c245a)) | -| eu-west-3 | [ami-06a5559ce996d5bac](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a5559ce996d5bac) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06a5559ce996d5bac)) | -| sa-east-1 | [ami-0087fd3ce3d62d34d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0087fd3ce3d62d34d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0087fd3ce3d62d34d)) | -| us-east-1 | [ami-063929a9ea787ced6](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063929a9ea787ced6) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063929a9ea787ced6)) | -| us-east-2 | [ami-0a5ef71ab2deee8fd](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5ef71ab2deee8fd) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5ef71ab2deee8fd)) | -| us-west-1 | [ami-04165aa967c5fb241](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04165aa967c5fb241) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04165aa967c5fb241)) | -| us-west-2 | [ami-08147c2b1a80b44c4](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08147c2b1a80b44c4) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08147c2b1a80b44c4)) | +| ap-northeast-1 | [ami-0865b6aea9d3d4e9a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0865b6aea9d3d4e9a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0865b6aea9d3d4e9a)) | +| ap-northeast-2 | [ami-0eb3806a09c62e80a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb3806a09c62e80a) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb3806a09c62e80a)) | +| ap-south-1 | [ami-03c079c4f6a77bcd8](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03c079c4f6a77bcd8) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03c079c4f6a77bcd8)) | +| ap-southeast-1 | [ami-03cbf9e5c42bd2de0](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cbf9e5c42bd2de0) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03cbf9e5c42bd2de0)) | +| ap-southeast-2 | [ami-040ee9c325bd773bb](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-040ee9c325bd773bb) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-040ee9c325bd773bb)) | +| ca-central-1 | [ami-0aeee1c23a65f09e5](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aeee1c23a65f09e5) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aeee1c23a65f09e5)) | +| eu-central-1 | [ami-01c4a5f25d39d8c1d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c4a5f25d39d8c1d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c4a5f25d39d8c1d)) | +| eu-north-1 | [ami-0ac4f026a4624309e](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ac4f026a4624309e) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ac4f026a4624309e)) | +| eu-west-1 | [ami-073456a92b131bee5](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073456a92b131bee5) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-073456a92b131bee5)) | +| eu-west-2 | [ami-04c585868e7f9016e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04c585868e7f9016e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04c585868e7f9016e)) | +| eu-west-3 | [ami-0196d7c3d0c2e5230](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0196d7c3d0c2e5230) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0196d7c3d0c2e5230)) | +| sa-east-1 | [ami-0437041273be4d2b3](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0437041273be4d2b3) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0437041273be4d2b3)) | +| us-east-1 | [ami-0b13bd8ab9492449c](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b13bd8ab9492449c) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b13bd8ab9492449c)) | +| us-east-2 | [ami-0a87fa8a73b9b850c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a87fa8a73b9b850c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a87fa8a73b9b850c)) | +| us-west-1 | [ami-009961e3d2d7ccaa8](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009961e3d2d7ccaa8) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-009961e3d2d7ccaa8)) | +| us-west-2 | [ami-0a083cc95e2bbc4b0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a083cc95e2bbc4b0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a083cc95e2bbc4b0)) |

@@ -76,26 +76,26 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am

-### Alpine Linux Edge (2019-07-27) +### Alpine Linux Edge (2019-08-26)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20190727002240 | +| Region | alpine-ami-edge-x86_64-20190826015716 | | ------ | --- | -| ap-northeast-1 | [ami-0c4b05d8ac25f8333](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c4b05d8ac25f8333) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c4b05d8ac25f8333)) | -| ap-northeast-2 | [ami-0b7287e80730d405a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b7287e80730d405a) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b7287e80730d405a)) | -| ap-south-1 | [ami-0668e96d07b4c5cd0](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0668e96d07b4c5cd0) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0668e96d07b4c5cd0)) | -| ap-southeast-1 | [ami-051fa7a03bd74b58d](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051fa7a03bd74b58d) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051fa7a03bd74b58d)) | -| ap-southeast-2 | [ami-0d3bd765176e0489b](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d3bd765176e0489b) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d3bd765176e0489b)) | -| ca-central-1 | [ami-001b638763735e3d7](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-001b638763735e3d7) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-001b638763735e3d7)) | -| eu-central-1 | [ami-06638105f6e72062b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06638105f6e72062b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06638105f6e72062b)) | -| eu-north-1 | [ami-02652b5900d1d6b2d](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02652b5900d1d6b2d) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02652b5900d1d6b2d)) | -| eu-west-1 | [ami-064c071f028660b8e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064c071f028660b8e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-064c071f028660b8e)) | -| eu-west-2 | [ami-01b93011a9e8fb2f9](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01b93011a9e8fb2f9) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01b93011a9e8fb2f9)) | -| eu-west-3 | [ami-0dc28d63cbf57a03f](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc28d63cbf57a03f) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc28d63cbf57a03f)) | -| sa-east-1 | [ami-08e65c7559326c353](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e65c7559326c353) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08e65c7559326c353)) | -| us-east-1 | [ami-042fef15f7a3cecb8](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042fef15f7a3cecb8) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042fef15f7a3cecb8)) | -| us-east-2 | [ami-08edf1150ecd85e18](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08edf1150ecd85e18) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08edf1150ecd85e18)) | -| us-west-1 | [ami-002a540d70018332e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-002a540d70018332e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-002a540d70018332e)) | -| us-west-2 | [ami-04e6cbf239d3d6723](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e6cbf239d3d6723) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04e6cbf239d3d6723)) | +| ap-northeast-1 | [ami-0aee477cc2cee23cf](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aee477cc2cee23cf) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aee477cc2cee23cf)) | +| ap-northeast-2 | [ami-05cbcb200dde2845b](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05cbcb200dde2845b) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05cbcb200dde2845b)) | +| ap-south-1 | [ami-0c3747e69c2496209](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3747e69c2496209) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3747e69c2496209)) | +| ap-southeast-1 | [ami-02f37bdd135ec4d42](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02f37bdd135ec4d42) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02f37bdd135ec4d42)) | +| ap-southeast-2 | [ami-0463b6ff7b57d9090](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0463b6ff7b57d9090) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0463b6ff7b57d9090)) | +| ca-central-1 | [ami-0e4a890b424d67f67](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e4a890b424d67f67) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e4a890b424d67f67)) | +| eu-central-1 | [ami-092b4f46b7d79af32](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092b4f46b7d79af32) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092b4f46b7d79af32)) | +| eu-north-1 | [ami-042a6066f12f93411](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042a6066f12f93411) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042a6066f12f93411)) | +| eu-west-1 | [ami-04b8b162151a2e45d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b8b162151a2e45d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04b8b162151a2e45d)) | +| eu-west-2 | [ami-0fa5a6db02d8cff64](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa5a6db02d8cff64) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa5a6db02d8cff64)) | +| eu-west-3 | [ami-07614b8be5de3b1a0](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07614b8be5de3b1a0) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07614b8be5de3b1a0)) | +| sa-east-1 | [ami-09324c8018c018931](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09324c8018c018931) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09324c8018c018931)) | +| us-east-1 | [ami-08f2e440a4fc821b0](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f2e440a4fc821b0) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08f2e440a4fc821b0)) | +| us-east-2 | [ami-002f49d922035cd6b](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-002f49d922035cd6b) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-002f49d922035cd6b)) | +| us-west-1 | [ami-0e146ed2f408cfaee](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e146ed2f408cfaee) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e146ed2f408cfaee)) | +| us-west-2 | [ami-052fcb0bc085a75a2](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052fcb0bc085a75a2) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-052fcb0bc085a75a2)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 79138b0..99a6c81 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,59 +1,32 @@ edge-x86_64: edge: - alpine-ami-edge-x86_64-r1: - description: Alpine Linux edge x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-edge-x86_64-20190826015716: + description: Alpine Linux edge x86_64 20190826015716 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: edge-x86_64 version: edge release: edge arch: x86_64 - revision: r1 - end_of_life: '2019-07-27T23:26:24' - build_time: 1564184157 + revision: '20190826015716' + end_of_life: '2019-08-27T01:57:16' + build_time: 1566785209 artifacts: - ap-northeast-1: ami-0bf33aa7c22d9baa2 - ap-northeast-2: ami-0c70ff6aa9e968c53 - ap-south-1: ami-00837ab20c320f641 - ap-southeast-1: ami-0d62bf83d0ae6b478 - ap-southeast-2: ami-0534b78492e708ad8 - ca-central-1: ami-0fbcb246fd84682da - eu-central-1: ami-0b922ce94b41883a0 - eu-north-1: ami-04620f1f6b8407f65 - eu-west-1: ami-0cc1b66070b640f01 - eu-west-2: ami-09baff4c00e3e0ce2 - eu-west-3: ami-0f3788c21dfe04c22 - sa-east-1: ami-079c7b7aa0d0ee0a1 - us-east-1: ami-0acf9e7ac49698b80 - us-east-2: ami-094fc92fddc3a3be2 - us-west-1: ami-09d5e6573daf78927 - us-west-2: ami-0708c17fb90521af2 - alpine-ami-edge-x86_64-20190727002240: - description: Alpine Linux edge x86_64 20190727002240 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20190727002240' - end_of_life: '2019-07-28T00:22:40' - build_time: 1564187566 - artifacts: - ap-northeast-1: ami-0c4b05d8ac25f8333 - ap-northeast-2: ami-0b7287e80730d405a - ap-south-1: ami-0668e96d07b4c5cd0 - ap-southeast-1: ami-051fa7a03bd74b58d - ap-southeast-2: ami-0d3bd765176e0489b - ca-central-1: ami-001b638763735e3d7 - eu-central-1: ami-06638105f6e72062b - eu-north-1: ami-02652b5900d1d6b2d - eu-west-1: ami-064c071f028660b8e - eu-west-2: ami-01b93011a9e8fb2f9 - eu-west-3: ami-0dc28d63cbf57a03f - sa-east-1: ami-08e65c7559326c353 - us-east-1: ami-042fef15f7a3cecb8 - us-east-2: ami-08edf1150ecd85e18 - us-west-1: ami-002a540d70018332e - us-west-2: ami-04e6cbf239d3d6723 + ap-northeast-1: ami-0aee477cc2cee23cf + ap-northeast-2: ami-05cbcb200dde2845b + ap-south-1: ami-0c3747e69c2496209 + ap-southeast-1: ami-02f37bdd135ec4d42 + ap-southeast-2: ami-0463b6ff7b57d9090 + ca-central-1: ami-0e4a890b424d67f67 + eu-central-1: ami-092b4f46b7d79af32 + eu-north-1: ami-042a6066f12f93411 + eu-west-1: ami-04b8b162151a2e45d + eu-west-2: ami-0fa5a6db02d8cff64 + eu-west-3: ami-07614b8be5de3b1a0 + sa-east-1: ami-09324c8018c018931 + us-east-1: ami-08f2e440a4fc821b0 + us-east-2: ami-002f49d922035cd6b + us-west-1: ami-0e146ed2f408cfaee + us-west-2: ami-052fcb0bc085a75a2 v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -138,6 +111,34 @@ v3_10-x86_64: us-east-2: ami-0a5ef71ab2deee8fd us-west-1: ami-04165aa967c5fb241 us-west-2: ami-08147c2b1a80b44c4 + 3.10.2: + alpine-ami-3.10.2-x86_64-r1: + description: Alpine Linux 3.10.2 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.2 + arch: x86_64 + revision: r1 + end_of_life: '2021-05-01T00:00:00' + build_time: 1566786155 + artifacts: + ap-northeast-1: ami-0865b6aea9d3d4e9a + ap-northeast-2: ami-0eb3806a09c62e80a + ap-south-1: ami-03c079c4f6a77bcd8 + ap-southeast-1: ami-03cbf9e5c42bd2de0 + ap-southeast-2: ami-040ee9c325bd773bb + ca-central-1: ami-0aeee1c23a65f09e5 + eu-central-1: ami-01c4a5f25d39d8c1d + eu-north-1: ami-0ac4f026a4624309e + eu-west-1: ami-073456a92b131bee5 + eu-west-2: ami-04c585868e7f9016e + eu-west-3: ami-0196d7c3d0c2e5230 + sa-east-1: ami-0437041273be4d2b3 + us-east-1: ami-0b13bd8ab9492449c + us-east-2: ami-0a87fa8a73b9b850c + us-west-1: ami-009961e3d2d7ccaa8 + us-west-2: ami-0a083cc95e2bbc4b0 v3_9-x86_64: 3.9.4: alpine-ami-3.9.4-x86_64-r0: From 8245073a8ac095ca369292a4cbced8dd2e39d158 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sat, 26 Oct 2019 13:32:36 -0700 Subject: [PATCH 047/125] Alpine-3.10.3 (and latest edge) Also includes fix for Packer regression affecting encrypted AMIs --- packer.conf | 4 +-- profiles/version/3.10 | 2 +- releases/README.md | 72 +++++++++++++++++++++---------------------- releases/alpine.yaml | 55 +++++++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 39 deletions(-) diff --git a/packer.conf b/packer.conf index f7e1548..789f330 100644 --- a/packer.conf +++ b/packer.conf @@ -27,7 +27,8 @@ builders = [ { volume_type = "gp2" device_name = "/dev/xvdf" - delete_on_termination = "true" + encrypted = "{{user `ami_encrypt`}}" + delete_on_termination = "true" volume_size = "{{user `ami_volume_size`}}" } ] @@ -57,7 +58,6 @@ builders = [ delete_on_termination = "true" volume_size = "{{user `ami_volume_size`}}" } - encrypt_boot = "{{user `ami_encrypt`}}" ena_support = "true" sriov_support = "true" ami_groups = "{{user `ami_access`}}" diff --git a/profiles/version/3.10 b/profiles/version/3.10 index 92046e8..8bd76d0 100644 --- a/profiles/version/3.10 +++ b/profiles/version/3.10 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.10" -release = "3.10.2" +release = "3.10.3" end_of_life = "2021-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.10/main" = true diff --git a/releases/README.md b/releases/README.md index 8ba0b82..4d3c53c 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,27 +28,27 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.10.2 (2019-08-26) +### Alpine Linux 3.10.3 (2019-10-26)
click to show/hide

-| Region | alpine-ami-3.10.2-x86_64-r1 | +| Region | alpine-ami-3.10.3-x86_64-r1 | | ------ | --- | -| ap-northeast-1 | [ami-0865b6aea9d3d4e9a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0865b6aea9d3d4e9a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0865b6aea9d3d4e9a)) | -| ap-northeast-2 | [ami-0eb3806a09c62e80a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb3806a09c62e80a) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb3806a09c62e80a)) | -| ap-south-1 | [ami-03c079c4f6a77bcd8](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03c079c4f6a77bcd8) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03c079c4f6a77bcd8)) | -| ap-southeast-1 | [ami-03cbf9e5c42bd2de0](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cbf9e5c42bd2de0) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03cbf9e5c42bd2de0)) | -| ap-southeast-2 | [ami-040ee9c325bd773bb](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-040ee9c325bd773bb) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-040ee9c325bd773bb)) | -| ca-central-1 | [ami-0aeee1c23a65f09e5](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aeee1c23a65f09e5) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aeee1c23a65f09e5)) | -| eu-central-1 | [ami-01c4a5f25d39d8c1d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c4a5f25d39d8c1d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c4a5f25d39d8c1d)) | -| eu-north-1 | [ami-0ac4f026a4624309e](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ac4f026a4624309e) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ac4f026a4624309e)) | -| eu-west-1 | [ami-073456a92b131bee5](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073456a92b131bee5) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-073456a92b131bee5)) | -| eu-west-2 | [ami-04c585868e7f9016e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04c585868e7f9016e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04c585868e7f9016e)) | -| eu-west-3 | [ami-0196d7c3d0c2e5230](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0196d7c3d0c2e5230) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0196d7c3d0c2e5230)) | -| sa-east-1 | [ami-0437041273be4d2b3](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0437041273be4d2b3) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0437041273be4d2b3)) | -| us-east-1 | [ami-0b13bd8ab9492449c](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b13bd8ab9492449c) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b13bd8ab9492449c)) | -| us-east-2 | [ami-0a87fa8a73b9b850c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a87fa8a73b9b850c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a87fa8a73b9b850c)) | -| us-west-1 | [ami-009961e3d2d7ccaa8](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009961e3d2d7ccaa8) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-009961e3d2d7ccaa8)) | -| us-west-2 | [ami-0a083cc95e2bbc4b0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a083cc95e2bbc4b0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a083cc95e2bbc4b0)) | +| ap-northeast-1 | [ami-0760cd78e75cb77a4](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0760cd78e75cb77a4) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0760cd78e75cb77a4)) | +| ap-northeast-2 | [ami-0e749a03d064c1e47](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e749a03d064c1e47) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e749a03d064c1e47)) | +| ap-south-1 | [ami-0a8839c12787f0c46](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8839c12787f0c46) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8839c12787f0c46)) | +| ap-southeast-1 | [ami-0f0e2be5d8c0110c1](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f0e2be5d8c0110c1) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f0e2be5d8c0110c1)) | +| ap-southeast-2 | [ami-0ca4caea0ce1f4a8a](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca4caea0ce1f4a8a) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca4caea0ce1f4a8a)) | +| ca-central-1 | [ami-016d172dee4ff4a22](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-016d172dee4ff4a22) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-016d172dee4ff4a22)) | +| eu-central-1 | [ami-04e50c8006d4bc2bf](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e50c8006d4bc2bf) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e50c8006d4bc2bf)) | +| eu-north-1 | [ami-00207f3df9a9cb088](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00207f3df9a9cb088) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00207f3df9a9cb088)) | +| eu-west-1 | [ami-01c1ec8fdefc61650](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c1ec8fdefc61650) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c1ec8fdefc61650)) | +| eu-west-2 | [ami-02520e7e046db5d8f](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02520e7e046db5d8f) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02520e7e046db5d8f)) | +| eu-west-3 | [ami-0ef9a828aded0a0de](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef9a828aded0a0de) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef9a828aded0a0de)) | +| sa-east-1 | [ami-0ee958f7773223770](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ee958f7773223770) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ee958f7773223770)) | +| us-east-1 | [ami-063cb098a86c1c4cc](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063cb098a86c1c4cc) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063cb098a86c1c4cc)) | +| us-east-2 | [ami-0110d80369eb75f49](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0110d80369eb75f49) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0110d80369eb75f49)) | +| us-west-1 | [ami-00b06ce695a617956](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00b06ce695a617956) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00b06ce695a617956)) | +| us-west-2 | [ami-0d0b7768c8cd9a8c8](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0b7768c8cd9a8c8) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0b7768c8cd9a8c8)) |

@@ -76,26 +76,26 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am

-### Alpine Linux Edge (2019-08-26) +### Alpine Linux Edge (2019-10-26)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20190826015716 | +| Region | alpine-ami-edge-x86_64-20191026200352 | | ------ | --- | -| ap-northeast-1 | [ami-0aee477cc2cee23cf](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aee477cc2cee23cf) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aee477cc2cee23cf)) | -| ap-northeast-2 | [ami-05cbcb200dde2845b](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05cbcb200dde2845b) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05cbcb200dde2845b)) | -| ap-south-1 | [ami-0c3747e69c2496209](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3747e69c2496209) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3747e69c2496209)) | -| ap-southeast-1 | [ami-02f37bdd135ec4d42](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02f37bdd135ec4d42) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02f37bdd135ec4d42)) | -| ap-southeast-2 | [ami-0463b6ff7b57d9090](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0463b6ff7b57d9090) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0463b6ff7b57d9090)) | -| ca-central-1 | [ami-0e4a890b424d67f67](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e4a890b424d67f67) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e4a890b424d67f67)) | -| eu-central-1 | [ami-092b4f46b7d79af32](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092b4f46b7d79af32) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092b4f46b7d79af32)) | -| eu-north-1 | [ami-042a6066f12f93411](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042a6066f12f93411) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042a6066f12f93411)) | -| eu-west-1 | [ami-04b8b162151a2e45d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b8b162151a2e45d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04b8b162151a2e45d)) | -| eu-west-2 | [ami-0fa5a6db02d8cff64](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa5a6db02d8cff64) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa5a6db02d8cff64)) | -| eu-west-3 | [ami-07614b8be5de3b1a0](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07614b8be5de3b1a0) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07614b8be5de3b1a0)) | -| sa-east-1 | [ami-09324c8018c018931](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09324c8018c018931) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09324c8018c018931)) | -| us-east-1 | [ami-08f2e440a4fc821b0](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f2e440a4fc821b0) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08f2e440a4fc821b0)) | -| us-east-2 | [ami-002f49d922035cd6b](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-002f49d922035cd6b) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-002f49d922035cd6b)) | -| us-west-1 | [ami-0e146ed2f408cfaee](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e146ed2f408cfaee) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e146ed2f408cfaee)) | -| us-west-2 | [ami-052fcb0bc085a75a2](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052fcb0bc085a75a2) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-052fcb0bc085a75a2)) | +| ap-northeast-1 | [ami-0112f6ea81c86d5e6](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0112f6ea81c86d5e6) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0112f6ea81c86d5e6)) | +| ap-northeast-2 | [ami-085769ebaedbfdf81](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-085769ebaedbfdf81) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-085769ebaedbfdf81)) | +| ap-south-1 | [ami-018d0a72b1c1b2923](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-018d0a72b1c1b2923) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-018d0a72b1c1b2923)) | +| ap-southeast-1 | [ami-0efbcf7df7751898a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0efbcf7df7751898a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0efbcf7df7751898a)) | +| ap-southeast-2 | [ami-06dc954ca0af33023](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06dc954ca0af33023) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06dc954ca0af33023)) | +| ca-central-1 | [ami-029fabbc15f6ec893](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029fabbc15f6ec893) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029fabbc15f6ec893)) | +| eu-central-1 | [ami-01353f3799d62f271](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01353f3799d62f271) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01353f3799d62f271)) | +| eu-north-1 | [ami-0787f149b1a3f8194](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0787f149b1a3f8194) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0787f149b1a3f8194)) | +| eu-west-1 | [ami-068378748044554e5](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068378748044554e5) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068378748044554e5)) | +| eu-west-2 | [ami-058faf9bf50c5fdc4](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-058faf9bf50c5fdc4) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-058faf9bf50c5fdc4)) | +| eu-west-3 | [ami-0f0bdda8a983eace3](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f0bdda8a983eace3) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f0bdda8a983eace3)) | +| sa-east-1 | [ami-08b88bdd43ac5d063](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b88bdd43ac5d063) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b88bdd43ac5d063)) | +| us-east-1 | [ami-0193a17629e6377fc](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0193a17629e6377fc) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0193a17629e6377fc)) | +| us-east-2 | [ami-03db856d0b5b661ce](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03db856d0b5b661ce) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03db856d0b5b661ce)) | +| us-west-1 | [ami-04864199556e66fad](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04864199556e66fad) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04864199556e66fad)) | +| us-west-2 | [ami-03e59f12dbbee65d4](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e59f12dbbee65d4) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03e59f12dbbee65d4)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 99a6c81..f616c5d 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -27,6 +27,33 @@ edge-x86_64: us-east-2: ami-002f49d922035cd6b us-west-1: ami-0e146ed2f408cfaee us-west-2: ami-052fcb0bc085a75a2 + alpine-ami-edge-x86_64-20191026200352: + description: Alpine Linux edge x86_64 20191026200352 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20191026200352' + end_of_life: '2019-10-27T20:03:52' + build_time: 1572120756 + artifacts: + ap-northeast-1: ami-0112f6ea81c86d5e6 + ap-northeast-2: ami-085769ebaedbfdf81 + ap-south-1: ami-018d0a72b1c1b2923 + ap-southeast-1: ami-0efbcf7df7751898a + ap-southeast-2: ami-06dc954ca0af33023 + ca-central-1: ami-029fabbc15f6ec893 + eu-central-1: ami-01353f3799d62f271 + eu-north-1: ami-0787f149b1a3f8194 + eu-west-1: ami-068378748044554e5 + eu-west-2: ami-058faf9bf50c5fdc4 + eu-west-3: ami-0f0bdda8a983eace3 + sa-east-1: ami-08b88bdd43ac5d063 + us-east-1: ami-0193a17629e6377fc + us-east-2: ami-03db856d0b5b661ce + us-west-1: ami-04864199556e66fad + us-west-2: ami-03e59f12dbbee65d4 v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -139,6 +166,34 @@ v3_10-x86_64: us-east-2: ami-0a87fa8a73b9b850c us-west-1: ami-009961e3d2d7ccaa8 us-west-2: ami-0a083cc95e2bbc4b0 + 3.10.3: + alpine-ami-3.10.3-x86_64-r1: + description: Alpine Linux 3.10.3 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.3 + arch: x86_64 + revision: r1 + end_of_life: '2021-05-01T00:00:00' + build_time: 1572121673 + artifacts: + ap-northeast-1: ami-0760cd78e75cb77a4 + ap-northeast-2: ami-0e749a03d064c1e47 + ap-south-1: ami-0a8839c12787f0c46 + ap-southeast-1: ami-0f0e2be5d8c0110c1 + ap-southeast-2: ami-0ca4caea0ce1f4a8a + ca-central-1: ami-016d172dee4ff4a22 + eu-central-1: ami-04e50c8006d4bc2bf + eu-north-1: ami-00207f3df9a9cb088 + eu-west-1: ami-01c1ec8fdefc61650 + eu-west-2: ami-02520e7e046db5d8f + eu-west-3: ami-0ef9a828aded0a0de + sa-east-1: ami-0ee958f7773223770 + us-east-1: ami-063cb098a86c1c4cc + us-east-2: ami-0110d80369eb75f49 + us-west-1: ami-00b06ce695a617956 + us-west-2: ami-0d0b7768c8cd9a8c8 v3_9-x86_64: 3.9.4: alpine-ami-3.9.4-x86_64-r0: From 7fd3719cf2e01d9c6b42448ba8482be87c553d88 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Thu, 19 Dec 2019 20:18:15 -0800 Subject: [PATCH 048/125] Alpine 3.11.0 Also attach per build target (3.11.0 is r0, but 3.10.3 remains r1) --- profiles/alpine.conf | 13 +++++---- profiles/test.conf | 13 ++++----- profiles/version/3.11 | 14 ++++++++++ profiles/version/current | 2 +- releases/README.md | 60 ++++++++++++++++++++++++++++------------ releases/alpine.yaml | 56 +++++++++++++++++++++++++++++++++++++ 6 files changed, 127 insertions(+), 31 deletions(-) create mode 100644 profiles/version/3.11 diff --git a/profiles/alpine.conf b/profiles/alpine.conf index f89d8a6..fee9619 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -1,6 +1,7 @@ ### Profile for Building the Publically-Available Alpine Linux AMIs # vim: ts=2 et: +version-3_11 { include required("version/3.11") } version-3_10 { include required("version/3.10") } version-3_9 { include required("version/3.9") } version-edge { include required("version/edge") } @@ -8,9 +9,6 @@ arch-x86_64 { include required("arch/x86_64") } # profile vars alpine { - # default profile revision is 'r0', reset for each new version release! - revision = "r1" - ami_desc_suffix = " - https://github.com/mcrute/alpine-ec2-ami" build_region = "us-west-2" @@ -26,8 +24,13 @@ alpine { # Build definitions BUILDS { # merge version, arch, and profile vars - v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} - v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} + v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} + v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} { + revision = "r1" + } + v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} { + revision = "r1" + } edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} { revision = "@NOW@" } diff --git a/profiles/test.conf b/profiles/test.conf index f6755a1..6d8d2e0 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -1,6 +1,7 @@ ### Profile for Testing Builds # vim: ts=2 et: +version-3_11 { include required("version/3.11") } version-3_10 { include required("version/3.10") } version-3_9 { include required("version/3.9") } version-edge { include required("version/edge") } @@ -9,9 +10,6 @@ arch-aarch64 { include required("arch/aarch64") } # specific to this profile's builds test { - # default revision is 'r0', recomment/reset for each new version release! - #revision = "r0" - ami_name_prefix = "test-" ami_desc_prefix = "Alpine Test " build_region = "us-west-2" @@ -24,13 +22,14 @@ test { # Build definitions BUILDS { # merge version, arch, profile, and build vars + v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${test} v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${test} edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} # aarch64 AMI builds are under development - edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} { - # other us-west-2 subnet doesn't do a1.* instances - #build_subnet = "subnet-08dfc622745f7d96a" - } + #edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} { + # other us-west-2 subnet doesn't do a1.* instances + # build_subnet = "subnet-08dfc622745f7d96a" + #} } diff --git a/profiles/version/3.11 b/profiles/version/3.11 new file mode 100644 index 0000000..99f63a2 --- /dev/null +++ b/profiles/version/3.11 @@ -0,0 +1,14 @@ +### version 3.10 vars +# vim: ts=2 et: + +# start with base vars +include required("../base/current") + +# set version-specific vars +version = "3.11" +release = "3.11.0" +#end_of_life = "2021-05-01" # currently unknown +repos { + "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" = true + "http://dl-cdn.alpinelinux.org/alpine/v3.11/community" = true +} diff --git a/profiles/version/current b/profiles/version/current index 7c7a975..902b2c9 120000 --- a/profiles/version/current +++ b/profiles/version/current @@ -1 +1 @@ -3.10 \ No newline at end of file +3.11 \ No newline at end of file diff --git a/releases/README.md b/releases/README.md index 4d3c53c..672f6e6 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,6 +28,30 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs +### Alpine Linux 3.11.0 (2019-12-20) +
click to show/hide

+ +| Region | alpine-ami-3.11.0-x86_64-r0 | +| ------ | --- | +| ap-northeast-1 | [ami-01dd2c66370a9c622](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01dd2c66370a9c622) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01dd2c66370a9c622)) | +| ap-northeast-2 | [ami-06b08ab572a319365](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b08ab572a319365) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06b08ab572a319365)) | +| ap-south-1 | [ami-0dba9ec182268ab0a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dba9ec182268ab0a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dba9ec182268ab0a)) | +| ap-southeast-1 | [ami-0c210488756706fe7](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c210488756706fe7) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c210488756706fe7)) | +| ap-southeast-2 | [ami-05e1972740cba6e7b](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e1972740cba6e7b) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05e1972740cba6e7b)) | +| ca-central-1 | [ami-02bb57a6922018826](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02bb57a6922018826) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02bb57a6922018826)) | +| eu-central-1 | [ami-09a7075582e44cc4a](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a7075582e44cc4a) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a7075582e44cc4a)) | +| eu-north-1 | [ami-01dc7a794c0c8062b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01dc7a794c0c8062b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01dc7a794c0c8062b)) | +| eu-west-1 | [ami-0d219c533643cb00f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d219c533643cb00f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d219c533643cb00f)) | +| eu-west-2 | [ami-04426be48498be7af](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04426be48498be7af) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04426be48498be7af)) | +| eu-west-3 | [ami-00d99d7627002d662](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00d99d7627002d662) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00d99d7627002d662)) | +| sa-east-1 | [ami-05de427871abe1c40](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05de427871abe1c40) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05de427871abe1c40)) | +| us-east-1 | [ami-00ee2daec698aab7c](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ee2daec698aab7c) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00ee2daec698aab7c)) | +| us-east-2 | [ami-01d8b7e276ad609aa](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d8b7e276ad609aa) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01d8b7e276ad609aa)) | +| us-west-1 | [ami-08d909997839b6030](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d909997839b6030) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d909997839b6030)) | +| us-west-2 | [ami-07a62f65352c51750](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a62f65352c51750) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07a62f65352c51750)) | + +

+ ### Alpine Linux 3.10.3 (2019-10-26)
click to show/hide

@@ -76,26 +100,26 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am

-### Alpine Linux Edge (2019-10-26) +### Alpine Linux Edge (2019-12-20)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20191026200352 | +| Region | alpine-ami-edge-x86_64-20191220032351 | | ------ | --- | -| ap-northeast-1 | [ami-0112f6ea81c86d5e6](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0112f6ea81c86d5e6) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0112f6ea81c86d5e6)) | -| ap-northeast-2 | [ami-085769ebaedbfdf81](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-085769ebaedbfdf81) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-085769ebaedbfdf81)) | -| ap-south-1 | [ami-018d0a72b1c1b2923](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-018d0a72b1c1b2923) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-018d0a72b1c1b2923)) | -| ap-southeast-1 | [ami-0efbcf7df7751898a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0efbcf7df7751898a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0efbcf7df7751898a)) | -| ap-southeast-2 | [ami-06dc954ca0af33023](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06dc954ca0af33023) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06dc954ca0af33023)) | -| ca-central-1 | [ami-029fabbc15f6ec893](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029fabbc15f6ec893) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029fabbc15f6ec893)) | -| eu-central-1 | [ami-01353f3799d62f271](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01353f3799d62f271) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01353f3799d62f271)) | -| eu-north-1 | [ami-0787f149b1a3f8194](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0787f149b1a3f8194) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0787f149b1a3f8194)) | -| eu-west-1 | [ami-068378748044554e5](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068378748044554e5) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068378748044554e5)) | -| eu-west-2 | [ami-058faf9bf50c5fdc4](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-058faf9bf50c5fdc4) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-058faf9bf50c5fdc4)) | -| eu-west-3 | [ami-0f0bdda8a983eace3](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f0bdda8a983eace3) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f0bdda8a983eace3)) | -| sa-east-1 | [ami-08b88bdd43ac5d063](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b88bdd43ac5d063) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b88bdd43ac5d063)) | -| us-east-1 | [ami-0193a17629e6377fc](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0193a17629e6377fc) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0193a17629e6377fc)) | -| us-east-2 | [ami-03db856d0b5b661ce](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03db856d0b5b661ce) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03db856d0b5b661ce)) | -| us-west-1 | [ami-04864199556e66fad](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04864199556e66fad) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04864199556e66fad)) | -| us-west-2 | [ami-03e59f12dbbee65d4](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e59f12dbbee65d4) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03e59f12dbbee65d4)) | +| ap-northeast-1 | [ami-09c848c4cb4b2bfcc](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09c848c4cb4b2bfcc) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09c848c4cb4b2bfcc)) | +| ap-northeast-2 | [ami-0ce75b84103d6cf1b](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ce75b84103d6cf1b) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ce75b84103d6cf1b)) | +| ap-south-1 | [ami-024a83d2f5f690e9c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-024a83d2f5f690e9c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-024a83d2f5f690e9c)) | +| ap-southeast-1 | [ami-045d3298bde43a38e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045d3298bde43a38e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-045d3298bde43a38e)) | +| ap-southeast-2 | [ami-02a507af131b58f77](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a507af131b58f77) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a507af131b58f77)) | +| ca-central-1 | [ami-00f6c418339093258](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00f6c418339093258) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00f6c418339093258)) | +| eu-central-1 | [ami-00e094f733fa389c1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e094f733fa389c1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00e094f733fa389c1)) | +| eu-north-1 | [ami-069b1f7572e57e869](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-069b1f7572e57e869) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-069b1f7572e57e869)) | +| eu-west-1 | [ami-0fe261f4ce1adac48](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe261f4ce1adac48) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe261f4ce1adac48)) | +| eu-west-2 | [ami-0c8643b000cb720b6](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c8643b000cb720b6) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c8643b000cb720b6)) | +| eu-west-3 | [ami-0bfe5b9d1a2d3c6c9](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bfe5b9d1a2d3c6c9) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bfe5b9d1a2d3c6c9)) | +| sa-east-1 | [ami-075e2722dd4b1e660](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-075e2722dd4b1e660) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-075e2722dd4b1e660)) | +| us-east-1 | [ami-0d42d7ed27a1b508a](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d42d7ed27a1b508a) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d42d7ed27a1b508a)) | +| us-east-2 | [ami-016775e32e6c85c18](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-016775e32e6c85c18) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-016775e32e6c85c18)) | +| us-west-1 | [ami-065cbd73f2f0dd6d6](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-065cbd73f2f0dd6d6) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-065cbd73f2f0dd6d6)) | +| us-west-2 | [ami-0897367ecebfd4b79](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0897367ecebfd4b79) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0897367ecebfd4b79)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index f616c5d..b5a3b72 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -54,6 +54,33 @@ edge-x86_64: us-east-2: ami-03db856d0b5b661ce us-west-1: ami-04864199556e66fad us-west-2: ami-03e59f12dbbee65d4 + alpine-ami-edge-x86_64-20191220032351: + description: Alpine Linux edge x86_64 20191220032351 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20191220032351' + end_of_life: '2019-12-21T03:23:51' + build_time: 1576812862 + artifacts: + ap-northeast-1: ami-09c848c4cb4b2bfcc + ap-northeast-2: ami-0ce75b84103d6cf1b + ap-south-1: ami-024a83d2f5f690e9c + ap-southeast-1: ami-045d3298bde43a38e + ap-southeast-2: ami-02a507af131b58f77 + ca-central-1: ami-00f6c418339093258 + eu-central-1: ami-00e094f733fa389c1 + eu-north-1: ami-069b1f7572e57e869 + eu-west-1: ami-0fe261f4ce1adac48 + eu-west-2: ami-0c8643b000cb720b6 + eu-west-3: ami-0bfe5b9d1a2d3c6c9 + sa-east-1: ami-075e2722dd4b1e660 + us-east-1: ami-0d42d7ed27a1b508a + us-east-2: ami-016775e32e6c85c18 + us-west-1: ami-065cbd73f2f0dd6d6 + us-west-2: ami-0897367ecebfd4b79 v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -250,3 +277,32 @@ v3_9-x86_64: us-east-2: ami-030ce78952c4c097c us-west-1: ami-0e27a7d83365f16be us-west-2: ami-07f10e32e0621a4eb +v3_11-x86_64: + 3.11.0: + alpine-ami-3.11.0-x86_64-r0: + description: Alpine Linux 3.11.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.0 + arch: x86_64 + revision: r0 + end_of_life: + build_time: 1576813536 + artifacts: + ap-northeast-1: ami-01dd2c66370a9c622 + ap-northeast-2: ami-06b08ab572a319365 + ap-south-1: ami-0dba9ec182268ab0a + ap-southeast-1: ami-0c210488756706fe7 + ap-southeast-2: ami-05e1972740cba6e7b + ca-central-1: ami-02bb57a6922018826 + eu-central-1: ami-09a7075582e44cc4a + eu-north-1: ami-01dc7a794c0c8062b + eu-west-1: ami-0d219c533643cb00f + eu-west-2: ami-04426be48498be7af + eu-west-3: ami-00d99d7627002d662 + sa-east-1: ami-05de427871abe1c40 + us-east-1: ami-00ee2daec698aab7c + us-east-2: ami-01d8b7e276ad609aa + us-west-1: ami-08d909997839b6030 + us-west-2: ami-07a62f65352c51750 From e15b8a4401d8c8593ec977852f15fdfd87be924f Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sat, 4 Jan 2020 12:19:50 -0800 Subject: [PATCH 049/125] Alpine 3.11.2 --- profiles/version/3.11 | 4 +-- releases/README.md | 72 +++++++++++++++++++++---------------------- releases/alpine.yaml | 57 +++++++++++++++++++++++++++++++++- 3 files changed, 94 insertions(+), 39 deletions(-) diff --git a/profiles/version/3.11 b/profiles/version/3.11 index 99f63a2..1b011f7 100644 --- a/profiles/version/3.11 +++ b/profiles/version/3.11 @@ -6,8 +6,8 @@ include required("../base/current") # set version-specific vars version = "3.11" -release = "3.11.0" -#end_of_life = "2021-05-01" # currently unknown +release = "3.11.2" +end_of_life = "2021-11-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" = true "http://dl-cdn.alpinelinux.org/alpine/v3.11/community" = true diff --git a/releases/README.md b/releases/README.md index 672f6e6..dac52fc 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,27 +28,27 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.11.0 (2019-12-20) +### Alpine Linux 3.11.2 (2020-01-04)
click to show/hide

-| Region | alpine-ami-3.11.0-x86_64-r0 | +| Region | alpine-ami-3.11.2-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-01dd2c66370a9c622](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01dd2c66370a9c622) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01dd2c66370a9c622)) | -| ap-northeast-2 | [ami-06b08ab572a319365](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b08ab572a319365) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06b08ab572a319365)) | -| ap-south-1 | [ami-0dba9ec182268ab0a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dba9ec182268ab0a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dba9ec182268ab0a)) | -| ap-southeast-1 | [ami-0c210488756706fe7](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c210488756706fe7) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c210488756706fe7)) | -| ap-southeast-2 | [ami-05e1972740cba6e7b](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e1972740cba6e7b) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05e1972740cba6e7b)) | -| ca-central-1 | [ami-02bb57a6922018826](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02bb57a6922018826) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02bb57a6922018826)) | -| eu-central-1 | [ami-09a7075582e44cc4a](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a7075582e44cc4a) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a7075582e44cc4a)) | -| eu-north-1 | [ami-01dc7a794c0c8062b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01dc7a794c0c8062b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01dc7a794c0c8062b)) | -| eu-west-1 | [ami-0d219c533643cb00f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d219c533643cb00f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d219c533643cb00f)) | -| eu-west-2 | [ami-04426be48498be7af](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04426be48498be7af) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04426be48498be7af)) | -| eu-west-3 | [ami-00d99d7627002d662](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00d99d7627002d662) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00d99d7627002d662)) | -| sa-east-1 | [ami-05de427871abe1c40](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05de427871abe1c40) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05de427871abe1c40)) | -| us-east-1 | [ami-00ee2daec698aab7c](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ee2daec698aab7c) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00ee2daec698aab7c)) | -| us-east-2 | [ami-01d8b7e276ad609aa](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d8b7e276ad609aa) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01d8b7e276ad609aa)) | -| us-west-1 | [ami-08d909997839b6030](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d909997839b6030) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d909997839b6030)) | -| us-west-2 | [ami-07a62f65352c51750](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a62f65352c51750) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07a62f65352c51750)) | +| ap-northeast-1 | [ami-0231a40676931971a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0231a40676931971a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0231a40676931971a)) | +| ap-northeast-2 | [ami-066b4452a247d5533](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-066b4452a247d5533) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-066b4452a247d5533)) | +| ap-south-1 | [ami-0b0f33d8cfb9e5051](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b0f33d8cfb9e5051) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b0f33d8cfb9e5051)) | +| ap-southeast-1 | [ami-0949989f302945c5a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0949989f302945c5a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0949989f302945c5a)) | +| ap-southeast-2 | [ami-08fb0d3aaf8945d02](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08fb0d3aaf8945d02) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08fb0d3aaf8945d02)) | +| ca-central-1 | [ami-0e26eeafdc083c6e9](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e26eeafdc083c6e9) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e26eeafdc083c6e9)) | +| eu-central-1 | [ami-02fa942a71aadf188](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fa942a71aadf188) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fa942a71aadf188)) | +| eu-north-1 | [ami-03ce6e520f43392b9](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ce6e520f43392b9) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ce6e520f43392b9)) | +| eu-west-1 | [ami-07becf48e2f4057c8](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07becf48e2f4057c8) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07becf48e2f4057c8)) | +| eu-west-2 | [ami-02ac6b3300d9070b1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02ac6b3300d9070b1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02ac6b3300d9070b1)) | +| eu-west-3 | [ami-0b0726c29a8feff8a](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b0726c29a8feff8a) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0b0726c29a8feff8a)) | +| sa-east-1 | [ami-029a4c0dd953fdc64](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029a4c0dd953fdc64) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029a4c0dd953fdc64)) | +| us-east-1 | [ami-06dcf76ec7ffac7cb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06dcf76ec7ffac7cb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06dcf76ec7ffac7cb)) | +| us-east-2 | [ami-018b2823c3aa8b78e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-018b2823c3aa8b78e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-018b2823c3aa8b78e)) | +| us-west-1 | [ami-04de5ae2ed495f580](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04de5ae2ed495f580) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04de5ae2ed495f580)) | +| us-west-2 | [ami-0282e49ac0502691d](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0282e49ac0502691d) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0282e49ac0502691d)) |

@@ -100,26 +100,26 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am

-### Alpine Linux Edge (2019-12-20) +### Alpine Linux Edge (2020-01-04)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20191220032351 | +| Region | alpine-ami-edge-x86_64-20200104190012 | | ------ | --- | -| ap-northeast-1 | [ami-09c848c4cb4b2bfcc](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09c848c4cb4b2bfcc) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09c848c4cb4b2bfcc)) | -| ap-northeast-2 | [ami-0ce75b84103d6cf1b](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ce75b84103d6cf1b) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ce75b84103d6cf1b)) | -| ap-south-1 | [ami-024a83d2f5f690e9c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-024a83d2f5f690e9c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-024a83d2f5f690e9c)) | -| ap-southeast-1 | [ami-045d3298bde43a38e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045d3298bde43a38e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-045d3298bde43a38e)) | -| ap-southeast-2 | [ami-02a507af131b58f77](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a507af131b58f77) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a507af131b58f77)) | -| ca-central-1 | [ami-00f6c418339093258](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00f6c418339093258) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00f6c418339093258)) | -| eu-central-1 | [ami-00e094f733fa389c1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e094f733fa389c1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00e094f733fa389c1)) | -| eu-north-1 | [ami-069b1f7572e57e869](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-069b1f7572e57e869) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-069b1f7572e57e869)) | -| eu-west-1 | [ami-0fe261f4ce1adac48](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe261f4ce1adac48) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe261f4ce1adac48)) | -| eu-west-2 | [ami-0c8643b000cb720b6](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c8643b000cb720b6) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c8643b000cb720b6)) | -| eu-west-3 | [ami-0bfe5b9d1a2d3c6c9](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bfe5b9d1a2d3c6c9) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bfe5b9d1a2d3c6c9)) | -| sa-east-1 | [ami-075e2722dd4b1e660](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-075e2722dd4b1e660) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-075e2722dd4b1e660)) | -| us-east-1 | [ami-0d42d7ed27a1b508a](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d42d7ed27a1b508a) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d42d7ed27a1b508a)) | -| us-east-2 | [ami-016775e32e6c85c18](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-016775e32e6c85c18) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-016775e32e6c85c18)) | -| us-west-1 | [ami-065cbd73f2f0dd6d6](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-065cbd73f2f0dd6d6) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-065cbd73f2f0dd6d6)) | -| us-west-2 | [ami-0897367ecebfd4b79](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0897367ecebfd4b79) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0897367ecebfd4b79)) | +| ap-northeast-1 | [ami-0fda74ed5ffb7ccd7](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fda74ed5ffb7ccd7) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fda74ed5ffb7ccd7)) | +| ap-northeast-2 | [ami-0be5d677b47fce454](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be5d677b47fce454) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0be5d677b47fce454)) | +| ap-south-1 | [ami-094720b652f133f9c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-094720b652f133f9c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-094720b652f133f9c)) | +| ap-southeast-1 | [ami-0f7d8a18e9be21cd1](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7d8a18e9be21cd1) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7d8a18e9be21cd1)) | +| ap-southeast-2 | [ami-0386d4dc2cf9f3d91](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0386d4dc2cf9f3d91) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0386d4dc2cf9f3d91)) | +| ca-central-1 | [ami-0fe2907efc576aa3c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe2907efc576aa3c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe2907efc576aa3c)) | +| eu-central-1 | [ami-08caf54970e53151e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08caf54970e53151e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08caf54970e53151e)) | +| eu-north-1 | [ami-063212df61bebdfac](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063212df61bebdfac) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063212df61bebdfac)) | +| eu-west-1 | [ami-034638ad783384202](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034638ad783384202) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034638ad783384202)) | +| eu-west-2 | [ami-041fba8b0ded32106](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-041fba8b0ded32106) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-041fba8b0ded32106)) | +| eu-west-3 | [ami-015e5b9edb52ee495](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-015e5b9edb52ee495) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-015e5b9edb52ee495)) | +| sa-east-1 | [ami-0dbd80d9204b2a206](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dbd80d9204b2a206) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dbd80d9204b2a206)) | +| us-east-1 | [ami-0047bb64e977f5521](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0047bb64e977f5521) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0047bb64e977f5521)) | +| us-east-2 | [ami-024246dd06d739e37](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-024246dd06d739e37) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-024246dd06d739e37)) | +| us-west-1 | [ami-089f878b5816e24f4](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089f878b5816e24f4) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089f878b5816e24f4)) | +| us-west-2 | [ami-0f6dc9ba311992682](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6dc9ba311992682) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6dc9ba311992682)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index b5a3b72..40b02a6 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -81,6 +81,33 @@ edge-x86_64: us-east-2: ami-016775e32e6c85c18 us-west-1: ami-065cbd73f2f0dd6d6 us-west-2: ami-0897367ecebfd4b79 + alpine-ami-edge-x86_64-20200104190012: + description: Alpine Linux edge x86_64 20200104190012 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20200104190012' + end_of_life: '2020-01-05T19:00:12' + build_time: 1578165015 + artifacts: + ap-northeast-1: ami-0fda74ed5ffb7ccd7 + ap-northeast-2: ami-0be5d677b47fce454 + ap-south-1: ami-094720b652f133f9c + ap-southeast-1: ami-0f7d8a18e9be21cd1 + ap-southeast-2: ami-0386d4dc2cf9f3d91 + ca-central-1: ami-0fe2907efc576aa3c + eu-central-1: ami-08caf54970e53151e + eu-north-1: ami-063212df61bebdfac + eu-west-1: ami-034638ad783384202 + eu-west-2: ami-041fba8b0ded32106 + eu-west-3: ami-015e5b9edb52ee495 + sa-east-1: ami-0dbd80d9204b2a206 + us-east-1: ami-0047bb64e977f5521 + us-east-2: ami-024246dd06d739e37 + us-west-1: ami-089f878b5816e24f4 + us-west-2: ami-0f6dc9ba311992682 v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -287,7 +314,7 @@ v3_11-x86_64: release: 3.11.0 arch: x86_64 revision: r0 - end_of_life: + end_of_life: null build_time: 1576813536 artifacts: ap-northeast-1: ami-01dd2c66370a9c622 @@ -306,3 +333,31 @@ v3_11-x86_64: us-east-2: ami-01d8b7e276ad609aa us-west-1: ami-08d909997839b6030 us-west-2: ami-07a62f65352c51750 + 3.11.2: + alpine-ami-3.11.2-x86_64-r0: + description: Alpine Linux 3.11.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.2 + arch: x86_64 + revision: r0 + end_of_life: '2021-11-01T00:00:00' + build_time: 1578165575 + artifacts: + ap-northeast-1: ami-0231a40676931971a + ap-northeast-2: ami-066b4452a247d5533 + ap-south-1: ami-0b0f33d8cfb9e5051 + ap-southeast-1: ami-0949989f302945c5a + ap-southeast-2: ami-08fb0d3aaf8945d02 + ca-central-1: ami-0e26eeafdc083c6e9 + eu-central-1: ami-02fa942a71aadf188 + eu-north-1: ami-03ce6e520f43392b9 + eu-west-1: ami-07becf48e2f4057c8 + eu-west-2: ami-02ac6b3300d9070b1 + eu-west-3: ami-0b0726c29a8feff8a + sa-east-1: ami-029a4c0dd953fdc64 + us-east-1: ami-06dcf76ec7ffac7cb + us-east-2: ami-018b2823c3aa8b78e + us-west-1: ami-04de5ae2ed495f580 + us-west-2: ami-0282e49ac0502691d From c8c6a995cfda65482849e29a1f2c1ac31c877dbb Mon Sep 17 00:00:00 2001 From: tomalok Date: Wed, 5 Feb 2020 20:29:16 -0800 Subject: [PATCH 050/125] The Latest Releases (#62) * 3.9.5 * 3.10.4 * 3.11.3 --- profiles/alpine.conf | 8 +-- profiles/version/3.10 | 2 +- profiles/version/3.11 | 2 +- profiles/version/3.9 | 2 +- releases/README.md | 144 +++++++++++++++++++++--------------------- releases/alpine.yaml | 111 ++++++++++++++++++++++++++++++++ 6 files changed, 188 insertions(+), 81 deletions(-) diff --git a/profiles/alpine.conf b/profiles/alpine.conf index fee9619..6c488bb 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -25,12 +25,8 @@ alpine { BUILDS { # merge version, arch, and profile vars v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} - v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} { - revision = "r1" - } - v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} { - revision = "r1" - } + v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} + v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} { revision = "@NOW@" } diff --git a/profiles/version/3.10 b/profiles/version/3.10 index 8bd76d0..d8f99d2 100644 --- a/profiles/version/3.10 +++ b/profiles/version/3.10 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.10" -release = "3.10.3" +release = "3.10.4" end_of_life = "2021-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.10/main" = true diff --git a/profiles/version/3.11 b/profiles/version/3.11 index 1b011f7..48995b7 100644 --- a/profiles/version/3.11 +++ b/profiles/version/3.11 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.11" -release = "3.11.2" +release = "3.11.3" end_of_life = "2021-11-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" = true diff --git a/profiles/version/3.9 b/profiles/version/3.9 index a08c079..867f86b 100644 --- a/profiles/version/3.9 +++ b/profiles/version/3.9 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.9" -release = "3.9.4" +release = "3.9.5" end_of_life = "2021-01-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.9/main" = true diff --git a/releases/README.md b/releases/README.md index dac52fc..805cd2b 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,98 +28,98 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.11.2 (2020-01-04) +### Alpine Linux 3.11.3 (2020-02-05)
click to show/hide

-| Region | alpine-ami-3.11.2-x86_64-r0 | +| Region | alpine-ami-3.11.3-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-0231a40676931971a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0231a40676931971a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0231a40676931971a)) | -| ap-northeast-2 | [ami-066b4452a247d5533](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-066b4452a247d5533) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-066b4452a247d5533)) | -| ap-south-1 | [ami-0b0f33d8cfb9e5051](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b0f33d8cfb9e5051) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b0f33d8cfb9e5051)) | -| ap-southeast-1 | [ami-0949989f302945c5a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0949989f302945c5a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0949989f302945c5a)) | -| ap-southeast-2 | [ami-08fb0d3aaf8945d02](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08fb0d3aaf8945d02) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08fb0d3aaf8945d02)) | -| ca-central-1 | [ami-0e26eeafdc083c6e9](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e26eeafdc083c6e9) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e26eeafdc083c6e9)) | -| eu-central-1 | [ami-02fa942a71aadf188](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fa942a71aadf188) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fa942a71aadf188)) | -| eu-north-1 | [ami-03ce6e520f43392b9](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ce6e520f43392b9) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ce6e520f43392b9)) | -| eu-west-1 | [ami-07becf48e2f4057c8](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07becf48e2f4057c8) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07becf48e2f4057c8)) | -| eu-west-2 | [ami-02ac6b3300d9070b1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02ac6b3300d9070b1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02ac6b3300d9070b1)) | -| eu-west-3 | [ami-0b0726c29a8feff8a](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b0726c29a8feff8a) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0b0726c29a8feff8a)) | -| sa-east-1 | [ami-029a4c0dd953fdc64](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029a4c0dd953fdc64) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029a4c0dd953fdc64)) | -| us-east-1 | [ami-06dcf76ec7ffac7cb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06dcf76ec7ffac7cb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06dcf76ec7ffac7cb)) | -| us-east-2 | [ami-018b2823c3aa8b78e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-018b2823c3aa8b78e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-018b2823c3aa8b78e)) | -| us-west-1 | [ami-04de5ae2ed495f580](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04de5ae2ed495f580) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04de5ae2ed495f580)) | -| us-west-2 | [ami-0282e49ac0502691d](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0282e49ac0502691d) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0282e49ac0502691d)) | +| ap-northeast-1 | [ami-0a21fceb3a679c6a0](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a21fceb3a679c6a0) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a21fceb3a679c6a0)) | +| ap-northeast-2 | [ami-0446572a036203a7f](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0446572a036203a7f) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0446572a036203a7f)) | +| ap-south-1 | [ami-01597af5b044c6534](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01597af5b044c6534) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01597af5b044c6534)) | +| ap-southeast-1 | [ami-06add570453657288](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06add570453657288) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06add570453657288)) | +| ap-southeast-2 | [ami-014d6b6e0544303db](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014d6b6e0544303db) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014d6b6e0544303db)) | +| ca-central-1 | [ami-064cc1f1e4a3d17e7](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064cc1f1e4a3d17e7) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-064cc1f1e4a3d17e7)) | +| eu-central-1 | [ami-06190102f27180777](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06190102f27180777) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06190102f27180777)) | +| eu-north-1 | [ami-025350371c14bbcf9](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-025350371c14bbcf9) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-025350371c14bbcf9)) | +| eu-west-1 | [ami-0719f170fa096b7c6](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0719f170fa096b7c6) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0719f170fa096b7c6)) | +| eu-west-2 | [ami-0fe16a039c49375e1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe16a039c49375e1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe16a039c49375e1)) | +| eu-west-3 | [ami-0a3aecc0fe5a748e0](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3aecc0fe5a748e0) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3aecc0fe5a748e0)) | +| sa-east-1 | [ami-0f28a75976a21bca7](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f28a75976a21bca7) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f28a75976a21bca7)) | +| us-east-1 | [ami-0bd10e597480e8fdc](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd10e597480e8fdc) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd10e597480e8fdc)) | +| us-east-2 | [ami-0741188fc6d365c12](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0741188fc6d365c12) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0741188fc6d365c12)) | +| us-west-1 | [ami-065633a2b189f7550](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-065633a2b189f7550) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-065633a2b189f7550)) | +| us-west-2 | [ami-050dd0423825ae4cd](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-050dd0423825ae4cd) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-050dd0423825ae4cd)) |

-### Alpine Linux 3.10.3 (2019-10-26) +### Alpine Linux 3.10.4 (2020-02-05)
click to show/hide

-| Region | alpine-ami-3.10.3-x86_64-r1 | +| Region | alpine-ami-3.10.4-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-0760cd78e75cb77a4](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0760cd78e75cb77a4) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0760cd78e75cb77a4)) | -| ap-northeast-2 | [ami-0e749a03d064c1e47](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e749a03d064c1e47) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e749a03d064c1e47)) | -| ap-south-1 | [ami-0a8839c12787f0c46](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8839c12787f0c46) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8839c12787f0c46)) | -| ap-southeast-1 | [ami-0f0e2be5d8c0110c1](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f0e2be5d8c0110c1) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f0e2be5d8c0110c1)) | -| ap-southeast-2 | [ami-0ca4caea0ce1f4a8a](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca4caea0ce1f4a8a) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca4caea0ce1f4a8a)) | -| ca-central-1 | [ami-016d172dee4ff4a22](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-016d172dee4ff4a22) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-016d172dee4ff4a22)) | -| eu-central-1 | [ami-04e50c8006d4bc2bf](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e50c8006d4bc2bf) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e50c8006d4bc2bf)) | -| eu-north-1 | [ami-00207f3df9a9cb088](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00207f3df9a9cb088) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00207f3df9a9cb088)) | -| eu-west-1 | [ami-01c1ec8fdefc61650](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c1ec8fdefc61650) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c1ec8fdefc61650)) | -| eu-west-2 | [ami-02520e7e046db5d8f](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02520e7e046db5d8f) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02520e7e046db5d8f)) | -| eu-west-3 | [ami-0ef9a828aded0a0de](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef9a828aded0a0de) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef9a828aded0a0de)) | -| sa-east-1 | [ami-0ee958f7773223770](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ee958f7773223770) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ee958f7773223770)) | -| us-east-1 | [ami-063cb098a86c1c4cc](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063cb098a86c1c4cc) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063cb098a86c1c4cc)) | -| us-east-2 | [ami-0110d80369eb75f49](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0110d80369eb75f49) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0110d80369eb75f49)) | -| us-west-1 | [ami-00b06ce695a617956](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00b06ce695a617956) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00b06ce695a617956)) | -| us-west-2 | [ami-0d0b7768c8cd9a8c8](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0b7768c8cd9a8c8) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0b7768c8cd9a8c8)) | +| ap-northeast-1 | [ami-0dc770d65f50e9339](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc770d65f50e9339) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc770d65f50e9339)) | +| ap-northeast-2 | [ami-03a2be707d4d83cea](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03a2be707d4d83cea) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03a2be707d4d83cea)) | +| ap-south-1 | [ami-00fac10f41dff96e4](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00fac10f41dff96e4) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00fac10f41dff96e4)) | +| ap-southeast-1 | [ami-0aadcaa1f71c42546](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aadcaa1f71c42546) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aadcaa1f71c42546)) | +| ap-southeast-2 | [ami-0ba48065660ab830f](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ba48065660ab830f) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ba48065660ab830f)) | +| ca-central-1 | [ami-0a54918dadce6828a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a54918dadce6828a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a54918dadce6828a)) | +| eu-central-1 | [ami-01de425983c4c1bfc](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01de425983c4c1bfc) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01de425983c4c1bfc)) | +| eu-north-1 | [ami-0011e13dbacb8fcb4](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0011e13dbacb8fcb4) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0011e13dbacb8fcb4)) | +| eu-west-1 | [ami-0d645d9aa9af199e7](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d645d9aa9af199e7) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d645d9aa9af199e7)) | +| eu-west-2 | [ami-047029018b46688b5](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-047029018b46688b5) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-047029018b46688b5)) | +| eu-west-3 | [ami-070b405f25870cfa4](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-070b405f25870cfa4) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-070b405f25870cfa4)) | +| sa-east-1 | [ami-01af983d84e7075aa](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01af983d84e7075aa) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01af983d84e7075aa)) | +| us-east-1 | [ami-014e31a6d6da30eb7](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014e31a6d6da30eb7) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-014e31a6d6da30eb7)) | +| us-east-2 | [ami-004421f607bf25444](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004421f607bf25444) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-004421f607bf25444)) | +| us-west-1 | [ami-0e07b975efa6cba65](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e07b975efa6cba65) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e07b975efa6cba65)) | +| us-west-2 | [ami-07128e75c4dcc9c7c](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07128e75c4dcc9c7c) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07128e75c4dcc9c7c)) |

-### Alpine Linux 3.9.4 (2019-07-26) +### Alpine Linux 3.9.5 (2020-02-05)
click to show/hide

-| Region | alpine-ami-3.9.4-x86_64-r1 | +| Region | alpine-ami-3.9.5-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-0d12649cf98b9c29b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d12649cf98b9c29b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d12649cf98b9c29b)) | -| ap-northeast-2 | [ami-004372232cf1a20ac](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004372232cf1a20ac) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-004372232cf1a20ac)) | -| ap-south-1 | [ami-091de53a3582f2779](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091de53a3582f2779) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-091de53a3582f2779)) | -| ap-southeast-1 | [ami-07f6f363322b884d5](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f6f363322b884d5) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f6f363322b884d5)) | -| ap-southeast-2 | [ami-0eeff0d7c1943665c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eeff0d7c1943665c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0eeff0d7c1943665c)) | -| ca-central-1 | [ami-011ad5e9b2fcfa1d5](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011ad5e9b2fcfa1d5) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011ad5e9b2fcfa1d5)) | -| eu-central-1 | [ami-0d4f6bb2a4f857256](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d4f6bb2a4f857256) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d4f6bb2a4f857256)) | -| eu-north-1 | [ami-01c04b1d21717da2d](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c04b1d21717da2d) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c04b1d21717da2d)) | -| eu-west-1 | [ami-0c9ac6e4570bad5c1](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9ac6e4570bad5c1) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9ac6e4570bad5c1)) | -| eu-west-2 | [ami-0bc07c10c240525e4](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc07c10c240525e4) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc07c10c240525e4)) | -| eu-west-3 | [ami-0ebda60768a596a7f](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ebda60768a596a7f) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ebda60768a596a7f)) | -| sa-east-1 | [ami-0a2d4fb282401447a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2d4fb282401447a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2d4fb282401447a)) | -| us-east-1 | [ami-0a8b8edcf88c2e496](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8b8edcf88c2e496) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8b8edcf88c2e496)) | -| us-east-2 | [ami-030ce78952c4c097c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030ce78952c4c097c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-030ce78952c4c097c)) | -| us-west-1 | [ami-0e27a7d83365f16be](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e27a7d83365f16be) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e27a7d83365f16be)) | -| us-west-2 | [ami-07f10e32e0621a4eb](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f10e32e0621a4eb) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07f10e32e0621a4eb)) | +| ap-northeast-1 | [ami-0f22ba5f542102103](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f22ba5f542102103) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f22ba5f542102103)) | +| ap-northeast-2 | [ami-042ed34c048fd4dde](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042ed34c048fd4dde) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-042ed34c048fd4dde)) | +| ap-south-1 | [ami-03aa6dfb6b5c5b24d](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03aa6dfb6b5c5b24d) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03aa6dfb6b5c5b24d)) | +| ap-southeast-1 | [ami-09aa8a66b52872964](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09aa8a66b52872964) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09aa8a66b52872964)) | +| ap-southeast-2 | [ami-0883e80a814ca1ead](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0883e80a814ca1ead) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0883e80a814ca1ead)) | +| ca-central-1 | [ami-07ced81b329157965](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ced81b329157965) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07ced81b329157965)) | +| eu-central-1 | [ami-0b1156425ee49460e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1156425ee49460e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1156425ee49460e)) | +| eu-north-1 | [ami-0dae27e872bbb58a3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dae27e872bbb58a3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dae27e872bbb58a3)) | +| eu-west-1 | [ami-032df31e3645eac89](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-032df31e3645eac89) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-032df31e3645eac89)) | +| eu-west-2 | [ami-0ca53eef190752d9b](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca53eef190752d9b) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca53eef190752d9b)) | +| eu-west-3 | [ami-01d92abfc31832091](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d92abfc31832091) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01d92abfc31832091)) | +| sa-east-1 | [ami-044b116c38c67bbe6](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-044b116c38c67bbe6) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-044b116c38c67bbe6)) | +| us-east-1 | [ami-01d51c30d2c611d0b](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d51c30d2c611d0b) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01d51c30d2c611d0b)) | +| us-east-2 | [ami-023a120054be00f14](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023a120054be00f14) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-023a120054be00f14)) | +| us-west-1 | [ami-0b628545bb655d1e3](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b628545bb655d1e3) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b628545bb655d1e3)) | +| us-west-2 | [ami-06dc8e37edaccd91d](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06dc8e37edaccd91d) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06dc8e37edaccd91d)) |

-### Alpine Linux Edge (2020-01-04) +### Alpine Linux Edge (2020-02-05)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20200104190012 | +| Region | alpine-ami-edge-x86_64-20200205024005 | | ------ | --- | -| ap-northeast-1 | [ami-0fda74ed5ffb7ccd7](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fda74ed5ffb7ccd7) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fda74ed5ffb7ccd7)) | -| ap-northeast-2 | [ami-0be5d677b47fce454](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be5d677b47fce454) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0be5d677b47fce454)) | -| ap-south-1 | [ami-094720b652f133f9c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-094720b652f133f9c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-094720b652f133f9c)) | -| ap-southeast-1 | [ami-0f7d8a18e9be21cd1](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7d8a18e9be21cd1) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7d8a18e9be21cd1)) | -| ap-southeast-2 | [ami-0386d4dc2cf9f3d91](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0386d4dc2cf9f3d91) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0386d4dc2cf9f3d91)) | -| ca-central-1 | [ami-0fe2907efc576aa3c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe2907efc576aa3c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe2907efc576aa3c)) | -| eu-central-1 | [ami-08caf54970e53151e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08caf54970e53151e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08caf54970e53151e)) | -| eu-north-1 | [ami-063212df61bebdfac](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063212df61bebdfac) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063212df61bebdfac)) | -| eu-west-1 | [ami-034638ad783384202](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034638ad783384202) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034638ad783384202)) | -| eu-west-2 | [ami-041fba8b0ded32106](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-041fba8b0ded32106) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-041fba8b0ded32106)) | -| eu-west-3 | [ami-015e5b9edb52ee495](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-015e5b9edb52ee495) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-015e5b9edb52ee495)) | -| sa-east-1 | [ami-0dbd80d9204b2a206](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dbd80d9204b2a206) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dbd80d9204b2a206)) | -| us-east-1 | [ami-0047bb64e977f5521](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0047bb64e977f5521) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0047bb64e977f5521)) | -| us-east-2 | [ami-024246dd06d739e37](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-024246dd06d739e37) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-024246dd06d739e37)) | -| us-west-1 | [ami-089f878b5816e24f4](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089f878b5816e24f4) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089f878b5816e24f4)) | -| us-west-2 | [ami-0f6dc9ba311992682](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6dc9ba311992682) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6dc9ba311992682)) | +| ap-northeast-1 | [ami-0e66e152e67bd01c4](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e66e152e67bd01c4) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e66e152e67bd01c4)) | +| ap-northeast-2 | [ami-0da81d92789ac64c9](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0da81d92789ac64c9) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0da81d92789ac64c9)) | +| ap-south-1 | [ami-00563d27b2511771e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00563d27b2511771e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00563d27b2511771e)) | +| ap-southeast-1 | [ami-0c319f4e0be04ba59](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c319f4e0be04ba59) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c319f4e0be04ba59)) | +| ap-southeast-2 | [ami-0a3ef06def6f50c0d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3ef06def6f50c0d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3ef06def6f50c0d)) | +| ca-central-1 | [ami-09f98f0464adfebb2](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09f98f0464adfebb2) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09f98f0464adfebb2)) | +| eu-central-1 | [ami-001559f80be1add88](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-001559f80be1add88) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-001559f80be1add88)) | +| eu-north-1 | [ami-0440a037c49287602](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0440a037c49287602) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0440a037c49287602)) | +| eu-west-1 | [ami-0c6e2f66869524c92](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c6e2f66869524c92) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c6e2f66869524c92)) | +| eu-west-2 | [ami-0c89e502a2bbae39c](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c89e502a2bbae39c) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c89e502a2bbae39c)) | +| eu-west-3 | [ami-0a96a077e024cf68c](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a96a077e024cf68c) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0a96a077e024cf68c)) | +| sa-east-1 | [ami-0701231683e53500b](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0701231683e53500b) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0701231683e53500b)) | +| us-east-1 | [ami-002a48030440e00da](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-002a48030440e00da) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-002a48030440e00da)) | +| us-east-2 | [ami-0ae27524e2b9bb820](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ae27524e2b9bb820) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ae27524e2b9bb820)) | +| us-west-1 | [ami-02a94605eedcd1d51](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a94605eedcd1d51) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02a94605eedcd1d51)) | +| us-west-2 | [ami-034def9257bc1fa27](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034def9257bc1fa27) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-034def9257bc1fa27)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 40b02a6..bcfed41 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -108,6 +108,33 @@ edge-x86_64: us-east-2: ami-024246dd06d739e37 us-west-1: ami-089f878b5816e24f4 us-west-2: ami-0f6dc9ba311992682 + alpine-ami-edge-x86_64-20200205024005: + description: Alpine Linux edge x86_64 20200205024005 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20200205024005' + end_of_life: '2020-02-06T02:40:05' + build_time: 1580871011 + artifacts: + ap-northeast-1: ami-0e66e152e67bd01c4 + ap-northeast-2: ami-0da81d92789ac64c9 + ap-south-1: ami-00563d27b2511771e + ap-southeast-1: ami-0c319f4e0be04ba59 + ap-southeast-2: ami-0a3ef06def6f50c0d + ca-central-1: ami-09f98f0464adfebb2 + eu-central-1: ami-001559f80be1add88 + eu-north-1: ami-0440a037c49287602 + eu-west-1: ami-0c6e2f66869524c92 + eu-west-2: ami-0c89e502a2bbae39c + eu-west-3: ami-0a96a077e024cf68c + sa-east-1: ami-0701231683e53500b + us-east-1: ami-002a48030440e00da + us-east-2: ami-0ae27524e2b9bb820 + us-west-1: ami-02a94605eedcd1d51 + us-west-2: ami-034def9257bc1fa27 v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -248,6 +275,34 @@ v3_10-x86_64: us-east-2: ami-0110d80369eb75f49 us-west-1: ami-00b06ce695a617956 us-west-2: ami-0d0b7768c8cd9a8c8 + 3.10.4: + alpine-ami-3.10.4-x86_64-r0: + description: Alpine Linux 3.10.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.4 + arch: x86_64 + revision: r0 + end_of_life: '2021-05-01T00:00:00' + build_time: 1580871554 + artifacts: + ap-northeast-1: ami-0dc770d65f50e9339 + ap-northeast-2: ami-03a2be707d4d83cea + ap-south-1: ami-00fac10f41dff96e4 + ap-southeast-1: ami-0aadcaa1f71c42546 + ap-southeast-2: ami-0ba48065660ab830f + ca-central-1: ami-0a54918dadce6828a + eu-central-1: ami-01de425983c4c1bfc + eu-north-1: ami-0011e13dbacb8fcb4 + eu-west-1: ami-0d645d9aa9af199e7 + eu-west-2: ami-047029018b46688b5 + eu-west-3: ami-070b405f25870cfa4 + sa-east-1: ami-01af983d84e7075aa + us-east-1: ami-014e31a6d6da30eb7 + us-east-2: ami-004421f607bf25444 + us-west-1: ami-0e07b975efa6cba65 + us-west-2: ami-07128e75c4dcc9c7c v3_9-x86_64: 3.9.4: alpine-ami-3.9.4-x86_64-r0: @@ -304,6 +359,34 @@ v3_9-x86_64: us-east-2: ami-030ce78952c4c097c us-west-1: ami-0e27a7d83365f16be us-west-2: ami-07f10e32e0621a4eb + 3.9.5: + alpine-ami-3.9.5-x86_64-r0: + description: Alpine Linux 3.9.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_9-x86_64 + version: '3.9' + release: 3.9.5 + arch: x86_64 + revision: r0 + end_of_life: '2021-01-01T00:00:00' + build_time: 1580872699 + artifacts: + ap-northeast-1: ami-0f22ba5f542102103 + ap-northeast-2: ami-042ed34c048fd4dde + ap-south-1: ami-03aa6dfb6b5c5b24d + ap-southeast-1: ami-09aa8a66b52872964 + ap-southeast-2: ami-0883e80a814ca1ead + ca-central-1: ami-07ced81b329157965 + eu-central-1: ami-0b1156425ee49460e + eu-north-1: ami-0dae27e872bbb58a3 + eu-west-1: ami-032df31e3645eac89 + eu-west-2: ami-0ca53eef190752d9b + eu-west-3: ami-01d92abfc31832091 + sa-east-1: ami-044b116c38c67bbe6 + us-east-1: ami-01d51c30d2c611d0b + us-east-2: ami-023a120054be00f14 + us-west-1: ami-0b628545bb655d1e3 + us-west-2: ami-06dc8e37edaccd91d v3_11-x86_64: 3.11.0: alpine-ami-3.11.0-x86_64-r0: @@ -361,3 +444,31 @@ v3_11-x86_64: us-east-2: ami-018b2823c3aa8b78e us-west-1: ami-04de5ae2ed495f580 us-west-2: ami-0282e49ac0502691d + 3.11.3: + alpine-ami-3.11.3-x86_64-r0: + description: Alpine Linux 3.11.3 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.3 + arch: x86_64 + revision: r0 + end_of_life: '2021-11-01T00:00:00' + build_time: 1580872119 + artifacts: + ap-northeast-1: ami-0a21fceb3a679c6a0 + ap-northeast-2: ami-0446572a036203a7f + ap-south-1: ami-01597af5b044c6534 + ap-southeast-1: ami-06add570453657288 + ap-southeast-2: ami-014d6b6e0544303db + ca-central-1: ami-064cc1f1e4a3d17e7 + eu-central-1: ami-06190102f27180777 + eu-north-1: ami-025350371c14bbcf9 + eu-west-1: ami-0719f170fa096b7c6 + eu-west-2: ami-0fe16a039c49375e1 + eu-west-3: ami-0a3aecc0fe5a748e0 + sa-east-1: ami-0f28a75976a21bca7 + us-east-1: ami-0bd10e597480e8fdc + us-east-2: ami-0741188fc6d365c12 + us-west-1: ami-065633a2b189f7550 + us-west-2: ami-050dd0423825ae4cd From 7ce209cfb60e83bcaa2d9ad207d876f3326c2111 Mon Sep 17 00:00:00 2001 From: tomalok Date: Thu, 2 Apr 2020 21:08:12 -0700 Subject: [PATCH 051/125] Alpine 3.11.5 (#63) --- profiles/version/3.11 | 4 +-- releases/README.md | 72 +++++++++++++++++++++---------------------- releases/alpine.yaml | 55 +++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 38 deletions(-) diff --git a/profiles/version/3.11 b/profiles/version/3.11 index 48995b7..2cbbdf0 100644 --- a/profiles/version/3.11 +++ b/profiles/version/3.11 @@ -1,4 +1,4 @@ -### version 3.10 vars +### version 3.11 vars # vim: ts=2 et: # start with base vars @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.11" -release = "3.11.3" +release = "3.11.5" end_of_life = "2021-11-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" = true diff --git a/releases/README.md b/releases/README.md index 805cd2b..a171d0b 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,27 +28,27 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.11.3 (2020-02-05) +### Alpine Linux 3.11.5 (2020-04-03)
click to show/hide

-| Region | alpine-ami-3.11.3-x86_64-r0 | +| Region | alpine-ami-3.11.5-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-0a21fceb3a679c6a0](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a21fceb3a679c6a0) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a21fceb3a679c6a0)) | -| ap-northeast-2 | [ami-0446572a036203a7f](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0446572a036203a7f) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0446572a036203a7f)) | -| ap-south-1 | [ami-01597af5b044c6534](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01597af5b044c6534) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01597af5b044c6534)) | -| ap-southeast-1 | [ami-06add570453657288](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06add570453657288) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06add570453657288)) | -| ap-southeast-2 | [ami-014d6b6e0544303db](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014d6b6e0544303db) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014d6b6e0544303db)) | -| ca-central-1 | [ami-064cc1f1e4a3d17e7](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064cc1f1e4a3d17e7) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-064cc1f1e4a3d17e7)) | -| eu-central-1 | [ami-06190102f27180777](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06190102f27180777) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06190102f27180777)) | -| eu-north-1 | [ami-025350371c14bbcf9](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-025350371c14bbcf9) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-025350371c14bbcf9)) | -| eu-west-1 | [ami-0719f170fa096b7c6](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0719f170fa096b7c6) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0719f170fa096b7c6)) | -| eu-west-2 | [ami-0fe16a039c49375e1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe16a039c49375e1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe16a039c49375e1)) | -| eu-west-3 | [ami-0a3aecc0fe5a748e0](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3aecc0fe5a748e0) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3aecc0fe5a748e0)) | -| sa-east-1 | [ami-0f28a75976a21bca7](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f28a75976a21bca7) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f28a75976a21bca7)) | -| us-east-1 | [ami-0bd10e597480e8fdc](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd10e597480e8fdc) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd10e597480e8fdc)) | -| us-east-2 | [ami-0741188fc6d365c12](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0741188fc6d365c12) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0741188fc6d365c12)) | -| us-west-1 | [ami-065633a2b189f7550](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-065633a2b189f7550) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-065633a2b189f7550)) | -| us-west-2 | [ami-050dd0423825ae4cd](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-050dd0423825ae4cd) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-050dd0423825ae4cd)) | +| ap-northeast-1 | [ami-02945e11777c5d74a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02945e11777c5d74a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02945e11777c5d74a)) | +| ap-northeast-2 | [ami-071e19bba641e10c1](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071e19bba641e10c1) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-071e19bba641e10c1)) | +| ap-south-1 | [ami-0df79a6a767372395](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0df79a6a767372395) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0df79a6a767372395)) | +| ap-southeast-1 | [ami-092bdb41e6d9f7060](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092bdb41e6d9f7060) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092bdb41e6d9f7060)) | +| ap-southeast-2 | [ami-02a1c7112bbe60f00](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a1c7112bbe60f00) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a1c7112bbe60f00)) | +| ca-central-1 | [ami-0081665c09326cae2](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0081665c09326cae2) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0081665c09326cae2)) | +| eu-central-1 | [ami-09d753422dab3888f](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09d753422dab3888f) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09d753422dab3888f)) | +| eu-north-1 | [ami-0f326f36494b66d68](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f326f36494b66d68) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f326f36494b66d68)) | +| eu-west-1 | [ami-0c1e8337e5112eb80](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c1e8337e5112eb80) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c1e8337e5112eb80)) | +| eu-west-2 | [ami-06ec140a6fa5ff24c](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06ec140a6fa5ff24c) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06ec140a6fa5ff24c)) | +| eu-west-3 | [ami-05270703db64782c3](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05270703db64782c3) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-05270703db64782c3)) | +| sa-east-1 | [ami-08e5a4dc318e84618](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e5a4dc318e84618) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08e5a4dc318e84618)) | +| us-east-1 | [ami-02fa6ea44ed68cbd1](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fa6ea44ed68cbd1) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fa6ea44ed68cbd1)) | +| us-east-2 | [ami-0325fc21b50ee19ba](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0325fc21b50ee19ba) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0325fc21b50ee19ba)) | +| us-west-1 | [ami-003d6e7746c7e938e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-003d6e7746c7e938e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-003d6e7746c7e938e)) | +| us-west-2 | [ami-0966c757f79c1a553](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0966c757f79c1a553) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0966c757f79c1a553)) |

@@ -100,26 +100,26 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am

-### Alpine Linux Edge (2020-02-05) +### Alpine Linux Edge (2020-04-03)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20200205024005 | +| Region | alpine-ami-edge-x86_64-20200403021415 | | ------ | --- | -| ap-northeast-1 | [ami-0e66e152e67bd01c4](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e66e152e67bd01c4) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e66e152e67bd01c4)) | -| ap-northeast-2 | [ami-0da81d92789ac64c9](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0da81d92789ac64c9) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0da81d92789ac64c9)) | -| ap-south-1 | [ami-00563d27b2511771e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00563d27b2511771e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00563d27b2511771e)) | -| ap-southeast-1 | [ami-0c319f4e0be04ba59](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c319f4e0be04ba59) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c319f4e0be04ba59)) | -| ap-southeast-2 | [ami-0a3ef06def6f50c0d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3ef06def6f50c0d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3ef06def6f50c0d)) | -| ca-central-1 | [ami-09f98f0464adfebb2](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09f98f0464adfebb2) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09f98f0464adfebb2)) | -| eu-central-1 | [ami-001559f80be1add88](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-001559f80be1add88) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-001559f80be1add88)) | -| eu-north-1 | [ami-0440a037c49287602](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0440a037c49287602) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0440a037c49287602)) | -| eu-west-1 | [ami-0c6e2f66869524c92](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c6e2f66869524c92) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c6e2f66869524c92)) | -| eu-west-2 | [ami-0c89e502a2bbae39c](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c89e502a2bbae39c) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c89e502a2bbae39c)) | -| eu-west-3 | [ami-0a96a077e024cf68c](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a96a077e024cf68c) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0a96a077e024cf68c)) | -| sa-east-1 | [ami-0701231683e53500b](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0701231683e53500b) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0701231683e53500b)) | -| us-east-1 | [ami-002a48030440e00da](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-002a48030440e00da) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-002a48030440e00da)) | -| us-east-2 | [ami-0ae27524e2b9bb820](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ae27524e2b9bb820) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ae27524e2b9bb820)) | -| us-west-1 | [ami-02a94605eedcd1d51](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a94605eedcd1d51) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02a94605eedcd1d51)) | -| us-west-2 | [ami-034def9257bc1fa27](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034def9257bc1fa27) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-034def9257bc1fa27)) | +| ap-northeast-1 | [ami-0a930ab443e79658a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a930ab443e79658a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a930ab443e79658a)) | +| ap-northeast-2 | [ami-0e5c3704b08250be0](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e5c3704b08250be0) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e5c3704b08250be0)) | +| ap-south-1 | [ami-0e9b4aa2c6dfa1c6b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e9b4aa2c6dfa1c6b) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e9b4aa2c6dfa1c6b)) | +| ap-southeast-1 | [ami-017d1c8652fe5fb6e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-017d1c8652fe5fb6e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-017d1c8652fe5fb6e)) | +| ap-southeast-2 | [ami-0b20e853350fcc974](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b20e853350fcc974) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b20e853350fcc974)) | +| ca-central-1 | [ami-078a0413716fb1ee2](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-078a0413716fb1ee2) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-078a0413716fb1ee2)) | +| eu-central-1 | [ami-0b949041038ac64f8](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b949041038ac64f8) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b949041038ac64f8)) | +| eu-north-1 | [ami-046e324b95557b67e](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-046e324b95557b67e) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-046e324b95557b67e)) | +| eu-west-1 | [ami-0370efeca292a68fa](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0370efeca292a68fa) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0370efeca292a68fa)) | +| eu-west-2 | [ami-0581c02f513cab380](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0581c02f513cab380) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0581c02f513cab380)) | +| eu-west-3 | [ami-03b6049476dc86faa](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03b6049476dc86faa) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-03b6049476dc86faa)) | +| sa-east-1 | [ami-0a82e4262b07441f2](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a82e4262b07441f2) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a82e4262b07441f2)) | +| us-east-1 | [ami-034b4fb0ea71693e3](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034b4fb0ea71693e3) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034b4fb0ea71693e3)) | +| us-east-2 | [ami-058700b313ac9dde9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-058700b313ac9dde9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-058700b313ac9dde9)) | +| us-west-1 | [ami-08e25ab23aa5a3904](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e25ab23aa5a3904) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08e25ab23aa5a3904)) | +| us-west-2 | [ami-08f7bd174f27a0375](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f7bd174f27a0375) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08f7bd174f27a0375)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index bcfed41..a587977 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -135,6 +135,33 @@ edge-x86_64: us-east-2: ami-0ae27524e2b9bb820 us-west-1: ami-02a94605eedcd1d51 us-west-2: ami-034def9257bc1fa27 + alpine-ami-edge-x86_64-20200403021415: + description: Alpine Linux edge x86_64 20200403021415 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20200403021415' + end_of_life: '2020-04-04T02:14:15' + build_time: 1585880640 + artifacts: + ap-northeast-1: ami-0a930ab443e79658a + ap-northeast-2: ami-0e5c3704b08250be0 + ap-south-1: ami-0e9b4aa2c6dfa1c6b + ap-southeast-1: ami-017d1c8652fe5fb6e + ap-southeast-2: ami-0b20e853350fcc974 + ca-central-1: ami-078a0413716fb1ee2 + eu-central-1: ami-0b949041038ac64f8 + eu-north-1: ami-046e324b95557b67e + eu-west-1: ami-0370efeca292a68fa + eu-west-2: ami-0581c02f513cab380 + eu-west-3: ami-03b6049476dc86faa + sa-east-1: ami-0a82e4262b07441f2 + us-east-1: ami-034b4fb0ea71693e3 + us-east-2: ami-058700b313ac9dde9 + us-west-1: ami-08e25ab23aa5a3904 + us-west-2: ami-08f7bd174f27a0375 v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -472,3 +499,31 @@ v3_11-x86_64: us-east-2: ami-0741188fc6d365c12 us-west-1: ami-065633a2b189f7550 us-west-2: ami-050dd0423825ae4cd + 3.11.5: + alpine-ami-3.11.5-x86_64-r0: + description: Alpine Linux 3.11.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.5 + arch: x86_64 + revision: r0 + end_of_life: '2021-11-01T00:00:00' + build_time: 1585881226 + artifacts: + ap-northeast-1: ami-02945e11777c5d74a + ap-northeast-2: ami-071e19bba641e10c1 + ap-south-1: ami-0df79a6a767372395 + ap-southeast-1: ami-092bdb41e6d9f7060 + ap-southeast-2: ami-02a1c7112bbe60f00 + ca-central-1: ami-0081665c09326cae2 + eu-central-1: ami-09d753422dab3888f + eu-north-1: ami-0f326f36494b66d68 + eu-west-1: ami-0c1e8337e5112eb80 + eu-west-2: ami-06ec140a6fa5ff24c + eu-west-3: ami-05270703db64782c3 + sa-east-1: ami-08e5a4dc318e84618 + us-east-1: ami-02fa6ea44ed68cbd1 + us-east-2: ami-0325fc21b50ee19ba + us-west-1: ami-003d6e7746c7e938e + us-west-2: ami-0966c757f79c1a553 From fe362af91ffbe5874bce764c3230ae857693e359 Mon Sep 17 00:00:00 2001 From: tomalok Date: Sat, 25 Apr 2020 17:03:26 -0700 Subject: [PATCH 052/125] 3.11.6, 3.10.5, and 3.9.6 (#65) --- profiles/version/3.10 | 2 +- profiles/version/3.11 | 2 +- profiles/version/3.9 | 2 +- releases/README.md | 144 +++++++++++++++++++++--------------------- releases/alpine.yaml | 111 ++++++++++++++++++++++++++++++++ 5 files changed, 186 insertions(+), 75 deletions(-) diff --git a/profiles/version/3.10 b/profiles/version/3.10 index d8f99d2..a83dff2 100644 --- a/profiles/version/3.10 +++ b/profiles/version/3.10 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.10" -release = "3.10.4" +release = "3.10.5" end_of_life = "2021-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.10/main" = true diff --git a/profiles/version/3.11 b/profiles/version/3.11 index 2cbbdf0..4f0a55d 100644 --- a/profiles/version/3.11 +++ b/profiles/version/3.11 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.11" -release = "3.11.5" +release = "3.11.6" end_of_life = "2021-11-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" = true diff --git a/profiles/version/3.9 b/profiles/version/3.9 index 867f86b..7f5a7e8 100644 --- a/profiles/version/3.9 +++ b/profiles/version/3.9 @@ -6,7 +6,7 @@ include required("../base/current") # set version-specific vars version = "3.9" -release = "3.9.5" +release = "3.9.6" end_of_life = "2021-01-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.9/main" = true diff --git a/releases/README.md b/releases/README.md index a171d0b..6af96d2 100644 --- a/releases/README.md +++ b/releases/README.md @@ -28,98 +28,98 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am ## AMIs -### Alpine Linux 3.11.5 (2020-04-03) +### Alpine Linux 3.11.6 (2020-04-25)
click to show/hide

-| Region | alpine-ami-3.11.5-x86_64-r0 | +| Region | alpine-ami-3.11.6-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-02945e11777c5d74a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02945e11777c5d74a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02945e11777c5d74a)) | -| ap-northeast-2 | [ami-071e19bba641e10c1](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071e19bba641e10c1) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-071e19bba641e10c1)) | -| ap-south-1 | [ami-0df79a6a767372395](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0df79a6a767372395) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0df79a6a767372395)) | -| ap-southeast-1 | [ami-092bdb41e6d9f7060](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092bdb41e6d9f7060) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092bdb41e6d9f7060)) | -| ap-southeast-2 | [ami-02a1c7112bbe60f00](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a1c7112bbe60f00) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a1c7112bbe60f00)) | -| ca-central-1 | [ami-0081665c09326cae2](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0081665c09326cae2) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0081665c09326cae2)) | -| eu-central-1 | [ami-09d753422dab3888f](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09d753422dab3888f) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09d753422dab3888f)) | -| eu-north-1 | [ami-0f326f36494b66d68](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f326f36494b66d68) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f326f36494b66d68)) | -| eu-west-1 | [ami-0c1e8337e5112eb80](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c1e8337e5112eb80) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c1e8337e5112eb80)) | -| eu-west-2 | [ami-06ec140a6fa5ff24c](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06ec140a6fa5ff24c) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06ec140a6fa5ff24c)) | -| eu-west-3 | [ami-05270703db64782c3](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05270703db64782c3) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-05270703db64782c3)) | -| sa-east-1 | [ami-08e5a4dc318e84618](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e5a4dc318e84618) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08e5a4dc318e84618)) | -| us-east-1 | [ami-02fa6ea44ed68cbd1](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fa6ea44ed68cbd1) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fa6ea44ed68cbd1)) | -| us-east-2 | [ami-0325fc21b50ee19ba](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0325fc21b50ee19ba) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0325fc21b50ee19ba)) | -| us-west-1 | [ami-003d6e7746c7e938e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-003d6e7746c7e938e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-003d6e7746c7e938e)) | -| us-west-2 | [ami-0966c757f79c1a553](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0966c757f79c1a553) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0966c757f79c1a553)) | +| ap-northeast-1 | [ami-04dd34605aba7ce11](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04dd34605aba7ce11) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04dd34605aba7ce11)) | +| ap-northeast-2 | [ami-0fd25bd139c05812d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fd25bd139c05812d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fd25bd139c05812d)) | +| ap-south-1 | [ami-08437e8244154999a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08437e8244154999a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08437e8244154999a)) | +| ap-southeast-1 | [ami-04a63840be47a0816](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04a63840be47a0816) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a63840be47a0816)) | +| ap-southeast-2 | [ami-07be0b72172a63df3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07be0b72172a63df3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07be0b72172a63df3)) | +| ca-central-1 | [ami-013d1db5df4ad7d4a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013d1db5df4ad7d4a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-013d1db5df4ad7d4a)) | +| eu-central-1 | [ami-03bc1e4d4bf636895](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03bc1e4d4bf636895) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03bc1e4d4bf636895)) | +| eu-north-1 | [ami-03830331da71d3b6a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03830331da71d3b6a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03830331da71d3b6a)) | +| eu-west-1 | [ami-0a3bf003cc0e5cbaf](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3bf003cc0e5cbaf) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3bf003cc0e5cbaf)) | +| eu-west-2 | [ami-0dcb13d7ab5820ac0](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dcb13d7ab5820ac0) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0dcb13d7ab5820ac0)) | +| eu-west-3 | [ami-043d77b850fc69cff](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043d77b850fc69cff) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-043d77b850fc69cff)) | +| sa-east-1 | [ami-0056de88b2ebc5071](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0056de88b2ebc5071) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0056de88b2ebc5071)) | +| us-east-1 | [ami-0da684cce2ab4aadb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0da684cce2ab4aadb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0da684cce2ab4aadb)) | +| us-east-2 | [ami-014d15ba809c1e48f](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014d15ba809c1e48f) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014d15ba809c1e48f)) | +| us-west-1 | [ami-05f659e5fe3528bbd](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f659e5fe3528bbd) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f659e5fe3528bbd)) | +| us-west-2 | [ami-0380e01590d421d3e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0380e01590d421d3e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0380e01590d421d3e)) |

-### Alpine Linux 3.10.4 (2020-02-05) +### Alpine Linux 3.10.5 (2020-04-25)
click to show/hide

-| Region | alpine-ami-3.10.4-x86_64-r0 | +| Region | alpine-ami-3.10.5-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-0dc770d65f50e9339](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc770d65f50e9339) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc770d65f50e9339)) | -| ap-northeast-2 | [ami-03a2be707d4d83cea](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03a2be707d4d83cea) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03a2be707d4d83cea)) | -| ap-south-1 | [ami-00fac10f41dff96e4](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00fac10f41dff96e4) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00fac10f41dff96e4)) | -| ap-southeast-1 | [ami-0aadcaa1f71c42546](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aadcaa1f71c42546) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aadcaa1f71c42546)) | -| ap-southeast-2 | [ami-0ba48065660ab830f](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ba48065660ab830f) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ba48065660ab830f)) | -| ca-central-1 | [ami-0a54918dadce6828a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a54918dadce6828a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a54918dadce6828a)) | -| eu-central-1 | [ami-01de425983c4c1bfc](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01de425983c4c1bfc) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01de425983c4c1bfc)) | -| eu-north-1 | [ami-0011e13dbacb8fcb4](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0011e13dbacb8fcb4) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0011e13dbacb8fcb4)) | -| eu-west-1 | [ami-0d645d9aa9af199e7](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d645d9aa9af199e7) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d645d9aa9af199e7)) | -| eu-west-2 | [ami-047029018b46688b5](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-047029018b46688b5) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-047029018b46688b5)) | -| eu-west-3 | [ami-070b405f25870cfa4](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-070b405f25870cfa4) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-070b405f25870cfa4)) | -| sa-east-1 | [ami-01af983d84e7075aa](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01af983d84e7075aa) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01af983d84e7075aa)) | -| us-east-1 | [ami-014e31a6d6da30eb7](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014e31a6d6da30eb7) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-014e31a6d6da30eb7)) | -| us-east-2 | [ami-004421f607bf25444](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004421f607bf25444) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-004421f607bf25444)) | -| us-west-1 | [ami-0e07b975efa6cba65](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e07b975efa6cba65) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e07b975efa6cba65)) | -| us-west-2 | [ami-07128e75c4dcc9c7c](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07128e75c4dcc9c7c) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07128e75c4dcc9c7c)) | +| ap-northeast-1 | [ami-043d40c880c7a176b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043d40c880c7a176b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043d40c880c7a176b)) | +| ap-northeast-2 | [ami-0595dc50c0f0e23f7](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0595dc50c0f0e23f7) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0595dc50c0f0e23f7)) | +| ap-south-1 | [ami-0c8a22fa0ee90c07a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c8a22fa0ee90c07a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c8a22fa0ee90c07a)) | +| ap-southeast-1 | [ami-0244d1373053cfe5b](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0244d1373053cfe5b) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0244d1373053cfe5b)) | +| ap-southeast-2 | [ami-0cf284dc25e35862d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cf284dc25e35862d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cf284dc25e35862d)) | +| ca-central-1 | [ami-08c250f635a417222](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c250f635a417222) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c250f635a417222)) | +| eu-central-1 | [ami-0a626b78c94340b6e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a626b78c94340b6e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a626b78c94340b6e)) | +| eu-north-1 | [ami-041b6bdb27dbc8226](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-041b6bdb27dbc8226) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-041b6bdb27dbc8226)) | +| eu-west-1 | [ami-0451f26166639b1b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0451f26166639b1b9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0451f26166639b1b9)) | +| eu-west-2 | [ami-08ca328d558bee247](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08ca328d558bee247) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08ca328d558bee247)) | +| eu-west-3 | [ami-0bbb1a9d10ee0e6ee](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bbb1a9d10ee0e6ee) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bbb1a9d10ee0e6ee)) | +| sa-east-1 | [ami-088bc83fe1497e710](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088bc83fe1497e710) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-088bc83fe1497e710)) | +| us-east-1 | [ami-0e635ea3ca126c707](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e635ea3ca126c707) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e635ea3ca126c707)) | +| us-east-2 | [ami-0f5a09a7d1d0ae35f](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f5a09a7d1d0ae35f) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f5a09a7d1d0ae35f)) | +| us-west-1 | [ami-06c2aa86f3a72385e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c2aa86f3a72385e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06c2aa86f3a72385e)) | +| us-west-2 | [ami-0b6f8a395fa8b5961](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6f8a395fa8b5961) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6f8a395fa8b5961)) |

-### Alpine Linux 3.9.5 (2020-02-05) +### Alpine Linux 3.9.6 (2020-04-25)
click to show/hide

-| Region | alpine-ami-3.9.5-x86_64-r0 | +| Region | alpine-ami-3.9.6-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-0f22ba5f542102103](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f22ba5f542102103) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f22ba5f542102103)) | -| ap-northeast-2 | [ami-042ed34c048fd4dde](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042ed34c048fd4dde) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-042ed34c048fd4dde)) | -| ap-south-1 | [ami-03aa6dfb6b5c5b24d](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03aa6dfb6b5c5b24d) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03aa6dfb6b5c5b24d)) | -| ap-southeast-1 | [ami-09aa8a66b52872964](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09aa8a66b52872964) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09aa8a66b52872964)) | -| ap-southeast-2 | [ami-0883e80a814ca1ead](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0883e80a814ca1ead) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0883e80a814ca1ead)) | -| ca-central-1 | [ami-07ced81b329157965](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ced81b329157965) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07ced81b329157965)) | -| eu-central-1 | [ami-0b1156425ee49460e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1156425ee49460e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1156425ee49460e)) | -| eu-north-1 | [ami-0dae27e872bbb58a3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dae27e872bbb58a3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dae27e872bbb58a3)) | -| eu-west-1 | [ami-032df31e3645eac89](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-032df31e3645eac89) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-032df31e3645eac89)) | -| eu-west-2 | [ami-0ca53eef190752d9b](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca53eef190752d9b) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca53eef190752d9b)) | -| eu-west-3 | [ami-01d92abfc31832091](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d92abfc31832091) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01d92abfc31832091)) | -| sa-east-1 | [ami-044b116c38c67bbe6](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-044b116c38c67bbe6) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-044b116c38c67bbe6)) | -| us-east-1 | [ami-01d51c30d2c611d0b](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d51c30d2c611d0b) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01d51c30d2c611d0b)) | -| us-east-2 | [ami-023a120054be00f14](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023a120054be00f14) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-023a120054be00f14)) | -| us-west-1 | [ami-0b628545bb655d1e3](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b628545bb655d1e3) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b628545bb655d1e3)) | -| us-west-2 | [ami-06dc8e37edaccd91d](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06dc8e37edaccd91d) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06dc8e37edaccd91d)) | +| ap-northeast-1 | [ami-0133f3a571f684178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0133f3a571f684178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0133f3a571f684178)) | +| ap-northeast-2 | [ami-0f9ad7c51e14bdc3d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ad7c51e14bdc3d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ad7c51e14bdc3d)) | +| ap-south-1 | [ami-00af726ec2f4077a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00af726ec2f4077a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00af726ec2f4077a2)) | +| ap-southeast-1 | [ami-0d52e9d7f91ca051c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d52e9d7f91ca051c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d52e9d7f91ca051c)) | +| ap-southeast-2 | [ami-054360648343b66bc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054360648343b66bc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-054360648343b66bc)) | +| ca-central-1 | [ami-0583a99f342097b6c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0583a99f342097b6c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0583a99f342097b6c)) | +| eu-central-1 | [ami-051eec0106a08df6d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051eec0106a08df6d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051eec0106a08df6d)) | +| eu-north-1 | [ami-07a2b23059054aea3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a2b23059054aea3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a2b23059054aea3)) | +| eu-west-1 | [ami-0eb2b54ab4d09eb80](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb2b54ab4d09eb80) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb2b54ab4d09eb80)) | +| eu-west-2 | [ami-08c87b358b24d1df3](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c87b358b24d1df3) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08c87b358b24d1df3)) | +| eu-west-3 | [ami-00a425aa20737343e](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a425aa20737343e) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00a425aa20737343e)) | +| sa-east-1 | [ami-0ea679407da47b78a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ea679407da47b78a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea679407da47b78a)) | +| us-east-1 | [ami-004f0550310a2d7aa](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004f0550310a2d7aa) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-004f0550310a2d7aa)) | +| us-east-2 | [ami-045a2cc3fe272caee](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045a2cc3fe272caee) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-045a2cc3fe272caee)) | +| us-west-1 | [ami-026a54e52daea1233](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026a54e52daea1233) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026a54e52daea1233)) | +| us-west-2 | [ami-0b933475d362cbfab](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b933475d362cbfab) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b933475d362cbfab)) |

-### Alpine Linux Edge (2020-04-03) +### Alpine Linux Edge (2020-04-25)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20200403021415 | +| Region | alpine-ami-edge-x86_64-20200425232123 | | ------ | --- | -| ap-northeast-1 | [ami-0a930ab443e79658a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a930ab443e79658a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a930ab443e79658a)) | -| ap-northeast-2 | [ami-0e5c3704b08250be0](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e5c3704b08250be0) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e5c3704b08250be0)) | -| ap-south-1 | [ami-0e9b4aa2c6dfa1c6b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e9b4aa2c6dfa1c6b) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e9b4aa2c6dfa1c6b)) | -| ap-southeast-1 | [ami-017d1c8652fe5fb6e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-017d1c8652fe5fb6e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-017d1c8652fe5fb6e)) | -| ap-southeast-2 | [ami-0b20e853350fcc974](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b20e853350fcc974) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b20e853350fcc974)) | -| ca-central-1 | [ami-078a0413716fb1ee2](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-078a0413716fb1ee2) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-078a0413716fb1ee2)) | -| eu-central-1 | [ami-0b949041038ac64f8](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b949041038ac64f8) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b949041038ac64f8)) | -| eu-north-1 | [ami-046e324b95557b67e](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-046e324b95557b67e) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-046e324b95557b67e)) | -| eu-west-1 | [ami-0370efeca292a68fa](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0370efeca292a68fa) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0370efeca292a68fa)) | -| eu-west-2 | [ami-0581c02f513cab380](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0581c02f513cab380) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0581c02f513cab380)) | -| eu-west-3 | [ami-03b6049476dc86faa](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03b6049476dc86faa) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-03b6049476dc86faa)) | -| sa-east-1 | [ami-0a82e4262b07441f2](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a82e4262b07441f2) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a82e4262b07441f2)) | -| us-east-1 | [ami-034b4fb0ea71693e3](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034b4fb0ea71693e3) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034b4fb0ea71693e3)) | -| us-east-2 | [ami-058700b313ac9dde9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-058700b313ac9dde9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-058700b313ac9dde9)) | -| us-west-1 | [ami-08e25ab23aa5a3904](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e25ab23aa5a3904) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08e25ab23aa5a3904)) | -| us-west-2 | [ami-08f7bd174f27a0375](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f7bd174f27a0375) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08f7bd174f27a0375)) | +| ap-northeast-1 | [ami-0f64e8385eb16f0c5](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f64e8385eb16f0c5) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f64e8385eb16f0c5)) | +| ap-northeast-2 | [ami-0f6525d9186a0ee66](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6525d9186a0ee66) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6525d9186a0ee66)) | +| ap-south-1 | [ami-034d9a20d9bf2049f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034d9a20d9bf2049f) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034d9a20d9bf2049f)) | +| ap-southeast-1 | [ami-0e64d169297389f9e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e64d169297389f9e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e64d169297389f9e)) | +| ap-southeast-2 | [ami-0afc0bab8196b70e4](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0afc0bab8196b70e4) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0afc0bab8196b70e4)) | +| ca-central-1 | [ami-068da53b91dcfad35](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068da53b91dcfad35) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068da53b91dcfad35)) | +| eu-central-1 | [ami-0b04139e51df7902b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b04139e51df7902b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b04139e51df7902b)) | +| eu-north-1 | [ami-0ac2cb76721262b8f](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ac2cb76721262b8f) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ac2cb76721262b8f)) | +| eu-west-1 | [ami-0a86b121e789d84a2](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a86b121e789d84a2) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a86b121e789d84a2)) | +| eu-west-2 | [ami-0329b37ebc36521c7](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0329b37ebc36521c7) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0329b37ebc36521c7)) | +| eu-west-3 | [ami-037d85dcf06bc913e](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-037d85dcf06bc913e) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-037d85dcf06bc913e)) | +| sa-east-1 | [ami-0b8e53df93ee4132d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b8e53df93ee4132d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b8e53df93ee4132d)) | +| us-east-1 | [ami-097be5ea1a5c7b6ce](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097be5ea1a5c7b6ce) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097be5ea1a5c7b6ce)) | +| us-east-2 | [ami-0f40de04e77f600b6](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f40de04e77f600b6) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f40de04e77f600b6)) | +| us-west-1 | [ami-095527a55aa7c1c1d](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095527a55aa7c1c1d) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-095527a55aa7c1c1d)) | +| us-west-2 | [ami-0e5711189d37ddd64](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e5711189d37ddd64) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e5711189d37ddd64)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index a587977..02da4e1 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -162,6 +162,33 @@ edge-x86_64: us-east-2: ami-058700b313ac9dde9 us-west-1: ami-08e25ab23aa5a3904 us-west-2: ami-08f7bd174f27a0375 + alpine-ami-edge-x86_64-20200425232123: + description: Alpine Linux edge x86_64 20200425232123 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20200425232123' + end_of_life: '2020-04-26T23:21:23' + build_time: 1587857443 + artifacts: + ap-northeast-1: ami-0f64e8385eb16f0c5 + ap-northeast-2: ami-0f6525d9186a0ee66 + ap-south-1: ami-034d9a20d9bf2049f + ap-southeast-1: ami-0e64d169297389f9e + ap-southeast-2: ami-0afc0bab8196b70e4 + ca-central-1: ami-068da53b91dcfad35 + eu-central-1: ami-0b04139e51df7902b + eu-north-1: ami-0ac2cb76721262b8f + eu-west-1: ami-0a86b121e789d84a2 + eu-west-2: ami-0329b37ebc36521c7 + eu-west-3: ami-037d85dcf06bc913e + sa-east-1: ami-0b8e53df93ee4132d + us-east-1: ami-097be5ea1a5c7b6ce + us-east-2: ami-0f40de04e77f600b6 + us-west-1: ami-095527a55aa7c1c1d + us-west-2: ami-0e5711189d37ddd64 v3_10-x86_64: 3.10.0: alpine-ami-3.10.0-x86_64-r0: @@ -330,6 +357,34 @@ v3_10-x86_64: us-east-2: ami-004421f607bf25444 us-west-1: ami-0e07b975efa6cba65 us-west-2: ami-07128e75c4dcc9c7c + 3.10.5: + alpine-ami-3.10.5-x86_64-r0: + description: Alpine Linux 3.10.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.5 + arch: x86_64 + revision: r0 + end_of_life: '2021-05-01T00:00:00' + build_time: 1587857969 + artifacts: + ap-northeast-1: ami-043d40c880c7a176b + ap-northeast-2: ami-0595dc50c0f0e23f7 + ap-south-1: ami-0c8a22fa0ee90c07a + ap-southeast-1: ami-0244d1373053cfe5b + ap-southeast-2: ami-0cf284dc25e35862d + ca-central-1: ami-08c250f635a417222 + eu-central-1: ami-0a626b78c94340b6e + eu-north-1: ami-041b6bdb27dbc8226 + eu-west-1: ami-0451f26166639b1b9 + eu-west-2: ami-08ca328d558bee247 + eu-west-3: ami-0bbb1a9d10ee0e6ee + sa-east-1: ami-088bc83fe1497e710 + us-east-1: ami-0e635ea3ca126c707 + us-east-2: ami-0f5a09a7d1d0ae35f + us-west-1: ami-06c2aa86f3a72385e + us-west-2: ami-0b6f8a395fa8b5961 v3_9-x86_64: 3.9.4: alpine-ami-3.9.4-x86_64-r0: @@ -414,6 +469,34 @@ v3_9-x86_64: us-east-2: ami-023a120054be00f14 us-west-1: ami-0b628545bb655d1e3 us-west-2: ami-06dc8e37edaccd91d + 3.9.6: + alpine-ami-3.9.6-x86_64-r0: + description: Alpine Linux 3.9.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_9-x86_64 + version: '3.9' + release: 3.9.6 + arch: x86_64 + revision: r0 + end_of_life: '2021-01-01T00:00:00' + build_time: 1587859015 + artifacts: + ap-northeast-1: ami-0133f3a571f684178 + ap-northeast-2: ami-0f9ad7c51e14bdc3d + ap-south-1: ami-00af726ec2f4077a2 + ap-southeast-1: ami-0d52e9d7f91ca051c + ap-southeast-2: ami-054360648343b66bc + ca-central-1: ami-0583a99f342097b6c + eu-central-1: ami-051eec0106a08df6d + eu-north-1: ami-07a2b23059054aea3 + eu-west-1: ami-0eb2b54ab4d09eb80 + eu-west-2: ami-08c87b358b24d1df3 + eu-west-3: ami-00a425aa20737343e + sa-east-1: ami-0ea679407da47b78a + us-east-1: ami-004f0550310a2d7aa + us-east-2: ami-045a2cc3fe272caee + us-west-1: ami-026a54e52daea1233 + us-west-2: ami-0b933475d362cbfab v3_11-x86_64: 3.11.0: alpine-ami-3.11.0-x86_64-r0: @@ -527,3 +610,31 @@ v3_11-x86_64: us-east-2: ami-0325fc21b50ee19ba us-west-1: ami-003d6e7746c7e938e us-west-2: ami-0966c757f79c1a553 + 3.11.6: + alpine-ami-3.11.6-x86_64-r0: + description: Alpine Linux 3.11.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.6 + arch: x86_64 + revision: r0 + end_of_life: '2021-11-01T00:00:00' + build_time: 1587858467 + artifacts: + ap-northeast-1: ami-04dd34605aba7ce11 + ap-northeast-2: ami-0fd25bd139c05812d + ap-south-1: ami-08437e8244154999a + ap-southeast-1: ami-04a63840be47a0816 + ap-southeast-2: ami-07be0b72172a63df3 + ca-central-1: ami-013d1db5df4ad7d4a + eu-central-1: ami-03bc1e4d4bf636895 + eu-north-1: ami-03830331da71d3b6a + eu-west-1: ami-0a3bf003cc0e5cbaf + eu-west-2: ami-0dcb13d7ab5820ac0 + eu-west-3: ami-043d77b850fc69cff + sa-east-1: ami-0056de88b2ebc5071 + us-east-1: ami-0da684cce2ab4aadb + us-east-2: ami-014d15ba809c1e48f + us-west-1: ami-05f659e5fe3528bbd + us-west-2: ami-0380e01590d421d3e From 1fd42af98dac79011496a7956a8cf592b596e2cf Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 21 May 2020 10:45:05 -0700 Subject: [PATCH 053/125] Refactor resolve-profile script This is paving the way for identity broker improvements for opt-in regions. The output is functionally identical between the two scripts modulo the svcs change. Hopefully this makes the transformation process a little more clear. --- profiles/base/1 | 46 ++++--- scripts/resolve-profile.py.in | 233 +++++++++++++++------------------- 2 files changed, 132 insertions(+), 147 deletions(-) diff --git a/profiles/base/1 b/profiles/base/1 index fdda3f0..18decd1 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -56,25 +56,33 @@ pkgs { tzdata = true } svcs { - devfs = "sysinit" - dmesg = "sysinit" - hwdrivers = "sysinit" - mdev = "sysinit" - acpid = "boot" - bootmisc = "boot" - hostname = "boot" - hwclock = "boot" - modules = "boot" - swap = "boot" - sysctl = "boot" - syslog = "boot" - chronyd = "default" - networking = "default" - sshd = "default" - tiny-ec2-bootstrap = "default" - killprocs = "shutdown" - mount-ro = "shutdown" - savecache = "shutdown" + sysinit { + devfs = true + dmesg = true + hwdrivers = true + mdev = true + } + boot { + acpid = true + bootmisc = true + hostname = true + hwclock = true + modules = true + swap = true + sysctl = true + syslog = true + } + default { + chronyd = true + networking = true + sshd = true + tiny-ec2-bootstrap = true + } + shutdown { + killprocs = true + mount-ro = true + savecache = true + } } kernel_modules { sd-mod = true diff --git a/scripts/resolve-profile.py.in b/scripts/resolve-profile.py.in index 884cd2d..2905423 100644 --- a/scripts/resolve-profile.py.in +++ b/scripts/resolve-profile.py.in @@ -1,156 +1,133 @@ @PYTHON@ # vim: set ts=4 et: -import json import os -import shutil import sys -import boto3 -from botocore.exceptions import ClientError +import json +import shutil +import argparse from datetime import datetime, timedelta + from pyhocon import ConfigFactory -if len(sys.argv) != 2: - sys.exit("Usage: " + os.path.basename(__file__) + " ") -PROFILE = sys.argv[1] +# Just group together our transforms +class Transforms: -SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) + NOW = datetime.utcnow() + TOMORROW = NOW + timedelta(days=1) -# path to the profile config file -PROFILE_CONF = os.path.join(SCRIPT_DIR, '..', 'profiles', PROFILE + '.conf') + unquote = lambda x: x.strip('"') -# load the profile's build configuration -BUILDS = ConfigFactory.parse_file(PROFILE_CONF)['BUILDS'] + @staticmethod + def force_iso_date(input): + return datetime.fromisoformat(input).isoformat(timespec="seconds") -# where we store the profile's builds' config/output -PROFILE_DIR = os.path.join(SCRIPT_DIR, 'profile', PROFILE) -if not os.path.exists(PROFILE_DIR): - os.makedirs(PROFILE_DIR) + @classmethod + def resolve_tomorrow(cls, input): + return cls.TOMORROW.isoformat(timespec="seconds") -# fold these build config keys' dict to scalar -FOLD_DICTS = { - 'ami_access': ',{0}', - 'ami_regions': ',{0}', - 'repos': "\n@{1} {0}", - 'pkgs': ' {0}@{1}', - 'kernel_modules': ',{0}', - 'kernel_options': ' {0}' -} + @classmethod + def resolve_now(cls, input): + return cls.NOW.strftime("%Y%m%d%H%M%S") -NOW = datetime.utcnow() -ONE_DAY = timedelta(days=1) + @classmethod + def fold_comma(cls, input): + return ",".join([cls.unquote(k) for k in input.keys()]) + + @classmethod + def fold_space(cls, input): + return " ".join([cls.unquote(k) for k in input.keys()]) + + @classmethod + def fold_repos(cls, input): + return "\n".join( + f"@{v} {cls.unquote(k)}" if isinstance(v, str) else cls.unquote(k) + for k, v in input.items()) + + @staticmethod + def fold_packages(input): + return " ".join( + f"{k}@{v}" if isinstance(v, str) else k + for k, v in input.items()) + + @staticmethod + def fold_services(input): + return " ".join( + "{}={}".format(k, ",".join(v.keys())) + for k, v in input.items()) -# func to fold dict down to scalar -def fold(fdict, ffmt): - folded = '' - for fkey, fval in fdict.items(): - fkey = fkey.strip('"') # complex keys may be in quotes - if fval is True: - folded += ffmt[0] + fkey - elif fval not in [None, False]: - folded += ffmt.format(fkey, fval) - return folded[1:] +class ConfigBuilder: + + _CFG_TRANSFORMS = { + "ami_access" : Transforms.fold_comma, + "ami_regions" : Transforms.fold_comma, + "kernel_modules" : Transforms.fold_comma, + "kernel_options" : Transforms.fold_space, + "repos" : Transforms.fold_repos, + "pkgs" : Transforms.fold_packages, + "svcs" : Transforms.fold_services, + "revision" : Transforms.resolve_now, + "end_of_life" : lambda x: \ + Transforms.force_iso_date(Transforms.resolve_tomorrow(x)), + } + + def __init__(self, config_path, out_dir): + self.config_path = config_path + self.out_dir = out_dir + + def build(self, profile): + build_config = ConfigFactory.parse_file(self.config_path) + + for build, cfg in build_config["BUILDS"].items(): + build_dir = os.path.join(self.out_dir, build) + + # Always start fresh + shutil.rmtree(build_dir, ignore_errors=True) + os.makedirs(build_dir) + + cfg["profile"] = profile + cfg["profile_build"] = build + + # Order of operations is important here + for k, v in cfg.items(): + transform = self._CFG_TRANSFORMS.get(k) + if transform: + cfg[k] = transform(v) + + if isinstance(v, str) and "{var." in v: + cfg[k] = v.format(var=cfg) + + with open(os.path.join(build_dir, "vars.json"), "w") as out: + json.dump(cfg, out, indent=4, separators=(",", ": ")) -# list of AWS regions, and whether they're enabled -all_regions = {} -AWS = boto3.session.Session() -sys.stderr.write("\n>>> Determining region availability...") -sys.stderr.flush() -for region in AWS.get_available_regions('ec2'): - ec2 = AWS.client('ec2', region_name=region) - try: - ec2.describe_regions() - except ClientError as e: - if e.response['Error']['Code'] == 'AuthFailure': - sys.stderr.write('-') - sys.stderr.flush() - all_regions[region] = False - continue - elif e.response['Error']['Code'] == 'UnauthorizedOperation': - # have access to the region, but not to ec2:DescribeRegions - pass - else: - raise - sys.stderr.write('+') - sys.stderr.flush() - all_regions[region] = True -sys.stderr.write("\n") +def find_repo_root(): + path = os.getcwd() -for region, available in all_regions.items(): - if available is False: - sys.stderr.write(f"*** WARNING: skipping disabled region {region}\n") + while ".git" not in set(os.listdir(path)) and path != "/": + path = os.path.dirname(path) -print() + if path == "/": + raise Exception("No repo found, stopping at /") -# parse/resolve HOCON profile's builds' config -for build, cfg in BUILDS.items(): - print(f">>> Resolving configuration for '{build}'") - build_dir = os.path.join(PROFILE_DIR, build) + return path - # make a fresh profile build directory - if os.path.exists(build_dir): - shutil.rmtree(build_dir) - os.makedirs(build_dir) - # populate profile build vars - cfg['profile'] = PROFILE - cfg['profile_build'] = build +def main(args): + parser = argparse.ArgumentParser(description="Build Packer JSON variable " + "files from HOCON build profiles") + parser.add_argument("profile", help="name of profile to build") + args = parser.parse_args() - # mostly edge-related temporal substitutions - if cfg['end_of_life'] == '@TOMORROW@': - cfg['end_of_life'] = (NOW + ONE_DAY).isoformat(timespec='seconds') - elif cfg['end_of_life'] is not None: - # to explicitly UTC-ify end_of_life - cfg['end_of_life'] = datetime.fromisoformat( - cfg['end_of_life'] + '+00:00').isoformat(timespec='seconds') - if cfg['revision'] == '@NOW@': - cfg['revision'] = NOW.strftime('%Y%m%d%H%M%S') + root = find_repo_root() - # 'ALL' region expansion (or retraction) - if 'ALL' in cfg['ami_regions']: - all_val = cfg['ami_regions']['ALL'] - if all_val not in [None, False]: - cfg['ami_regions'] = all_regions - else: - cfg['ami_regions'] = {} - else: - # warn/remove disabled regions - for region, enabled in all_regions.items(): - if enabled is not False or region not in cfg['ami_regions']: - continue - if cfg['ami_regions'][region] not in [None, False]: - cfg['ami_regions'][region] = False + ConfigBuilder( + os.path.join(root, "profiles", f"{args.profile}.conf"), + os.path.join(root, "build", "profile", args.profile) + ).build(args.profile) - # fold dict vars to scalars - for foldkey, foldfmt in FOLD_DICTS.items(): - cfg[foldkey] = fold(cfg[foldkey], foldfmt) - # fold 'svcs' dict to scalar - lvls = {} - for svc, lvl in cfg['svcs'].items(): - if lvl is True: - # service in default runlevel - lvls['default'].append(svc) - elif lvl not in [None, False]: - # service in specified runlevel (skip svc when false/null) - if lvl not in lvls.keys(): - lvls[lvl] = [] - lvls[lvl].append(svc) - cfg['svcs'] = ' '.join( - str(lvl) + '=' + ','.join( - str(svc) for svc in svcs - ) for lvl, svcs in lvls.items() - ) - - # resolve ami_name and ami_desc - cfg['ami_name'] = cfg['ami_name'].format(var=cfg) - cfg['ami_desc'] = cfg['ami_desc'].format(var=cfg) - - # write build vars file - with open(os.path.join(build_dir, 'vars.json'), 'w') as out: - json.dump(cfg, out, indent=4, separators=(',', ': ')) - -print() +if __name__ == "__main__": + main(sys.argv) From d63409acce1750db32781146d8366a13923262d0 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 21 May 2020 10:52:06 -0700 Subject: [PATCH 054/125] Convert make-amis to python This is paving the way for identity broker improvements for opt-in regions. Eventually we'll need to hook some region logic into these scripts so having them written in python will be helpful. --- Makefile | 4 +-- scripts/make-amis | 39 ----------------------- scripts/make-amis.py.in | 68 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 41 deletions(-) delete mode 100755 scripts/make-amis create mode 100644 scripts/make-amis.py.in diff --git a/Makefile b/Makefile index 851ed7e..bc9b842 100644 --- a/Makefile +++ b/Makefile @@ -24,9 +24,9 @@ __check_defined = \ .PHONY: amis prune release-readme clean -amis: build build/packer.json build/profile/$(PROFILE) build/update-release.py +amis: build build/packer.json build/profile/$(PROFILE) build/update-release.py build/make-amis.py @:$(call check_defined, PROFILE, target profile name) - build/make-amis $(PROFILE) $(BUILDS) + build/make-amis.py $(PROFILE) $(BUILDS) prune: build build/prune-amis.py @:$(call check_defined, LEVEL, pruning level) diff --git a/scripts/make-amis b/scripts/make-amis deleted file mode 100755 index 45bccfd..0000000 --- a/scripts/make-amis +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# vim: set ts=4 et: - -export PACKER=${PACKER:-packer} - -cd build || exit 1 - -# we need a profile, at least -if [ $# -eq 0 ]; then - echo "Usage: $(basename "$0") [ ... ]" >&2 - exit 1 -fi - -PROFILE=$1; shift - -# no build(s) specified? do all the builds! -[ $# -gt 0 ] && BUILDS="$*" || BUILDS=$(ls "profile/$PROFILE") - -for BUILD in $BUILDS -do - printf "\n*** Building %s/%s ***\n\n" "$PROFILE" "$BUILD" - BUILD_DIR="profile/$PROFILE/$BUILD" - - # execute packer, capture output and exit code - ( - "$PACKER" build -var-file="$BUILD_DIR/vars.json" packer.json - echo $? >"$BUILD_DIR/exit" - ) | tee "$BUILD_DIR/output" - EXIT=$(cat "$BUILD_DIR/exit") - - if [ "$EXIT" -eq 0 ]; then - ./update-release.py "$PROFILE" "$BUILD" - else - # unless AMI revision already exists, exit - grep -q 'is used by an existing AMI' "$BUILD_DIR/output" || exit "$EXIT" - fi -done - -echo "\n=== DONE ===\n" diff --git a/scripts/make-amis.py.in b/scripts/make-amis.py.in new file mode 100644 index 0000000..c7f9f98 --- /dev/null +++ b/scripts/make-amis.py.in @@ -0,0 +1,68 @@ +@PYTHON@ +# vim: set ts=4 et: + +import os +import io +import sys +import argparse +import subprocess + + +def find_repo_root(): + path = os.getcwd() + + while ".git" not in set(os.listdir(path)) and path != "/": + path = os.path.dirname(path) + + if path == "/": + raise Exception("No repo found, stopping at /") + + return path + + +def main(args): + parser = argparse.ArgumentParser(description="Build Packer JSON variable " + "files from HOCON build profiles") + parser.add_argument("profile", help="name of profile to build") + parser.add_argument("builds", nargs="*", + help="name of builds within a profile to build") + args = parser.parse_args() + + os.chdir(os.path.join(find_repo_root(), "build")) + + builds = args.builds or os.listdir(os.path.join("profile", args.profile)) + for build in builds: + print(f"\n*** Building {args.profile}/{build} ***\n\n") + + build_dir = os.path.join("profile", args.profile, build) + if not os.path.exists(build_dir): + print(f"Build dir '{build_dir}' does not exist") + break + + out = io.StringIO() + + res = subprocess.Popen([ + os.environ.get("PACKER", "packer"), + "build", + f"-var-file={build_dir}/vars.json", + "packer.json" + ], stdout=subprocess.PIPE, encoding="utf-8") + + while res.poll() is None: + text = res.stdout.readline() + out.write(text) + print(text, end="") + + if res.returncode == 0: + subprocess.run(["./update-release.py", args.profile, build]) + else: + if "is used by an existing AMI" in out.getvalue(): + continue + else: + sys.exit(res.returncode) + + print("\n=== DONE ===\n") + + +if __name__ == "__main__": + main(sys.argv) From a36d0616bfee07e903e27a63348b7a65e2504c22 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 21 May 2020 18:22:26 -0700 Subject: [PATCH 055/125] Convert python scripts to argparse This removes the manual command line handling and reformats the scripts into main methods. This is paving the way for a more unified build tool. --- scripts/gen-release-readme.py.in | 210 +++++++++++++------------ scripts/prune-amis.py.in | 259 +++++++++++++++++-------------- scripts/update-release.py.in | 104 ++++++++----- 3 files changed, 317 insertions(+), 256 deletions(-) diff --git a/scripts/gen-release-readme.py.in b/scripts/gen-release-readme.py.in index 679d4f3..c2af953 100644 --- a/scripts/gen-release-readme.py.in +++ b/scripts/gen-release-readme.py.in @@ -1,119 +1,131 @@ @PYTHON@ # vim: ts=4 et: -from datetime import datetime -from distutils.version import StrictVersion -import functools import os import re -import sys +import argparse +import textwrap +from datetime import datetime +from collections import defaultdict +from distutils.version import StrictVersion + import yaml -if len(sys.argv) != 2: - sys.exit("Usage: " + os.path.basename(__file__) + "") -PROFILE = sys.argv[1] +def find_repo_root(): + path = os.getcwd() -RELEASE_DIR = os.path.join( - os.path.dirname(os.path.realpath(__file__)), - '..', 'releases' -) + while ".git" not in set(os.listdir(path)) and path != "/": + path = os.path.dirname(path) -README_MD = os.path.join( RELEASE_DIR, 'README.md') -RELEASE_YAML = os.path.join( RELEASE_DIR, PROFILE + '.yaml') + if path == "/": + raise Exception("No repo found, stopping at /") -# read in releases/.yaml -with open(RELEASE_YAML, 'r') as data: - RELEASES = yaml.safe_load(data) - -sections = {} - -for build, releases in RELEASES.items(): - for release, amis in releases.items(): - for name, info in amis.items(): - version = info['version'] - arch = info['arch'] - built = info['build_time'] - if version in sections: - ver = sections[version] - else: - ver = { - 'release': '', - 'built': {}, - 'name': {}, - 'ami': {} - } - if (arch not in ver['built'] or - ver['built'][arch] < built): - ver['release'] = release - ver['name'][arch] = name - ver['built'][arch] = built - for region, ami in info['artifacts'].items(): - if region not in ver['ami']: - ver['ami'][region] = {} - ver['ami'][region][arch] = ami - sections[version] = ver - -SECTION = """ -### Alpine Linux {release} ({date}) -
click to show/hide

- -{rows} - -

-""" - -AMI = " [{id}](https://{r}.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId={id}) " + \ - "([launch](https://{r}.console.aws.amazon.com/ec2/home#launchAmi={id})) |" - -ARCHS = ['x86_64', 'aarch64'] + return path -# most -> least recent version, edge at end -def ver_cmp(a, b): - try: - if StrictVersion(a) < StrictVersion(b): - return 1 - if StrictVersion(a) > StrictVersion(b): - return -1 - return 0 - except ValueError: - # "edge" doesn't work with StrictVersion - if a == 'edge': - return 1 - if b == 'edge': - return -1 - return 0 +class ReleaseReadmeUpdater: + SECTION_TPL = textwrap.dedent(""" + ### Alpine Linux {release} ({date}) +
click to show/hide

-ami_list = "## AMIs\n" + {rows} -for version in sorted(list(sections.keys()), key=functools.cmp_to_key(ver_cmp)): - info = sections[version] - release = info['release'] - rows = [] - rows.append('| Region |') - rows.append('| ------ |') - for arch in ARCHS: - if arch in info['name']: - rows[0] += ' {n} |'.format(n=info['name'][arch]) - rows[1] += ' --- |' - for region, amis in info['ami'].items(): - row = '| {r} |'.format(r=region) - for arch in ARCHS: - if arch in amis: - row += AMI.format(r=region, id=amis[arch]) - rows.append(row) - ami_list += SECTION.format( - release=release.capitalize(), - date=datetime.utcfromtimestamp(max(info['built'].values())).date(), - rows="\n".join(rows) +

+ """) + + AMI_TPL = ( + " [{id}](https://{r}.console.aws.amazon.com/ec2/home" + "#Images:visibility=public-images;imageId={id}) " + "([launch](https://{r}.console.aws.amazon.com/ec2/home" + "#launchAmi={id})) |" ) -with open(README_MD, 'r') as file: - readme = file.read() + def __init__(self, profile, archs=None): + self.profile = profile + self.archs = archs or ["x86_64", "aarch64"] -readme_re = re.compile('## AMIs.*\Z', re.S) + def get_sorted_releases(self, release_data): + sections = defaultdict(lambda: { + "release": "", + "built": {}, + "name": {}, + "ami": defaultdict(dict) + }) -with open(README_MD, 'w') as file: - file.write(readme_re.sub(ami_list, readme)) + for build, releases in release_data.items(): + for release, amis in releases.items(): + for name, info in amis.items(): + arch = info["arch"] + built = info["build_time"] + ver = sections[info["version"]] + + if arch not in ver["built"] or ver["built"][arch] < built: + ver["release"] = release + ver["name"][arch] = name + ver["built"][arch] = built + + for region, ami in info["artifacts"].items(): + ver["ami"][region][arch] = ami + + extract_ver = lambda x: StrictVersion( + "0.0" if x["release"] == "edge" else x["release"]) + + return sorted(sections.values(), key=extract_ver, reverse=True) + + def make_ami_list(self, sorted_releases): + ami_list = "## AMIs\n" + + for info in sorted_releases: + rows = ["| Region |", "| ------ |"] + + for arch in self.archs: + if arch in info["name"]: + rows[0] += f" {info['name'][arch]} |" + rows[1] += " --- |" + + for region, amis in info["ami"].items(): + row = f"| {region} |" + for arch in self.archs: + if arch in amis: + row += self.AMI_TPL.format(r=region, id=amis[arch]) + rows.append(row) + + ami_list += self.SECTION_TPL.format( + release=info["release"].capitalize(), + date=datetime.utcfromtimestamp( + max(info["built"].values())).date(), + rows="\n".join(rows)) + + return ami_list + + def update_markdown(self): + release_dir = os.path.join(find_repo_root(), "releases") + profile_file = os.path.join(release_dir, f"{self.profile}.yaml") + + with open(profile_file, "r") as data: + sorted_releases = self.get_sorted_releases(yaml.safe_load(data)) + + readme_md = os.path.join(release_dir, "README.md") + + with open(readme_md, "r") as file: + readme = file.read() + + with open(readme_md, "w") as file: + file.write( + re.sub("## AMIs.*\Z", self.make_ami_list(sorted_releases), + readme, flags=re.S)) + + +def main(): + parser = argparse.ArgumentParser(description="Update release README") + parser.add_argument("profile", help="name of profile to update") + args = parser.parse_args() + + ReleaseReadmeUpdater(args.profile).update_markdown() + + + +if __name__ == "__main__": + main() diff --git a/scripts/prune-amis.py.in b/scripts/prune-amis.py.in index 3009204..06ef567 100644 --- a/scripts/prune-amis.py.in +++ b/scripts/prune-amis.py.in @@ -1,137 +1,168 @@ -@PYTHON@ +#@PYTHON@ # vim: ts=4 et: -from datetime import datetime import os import sys +import argparse +from datetime import datetime + +import yaml import boto3 from botocore.exceptions import ClientError -import yaml -LEVELS = ['revision', 'release', 'version'] +LEVEL_HELP = """\ +revision - keep only the latest revision per release +release - keep only the latest release per version +version - keep only the versions that aren't end-of-life +""" -if 3 < len(sys.argv) > 4 or sys.argv[1] not in LEVELS: - sys.exit("Usage: " + os.path.basename(__file__) + """ [] - :- - revision - keep only the latest revision per release - release - keep only the latest release per version - version - keep only the versions that aren't end-of-life""") -NOW = datetime.utcnow() -LEVEL = sys.argv[1] -PROFILE = sys.argv[2] -BUILD = None if len(sys.argv) == 3 else sys.argv[3] +def find_repo_root(): + path = os.getcwd() -RELEASE_YAML = os.path.join( - os.path.dirname(os.path.realpath(__file__)), - '..', 'releases', PROFILE + '.yaml' -) + while ".git" not in set(os.listdir(path)) and path != "/": + path = os.path.dirname(path) -with open(RELEASE_YAML, 'r') as data: - BEFORE = yaml.safe_load(data) + if path == "/": + raise Exception("No repo found, stopping at /") -known = {} -prune = {} -after = {} + return path -# for all builds in the profile... -for build_name, releases in BEFORE.items(): - # this is not the build that was specified - if BUILD is not None and BUILD != build_name: - print('< skipping {0}/{1}'.format(PROFILE, build_name)) - # ensure its release data remains intact - after[build_name] = BEFORE[build_name] - continue - else: - print('> PRUNING {0}/{1} for {2}'.format(PROFILE, build_name, LEVEL)) +def main(args): + parser = argparse.ArgumentParser( + description="Prune AMIs from AWS", + formatter_class=argparse.RawTextHelpFormatter) + parser.add_argument( + "level", choices=["revision", "release", "version"], help=LEVEL_HELP) + parser.add_argument("profile", help="profile to prune") + parser.add_argument( + "build", nargs="?", help="build within profile to prune") + args = parser.parse_args() - criteria = {} + now = datetime.utcnow() - # scan releases for pruning criteria - for release, amis in releases.items(): - for ami_name, info in amis.items(): - version = info['version'] - if info['end_of_life']: - eol = datetime.fromisoformat(info['end_of_life']) - else: - eol = None - built = info['build_time'] - for region, ami_id in info['artifacts'].items(): - if region not in known: - known[region] = [] - known[region].append(ami_id) + release_yaml = os.path.join( + find_repo_root() "releases", f"{args.profile}.yaml") - if LEVEL == 'revision': - # find build timestamp of most recent revision, per release - if release not in criteria or built > criteria[release]: - criteria[release] = built - elif LEVEL == 'release': - # find build timestamp of most recent revision, per version - if version not in criteria or built > criteria[version]: - criteria[version] = built - elif LEVEL == 'version': - # find latest EOL date, per version - if (version not in criteria or not criteria[version]) or ( - eol and eol > criteria[version]): - criteria[version] = eol + with open(release_yaml, "r") as data: + before = yaml.safe_load(data) - # rescan again to determine what doesn't make the cut - for release, amis in releases.items(): - for ami_name, info in amis.items(): - version = info['version'] - if info['end_of_life']: - eol = datetime.fromisoformat(info['end_of_life']) - else: - eol = None - built = info['build_time'] - if ((LEVEL == 'revision' and built < criteria[release]) or - (LEVEL == 'release' and built < criteria[version]) or - (LEVEL == 'version' and criteria[version] and ( - (version != 'edge' and criteria[version] < NOW) or - (version == 'edge' and ((not eol) or (eol < NOW))) - ))): - for region, ami_id in info['artifacts'].items(): - if region not in prune: - prune[region] = [] - prune[region].append(ami_id) - else: - if build_name not in after: - after[build_name] = {} - if release not in after[build_name]: - after[build_name][release] = {} - after[build_name][release][ami_name] = info + known = {} + prune = {} + after = {} -# scan all regions for AMIs -AWS = boto3.session.Session() -for region in AWS.get_available_regions('ec2'): - print("* scanning: " + region + '...') - EC2 = AWS.client('ec2', region_name=region) + # for all builds in the profile... + for build_name, releases in before.items(): - try: - for image in EC2.describe_images(Owners=['self'])['Images']: + # this is not the build that was specified + if args.build is not None and args.build != build_name: + print(f"< skipping {args.profile}/{build_name}") + # ensure its release data remains intact + after[build_name] = before[build_name] + continue + else: + print(f"> PRUNING {args.profile}/{build_name} for {args.level}") - action = '? UNKNOWN' - if region in prune and image['ImageId'] in prune[region]: - action = '- REMOVING' - elif region in known and image['ImageId'] in known[region]: - action = '+ KEEPING' + criteria = {} - print(' ' + action + ': ' + image['Name'] + - "\n = " + image['ImageId'], end='', flush=True) - if action[0] == '-': - EC2.deregister_image(ImageId=image['ImageId']) - for blockdev in image['BlockDeviceMappings']: - if 'Ebs' in blockdev: - print(', ' + blockdev['Ebs']['SnapshotId'], - end='', flush=True) - if action[0] == '-': - EC2.delete_snapshot( - SnapshotId=blockdev['Ebs']['SnapshotId']) - print() - except ClientError as e: - print(e) + # scan releases for pruning criteria + for release, amis in releases.items(): + for ami_name, info in amis.items(): + version = info["version"] + built = info["build_time"] -# update releases/.yaml -with open(RELEASE_YAML, 'w') as data: - yaml.dump(after, data, sort_keys=False) + if info["end_of_life"]: + eol = datetime.fromisoformat(info["end_of_life"]) + else: + eol = None + + for region, ami_id in info["artifacts"].items(): + if region not in known: + known[region] = [] + known[region].append(ami_id) + + if args.level == "revision": + # find build timestamp of most recent revision, per release + if release not in criteria or built > criteria[release]: + criteria[release] = built + elif args.level == "release": + # find build timestamp of most recent revision, per version + if version not in criteria or built > criteria[version]: + criteria[version] = built + elif args.level == "version": + # find latest EOL date, per version + if (version not in criteria or not criteria[version]) or ( + eol and eol > criteria[version]): + criteria[version] = eol + + # rescan again to determine what doesn't make the cut + for release, amis in releases.items(): + for ami_name, info in amis.items(): + version = info["version"] + built = info["build_time"] + + if info["end_of_life"]: + eol = datetime.fromisoformat(info["end_of_life"]) + else: + eol = None + + if ((args.level == "revision" and built < criteria[release]) or + (args.level == "release" and built < criteria[version]) or + (args.level == "version" and criteria[version] and ( + (version != "edge" and criteria[version] < now) or + (version == "edge" and ((not eol) or (eol < now))) + ))): + for region, ami_id in info["artifacts"].items(): + if region not in prune: + prune[region] = [] + + prune[region].append(ami_id) + else: + if build_name not in after: + after[build_name] = {} + + if release not in after[build_name]: + after[build_name][release] = {} + + after[build_name][release][ami_name] = info + + # scan all regions for AMIs + AWS = boto3.session.Session() + for region in AWS.get_available_regions("ec2"): + print(f"* scanning: {region} ...") + EC2 = AWS.client("ec2", region_name=region) + + try: + for image in EC2.describe_images(Owners=["self"])["Images"]: + + action = "? UNKNOWN" + if region in prune and image["ImageId"] in prune[region]: + action = "- REMOVING" + elif region in known and image["ImageId"] in known[region]: + action = "+ KEEPING" + + print(f" {action}: {image['Name']}\n = {image['ImageId']}", + end="", flush=True) + + if action[0] == "-": + EC2.deregister_image(ImageId=image["ImageId"]) + + for blockdev in image["BlockDeviceMappings"]: + if "Ebs" in blockdev: + print(", {blockdev['Ebs']['SnapshotId']}", + end="", flush=True) + if action[0] == "-": + EC2.delete_snapshot( + SnapshotId=blockdev["Ebs"]["SnapshotId"]) + print() + except ClientError as e: + print(e) + + # update releases/.yaml + with open(release_yaml, "w") as data: + yaml.dump(after, data, sort_keys=False) + + +if __name__ == "__main__": + main(sys.argv) diff --git a/scripts/update-release.py.in b/scripts/update-release.py.in index 95350c9..b8f4d00 100644 --- a/scripts/update-release.py.in +++ b/scripts/update-release.py.in @@ -1,62 +1,80 @@ @PYTHON@ # vim: set ts=4 et: -import json import os import re import sys +import json +import argparse + import yaml -if len(sys.argv) != 3: - sys.exit("Usage: " + os.path.basename(__file__) + " ") -PROFILE = sys.argv[1] -BUILD = sys.argv[2] +def find_repo_root(): + path = os.getcwd() -SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) -MANIFEST_JSON = os.path.join( - SCRIPT_DIR, 'profile', PROFILE, BUILD, 'manifest.json' -) + while ".git" not in set(os.listdir(path)) and path != "/": + path = os.path.dirname(path) -RELEASE_DIR = os.path.join(SCRIPT_DIR, '..', 'releases') -RELEASE_YAML = os.path.join(RELEASE_DIR, PROFILE + '.yaml') + if path == "/": + raise Exception("No repo found, stopping at /") -if not os.path.exists(RELEASE_DIR): - os.makedirs(RELEASE_DIR) + return path -releases = {} -if os.path.exists(RELEASE_YAML): - with open(RELEASE_YAML, 'r') as data: - releases = yaml.safe_load(data) -with open(MANIFEST_JSON, 'r') as data: - MANIFEST = json.load(data) +def parse_artifact_ids(ids): + parsed = re.split(":|,", ids) + return dict(zip(parsed[0::2], parsed[1::2])) -A = re.split(':|,', MANIFEST['builds'][0]['artifact_id']) -ARTIFACTS = dict(zip(A[0::2], A[1::2])) -BUILD_TIME = MANIFEST['builds'][0]['build_time'] -DATA = MANIFEST['builds'][0]['custom_data'] -RELEASE = DATA['release'] -if BUILD not in releases: - releases[BUILD] = {} -if RELEASE not in releases[BUILD]: - releases[BUILD][RELEASE] = {} +def main(args): + parser = argparse.ArgumentParser(description="Update release YAML") + parser.add_argument("profile", help="name of profile to update") + parser.add_argument("build", help="name of build to update") + args = parser.parse_args() -REVISION = { - 'description': DATA['ami_desc'], - 'profile': PROFILE, - 'profile_build': BUILD, - 'version': DATA['version'], - 'release': RELEASE, - 'arch': DATA['arch'], - 'revision': DATA['revision'], - 'end_of_life': DATA['end_of_life'], - 'build_time': BUILD_TIME, - 'artifacts': ARTIFACTS -} + root = find_repo_root() -releases[BUILD][RELEASE][DATA['ami_name']] = REVISION + release_dir = os.path.join(root, "releases") + if not os.path.exists(release_dir): + os.makedirs(release_dir) -with open(RELEASE_YAML, 'w') as data: - yaml.dump(releases, data, sort_keys=False) + release_yaml = os.path.join(release_dir, f"{args.profile}.yaml") + releases = {} + if os.path.exists(release_yaml): + with open(release_yaml, "r") as data: + releases = yaml.safe_load(data) + + manifest_json = os.path.join( + root, "build", "profile", args.profile, args.build, "manifest.json") + with open(manifest_json, "r") as data: + manifest = json.load(data) + + data = manifest["builds"][0]["custom_data"] + release = data["release"] + + if args.build not in releases: + releases[args.build] = {} + + if release not in releases[args.build]: + releases[args.build][release] = {} + + releases[args.build][release][data["ami_name"]] = { + "description": data["ami_desc"], + "profile": args.profile, + "profile_build": args.build, + "version": data["version"], + "release": release, + "arch": data["arch"], + "revision": data["revision"], + "end_of_life": data["end_of_life"], + "build_time": manifest["builds"][0]["build_time"], + "artifacts": parse_artifact_ids(manifest["builds"][0]["artifact_id"]), + } + + with open(release_yaml, "w") as data: + yaml.dump(releases, data, sort_keys=False) + + +if __name__ == "__main__": + main(sys.argv) From 1241cb5aaf519ac3d9187383e6784210afb1c9a9 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 21 May 2020 14:21:29 -0700 Subject: [PATCH 056/125] Better model make dependencies on build files --- Makefile | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index bc9b842..3aa7464 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,9 @@ # vim: ts=8 noet: -ALL_SCRIPTS := $(wildcard scripts/*) +NVME_SCRIPTS := $(subst scripts/,build/,$(wildcard scripts/nvme/*)) CORE_PROFILES := $(wildcard profiles/*/*) TARGET_PROFILES := $(wildcard profiles/*.conf) + PROFILE := BUILD := BUILDS := $(BUILD) @@ -24,36 +25,36 @@ __check_defined = \ .PHONY: amis prune release-readme clean -amis: build build/packer.json build/profile/$(PROFILE) build/update-release.py build/make-amis.py +amis: build/packer.json build/profile/$(PROFILE) build build/setup-ami $(NVME_SCRIPTS) @:$(call check_defined, PROFILE, target profile name) - build/make-amis.py $(PROFILE) $(BUILDS) + build/builder make-amis $(PROFILE) $(BUILDS) -prune: build build/prune-amis.py +prune: build @:$(call check_defined, LEVEL, pruning level) @:$(call check_defined, PROFILE, target profile name) - build/prune-amis.py $(LEVEL) $(PROFILE) $(BUILD) + build/builder prune-amis $(LEVEL) $(PROFILE) $(BUILD) -release-readme: build build/gen-release-readme.py +release-readme: releases/README.md +releases/README.md: build @:$(call check_defined, PROFILE, target profile name) @:$(call require_var, PROFILE) - build/gen-release-readme.py $(PROFILE) + build/builder gen-release-readme $(PROFILE) -build: $(ALL_SCRIPTS) +build: + python3 -m venv build [ -d build/profile ] || mkdir -p build/profile - python3 -m venv build/.py3 - build/.py3/bin/pip install pyhocon pyyaml boto3 - (cd build; for i in $(ALL_SCRIPTS); do ln -sf ../$$i .; done) + build/bin/pip install -U pip pyhocon pyyaml boto3 -build/packer.json: build packer.conf - build/.py3/bin/pyhocon -i packer.conf -f json > build/packer.json - -build/profile/$(PROFILE): build build/resolve-profile.py $(CORE_PROFILES) $(TARGET_PROFILES) - @:$(call check_defined, PROFILE, target profile name) - build/resolve-profile.py $(PROFILE) - -%.py: %.py.in build - sed "s|@PYTHON@|#!`pwd`/build/.py3/bin/python|" $< > $@ + echo -e "#!/bin/sh\n$$(pwd)/build/bin/python scripts/builder.py \$$@" > $@ chmod +x $@ +build/packer.json: packer.conf build + build/builder convert-packer-config + +.PHONY: build/profile/$(PROFILE) +build/profile/$(PROFILE): build $(CORE_PROFILES) $(TARGET_PROFILES) + @:$(call check_defined, PROFILE, target profile name) + build/builder resolve-profile $(PROFILE) + clean: rm -rf build From 7e60c7fb6a8b1a0e4508c4995fd5e4c780a70f68 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Tue, 26 May 2020 18:09:37 -0700 Subject: [PATCH 057/125] Combine all commands into a meta-command There is an increasing need to share components among the various commands, especially with the introduction of the identity broker API. Rather than trying to assemble an importable python library of code for the build process I think we can just combine everything into one file and use argparse sub-commands to integrate them into a set of individually callable scripts. This change does that integration. --- Makefile | 4 +- scripts/builder.py | 607 +++++++++++++++++++++++++++++++ scripts/gen-release-readme.py.in | 131 ------- scripts/make-amis.py.in | 68 ---- scripts/prune-amis.py.in | 168 --------- scripts/resolve-profile.py.in | 133 ------- scripts/update-release.py.in | 80 ---- 7 files changed, 609 insertions(+), 582 deletions(-) create mode 100644 scripts/builder.py delete mode 100644 scripts/gen-release-readme.py.in delete mode 100644 scripts/make-amis.py.in delete mode 100644 scripts/prune-amis.py.in delete mode 100644 scripts/resolve-profile.py.in delete mode 100644 scripts/update-release.py.in diff --git a/Makefile b/Makefile index 3aa7464..e6f879c 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,7 @@ __check_defined = \ .PHONY: amis prune release-readme clean -amis: build/packer.json build/profile/$(PROFILE) build build/setup-ami $(NVME_SCRIPTS) +amis: build/packer.json build/profile/$(PROFILE) build @:$(call check_defined, PROFILE, target profile name) build/builder make-amis $(PROFILE) $(BUILDS) @@ -54,7 +54,7 @@ build/packer.json: packer.conf build .PHONY: build/profile/$(PROFILE) build/profile/$(PROFILE): build $(CORE_PROFILES) $(TARGET_PROFILES) @:$(call check_defined, PROFILE, target profile name) - build/builder resolve-profile $(PROFILE) + build/builder resolve-profiles $(PROFILE) clean: rm -rf build diff --git a/scripts/builder.py b/scripts/builder.py new file mode 100644 index 0000000..f4e1472 --- /dev/null +++ b/scripts/builder.py @@ -0,0 +1,607 @@ +import io +import os +import re +import sys +import glob +import json +import time +import shutil +import logging +import argparse +import textwrap +import subprocess +import urllib.error + +from collections import defaultdict +from datetime import datetime, timedelta +from distutils.version import StrictVersion +from urllib.request import Request, urlopen + +import yaml +import boto3 +import pyhocon + + +class IdentityBrokerClient: + + _DEFAULT_ENDPOINT = "https://aws-access.crute.us/api/account" + _DEFAULT_ACCOUNT = "alpine-amis-user" + + def __init__(self, endpoint=None, key=None, account=None): + self.endpoint = endpoint or self._DEFAULT_ENDPOINT + self.account = account or self._DEFAULT_ACCOUNT + self.key = key + self._logger = logging.getLogger(__class__.__name__) + + if override_endpoint := os.environ.get("IDENTITY_BROKER_ENDPOINT"): + self.endpoint = override_endpoint + + if not self.key: + self.key = os.environ.get("IDENTITY_BROKER_API_KEY") + + if not self.key: + raise Exception("No identity broker key found") + + def _get(self, path): + while True: # to handle rate limits + try: + res = urlopen(Request(path, headers={"X-API-Key": self.key})) + except urllib.error.HTTPError as ex: + if ex.headers.get("Location") == "/logout": + raise Exception("Identity broker token is expired") + + if res.status == 429: + self._logger.warning( + "Rate-limited by identity broker, sleeping 30 seconds") + time.sleep(30) + continue + + if res.status not in {200, 429}: + raise Exception(res.reason) + + return json.load(res) + + def get_credentials_url(self): + for account in self._get(self.endpoint): + if account["short_name"] == self.account: + return account["credentials_url"] + + raise Exception("No account found") + + def get_regions(self): + out = {} + + for region in self._get(self.get_credentials_url()): + if region["enabled"]: + out[region["name"]] = region["credentials_url"] + + return out + + def get_credentials(self, region): + return self._get(self.get_regions()[region]) + + def _boto3_session_from_creds(self, creds, region): + return boto3.session.Session( + aws_access_key_id=creds["access_key"], + aws_secret_access_key=creds["secret_key"], + aws_session_token=creds["session_token"], + region_name=region) + + def boto3_session_for_region(self, region): + return self._boto3_session_from_creds( + self.get_credentials(region), region) + + def iter_regions(self): + for region, cred_url in self.get_regions().items(): + yield self._boto3_session_from_creds(self._get(cred_url), region) + + +class ReleaseReadmeUpdater: + + SECTION_TPL = textwrap.dedent(""" + ### Alpine Linux {release} ({date}) +
click to show/hide

+ + {rows} + +

+ """) + + AMI_TPL = ( + " [{id}](https://{r}.console.aws.amazon.com/ec2/home" + "#Images:visibility=public-images;imageId={id}) " + "([launch](https://{r}.console.aws.amazon.com/ec2/home" + "#launchAmi={id})) |" + ) + + def __init__(self, repo_root, profile, archs=None): + self.repo_root = repo_root + self.profile = profile + self.archs = archs or ["x86_64", "aarch64"] + + @staticmethod + def extract_ver(x): + return StrictVersion("0.0" if x["release"] == "edge" else x["release"]) + + def get_sorted_releases(self, release_data): + sections = defaultdict(lambda: { + "release": "", + "built": {}, + "name": {}, + "ami": defaultdict(dict) + }) + + for build, releases in release_data.items(): + for release, amis in releases.items(): + for name, info in amis.items(): + arch = info["arch"] + built = info["build_time"] + ver = sections[info["version"]] + + if arch not in ver["built"] or ver["built"][arch] < built: + ver["release"] = release + ver["name"][arch] = name + ver["built"][arch] = built + + for region, ami in info["artifacts"].items(): + ver["ami"][region][arch] = ami + + return sorted(sections.values(), key=self.extract_ver, reverse=True) + + def make_ami_list(self, sorted_releases): + ami_list = "## AMIs\n" + + for info in sorted_releases: + rows = ["| Region |", "| ------ |"] + + for arch in self.archs: + if arch in info["name"]: + rows[0] += f" {info['name'][arch]} |" + rows[1] += " --- |" + + for region, amis in info["ami"].items(): + row = f"| {region} |" + for arch in self.archs: + if arch in amis: + row += self.AMI_TPL.format(r=region, id=amis[arch]) + rows.append(row) + + ami_list += self.SECTION_TPL.format( + release=info["release"].capitalize(), + date=datetime.utcfromtimestamp( + max(info["built"].values())).date(), + rows="\n".join(rows)) + + return ami_list + + def update_markdown(self): + release_dir = os.path.join(self.repo_root, "releases") + profile_file = os.path.join(release_dir, f"{self.profile}.yaml") + + with open(profile_file, "r") as data: + sorted_releases = self.get_sorted_releases(yaml.safe_load(data)) + + readme_md = os.path.join(release_dir, "README.md") + + with open(readme_md, "r") as file: + readme = file.read() + + with open(readme_md, "w") as file: + file.write( + re.sub("## AMIs.*\Z", self.make_ami_list(sorted_releases), + readme, flags=re.S)) + + +class GenReleaseReadme: + """Update release README + """ + + command_name = "gen-release-readme" + + @staticmethod + def add_args(parser): + parser.add_argument("profile", help="name of profile to update") + + def run(self, args, root): + ReleaseReadmeUpdater(root, args.profile).update_markdown() + + +class MakeAMIs: + """Build Packer JSON variable files from HOCON build profiles + """ + + command_name = "make-amis" + + @staticmethod + def add_args(parser): + parser.add_argument("profile", help="name of profile to build") + parser.add_argument("builds", nargs="*", + help="name of builds within a profile to build") + + def run(self, args, root): + os.chdir(os.path.join(root, "build")) + + builds = args.builds or os.listdir( + os.path.join("profile", args.profile)) + + for build in builds: + print(f"\n*** Building {args.profile}/{build} ***\n\n") + + build_dir = os.path.join("profile", args.profile, build) + if not os.path.exists(build_dir): + print(f"Build dir '{build_dir}' does not exist") + break + + out = io.StringIO() + + res = subprocess.Popen([ + os.environ.get("PACKER", "packer"), + "build", + f"-var-file={build_dir}/vars.json", + "packer.json" + ], stdout=subprocess.PIPE, encoding="utf-8") + + while res.poll() is None: + text = res.stdout.readline() + out.write(text) + print(text, end="") + + if res.returncode == 0: + subprocess.run([os.path.join(root, "build", "builder"), + "update-releases", args.profile, build]) + else: + if "is used by an existing AMI" in out.getvalue(): + continue + else: + sys.exit(res.returncode) + + print("\n=== DONE ===\n") + + +class PruneAMIs: + """Prune AMIs from AWS + """ + + command_name = "prune-amis" + + @staticmethod + def add_args(parser): + LEVEL_HELP = textwrap.dedent("""\ + revision - keep only the latest revision per release + release - keep only the latest release per version + version - keep only the versions that aren't end-of-life + """) + + parser.add_argument( + "level", choices=["revision", "release", "version"], + help=LEVEL_HELP) + parser.add_argument("profile", help="profile to prune") + parser.add_argument( + "build", nargs="?", help="build within profile to prune") + + @staticmethod + def delete_image(ec2, image): + ec2.deregister_image(ImageId=image["ImageId"]) + + for blockdev in image["BlockDeviceMappings"]: + if "Ebs" not in blockdev: + continue + + ec2.delete_snapshot(SnapshotId=blockdev["Ebs"]["SnapshotId"]) + + def run(self, args, root): + now = datetime.utcnow() + release_yaml = os.path.join(root, "releases", f"{args.profile}.yaml") + + with open(release_yaml, "r") as data: + before = yaml.safe_load(data) + + known = defaultdict(list) + prune = defaultdict(list) + after = defaultdict(lambda: defaultdict(dict)) + + # for all builds in the profile... + for build_name, releases in before.items(): + # this is not the build that was specified + if args.build is not None and args.build != build_name: + print(f"< skipping {args.profile}/{build_name}") + # ensure its release data remains intact + after[build_name] = before[build_name] + continue + else: + print(f"> PRUNING {args.profile}/{build_name} for {args.level}") + + criteria = {} + + # scan releases for pruning criteria + for release, amis in releases.items(): + for ami_name, info in amis.items(): + version = info["version"] + built = info["build_time"] + + if eol := info.get("end_of_life"): + eol = datetime.fromisoformat(info["end_of_life"]) + + for region, ami_id in info["artifacts"].items(): + known[region].append(ami_id) + + if args.level == "revision": + # find build timestamp of most recent revision, per release + if release not in criteria or built > criteria[release]: + criteria[release] = built + elif args.level == "release": + # find build timestamp of most recent revision, per version + if version not in criteria or built > criteria[version]: + criteria[version] = built + elif args.level == "version": + # find latest EOL date, per version + if ( + version not in criteria or + (not criteria[version]) or + (eol and eol > criteria[version]) + ): + criteria[version] = eol + + # rescan again to determine what doesn't make the cut + for release, amis in releases.items(): + for ami_name, info in amis.items(): + version = info["version"] + + if eol := info.get("end_of_life"): + eol = datetime.fromisoformat(info["end_of_life"]) + + if args.level == "revision": + if info["build_time"] < criteria[release]: + for region, ami_id in info["artifacts"].items(): + prune[region].append(ami_id) + elif args.level == "release": + if info["build_time"] < criteria[version]: + for region, ami_id in info["artifacts"].items(): + prune[region].append(ami_id) + elif args.level == "version": + if criteria[version] and ( + (version != "edge" and criteria[version] < now) or + (version == "edge" and ((not eol) or (eol < now))) + ): + for region, ami_id in info["artifacts"].items(): + prune[region].append(ami_id) + else: + after[build_name][release][ami_name] = info + + for session in IdentityBrokerClient().iter_regions(): + region = session.region_name + + print(f"* scanning: {region} ...") + + ec2 = session.client("ec2") + for image in ec2.describe_images(Owners=["self"])["Images"]: + image_name, image_id = image["Name"], image["ImageId"] + + if region in prune and image["ImageId"] in prune[region]: + print(f"REMOVE: {image_name} = {image_id}") + self.delete_image(image) + elif region in known and image["ImageId"] in known[region]: + print(f"KEEP: {image_name} = {image_id}") + else: + print(f"UNKNOWN: {image_name} = {image_id}") + + # update releases/.yaml + with open(release_yaml, "w") as data: + yaml.dump(after, data, sort_keys=False) + + +class ConfigBuilder: + + now = datetime.utcnow() + tomorrow = now + timedelta(days=1) + + @staticmethod + def unquote(x): + return x.strip('"') + + @staticmethod + def force_iso_date(input): + return datetime.fromisoformat(input).isoformat(timespec="seconds") + + @classmethod + def resolve_tomorrow(cls, input): + return cls.tomorrow.isoformat(timespec="seconds") + + @classmethod + def resolve_now(cls, input): + return cls.now.strftime("%Y%m%d%H%M%S") + + @classmethod + def fold_comma(cls, input): + return ",".join([cls.unquote(k) for k in input.keys()]) + + @classmethod + def fold_space(cls, input): + return " ".join([cls.unquote(k) for k in input.keys()]) + + @classmethod + def fold_repos(cls, input): + return "\n".join( + f"@{v} {cls.unquote(k)}" if isinstance(v, str) else cls.unquote(k) + for k, v in input.items()) + + @staticmethod + def fold_packages(input): + return " ".join( + f"{k}@{v}" if isinstance(v, str) else k + for k, v in input.items()) + + @staticmethod + def fold_services(input): + return " ".join( + "{}={}".format(k, ",".join(v.keys())) + for k, v in input.items()) + + def __init__(self, config_path, out_dir): + self.config_path = config_path + self.out_dir = out_dir + + self._keys_to_transform = { + "ami_access" : self.fold_comma, + "ami_regions" : self.fold_comma, + "kernel_modules" : self.fold_comma, + "kernel_options" : self.fold_space, + "repos" : self.fold_repos, + "pkgs" : self.fold_packages, + "svcs" : self.fold_services, + "revision" : self.resolve_now, + "end_of_life" : lambda x: \ + self.force_iso_date(self.resolve_tomorrow(x)), + } + + def build_all(self): + for file in glob.glob(os.path.join(self.config_path, "*.conf")): + profile = os.path.splitext(os.path.split(file)[-1])[0] + self.build_profile(profile) + + def build_profile(self, profile): + build_config = pyhocon.ConfigFactory.parse_file( + os.path.join(self.config_path, f"{profile}.conf")) + + for build, cfg in build_config["BUILDS"].items(): + build_dir = os.path.join(self.out_dir, profile, build) + + # Always start fresh + shutil.rmtree(build_dir, ignore_errors=True) + os.makedirs(build_dir) + + cfg["profile"] = profile + cfg["profile_build"] = build + + # Order of operations is important here + for k, v in cfg.items(): + transform = self._keys_to_transform.get(k) + if transform: + cfg[k] = transform(v) + + if isinstance(v, str) and "{var." in v: + cfg[k] = v.format(var=cfg) + + with open(os.path.join(build_dir, "vars.json"), "w") as out: + json.dump(cfg, out, indent=4, separators=(",", ": ")) + + +class ResolveProfiles: + """Build Packer JSON variable files from HOCON build profiles + """ + + command_name = "resolve-profiles" + + @staticmethod + def add_args(parser): + parser.add_argument( + "profile", help="name of profile to build", nargs="*") + + def run(self, args, root): + builder = ConfigBuilder( + os.path.join(root, "profiles"), + os.path.join(root, "build", "profile")) + + if args.profile: + for profile in args.profile: + builder.build_profile(profile) + else: + builder.build_all() + + +class UpdateReleases: + """Update release YAML + """ + + command_name = "update-releases" + + @staticmethod + def add_args(parser): + parser.add_argument("profile", help="name of profile to update") + parser.add_argument("build", help="name of build to update") + + @staticmethod + def parse_ids(ids): + parsed = re.split(":|,", ids) + return dict(zip(parsed[0::2], parsed[1::2])) + + def run(self, args, root): + release_dir = os.path.join(root, "releases") + if not os.path.exists(release_dir): + os.makedirs(release_dir) + + release_yaml = os.path.join(release_dir, f"{args.profile}.yaml") + releases = {} + if os.path.exists(release_yaml): + with open(release_yaml, "r") as data: + releases = yaml.safe_load(data) + + manifest_json = os.path.join( + root, "build", "profile", args.profile, args.build, + "manifest.json") + with open(manifest_json, "r") as data: + manifest = json.load(data) + + data = manifest["builds"][0]["custom_data"] + release = data["release"] + + if args.build not in releases: + releases[args.build] = {} + + if release not in releases[args.build]: + releases[args.build][release] = {} + + releases[args.build][release][data["ami_name"]] = { + "description": data["ami_desc"], + "profile": args.profile, + "profile_build": args.build, + "version": data["version"], + "release": release, + "arch": data["arch"], + "revision": data["revision"], + "end_of_life": data["end_of_life"], + "build_time": manifest["builds"][0]["build_time"], + "artifacts": self.parse_ids(manifest["builds"][0]["artifact_id"]), + } + + with open(release_yaml, "w") as data: + yaml.dump(releases, data, sort_keys=False) + + +def find_repo_root(): + path = os.getcwd() + + while ".git" not in set(os.listdir(path)) and path != "/": + path = os.path.dirname(path) + + if path == "/": + raise Exception("No repo found, stopping at /") + + return path + + +def main(): + dispatch = {} + + parser = argparse.ArgumentParser() + subs = parser.add_subparsers(dest="command_name", required=True) + + for command in sys.modules[__name__].__dict__.values(): + if not hasattr(command, "command_name"): + continue + + dispatch[command.command_name] = command() + + doc = getattr(command, "__doc__", "") + subparser = subs.add_parser( + command.command_name, help=doc, description=doc) + + if add_args := getattr(command, "add_args", None): + command.add_args(subparser) + + args = parser.parse_args() + dispatch[args.command_name].run(args, find_repo_root()) + + +if __name__ == "__main__": + main() diff --git a/scripts/gen-release-readme.py.in b/scripts/gen-release-readme.py.in deleted file mode 100644 index c2af953..0000000 --- a/scripts/gen-release-readme.py.in +++ /dev/null @@ -1,131 +0,0 @@ -@PYTHON@ -# vim: ts=4 et: - -import os -import re -import argparse -import textwrap -from datetime import datetime -from collections import defaultdict -from distutils.version import StrictVersion - -import yaml - - -def find_repo_root(): - path = os.getcwd() - - while ".git" not in set(os.listdir(path)) and path != "/": - path = os.path.dirname(path) - - if path == "/": - raise Exception("No repo found, stopping at /") - - return path - - -class ReleaseReadmeUpdater: - - SECTION_TPL = textwrap.dedent(""" - ### Alpine Linux {release} ({date}) -
click to show/hide

- - {rows} - -

- """) - - AMI_TPL = ( - " [{id}](https://{r}.console.aws.amazon.com/ec2/home" - "#Images:visibility=public-images;imageId={id}) " - "([launch](https://{r}.console.aws.amazon.com/ec2/home" - "#launchAmi={id})) |" - ) - - def __init__(self, profile, archs=None): - self.profile = profile - self.archs = archs or ["x86_64", "aarch64"] - - def get_sorted_releases(self, release_data): - sections = defaultdict(lambda: { - "release": "", - "built": {}, - "name": {}, - "ami": defaultdict(dict) - }) - - for build, releases in release_data.items(): - for release, amis in releases.items(): - for name, info in amis.items(): - arch = info["arch"] - built = info["build_time"] - ver = sections[info["version"]] - - if arch not in ver["built"] or ver["built"][arch] < built: - ver["release"] = release - ver["name"][arch] = name - ver["built"][arch] = built - - for region, ami in info["artifacts"].items(): - ver["ami"][region][arch] = ami - - extract_ver = lambda x: StrictVersion( - "0.0" if x["release"] == "edge" else x["release"]) - - return sorted(sections.values(), key=extract_ver, reverse=True) - - def make_ami_list(self, sorted_releases): - ami_list = "## AMIs\n" - - for info in sorted_releases: - rows = ["| Region |", "| ------ |"] - - for arch in self.archs: - if arch in info["name"]: - rows[0] += f" {info['name'][arch]} |" - rows[1] += " --- |" - - for region, amis in info["ami"].items(): - row = f"| {region} |" - for arch in self.archs: - if arch in amis: - row += self.AMI_TPL.format(r=region, id=amis[arch]) - rows.append(row) - - ami_list += self.SECTION_TPL.format( - release=info["release"].capitalize(), - date=datetime.utcfromtimestamp( - max(info["built"].values())).date(), - rows="\n".join(rows)) - - return ami_list - - def update_markdown(self): - release_dir = os.path.join(find_repo_root(), "releases") - profile_file = os.path.join(release_dir, f"{self.profile}.yaml") - - with open(profile_file, "r") as data: - sorted_releases = self.get_sorted_releases(yaml.safe_load(data)) - - readme_md = os.path.join(release_dir, "README.md") - - with open(readme_md, "r") as file: - readme = file.read() - - with open(readme_md, "w") as file: - file.write( - re.sub("## AMIs.*\Z", self.make_ami_list(sorted_releases), - readme, flags=re.S)) - - -def main(): - parser = argparse.ArgumentParser(description="Update release README") - parser.add_argument("profile", help="name of profile to update") - args = parser.parse_args() - - ReleaseReadmeUpdater(args.profile).update_markdown() - - - -if __name__ == "__main__": - main() diff --git a/scripts/make-amis.py.in b/scripts/make-amis.py.in deleted file mode 100644 index c7f9f98..0000000 --- a/scripts/make-amis.py.in +++ /dev/null @@ -1,68 +0,0 @@ -@PYTHON@ -# vim: set ts=4 et: - -import os -import io -import sys -import argparse -import subprocess - - -def find_repo_root(): - path = os.getcwd() - - while ".git" not in set(os.listdir(path)) and path != "/": - path = os.path.dirname(path) - - if path == "/": - raise Exception("No repo found, stopping at /") - - return path - - -def main(args): - parser = argparse.ArgumentParser(description="Build Packer JSON variable " - "files from HOCON build profiles") - parser.add_argument("profile", help="name of profile to build") - parser.add_argument("builds", nargs="*", - help="name of builds within a profile to build") - args = parser.parse_args() - - os.chdir(os.path.join(find_repo_root(), "build")) - - builds = args.builds or os.listdir(os.path.join("profile", args.profile)) - for build in builds: - print(f"\n*** Building {args.profile}/{build} ***\n\n") - - build_dir = os.path.join("profile", args.profile, build) - if not os.path.exists(build_dir): - print(f"Build dir '{build_dir}' does not exist") - break - - out = io.StringIO() - - res = subprocess.Popen([ - os.environ.get("PACKER", "packer"), - "build", - f"-var-file={build_dir}/vars.json", - "packer.json" - ], stdout=subprocess.PIPE, encoding="utf-8") - - while res.poll() is None: - text = res.stdout.readline() - out.write(text) - print(text, end="") - - if res.returncode == 0: - subprocess.run(["./update-release.py", args.profile, build]) - else: - if "is used by an existing AMI" in out.getvalue(): - continue - else: - sys.exit(res.returncode) - - print("\n=== DONE ===\n") - - -if __name__ == "__main__": - main(sys.argv) diff --git a/scripts/prune-amis.py.in b/scripts/prune-amis.py.in deleted file mode 100644 index 06ef567..0000000 --- a/scripts/prune-amis.py.in +++ /dev/null @@ -1,168 +0,0 @@ -#@PYTHON@ -# vim: ts=4 et: - -import os -import sys -import argparse -from datetime import datetime - -import yaml -import boto3 -from botocore.exceptions import ClientError - -LEVEL_HELP = """\ -revision - keep only the latest revision per release -release - keep only the latest release per version -version - keep only the versions that aren't end-of-life -""" - - -def find_repo_root(): - path = os.getcwd() - - while ".git" not in set(os.listdir(path)) and path != "/": - path = os.path.dirname(path) - - if path == "/": - raise Exception("No repo found, stopping at /") - - return path - - -def main(args): - parser = argparse.ArgumentParser( - description="Prune AMIs from AWS", - formatter_class=argparse.RawTextHelpFormatter) - parser.add_argument( - "level", choices=["revision", "release", "version"], help=LEVEL_HELP) - parser.add_argument("profile", help="profile to prune") - parser.add_argument( - "build", nargs="?", help="build within profile to prune") - args = parser.parse_args() - - now = datetime.utcnow() - - release_yaml = os.path.join( - find_repo_root() "releases", f"{args.profile}.yaml") - - with open(release_yaml, "r") as data: - before = yaml.safe_load(data) - - known = {} - prune = {} - after = {} - - # for all builds in the profile... - for build_name, releases in before.items(): - - # this is not the build that was specified - if args.build is not None and args.build != build_name: - print(f"< skipping {args.profile}/{build_name}") - # ensure its release data remains intact - after[build_name] = before[build_name] - continue - else: - print(f"> PRUNING {args.profile}/{build_name} for {args.level}") - - criteria = {} - - # scan releases for pruning criteria - for release, amis in releases.items(): - for ami_name, info in amis.items(): - version = info["version"] - built = info["build_time"] - - if info["end_of_life"]: - eol = datetime.fromisoformat(info["end_of_life"]) - else: - eol = None - - for region, ami_id in info["artifacts"].items(): - if region not in known: - known[region] = [] - known[region].append(ami_id) - - if args.level == "revision": - # find build timestamp of most recent revision, per release - if release not in criteria or built > criteria[release]: - criteria[release] = built - elif args.level == "release": - # find build timestamp of most recent revision, per version - if version not in criteria or built > criteria[version]: - criteria[version] = built - elif args.level == "version": - # find latest EOL date, per version - if (version not in criteria or not criteria[version]) or ( - eol and eol > criteria[version]): - criteria[version] = eol - - # rescan again to determine what doesn't make the cut - for release, amis in releases.items(): - for ami_name, info in amis.items(): - version = info["version"] - built = info["build_time"] - - if info["end_of_life"]: - eol = datetime.fromisoformat(info["end_of_life"]) - else: - eol = None - - if ((args.level == "revision" and built < criteria[release]) or - (args.level == "release" and built < criteria[version]) or - (args.level == "version" and criteria[version] and ( - (version != "edge" and criteria[version] < now) or - (version == "edge" and ((not eol) or (eol < now))) - ))): - for region, ami_id in info["artifacts"].items(): - if region not in prune: - prune[region] = [] - - prune[region].append(ami_id) - else: - if build_name not in after: - after[build_name] = {} - - if release not in after[build_name]: - after[build_name][release] = {} - - after[build_name][release][ami_name] = info - - # scan all regions for AMIs - AWS = boto3.session.Session() - for region in AWS.get_available_regions("ec2"): - print(f"* scanning: {region} ...") - EC2 = AWS.client("ec2", region_name=region) - - try: - for image in EC2.describe_images(Owners=["self"])["Images"]: - - action = "? UNKNOWN" - if region in prune and image["ImageId"] in prune[region]: - action = "- REMOVING" - elif region in known and image["ImageId"] in known[region]: - action = "+ KEEPING" - - print(f" {action}: {image['Name']}\n = {image['ImageId']}", - end="", flush=True) - - if action[0] == "-": - EC2.deregister_image(ImageId=image["ImageId"]) - - for blockdev in image["BlockDeviceMappings"]: - if "Ebs" in blockdev: - print(", {blockdev['Ebs']['SnapshotId']}", - end="", flush=True) - if action[0] == "-": - EC2.delete_snapshot( - SnapshotId=blockdev["Ebs"]["SnapshotId"]) - print() - except ClientError as e: - print(e) - - # update releases/.yaml - with open(release_yaml, "w") as data: - yaml.dump(after, data, sort_keys=False) - - -if __name__ == "__main__": - main(sys.argv) diff --git a/scripts/resolve-profile.py.in b/scripts/resolve-profile.py.in deleted file mode 100644 index 2905423..0000000 --- a/scripts/resolve-profile.py.in +++ /dev/null @@ -1,133 +0,0 @@ -@PYTHON@ -# vim: set ts=4 et: - -import os -import sys -import json -import shutil -import argparse -from datetime import datetime, timedelta - -from pyhocon import ConfigFactory - - -# Just group together our transforms -class Transforms: - - NOW = datetime.utcnow() - TOMORROW = NOW + timedelta(days=1) - - unquote = lambda x: x.strip('"') - - @staticmethod - def force_iso_date(input): - return datetime.fromisoformat(input).isoformat(timespec="seconds") - - @classmethod - def resolve_tomorrow(cls, input): - return cls.TOMORROW.isoformat(timespec="seconds") - - @classmethod - def resolve_now(cls, input): - return cls.NOW.strftime("%Y%m%d%H%M%S") - - @classmethod - def fold_comma(cls, input): - return ",".join([cls.unquote(k) for k in input.keys()]) - - @classmethod - def fold_space(cls, input): - return " ".join([cls.unquote(k) for k in input.keys()]) - - @classmethod - def fold_repos(cls, input): - return "\n".join( - f"@{v} {cls.unquote(k)}" if isinstance(v, str) else cls.unquote(k) - for k, v in input.items()) - - @staticmethod - def fold_packages(input): - return " ".join( - f"{k}@{v}" if isinstance(v, str) else k - for k, v in input.items()) - - @staticmethod - def fold_services(input): - return " ".join( - "{}={}".format(k, ",".join(v.keys())) - for k, v in input.items()) - - -class ConfigBuilder: - - _CFG_TRANSFORMS = { - "ami_access" : Transforms.fold_comma, - "ami_regions" : Transforms.fold_comma, - "kernel_modules" : Transforms.fold_comma, - "kernel_options" : Transforms.fold_space, - "repos" : Transforms.fold_repos, - "pkgs" : Transforms.fold_packages, - "svcs" : Transforms.fold_services, - "revision" : Transforms.resolve_now, - "end_of_life" : lambda x: \ - Transforms.force_iso_date(Transforms.resolve_tomorrow(x)), - } - - def __init__(self, config_path, out_dir): - self.config_path = config_path - self.out_dir = out_dir - - def build(self, profile): - build_config = ConfigFactory.parse_file(self.config_path) - - for build, cfg in build_config["BUILDS"].items(): - build_dir = os.path.join(self.out_dir, build) - - # Always start fresh - shutil.rmtree(build_dir, ignore_errors=True) - os.makedirs(build_dir) - - cfg["profile"] = profile - cfg["profile_build"] = build - - # Order of operations is important here - for k, v in cfg.items(): - transform = self._CFG_TRANSFORMS.get(k) - if transform: - cfg[k] = transform(v) - - if isinstance(v, str) and "{var." in v: - cfg[k] = v.format(var=cfg) - - with open(os.path.join(build_dir, "vars.json"), "w") as out: - json.dump(cfg, out, indent=4, separators=(",", ": ")) - - -def find_repo_root(): - path = os.getcwd() - - while ".git" not in set(os.listdir(path)) and path != "/": - path = os.path.dirname(path) - - if path == "/": - raise Exception("No repo found, stopping at /") - - return path - - -def main(args): - parser = argparse.ArgumentParser(description="Build Packer JSON variable " - "files from HOCON build profiles") - parser.add_argument("profile", help="name of profile to build") - args = parser.parse_args() - - root = find_repo_root() - - ConfigBuilder( - os.path.join(root, "profiles", f"{args.profile}.conf"), - os.path.join(root, "build", "profile", args.profile) - ).build(args.profile) - - -if __name__ == "__main__": - main(sys.argv) diff --git a/scripts/update-release.py.in b/scripts/update-release.py.in deleted file mode 100644 index b8f4d00..0000000 --- a/scripts/update-release.py.in +++ /dev/null @@ -1,80 +0,0 @@ -@PYTHON@ -# vim: set ts=4 et: - -import os -import re -import sys -import json -import argparse - -import yaml - - -def find_repo_root(): - path = os.getcwd() - - while ".git" not in set(os.listdir(path)) and path != "/": - path = os.path.dirname(path) - - if path == "/": - raise Exception("No repo found, stopping at /") - - return path - - -def parse_artifact_ids(ids): - parsed = re.split(":|,", ids) - return dict(zip(parsed[0::2], parsed[1::2])) - - -def main(args): - parser = argparse.ArgumentParser(description="Update release YAML") - parser.add_argument("profile", help="name of profile to update") - parser.add_argument("build", help="name of build to update") - args = parser.parse_args() - - root = find_repo_root() - - release_dir = os.path.join(root, "releases") - if not os.path.exists(release_dir): - os.makedirs(release_dir) - - release_yaml = os.path.join(release_dir, f"{args.profile}.yaml") - releases = {} - if os.path.exists(release_yaml): - with open(release_yaml, "r") as data: - releases = yaml.safe_load(data) - - manifest_json = os.path.join( - root, "build", "profile", args.profile, args.build, "manifest.json") - with open(manifest_json, "r") as data: - manifest = json.load(data) - - data = manifest["builds"][0]["custom_data"] - release = data["release"] - - if args.build not in releases: - releases[args.build] = {} - - if release not in releases[args.build]: - releases[args.build][release] = {} - - releases[args.build][release][data["ami_name"]] = { - "description": data["ami_desc"], - "profile": args.profile, - "profile_build": args.build, - "version": data["version"], - "release": release, - "arch": data["arch"], - "revision": data["revision"], - "end_of_life": data["end_of_life"], - "build_time": manifest["builds"][0]["build_time"], - "artifacts": parse_artifact_ids(manifest["builds"][0]["artifact_id"]), - } - - with open(release_yaml, "w") as data: - yaml.dump(releases, data, sort_keys=False) - - -if __name__ == "__main__": - main(sys.argv) From bfc4bf99bf9b508bff7da385577460fc370fdc3c Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 28 May 2020 13:21:11 -0700 Subject: [PATCH 058/125] Convert packer.json builder to python --- scripts/builder.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/scripts/builder.py b/scripts/builder.py index f4e1472..0263308 100644 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -568,6 +568,26 @@ class UpdateReleases: yaml.dump(releases, data, sort_keys=False) +class ConvertPackerJSON: + """Convert packer.conf to packer.json + """ + + command_name = "convert-packer-config" + + @staticmethod + def add_args(parser): + pass + + def run(self, args, root): + source = os.path.join(root, "packer.conf") + dest = os.path.join(root, "build", "packer.json") + + logging.getLogger().setLevel(logging.INFO) + + pyhocon.converter.HOCONConverter.convert_from_file( + source, dest, "json", 2, False) + + def find_repo_root(): path = os.getcwd() From 41f127d77b8d386244bf5f617711ed884df5df4f Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 28 May 2020 12:48:59 -0700 Subject: [PATCH 059/125] Authenticate per-region for make-amis --- scripts/builder.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/scripts/builder.py b/scripts/builder.py index 0263308..de95bdb 100644 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -214,6 +214,8 @@ class MakeAMIs: @staticmethod def add_args(parser): + parser.add_argument("--region", "-r", default="us-west-2", + help="region to use for build") parser.add_argument("profile", help="name of profile to build") parser.add_argument("builds", nargs="*", help="name of builds within a profile to build") @@ -232,6 +234,7 @@ class MakeAMIs: print(f"Build dir '{build_dir}' does not exist") break + creds = IdentityBrokerClient().get_credentials(args.region) out = io.StringIO() res = subprocess.Popen([ @@ -239,7 +242,13 @@ class MakeAMIs: "build", f"-var-file={build_dir}/vars.json", "packer.json" - ], stdout=subprocess.PIPE, encoding="utf-8") + ], stdout=subprocess.PIPE, encoding="utf-8", env={ + "PATH": os.environ.get("PATH"), + "AWS_ACCESS_KEY_ID": creds["access_key"], + "AWS_SECRET_ACCESS_KEY": creds["secret_key"], + "AWS_SESSION_TOKEN": creds["session_token"], + "AWS_DEFAULT_REGION": args.region, + }) while res.poll() is None: text = res.stdout.readline() From 5b2f32c9c854ab30178cb78bc2272f2c71d0a60e Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Fri, 29 May 2020 20:38:41 -0700 Subject: [PATCH 060/125] Allow builder to be run by itself --- scripts/builder.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) mode change 100644 => 100755 scripts/builder.py diff --git a/scripts/builder.py b/scripts/builder.py old mode 100644 new mode 100755 index de95bdb..7491e25 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -1,3 +1,34 @@ +#!/usr/bin/env python3.8 + +# This bit has to stay at the very top of the script. It exists to ensure that +# running this script all by itself uses the python virtual environment with +# our dependencies installed. If will create that environment if it doesn't +# exist. +import os +import sys +import subprocess + +args = [os.path.join("build", "bin", "python3.8")] + sys.argv + +# Create the build root if it doesn't exist +if not os.path.exists("build"): + import venv + + print("Build environment does not exist, creating...", file=sys.stderr) + venv.create("build", with_pip=True) + subprocess.run(["build/bin/pip", "install", "-U", "pip", + "pyhocon", "boto3", "PyYAML"]) + + print("Re-executing with builder python...", file=sys.stderr) + os.execv(args[0], args) +else: + # If the build root python is not running this script re-execute it with + # that python instead to ensure all of our dependencies exist. + if os.path.join(os.getcwd(), args[0]) != sys.executable: + print("Re-executing with builder python...", file=sys.stderr) + os.execv(args[0], args) + +# Below here is the real script import io import os import re From b53492723dc99400d0caac6b6c007adf2f9af6fb Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Fri, 29 May 2020 20:58:53 -0700 Subject: [PATCH 061/125] Migrate full ami build to builder script --- Makefile | 60 --------------------------------------------- README.md | 21 ++++++---------- scripts/builder.py | 61 +++++++++++++++++++++++++++++++++++----------- 3 files changed, 54 insertions(+), 88 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index e6f879c..0000000 --- a/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -# vim: ts=8 noet: - -NVME_SCRIPTS := $(subst scripts/,build/,$(wildcard scripts/nvme/*)) -CORE_PROFILES := $(wildcard profiles/*/*) -TARGET_PROFILES := $(wildcard profiles/*.conf) - -PROFILE := -BUILD := -BUILDS := $(BUILD) -LEVEL := - -# by default, use the 'packer' in the path -PACKER := packer -export PACKER - - -check_defined = \ - $(strip $(foreach 1,$1, \ - $(call __check_defined,$1,$(strip $(value 2))))) -__check_defined = \ - $(if $(value $1),, \ - $(error Undefined $1$(if $2, ($2))$(if $(value @), \ - required by target `$@'))) - - -.PHONY: amis prune release-readme clean - -amis: build/packer.json build/profile/$(PROFILE) build - @:$(call check_defined, PROFILE, target profile name) - build/builder make-amis $(PROFILE) $(BUILDS) - -prune: build - @:$(call check_defined, LEVEL, pruning level) - @:$(call check_defined, PROFILE, target profile name) - build/builder prune-amis $(LEVEL) $(PROFILE) $(BUILD) - -release-readme: releases/README.md -releases/README.md: build - @:$(call check_defined, PROFILE, target profile name) - @:$(call require_var, PROFILE) - build/builder gen-release-readme $(PROFILE) - -build: - python3 -m venv build - [ -d build/profile ] || mkdir -p build/profile - build/bin/pip install -U pip pyhocon pyyaml boto3 - - echo -e "#!/bin/sh\n$$(pwd)/build/bin/python scripts/builder.py \$$@" > $@ - chmod +x $@ - -build/packer.json: packer.conf build - build/builder convert-packer-config - -.PHONY: build/profile/$(PROFILE) -build/profile/$(PROFILE): build $(CORE_PROFILES) $(TARGET_PROFILES) - @:$(call check_defined, PROFILE, target profile name) - build/builder resolve-profiles $(PROFILE) - -clean: - rm -rf build diff --git a/README.md b/README.md index 55f9a35..bedfe94 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,6 @@ include as much detailed information as possible. * [Packer](https://packer.io) >= 1.4.1 * [Python 3.x](https://python.org) (3.7 is known to work) -* `make` (GNU Make is known to work) * an AWS account with an existing subnet in an AWS Virtual Private Cloud ### Profile Configuration @@ -59,18 +58,12 @@ two methods on the list.* To build all build targets in a target profile, simply... ``` -make PROFILE= +./scripts/builder.py amis ``` You can also build specfic build targets within a profile: ``` -make PROFILE= BUILDS=" " -``` - -If the `packer` binary is not in your `PATH`, or you would like to specify a -different one, use... -``` -make PACKER= PROFILE= +./scripts/builder.py amis ``` Before each build, new Alpine Linux *releases* are detected and the version's @@ -98,7 +91,7 @@ pruning: To prune a profile (or optionally one build target of a profile)... ``` -make prune LEVEL= PROFILE= [BUILD=] +./scripts/builder.py prune-amis [] ``` Any AMIs in the account which are "unknown" (to the profile/build target, at @@ -110,14 +103,14 @@ This make target updates the [releases README](releases/README.md), primarily for updating the list of our pre-built AMIs. This may-or-may-not be useful for other target profiles. ``` -make release-readme PROFILE= +./scripts/builder.py gen-release-readme ``` ### Cleaning up the Build Environment -`make clean` will remove the temporary `build` subdirectory, which contains the -resolved profile and Packer configs, the Python virtual environment, and other -temporary build-related artifacts. +`git clean -dxf` will remove the temporary `build` subdirectory, which contains +the resolved profile and Packer configs, the Python virtual environment, and +other temporary build-related artifacts. ## Caveats diff --git a/scripts/builder.py b/scripts/builder.py index 7491e25..021016b 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -287,8 +287,7 @@ class MakeAMIs: print(text, end="") if res.returncode == 0: - subprocess.run([os.path.join(root, "build", "builder"), - "update-releases", args.profile, build]) + UpdateReleases().update_readme(args.profile, build, root) else: if "is used by an existing AMI" in out.getvalue(): continue @@ -537,17 +536,20 @@ class ResolveProfiles: parser.add_argument( "profile", help="name of profile to build", nargs="*") - def run(self, args, root): + def resolve_profiles(self, profiles, root): builder = ConfigBuilder( os.path.join(root, "profiles"), os.path.join(root, "build", "profile")) - if args.profile: - for profile in args.profile: + if profiles: + for profile in profiles: builder.build_profile(profile) else: builder.build_all() + def run(self, args, root): + self.resolve_profiles(args.profile, root) + class UpdateReleases: """Update release YAML @@ -566,18 +568,21 @@ class UpdateReleases: return dict(zip(parsed[0::2], parsed[1::2])) def run(self, args, root): + self.update_readme(args.profile, args.build, root) + + def update_readme(self, profile, build, root): release_dir = os.path.join(root, "releases") if not os.path.exists(release_dir): os.makedirs(release_dir) - release_yaml = os.path.join(release_dir, f"{args.profile}.yaml") + release_yaml = os.path.join(release_dir, f"{profile}.yaml") releases = {} if os.path.exists(release_yaml): with open(release_yaml, "r") as data: releases = yaml.safe_load(data) manifest_json = os.path.join( - root, "build", "profile", args.profile, args.build, + root, "build", "profile", profile, build, "manifest.json") with open(manifest_json, "r") as data: manifest = json.load(data) @@ -585,16 +590,16 @@ class UpdateReleases: data = manifest["builds"][0]["custom_data"] release = data["release"] - if args.build not in releases: - releases[args.build] = {} + if build not in releases: + releases[build] = {} - if release not in releases[args.build]: - releases[args.build][release] = {} + if release not in releases[build]: + releases[build][release] = {} - releases[args.build][release][data["ami_name"]] = { + releases[build][release][data["ami_name"]] = { "description": data["ami_desc"], - "profile": args.profile, - "profile_build": args.build, + "profile": profile, + "profile_build": build, "version": data["version"], "release": release, "arch": data["arch"], @@ -628,6 +633,34 @@ class ConvertPackerJSON: source, dest, "json", 2, False) +class FullBuild: + """Make all of the AMIs for a profile + """ + + command_name = "amis" + + @staticmethod + def add_args(parser): + parser.add_argument("--region", "-r", default="us-west-2", + help="region to use for build") + parser.add_argument("profile", help="name of profile to build") + parser.add_argument("builds", nargs="*", + help="name of builds within a profile to build") + + def run(self, args, root): + print("Converting packer.conf to JSON...", file=sys.stderr) + ConvertPackerJSON().run(args, root) + + print("Resolving profiles...", file=sys.stderr) + ResolveProfiles().resolve_profiles([args.profile], root) + + print("Running packer...", file=sys.stderr) + MakeAMIs().run(args, root) + + print("Updating release readme...", file=sys.stderr) + GenReleaseReadme().run(args, root) + + def find_repo_root(): path = os.getcwd() From df53323de95796a71ff23a323dfb34dd7214272e Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Fri, 29 May 2020 21:11:25 -0700 Subject: [PATCH 062/125] Add some more python docs --- scripts/builder.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/scripts/builder.py b/scripts/builder.py index 021016b..ace706d 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -662,6 +662,8 @@ class FullBuild: def find_repo_root(): + """Find the root of the repo, which contains a .git folder + """ path = os.getcwd() while ".git" not in set(os.listdir(path)) and path != "/": @@ -674,6 +676,33 @@ def find_repo_root(): def main(): + """An introspective main method + + Just some silly metaprogramming to make commands really easy to write and + to avoid needing to hand register them. Commands have a specific interface, + per below, but should be really easy to create and will be auto discovered. + + Commands are objects that have the following attributes: + + __doc__ (python docstring) + used as help text in the CLI + + command_name (string) + name of the command as invoked by the cli + + add_args(parser) (class or static method) + passed an argparse subparser at setup time that will ultimately + handle the arguments for the command at runtime. Should add any + configuration necessary for the command to use later. Must not + rely on object state as it is not invoked with an instance of the + object. + + run(self, args, root) (instance method) + passed the arguments object as parsed by argparse as well as a + string indicating the root of the repository (the folder containing + the .git folder). Should throw exceptions on error and return when + completed. Should *not* execute sys.exit + """ dispatch = {} parser = argparse.ArgumentParser() From b804d174b36603d5d74ddea4d95917e7f911eb94 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sat, 30 May 2020 12:14:48 -0700 Subject: [PATCH 063/125] Allow building without broker --- scripts/builder.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/scripts/builder.py b/scripts/builder.py index ace706d..c5f33be 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -247,6 +247,8 @@ class MakeAMIs: def add_args(parser): parser.add_argument("--region", "-r", default="us-west-2", help="region to use for build") + parser.add_argument("--no-broker", action="store_true", + help="disable use of identity broker") parser.add_argument("profile", help="name of profile to build") parser.add_argument("builds", nargs="*", help="name of builds within a profile to build") @@ -265,7 +267,17 @@ class MakeAMIs: print(f"Build dir '{build_dir}' does not exist") break - creds = IdentityBrokerClient().get_credentials(args.region) + env = None + if not args.no_broker: + creds = IdentityBrokerClient().get_credentials(args.region) + env = { + "PATH": os.environ.get("PATH"), + "AWS_ACCESS_KEY_ID": creds["access_key"], + "AWS_SECRET_ACCESS_KEY": creds["secret_key"], + "AWS_SESSION_TOKEN": creds["session_token"], + "AWS_DEFAULT_REGION": args.region, + } + out = io.StringIO() res = subprocess.Popen([ @@ -273,13 +285,7 @@ class MakeAMIs: "build", f"-var-file={build_dir}/vars.json", "packer.json" - ], stdout=subprocess.PIPE, encoding="utf-8", env={ - "PATH": os.environ.get("PATH"), - "AWS_ACCESS_KEY_ID": creds["access_key"], - "AWS_SECRET_ACCESS_KEY": creds["secret_key"], - "AWS_SESSION_TOKEN": creds["session_token"], - "AWS_DEFAULT_REGION": args.region, - }) + ], stdout=subprocess.PIPE, encoding="utf-8", env=env) while res.poll() is None: text = res.stdout.readline() @@ -643,6 +649,8 @@ class FullBuild: def add_args(parser): parser.add_argument("--region", "-r", default="us-west-2", help="region to use for build") + parser.add_argument("--no-broker", action="store_true", + help="disable use of identity broker") parser.add_argument("profile", help="name of profile to build") parser.add_argument("builds", nargs="*", help="name of builds within a profile to build") From 812eba9597232fced3071750781916b1c44a08dc Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 28 May 2020 12:47:59 -0700 Subject: [PATCH 064/125] Remove release vars from packer --- packer.conf | 2 -- profiles/alpine.conf | 7 ------- profiles/base/1 | 4 +--- profiles/test.conf | 5 ----- scripts/builder.py | 2 -- 5 files changed, 1 insertion(+), 19 deletions(-) diff --git a/packer.conf b/packer.conf index 789f330..e45e368 100644 --- a/packer.conf +++ b/packer.conf @@ -60,8 +60,6 @@ builders = [ } ena_support = "true" sriov_support = "true" - ami_groups = "{{user `ami_access`}}" - ami_regions = "{{user `ami_regions`}}" } ] diff --git a/profiles/alpine.conf b/profiles/alpine.conf index 6c488bb..eca7f55 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -11,14 +11,7 @@ arch-x86_64 { include required("arch/x86_64") } alpine { ami_desc_suffix = " - https://github.com/mcrute/alpine-ec2-ami" - build_region = "us-west-2" build_subnet = "subnet-b80c36e2" - ami_access { - all = true # these AMIs are publicly available - } - ami_regions { - ALL = true - } } # Build definitions diff --git a/profiles/base/1 b/profiles/base/1 index 18decd1..666e5d4 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -16,7 +16,7 @@ arch = null build_arch = null # Builder-instance -build_region = null +build_region = "us-west-2" build_subnet = null build_instance_type = "t3.nano" build_public_ip = null @@ -33,8 +33,6 @@ ami_desc_suffix = "" ami_volume_size = "1" ami_encrypt = "false" ami_user = "alpine" # modification currently not supported -ami_access = {} -ami_regions = {} # NOTE: the following are python format strings, resolved in resolve-profile.py ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" diff --git a/profiles/test.conf b/profiles/test.conf index 6d8d2e0..085f8cc 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -12,11 +12,6 @@ arch-aarch64 { include required("arch/aarch64") } test { ami_name_prefix = "test-" ami_desc_prefix = "Alpine Test " - build_region = "us-west-2" - build_subnet = "subnet-00c202262d97c0536" -# ami_regions { -# ap-east-1 = true -# } } # Build definitions diff --git a/scripts/builder.py b/scripts/builder.py index c5f33be..08c0fa7 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -487,8 +487,6 @@ class ConfigBuilder: self.out_dir = out_dir self._keys_to_transform = { - "ami_access" : self.fold_comma, - "ami_regions" : self.fold_comma, "kernel_modules" : self.fold_comma, "kernel_options" : self.fold_space, "repos" : self.fold_repos, From 5ca05bfb461a228425ea729d21d2abb60955369f Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 28 May 2020 12:50:31 -0700 Subject: [PATCH 065/125] Remove explicit build subnet --- profiles/alpine.conf | 2 -- 1 file changed, 2 deletions(-) diff --git a/profiles/alpine.conf b/profiles/alpine.conf index eca7f55..7947801 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -10,8 +10,6 @@ arch-x86_64 { include required("arch/x86_64") } # profile vars alpine { ami_desc_suffix = " - https://github.com/mcrute/alpine-ec2-ami" - - build_subnet = "subnet-b80c36e2" } # Build definitions From a0cc4d8a127fa336da0b67a62d93f693408cc128 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 28 May 2020 12:51:34 -0700 Subject: [PATCH 066/125] Don't require copying scripts to build --- packer.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packer.conf b/packer.conf index e45e368..6571e8d 100644 --- a/packer.conf +++ b/packer.conf @@ -67,12 +67,12 @@ builders = [ provisioners = [ { type = "file" - source = "nvme/" + source = "../scripts/nvme/" destination = "/tmp" } { type = "shell" - script = "setup-ami" + script = "../scripts/setup-ami" environment_vars = [ "VERSION={{user `version`}}" "RELEASE={{user `release`}}" From b1da6a47d63b70b7100644faaa68b3ee0bedb66e Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 28 May 2020 15:06:23 -0700 Subject: [PATCH 067/125] Embed nvme config --- packer.conf | 4 ++-- scripts/{nvme => }/nvme-ebs-links | 0 scripts/nvme/nvme-ebs-mdev.conf | 3 --- scripts/setup-ami | 6 +++++- 4 files changed, 7 insertions(+), 6 deletions(-) rename scripts/{nvme => }/nvme-ebs-links (100%) delete mode 100644 scripts/nvme/nvme-ebs-mdev.conf diff --git a/packer.conf b/packer.conf index 6571e8d..dafb071 100644 --- a/packer.conf +++ b/packer.conf @@ -67,8 +67,8 @@ builders = [ provisioners = [ { type = "file" - source = "../scripts/nvme/" - destination = "/tmp" + source = "../scripts/nvme-ebs-links" + destination = "/tmp/nvme-ebs-links" } { type = "shell" diff --git a/scripts/nvme/nvme-ebs-links b/scripts/nvme-ebs-links similarity index 100% rename from scripts/nvme/nvme-ebs-links rename to scripts/nvme-ebs-links diff --git a/scripts/nvme/nvme-ebs-mdev.conf b/scripts/nvme/nvme-ebs-mdev.conf deleted file mode 100644 index c30b6fd..0000000 --- a/scripts/nvme/nvme-ebs-mdev.conf +++ /dev/null @@ -1,3 +0,0 @@ -# ebs nvme links -nvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links - diff --git a/scripts/setup-ami b/scripts/setup-ami index aaa0472..1b43495 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -149,8 +149,12 @@ install_core_packages() { setup_mdev() { cp /tmp/nvme-ebs-links "$TARGET/lib/mdev" + # insert nvme ebs mdev configs just above "# fallback" comment - sed -n -i -e '/# fallback/r /tmp/nvme-ebs-mdev.conf' -e 1x -e '2,${x;p}' -e '${x;p}' "$TARGET/etc/mdev.conf" + sed -n -i \ + -e '/# fallback/i \\n# ebs nvme links\nnvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links' \ + -e 1x -e '2,${x;p}' -e '${x;p}' \ + "$TARGET/etc/mdev.conf" } create_initfs() { From 83d07e4b9a9cb9b2a79889fc81f1e66486f744ee Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 28 May 2020 15:11:30 -0700 Subject: [PATCH 068/125] Initfs features are in profiles --- packer.conf | 1 + profiles/base/1 | 6 ++++++ scripts/builder.py | 15 ++++++++------- scripts/setup-ami | 5 +---- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packer.conf b/packer.conf index dafb071..e741255 100644 --- a/packer.conf +++ b/packer.conf @@ -87,6 +87,7 @@ provisioners = [ "SVCS={{user `svcs`}}" "KERNEL_MODS={{user `kernel_modules`}}" "KERNEL_OPTS={{user `kernel_options`}}" + "INITFS_FEATURES={{user `initfs_features`}}" ] use_env_var_file = "true" execute_command = "sudo sh -c '. {{.EnvVarFile}} && {{.Path}}'" diff --git a/profiles/base/1 b/profiles/base/1 index 666e5d4..936018f 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -91,3 +91,9 @@ kernel_options { "console=ttyS0" = true "console=tty0" = true } +# NOTE: nvme and ena are critical for i3, a1, m6g, and anything in the 5 series +# forward. Without them these instances will not boot. +initfs_features { + nvme = true + ena = true +} diff --git a/scripts/builder.py b/scripts/builder.py index 08c0fa7..bfbd5d4 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -487,13 +487,14 @@ class ConfigBuilder: self.out_dir = out_dir self._keys_to_transform = { - "kernel_modules" : self.fold_comma, - "kernel_options" : self.fold_space, - "repos" : self.fold_repos, - "pkgs" : self.fold_packages, - "svcs" : self.fold_services, - "revision" : self.resolve_now, - "end_of_life" : lambda x: \ + "kernel_modules" : self.fold_comma, + "kernel_options" : self.fold_space, + "initfs_features" : self.fold_space, + "repos" : self.fold_repos, + "pkgs" : self.fold_packages, + "svcs" : self.fold_services, + "revision" : self.resolve_now, + "end_of_life" : lambda x: \ self.force_iso_date(self.resolve_tomorrow(x)), } diff --git a/scripts/setup-ami b/scripts/setup-ami index 1b43495..023c208 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -158,10 +158,7 @@ setup_mdev() { } create_initfs() { - # Enable ENA and NVME features these don't hurt for any instance and are - # hard requirements of the 5 series and i3 series of instances - # TODO: profile-ize? - sed -Ei 's/^features="([^"]+)"/features="\1 nvme ena"/' \ + sed -Ei "s/^features=\"([^\"]+)\"/features=\"\1 $INITFS_FEATURES\"/" \ "$TARGET/etc/mkinitfs/mkinitfs.conf" chroot "$TARGET" /sbin/mkinitfs $(basename $(find "$TARGET/lib/modules/"* -maxdepth 0)) From b804661ffd8fc6bd30204100606e4150bbd79bf9 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sat, 30 May 2020 14:29:18 -0700 Subject: [PATCH 069/125] Remove python3.8 dependency --- scripts/builder.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/scripts/builder.py b/scripts/builder.py index bfbd5d4..1bc4642 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3 # This bit has to stay at the very top of the script. It exists to ensure that # running this script all by itself uses the python virtual environment with @@ -8,7 +8,7 @@ import os import sys import subprocess -args = [os.path.join("build", "bin", "python3.8")] + sys.argv +args = [os.path.join("build", "bin", "python3")] + sys.argv # Create the build root if it doesn't exist if not os.path.exists("build"): @@ -64,7 +64,8 @@ class IdentityBrokerClient: self.key = key self._logger = logging.getLogger(__class__.__name__) - if override_endpoint := os.environ.get("IDENTITY_BROKER_ENDPOINT"): + override_endpoint = os.environ.get("IDENTITY_BROKER_ENDPOINT") + if override_endpoint: self.endpoint = override_endpoint if not self.key: @@ -364,7 +365,8 @@ class PruneAMIs: version = info["version"] built = info["build_time"] - if eol := info.get("end_of_life"): + eol = info.get("end_of_life") + if eol: eol = datetime.fromisoformat(info["end_of_life"]) for region, ami_id in info["artifacts"].items(): @@ -392,7 +394,8 @@ class PruneAMIs: for ami_name, info in amis.items(): version = info["version"] - if eol := info.get("end_of_life"): + eol = info.get("end_of_life") + if eol: eol = datetime.fromisoformat(info["end_of_life"]) if args.level == "revision": @@ -725,7 +728,8 @@ def main(): subparser = subs.add_parser( command.command_name, help=doc, description=doc) - if add_args := getattr(command, "add_args", None): + add_args = getattr(command, "add_args", None) + if add_args: command.add_args(subparser) args = parser.parse_args() From 90f7408fc781bd233c0075a0a4dd555022b58636 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sat, 30 May 2020 14:30:32 -0700 Subject: [PATCH 070/125] Flip broker usage flag --- scripts/builder.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/builder.py b/scripts/builder.py index 1bc4642..6ab9ed7 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -248,8 +248,8 @@ class MakeAMIs: def add_args(parser): parser.add_argument("--region", "-r", default="us-west-2", help="region to use for build") - parser.add_argument("--no-broker", action="store_true", - help="disable use of identity broker") + parser.add_argument("--use-broker", action="store_true", + help="use identity broker to obtain per-region credentials") parser.add_argument("profile", help="name of profile to build") parser.add_argument("builds", nargs="*", help="name of builds within a profile to build") @@ -269,7 +269,7 @@ class MakeAMIs: break env = None - if not args.no_broker: + if args.use_broker: creds = IdentityBrokerClient().get_credentials(args.region) env = { "PATH": os.environ.get("PATH"), @@ -651,8 +651,8 @@ class FullBuild: def add_args(parser): parser.add_argument("--region", "-r", default="us-west-2", help="region to use for build") - parser.add_argument("--no-broker", action="store_true", - help="disable use of identity broker") + parser.add_argument("--use-broker", action="store_true", + help="use identity broker to obtain per-region credentials") parser.add_argument("profile", help="name of profile to build") parser.add_argument("builds", nargs="*", help="name of builds within a profile to build") From 8a09fdda0e211bc4f2a10aad0b5f0814cf925a51 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sat, 30 May 2020 15:07:34 -0700 Subject: [PATCH 071/125] Add identity broker docs --- README_BROKER.md | 175 +++++++++++++++++++++++++++++++++++++++++++++ scripts/builder.py | 7 ++ 2 files changed, 182 insertions(+) create mode 100644 README_BROKER.md diff --git a/README_BROKER.md b/README_BROKER.md new file mode 100644 index 0000000..13e1af3 --- /dev/null +++ b/README_BROKER.md @@ -0,0 +1,175 @@ +# AWS Identity Broker + +The identity broker is used to obtain short-lived and per-region credentials +for an account. Opt-in regions require the use of a long-lived credential (e.g. +IAM user), enabling global STS tokens, or an STS token sourced in that region. +The identity broker holds long-term credentials and uses them to acquire +short-term credentials in a given region. The broker also provides a list of +opt-in regions and should be used to enumerate regions. + +For human-interactive users the identity broker performs OAUTH against GitHub +to chain the user's GitHub identity to the tokens they are given from the +broker. The broker also provides the user an API key to use when interacting +with the broker programmatically. + +As of May 2020 the identity broker is not open sourced. If you want to provide +your own identity broker, the rest of this document specifies the URLs +endpoints and response formats to do so. + +# The API + +The identity broker API is a REST-ful service with an entry-point of +`/api/account`. All further navigation through the API follows links within the +hypertext. + +**Note:** Outside of the account entry-point, URI formats should be considered +implementation details of the broker API and should never be templated. Beyond +the account entry-point, nothing in this specification is normative with +respect to URI paths and locations. + +## Authentication + +All requests to the API must be authenticated with a broker-specific key. That +key is provided to the broker in the `X-API-Key` header. When the broker +determines that the key is either expired or invalid it must redirect the user +to `/logout` to indicate that the user is logged out and must log-in again. + +API keys are bearer tokens and thus must only be exchanged over HTTPS. + +## Status Codes + +`200 OK`: indicates that the request to the broker was successful. + +`302 Found`: indicates that the broker is providing a redirect. Users should +check the redirect, if it is to the location `/logout` the user should consider +themselves logged out and proceed to login. This condition should not be +followed. Otherwise the user should follow all redirects. + +`400 Bad Request`: indicates that some part of the request is invalid as +submitted. The hypertext MAY provide a description of this error and how to +remedy it. + +`429 Rate Limit Exceeded`: indicates that the broker has rate-limited the user. +A user should discontinue requests to the broker immediately and wait for at +least 30 seconds before continuing their requests. The rate limit parameters +are specific to the broker and not controlled by this spec. + +`500 Server Error`: indicates a server error condition that is not under the +user's control. + +## Account End-point + +The account end-point acts as a index of the rest of the API. It presents a +list of accounts to which the user has access as well as links to navigate +further into the API. The format of this document is: + +`short_name` (string): a url-safe name for the account, used as the primary +account identifier within the broker. + +`account_number` (integer): the AWS account number + +`name` (string): a user-friendly name for the account + +`console_redirect_url` (uri): a URI that, when followed, leads to a resource +that redirects the user to an authenticated console session. + +`get_console_url` (uri): a URI that, when followed, leads to a console URL +resource. + +`credentials_url` (uri): a URI that, when followed, leads to a region list +resource. + +`global_credential_url` (uri): a URI that, when followed, leads to a credential +resource which provides a credential usable by all non-opt-in regions. The +contents of this resource are a STS global credential which is not usable in +opt-in regions. + +``` +[ + { + "short_name": "primary-account", + "account_number": 123456789012, + "name": "Primary AWS Account", + "console_redirect_url": "https://broker/api/account/primary-account/console?redirect=1", + "get_console_url": "https://broker/api/account/primary-account/console", + "credentials_url": "https://broker/api/account/primary-account/credentials", + "global_credential_url": "https://broker/api/account/primary-account/credentials/global" + } +] +``` + +## Console URL Resource + +**Note:** This resource is not used by the build scripts. + +The console URL resource provides a URL to the AWS console. This resource is +designed for interactive use. + +When provided the query parameter `redirect` with a value of `1` this resource +will not generate a body and will instead redirect to the URL that would have +been returned for `console_url`. + +`console_url` (uri): a link to the AWS console with authentication credentials +embedded. + +``` +{ + "console_url": "https://signin.aws.amazon.com/federation?..." +} +``` + +## Credential Resource + +The credential resource provides a set of credentials that can be used to +configure AWS tools to access an account. + +`access_key` (string): the AWS access key ID + +`secret_key` (string): the AWS secret access key + +`session_token` (string): the AWS session token + +`expiration` (iso-formatted date): the date and time when the credential will +expire + +``` +{ + "access_key": "ASIA123ABC456DEF567G", + "secret_key": "r7KcIuGdPwoUG2YOLISX2XDrVts55IFGTGaY5Tqa", + "session_token": "7C7FyvzyneaS/eRCVDcjHOSTTIHQyvhGqW...", + "expiration": "2020-01-01T00:00:00Z" +} +``` + +## Region List Resource + +The region list resource provides a list of regions associated with the account +both opted-in and not. For opted-in regions the resource includes a link to a +credential resource for that region. + +`name` (string): AWS name for the region + +`enabled` (boolean): indicates if the region is enabled and opted-in for this +account. + +`credentials_url` (uri): a URI that, when followed, leads to a credential +resource containing a credential for access to that region. The credential +provided will be usable against the region-local STS endpoint for the specified +region. This also applies for classic regions, which typically use a global +endpoint and credential. The returned credential is scoped to the acquiring +region and may not be usable against the global endpoints or a different +regional endpoint. + +``` +[ + { + "name": "af-south-1", + "enabled": false + }, + { + "name": "us-west-2", + "enabled": true, + "credentials_url": "https://broker/api/account/primary-account/credentials/us-west-2" + } +] +``` diff --git a/scripts/builder.py b/scripts/builder.py index 6ab9ed7..c249ba9 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -54,6 +54,13 @@ import pyhocon class IdentityBrokerClient: + """Client for identity broker + + Export IDENTITY_BROKER_ENDPOINT to override the default broker endpoint. + Export IDENTITY_BROKER_API_KEY to specify an API key for the broker. + + See README_BROKER.md for more information and a spec. + """ _DEFAULT_ENDPOINT = "https://aws-access.crute.us/api/account" _DEFAULT_ACCOUNT = "alpine-amis-user" From 9d672fbd6a42cf769cdc3e52f776292b17d4616b Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Fri, 22 May 2020 18:23:29 -0700 Subject: [PATCH 072/125] Support ARM instance types --- profiles/alpine.conf | 5 +++++ profiles/base/1 | 7 +++++-- profiles/test.conf | 1 + scripts/setup-ami | 28 +++++++++++++++++----------- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/profiles/alpine.conf b/profiles/alpine.conf index 7947801..fbb086d 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -6,6 +6,7 @@ version-3_10 { include required("version/3.10") } version-3_9 { include required("version/3.9") } version-edge { include required("version/edge") } arch-x86_64 { include required("arch/x86_64") } +arch-aarch64 { include required("arch/aarch64") } # profile vars alpine { @@ -21,4 +22,8 @@ BUILDS { edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} { revision = "@NOW@" } + + edge-aarch64 = ${version-edge} ${arch-aarch64} ${alpine} { + revision = "@NOW@" + } } diff --git a/profiles/base/1 b/profiles/base/1 index 936018f..8ba6ff8 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -33,6 +33,7 @@ ami_desc_suffix = "" ami_volume_size = "1" ami_encrypt = "false" ami_user = "alpine" # modification currently not supported + # NOTE: the following are python format strings, resolved in resolve-profile.py ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" @@ -86,10 +87,12 @@ kernel_modules { sd-mod = true usb-storage = true ext4 = true + nvme = true + ena = true } kernel_options { - "console=ttyS0" = true - "console=tty0" = true + "console=ttyS0,115200n8" = true + "nvme_core.io_timeout=4294967295" = true } # NOTE: nvme and ena are critical for i3, a1, m6g, and anything in the 5 series # forward. Without them these instances will not boot. diff --git a/profiles/test.conf b/profiles/test.conf index 085f8cc..0d4e740 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -23,6 +23,7 @@ BUILDS { edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} # aarch64 AMI builds are under development + edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} #edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} { # other us-west-2 subnet doesn't do a1.* instances # build_subnet = "subnet-08dfc622745f7d96a" diff --git a/scripts/setup-ami b/scripts/setup-ami index 023c208..1710ca9 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -59,7 +59,7 @@ fetch_apk_tools() { # mostly from Alpine's /sbin/setup-disk setup_partitions() { - start=1M # TODO: do we really need to waste 1M? + start=2M # Needed to align EBS partitions line= # create new partitions @@ -70,7 +70,7 @@ setup_partitions() { *) echo "$start,$line"; start= ;; esac done - ) | sfdisk --quiet --label dos "$DEVICE" + ) | sfdisk --quiet --label gpt "$DEVICE" # we assume that the build host will create the new devices within 5s tries=5 @@ -87,7 +87,7 @@ make_filesystem() { if [ "$BOOTLOADER" = 'grub-efi' ]; then # create a small EFI partition (remainder for root), and mount it - setup_partitions '5M,EF' ',L' + setup_partitions '5M,U,*' ',L' root_dev="${DEVICE}2" mkfs.vfat -n EFI "${DEVICE}1" fi @@ -142,9 +142,15 @@ install_core_packages() { # EC2 console. sed -Ei '/^tty[0-9]/s/^/#/' "$TARGET/etc/inittab" + # Enable the getty for the serial terminal. This will show the login prompt + # in the get-console-output API that's accessible by the CLI and the web + # console. + sed -Ei '/^#ttyS0:/s/^#//' "$TARGET/etc/inittab" + # Make it a little more obvious who is logged in by adding username to the # prompt sed -i "s/^export PS1='/&\\\\u@/" "$TARGET/etc/profile" + } setup_mdev() { @@ -196,7 +202,6 @@ install_extlinux() { chroot "$TARGET" /sbin/update-extlinux --warn-only } -# TODO: this isn't quite working for some reason install_grub_efi() { case "$ARCH" in x86_64) grub_target=x86_64-efi ; fwa=x64 ;; @@ -209,16 +214,17 @@ install_grub_efi() { --bootloader-id=alpine --boot-directory=/boot --no-nvram # fallback mode - install -D "$TARGET/boot/efi/EFI/alpine/grub$fwa.efi" "$TARGET/boot/efi/EFI/boot/$fwa.efi" + install -D "$TARGET/boot/efi/EFI/alpine/grub$fwa.efi" "$TARGET/boot/efi/EFI/boot/boot$fwa.efi" - # add cmdline linux defaults to /etc/default/grub - echo "GRUB_CMDLINE_LINUX_DEFAULT=\"modules=$KERNEL_MODS $KERNEL_OPTS\"" >> "$TARGET"/etc/default/grub - - # eliminate grub pause - sed -ie 's/^GRUB_TIMEOUT=.$/GRUB_TIMEOUT=0/' "$TARGET/etc/default/grub" + cat > "$TARGET/etc/default/grub" <<- EOF + GRUB_TIMEOUT=0 + GRUB_DISABLE_SUBMENU=y + GRUB_DISABLE_RECOVERY=true + GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" + GRUB_CMDLINE_LINUX_DEFAULT="modules=$KERNEL_MODS $KERNEL_OPTS" + EOF # generate/install new config - [ -e "$TARGET/boot/grub/grub.cfg" ] && cp "$TARGET/boot/grub/grub.cfg" "$TARGET/boot/grub/grub.cfg.backup" chroot "$TARGET" grub-mkconfig -o /boot/grub/grub.cfg } From 925e62ceefbe0f2c7e1d4c24395e2daf16fa233b Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sat, 30 May 2020 15:09:49 -0700 Subject: [PATCH 073/125] Update README --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bedfe94..4a270b7 100644 --- a/README.md +++ b/README.md @@ -108,9 +108,10 @@ other target profiles. ### Cleaning up the Build Environment -`git clean -dxf` will remove the temporary `build` subdirectory, which contains -the resolved profile and Packer configs, the Python virtual environment, and -other temporary build-related artifacts. +The build process is careful to place all temporary files in teh `build` +subdirectory. Remove the temporary `build` subdirectory, which contains the +resolved profile and Packer configs, the Python virtual environment, and other +temporary build-related artifacts. ## Caveats From 001db8ef996079948f63636f44613736ef8d6f3d Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sat, 13 Jun 2020 17:24:33 -0700 Subject: [PATCH 074/125] Optional AWS Profile & Cross-Account Access Allows encoding of the AWS profile to use in the build profile, and enabling the built AMI with a list of AWS accounts that are allowed access. --- packer.conf | 4 +++- profiles/base/1 | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packer.conf b/packer.conf index e741255..04962bf 100644 --- a/packer.conf +++ b/packer.conf @@ -4,7 +4,8 @@ builders = [ { - type = "amazon-ebssurrogate" + type = "amazon-ebssurrogate" + profile = "{{user `aws_profile`}}" ### Builder Instance Details @@ -60,6 +61,7 @@ builders = [ } ena_support = "true" sriov_support = "true" + ami_users = "{{user `aws_users`}}" } ] diff --git a/profiles/base/1 b/profiles/base/1 index 8ba6ff8..53cb819 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -26,6 +26,8 @@ build_ami_owner = "137112412989" build_ami_latest = "true" # AMI build/deploy +aws_profile = null # AWS profile to build AMI +aws_accounts = null # comma-separated AWS accounts allowed to launch AMI ami_name_prefix = "alpine-ami-" ami_name_suffix = "" ami_desc_prefix = "Alpine Linux " From d765bd4ab77fc3ef7c3d66d644016c5b07e8ddab Mon Sep 17 00:00:00 2001 From: tomalok Date: Sun, 9 Aug 2020 15:11:34 -0700 Subject: [PATCH 075/125] Fix edge builds (#78) alpine-mirrors package removed after 3.12 also add profile for 3.12 --- profiles/base/2 | 103 +++++++++++++++++++++++++++++++++++++++ profiles/base/current | 2 +- profiles/version/3.10 | 2 +- profiles/version/3.11 | 2 +- profiles/version/3.12 | 14 ++++++ profiles/version/3.9 | 2 +- profiles/version/current | 2 +- profiles/version/edge | 3 +- 8 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 profiles/base/2 create mode 100644 profiles/version/3.12 diff --git a/profiles/base/2 b/profiles/base/2 new file mode 100644 index 0000000..ae58f06 --- /dev/null +++ b/profiles/base/2 @@ -0,0 +1,103 @@ +### base vars, revision 1 +# vim: ts=2 et: + +# Profile/Build +profile = null +profile_build = null +revision = "r0" + +# Versioning +version = null +release = null +end_of_life = null + +# Architecture +arch = null +build_arch = null + +# Builder-instance +build_region = "us-west-2" +build_subnet = null +build_instance_type = "t3.nano" +build_public_ip = null +build_user = "ec2-user" +build_ami_name = "amzn2-ami-hvm-2.0.*-gp2" +build_ami_owner = "137112412989" +build_ami_latest = "true" + +# AMI build/deploy +aws_profile = null # AWS profile to build AMI +aws_accounts = null # comma-separated AWS accounts allowed to launch AMI +ami_name_prefix = "alpine-ami-" +ami_name_suffix = "" +ami_desc_prefix = "Alpine Linux " +ami_desc_suffix = "" +ami_volume_size = "1" +ami_encrypt = "false" +ami_user = "alpine" # modification currently not supported + +# NOTE: the following are python format strings, resolved in resolve-profile.py +ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" +ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" + +# AMI configuration +apk_tools = null +apk_tools_sha256 = null +alpine_keys = null +alpine_keys_sha256 = null +repos {} +pkgs { + linux-virt = true + chrony = true + nvme-cli = true + openssh = true + sudo = true + tiny-ec2-bootstrap = true + tzdata = true +} +svcs { + sysinit { + devfs = true + dmesg = true + hwdrivers = true + mdev = true + } + boot { + acpid = true + bootmisc = true + hostname = true + hwclock = true + modules = true + swap = true + sysctl = true + syslog = true + } + default { + chronyd = true + networking = true + sshd = true + tiny-ec2-bootstrap = true + } + shutdown { + killprocs = true + mount-ro = true + savecache = true + } +} +kernel_modules { + sd-mod = true + usb-storage = true + ext4 = true + nvme = true + ena = true +} +kernel_options { + "console=ttyS0,115200n8" = true + "nvme_core.io_timeout=4294967295" = true +} +# NOTE: nvme and ena are critical for i3, a1, m6g, and anything in the 5 series +# forward. Without them these instances will not boot. +initfs_features { + nvme = true + ena = true +} diff --git a/profiles/base/current b/profiles/base/current index 56a6051..d8263ee 120000 --- a/profiles/base/current +++ b/profiles/base/current @@ -1 +1 @@ -1 \ No newline at end of file +2 \ No newline at end of file diff --git a/profiles/version/3.10 b/profiles/version/3.10 index a83dff2..17a657f 100644 --- a/profiles/version/3.10 +++ b/profiles/version/3.10 @@ -2,7 +2,7 @@ # vim: ts=2 et: # start with base vars -include required("../base/current") +include required("../base/1") # set version-specific vars version = "3.10" diff --git a/profiles/version/3.11 b/profiles/version/3.11 index 4f0a55d..f46a210 100644 --- a/profiles/version/3.11 +++ b/profiles/version/3.11 @@ -2,7 +2,7 @@ # vim: ts=2 et: # start with base vars -include required("../base/current") +include required("../base/1") # set version-specific vars version = "3.11" diff --git a/profiles/version/3.12 b/profiles/version/3.12 new file mode 100644 index 0000000..c51bb39 --- /dev/null +++ b/profiles/version/3.12 @@ -0,0 +1,14 @@ +### version 3.12 vars +# vim: ts=2 et: + +# start with base vars +include required("../base/1") + +# set version-specific vars +version = "3.12" +release = "3.12.0" +end_of_life = "2022-06-01" +repos { + "http://dl-cdn.alpinelinux.org/alpine/v3.12/main" = true + "http://dl-cdn.alpinelinux.org/alpine/v3.12/community" = true +} diff --git a/profiles/version/3.9 b/profiles/version/3.9 index 7f5a7e8..f129b58 100644 --- a/profiles/version/3.9 +++ b/profiles/version/3.9 @@ -2,7 +2,7 @@ # vim: ts=2 et: # start with base vars -include required("../base/current") +include required("../base/1") # set version-specific vars version = "3.9" diff --git a/profiles/version/current b/profiles/version/current index 902b2c9..fdcfcfd 120000 --- a/profiles/version/current +++ b/profiles/version/current @@ -1 +1 @@ -3.11 \ No newline at end of file +3.12 \ No newline at end of file diff --git a/profiles/version/edge b/profiles/version/edge index 07a04b0..07c583d 100644 --- a/profiles/version/edge +++ b/profiles/version/edge @@ -2,7 +2,7 @@ # vim: ts=2 et: # based on current -include required("current") +include required("../base/current") # add edge-specific tweaks... version = "edge" @@ -10,7 +10,6 @@ release = "edge" end_of_life = "@TOMORROW@" revision = "@NOW@" -repos = null # remove all values from 'current' repos { "http://dl-cdn.alpinelinux.org/alpine/edge/main" = true "http://dl-cdn.alpinelinux.org/alpine/edge/community" = true From d593de3833014b4e83d7693a5e6691013122eb0e Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sun, 9 Aug 2020 21:27:28 -0700 Subject: [PATCH 076/125] Optional Additional Setup Profiles can specify 'setup_script' to do additional things. If additional files/dirs are required, a 'setup_copy' map will copy them to the build instance so that 'setup_script' can use/install them. TBD: docs. --- packer.conf | 4 ++-- scripts/builder.py | 21 ++++++++++++++++++++- scripts/setup-ami | 17 ++++++++++++++++- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/packer.conf b/packer.conf index 04962bf..a62d7de 100644 --- a/packer.conf +++ b/packer.conf @@ -69,8 +69,8 @@ builders = [ provisioners = [ { type = "file" - source = "../scripts/nvme-ebs-links" - destination = "/tmp/nvme-ebs-links" + source = "./profile/{{user `profile`}}/{{user `profile_build`}}/setup-ami.d" + destination = "/tmp/setup-ami.d" } { type = "shell" diff --git a/scripts/builder.py b/scripts/builder.py index c249ba9..ea23d99 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -513,16 +513,35 @@ class ConfigBuilder: profile = os.path.splitext(os.path.split(file)[-1])[0] self.build_profile(profile) + def rel_symlink(self, src_path, dest_dir, dest): + os.symlink( + os.path.relpath(src_path, dest_dir), + os.path.join(dest_dir, dest)) + def build_profile(self, profile): build_config = pyhocon.ConfigFactory.parse_file( os.path.join(self.config_path, f"{profile}.conf")) for build, cfg in build_config["BUILDS"].items(): build_dir = os.path.join(self.out_dir, profile, build) + setup_dir = os.path.join(build_dir, "setup-ami.d") # Always start fresh shutil.rmtree(build_dir, ignore_errors=True) - os.makedirs(build_dir) + os.makedirs(setup_dir) + + # symlink nvme script + self.rel_symlink("scripts/nvme-ebs-links", setup_dir, "nvme-ebs-links") + + # symlink additional setup_script + if "setup_script" in cfg.keys(): + self.rel_symlink(cfg["setup_script"], setup_dir, "setup_script") + del cfg["setup_script"] + + if "setup_copy" in cfg.keys(): + for dst, src in cfg["setup_copy"].items(): + self.rel_symlink(src, setup_dir, dst) + del cfg["setup_copy"] cfg["profile"] = profile cfg["profile_build"] = build diff --git a/scripts/setup-ami b/scripts/setup-ami index 1710ca9..e3c311d 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -154,7 +154,7 @@ install_core_packages() { } setup_mdev() { - cp /tmp/nvme-ebs-links "$TARGET/lib/mdev" + cp /tmp/setup-ami.d/nvme-ebs-links "$TARGET/lib/mdev" # insert nvme ebs mdev configs just above "# fallback" comment sed -n -i \ @@ -288,6 +288,19 @@ configure_ntp() { -i "$TARGET/etc/chrony/chrony.conf" } +setup_script() { + if [ -f /tmp/setup-ami.d/setup_script ]; then + einfo "Executing additional setup script" + ( + cd /tmp/setup-ami.d + chmod u+x ./setup_script + TARGET="$TARGET" ./setup_script + ) + else + einfo "No additional setup script" + fi +} + cleanup() { # Sweep cruft out of the image that doesn't need to ship or will be # re-generated when the image boots @@ -344,6 +357,8 @@ main() { create_alpine_user configure_ntp + setup_script + einfo "All done, cleaning up" cleanup } From 2b76c6ebf655e14a8d7ce774137df3c13d6c232a Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Tue, 11 Aug 2020 21:16:54 -0700 Subject: [PATCH 077/125] support modification of default AMI user --- packer.conf | 1 + profiles/base/2 | 15 ++++++++++++--- profiles/test.conf | 17 ++++++++--------- profiles/version/3.12 | 2 +- scripts/builder.py | 4 ++-- scripts/setup-ami | 19 +++++++++++-------- 6 files changed, 35 insertions(+), 23 deletions(-) diff --git a/packer.conf b/packer.conf index a62d7de..08a0d2c 100644 --- a/packer.conf +++ b/packer.conf @@ -90,6 +90,7 @@ provisioners = [ "KERNEL_MODS={{user `kernel_modules`}}" "KERNEL_OPTS={{user `kernel_options`}}" "INITFS_FEATURES={{user `initfs_features`}}" + "EC2_USER={{user `ami_user`}}" ] use_env_var_file = "true" execute_command = "sudo sh -c '. {{.EnvVarFile}} && {{.Path}}'" diff --git a/profiles/base/2 b/profiles/base/2 index ae58f06..cc90fee 100644 --- a/profiles/base/2 +++ b/profiles/base/2 @@ -34,7 +34,7 @@ ami_desc_prefix = "Alpine Linux " ami_desc_suffix = "" ami_volume_size = "1" ami_encrypt = "false" -ami_user = "alpine" # modification currently not supported +ami_user = "alpine" # NOTE: the following are python format strings, resolved in resolve-profile.py ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" @@ -95,9 +95,18 @@ kernel_options { "console=ttyS0,115200n8" = true "nvme_core.io_timeout=4294967295" = true } -# NOTE: nvme and ena are critical for i3, a1, m6g, and anything in the 5 series -# forward. Without them these instances will not boot. +# NOTE: nvme and ena are critical for i3, a1, m6g, and anything in the 5 +# series forward. Without them these instances will not boot. initfs_features { nvme = true ena = true } + +# Local path to additional setup script, runs before setup-ami cleanup. +setup_script = null + +# Files/directories to copy to /tmp/setup-ami.d/ on build instance for +# setup-script to use. Map key is the copy target in the build instance +# /tmp/setup-ami.d/ directory, map value is local file/directory path. +# Nothing copied ends up in the AMI unless `setup_script` does it. +setup_copy = null diff --git a/profiles/test.conf b/profiles/test.conf index 0d4e740..74019b1 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -1,6 +1,7 @@ ### Profile for Testing Builds # vim: ts=2 et: +version-3_12 { include required("version/3.12") } version-3_11 { include required("version/3.11") } version-3_10 { include required("version/3.10") } version-3_9 { include required("version/3.9") } @@ -12,20 +13,18 @@ arch-aarch64 { include required("arch/aarch64") } test { ami_name_prefix = "test-" ami_desc_prefix = "Alpine Test " + ami_user = "test" } # Build definitions BUILDS { # merge version, arch, profile, and build vars - v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${test} - v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} - v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${test} + v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${test} { revision = "r0" } + v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${test} { revision = "r0" } + v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} { revision = "r0" } + v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${test} { revision = "r0" } edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} - # aarch64 AMI builds are under development - edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} - #edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} { - # other us-west-2 subnet doesn't do a1.* instances - # build_subnet = "subnet-08dfc622745f7d96a" - #} + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${test} { revision = "r0" } + edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} } diff --git a/profiles/version/3.12 b/profiles/version/3.12 index c51bb39..3a77dd5 100644 --- a/profiles/version/3.12 +++ b/profiles/version/3.12 @@ -7,7 +7,7 @@ include required("../base/1") # set version-specific vars version = "3.12" release = "3.12.0" -end_of_life = "2022-06-01" +end_of_life = "2022-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.12/main" = true "http://dl-cdn.alpinelinux.org/alpine/v3.12/community" = true diff --git a/scripts/builder.py b/scripts/builder.py index ea23d99..21df3fe 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -534,11 +534,11 @@ class ConfigBuilder: self.rel_symlink("scripts/nvme-ebs-links", setup_dir, "nvme-ebs-links") # symlink additional setup_script - if "setup_script" in cfg.keys(): + if "setup_script" in cfg.keys() and cfg["setup_script"] is not None: self.rel_symlink(cfg["setup_script"], setup_dir, "setup_script") del cfg["setup_script"] - if "setup_copy" in cfg.keys(): + if "setup_copy" in cfg.keys() and cfg["setup_copy"] is not None: for dst, src in cfg["setup_copy"].items(): self.rel_symlink(src, setup_dir, dst) del cfg["setup_copy"] diff --git a/scripts/setup-ami b/scripts/setup-ami index e3c311d..8ae7999 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -256,8 +256,6 @@ enable_services() { done } -# TODO: allow profile to specify alternate ALPINE_USER? -# NOTE: tiny-ec2-bootstrap will need to be updated to support that! create_alpine_user() { # Allow members of the wheel group to sudo without a password. By default # this will only be the alpine user. This allows us to ship an AMI that is @@ -269,12 +267,17 @@ create_alpine_user() { # There is no real standard ec2 username across AMIs, Amazon uses ec2-user # for their Amazon Linux AMIs but Ubuntu uses ubuntu, Fedora uses fedora, # etc... (see: https://alestic.com/2014/01/ec2-ssh-username/). So our user - # and group are alpine because this is Alpine Linux. On instance bootstrap - # the user can create whatever users they want and delete this one. - chroot "$TARGET" /usr/sbin/addgroup alpine - chroot "$TARGET" /usr/sbin/adduser -h /home/alpine -s /bin/sh -G alpine -D alpine - chroot "$TARGET" /usr/sbin/addgroup alpine wheel - chroot "$TARGET" /usr/bin/passwd -u alpine + # and group, by default, are alpine because this is Alpine Linux. + user="${EC2_USER:-alpine}" + chroot "$TARGET" /usr/sbin/addgroup "$user" + chroot "$TARGET" /usr/sbin/adduser -h "/home/$user" -s /bin/sh -G "$user" -D "$user" + chroot "$TARGET" /usr/sbin/addgroup "$user" wheel + chroot "$TARGET" /usr/bin/passwd -u "$user" + + # Let tiny-ec2-bootstrap know what the EC2 user of the AMI is + cat > "$TARGET/etc/conf.d/tiny-ec2-bootstrap" < Date: Mon, 17 Aug 2020 11:11:50 -0700 Subject: [PATCH 078/125] Fix 'revision' and 'end_of_life' (#80) Also... * update alpine.conf with 3.12 * update apk-tools and alpine-keys * use test profile to test fixes and newer features --- README.md | 3 --- profiles/alpine.conf | 13 ++++++------- profiles/arch/aarch64-1 | 4 ++-- profiles/arch/x86_64-1 | 8 ++++---- profiles/test.conf | 15 ++++++++++----- profiles/version/edge | 4 ++-- scripts/builder.py | 22 +++++++++++++++++----- scripts/test-setup_script.sh | 12 ++++++++++++ 8 files changed, 53 insertions(+), 28 deletions(-) create mode 100755 scripts/test-setup_script.sh diff --git a/README.md b/README.md index 4a270b7..0f15c07 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,3 @@ temporary build-related artifacts. * New Alpine Linux *versions* are currently not auto-detected and added as a core version profile; this process is, at the moment, still a manual task. - -* Although it's possible to build "aarch64" (arm64) AMIs, they don't quite work - yet. diff --git a/profiles/alpine.conf b/profiles/alpine.conf index fbb086d..0c55058 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -1,6 +1,7 @@ ### Profile for Building the Publically-Available Alpine Linux AMIs # vim: ts=2 et: +version-3_12 { include required("version/3.12") } version-3_11 { include required("version/3.11") } version-3_10 { include required("version/3.10") } version-3_9 { include required("version/3.9") } @@ -15,15 +16,13 @@ alpine { # Build definitions BUILDS { - # merge version, arch, and profile vars + # merge version, arch, profile; add { revision = "r1" } if needed + v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${alpine} v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} - edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} { - revision = "@NOW@" - } + edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} - edge-aarch64 = ${version-edge} ${arch-aarch64} ${alpine} { - revision = "@NOW@" - } + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${alpine} + edge-aarch64 = ${version-edge} ${arch-aarch64} ${alpine} } diff --git a/profiles/arch/aarch64-1 b/profiles/arch/aarch64-1 index 37564e5..f40af5a 100644 --- a/profiles/arch/aarch64-1 +++ b/profiles/arch/aarch64-1 @@ -6,5 +6,5 @@ build_arch = "arm64" build_instance_type = "a1.medium" apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.3/apk-tools-2.10.3-aarch64-linux.tar.gz" apk_tools_sha256 = "58a07e547c83c3a30eb0a0bd73db57d6bbaf92cc093df7a1d9805631f7d349e3" -alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.9/main/aarch64/alpine-keys-2.1-r1.apk" -alpine_keys_sha256 = "1ae4cebb43adee47a68aa891660e69a1ac6467690daca6f211aabff36a17cad1" +alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.12/main/aarch64/alpine-keys-2.2-r0.apk" +alpine_keys_sha256 = "94f287d541a03017d37895e46dc43bb62ce2e66ee99bb96b8c3de5c6638d5953" diff --git a/profiles/arch/x86_64-1 b/profiles/arch/x86_64-1 index 40b60dc..ce30a7b 100644 --- a/profiles/arch/x86_64-1 +++ b/profiles/arch/x86_64-1 @@ -3,7 +3,7 @@ arch = "x86_64" build_arch = "x86_64" -apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.3/apk-tools-2.10.3-x86_64-linux.tar.gz" -apk_tools_sha256 = "4d0b2cda606720624589e6171c374ec6d138867e03576d9f518dddde85c33839" -alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/alpine-keys-2.1-r1.apk" -alpine_keys_sha256 = "9c7bc5d2e24c36982da7aa49b3cfcb8d13b20f7a03720f25625fa821225f5fbc" +apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.4/apk-tools-2.10.4-x86_64-linux.tar.gz" +apk_tools_sha256 = "efe948160317fe78058e207554d0d9195a3dfcc35f77df278d30448d7b3eb892" +alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/alpine-keys-2.2-r0.apk" +alpine_keys_sha256 = "d75cfd3eb6c863779f4eccb55ab5b6c5a8e47e4538c717fae580d3c47c70574a" diff --git a/profiles/test.conf b/profiles/test.conf index 74019b1..dc86fd0 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -14,17 +14,22 @@ test { ami_name_prefix = "test-" ami_desc_prefix = "Alpine Test " ami_user = "test" + setup_script = scripts/test-setup_script.sh + setup_copy { + base = profiles/base + aarch64 = profiles/arch/aarch64 + } } # Build definitions BUILDS { # merge version, arch, profile, and build vars - v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${test} { revision = "r0" } - v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${test} { revision = "r0" } - v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} { revision = "r0" } - v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${test} { revision = "r0" } + v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${test} + v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${test} { revision = "r1" } + v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} { revision = "r2" } + v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${test} { revision = "r3" } edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${test} { revision = "r0" } + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${test} edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} } diff --git a/profiles/version/edge b/profiles/version/edge index 07c583d..1bde7b5 100644 --- a/profiles/version/edge +++ b/profiles/version/edge @@ -7,8 +7,8 @@ include required("../base/current") # add edge-specific tweaks... version = "edge" release = "edge" -end_of_life = "@TOMORROW@" -revision = "@NOW@" +end_of_life = null # defaults to tomorrow +revision = null # defaults to datetime repos { "http://dl-cdn.alpinelinux.org/alpine/edge/main" = true diff --git a/scripts/builder.py b/scripts/builder.py index 21df3fe..3f1d8f7 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -459,12 +459,24 @@ class ConfigBuilder: return datetime.fromisoformat(input).isoformat(timespec="seconds") @classmethod - def resolve_tomorrow(cls, input): + def resolve_now(cls): + return cls.now.strftime("%Y%m%d%H%M%S") + + @classmethod + def resolve_revision(cls, input): + if input is None or input == "": + return cls.resolve_now() + return input + + @classmethod + def resolve_tomorrow(cls): return cls.tomorrow.isoformat(timespec="seconds") @classmethod - def resolve_now(cls, input): - return cls.now.strftime("%Y%m%d%H%M%S") + def resolve_end_of_life(cls, input): + if input is None or input == "": + return cls.resolve_tomorrow() + return input @classmethod def fold_comma(cls, input): @@ -503,9 +515,9 @@ class ConfigBuilder: "repos" : self.fold_repos, "pkgs" : self.fold_packages, "svcs" : self.fold_services, - "revision" : self.resolve_now, + "revision" : self.resolve_revision, "end_of_life" : lambda x: \ - self.force_iso_date(self.resolve_tomorrow(x)), + self.force_iso_date(self.resolve_end_of_life(x)), } def build_all(self): diff --git a/scripts/test-setup_script.sh b/scripts/test-setup_script.sh new file mode 100755 index 0000000..18e3fdb --- /dev/null +++ b/scripts/test-setup_script.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env sh + +set -ex + +# copy a directory into place +cp -a ./base "$TARGET/home/$EC2_USER/test" + +# process a file and put it into place +tac ./aarch64 | rev > "$TARGET/home/$EC2_USER/test/46hcraa" + +# set ownership of installed things +chroot "$TARGET" chown -R "$EC2_USER:$EC2_USER" "/home/$EC2_USER/test" From bbd08c72fe5c07b749fad2b0950952cab98361c5 Mon Sep 17 00:00:00 2001 From: tomalok Date: Mon, 17 Aug 2020 19:06:08 -0700 Subject: [PATCH 079/125] Fix nvme-ebs-links Installation (#81) ensure that ownership and permissions are set properly --- scripts/setup-ami | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/setup-ami b/scripts/setup-ami index 8ae7999..9688b3b 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -154,7 +154,8 @@ install_core_packages() { } setup_mdev() { - cp /tmp/setup-ami.d/nvme-ebs-links "$TARGET/lib/mdev" + install -o root -g root -Dm755 -t "$TARGET/lib/mdev" \ + /tmp/setup-ami.d/nvme-ebs-links # insert nvme ebs mdev configs just above "# fallback" comment sed -n -i \ From 62262b6630fc936324e3c4d2678f3e3f498e903f Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 1 Jun 2020 23:12:05 -0700 Subject: [PATCH 080/125] Fix rate-limiting error --- scripts/builder.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/scripts/builder.py b/scripts/builder.py index 3f1d8f7..b5c6f1c 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -89,11 +89,13 @@ class IdentityBrokerClient: if ex.headers.get("Location") == "/logout": raise Exception("Identity broker token is expired") - if res.status == 429: - self._logger.warning( - "Rate-limited by identity broker, sleeping 30 seconds") - time.sleep(30) - continue + if ex.status == 429: + self._logger.warning( + "Rate-limited by identity broker, sleeping 30 seconds") + time.sleep(30) + continue + + raise ex if res.status not in {200, 429}: raise Exception(res.reason) From 4df71cdc07ed66893e1863c5ff8dd592c27e1d2d Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 1 Jun 2020 23:15:14 -0700 Subject: [PATCH 081/125] Use logging instead of print --- scripts/builder.py | 101 +++++++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 31 deletions(-) diff --git a/scripts/builder.py b/scripts/builder.py index b5c6f1c..270a9f8 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -53,6 +53,37 @@ import boto3 import pyhocon +class ColoredFormatter(logging.Formatter): + """Log formatter that colors output based on level + """ + + _colors = { + "red": "31", + "green": "32", + "yellow": "33", + "blue": "34", + "magenta": "35", + "cyan": "36", + "white": "37", + } + + def _color_wrap(self, text, color, bold=False): + code = self._colors[color] + if bold: + code = "1;{}".format(code) + return "\033[{}m{}\033[0m".format(code, text) + + def format(self, record): + msg = super().format(record) + # Levels: CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET + if record.levelno in {logging.ERROR, logging.CRITICAL}: + return self._color_wrap(msg, "red") + elif record.levelno == logging.WARNING: + return self._color_wrap(msg, "yellow") + else: + return self._color_wrap(msg, "green") + + class IdentityBrokerClient: """Client for identity broker @@ -69,7 +100,7 @@ class IdentityBrokerClient: self.endpoint = endpoint or self._DEFAULT_ENDPOINT self.account = account or self._DEFAULT_ACCOUNT self.key = key - self._logger = logging.getLogger(__class__.__name__) + self._logger = logging.getLogger() override_endpoint = os.environ.get("IDENTITY_BROKER_ENDPOINT") if override_endpoint: @@ -243,7 +274,7 @@ class GenReleaseReadme: def add_args(parser): parser.add_argument("profile", help="name of profile to update") - def run(self, args, root): + def run(self, args, root, log): ReleaseReadmeUpdater(root, args.profile).update_markdown() @@ -263,18 +294,18 @@ class MakeAMIs: parser.add_argument("builds", nargs="*", help="name of builds within a profile to build") - def run(self, args, root): + def run(self, args, root, log): os.chdir(os.path.join(root, "build")) builds = args.builds or os.listdir( os.path.join("profile", args.profile)) for build in builds: - print(f"\n*** Building {args.profile}/{build} ***\n\n") + log.info("\n*** Building %s/%s ***\n\n", args.profile, build) build_dir = os.path.join("profile", args.profile, build) if not os.path.exists(build_dir): - print(f"Build dir '{build_dir}' does not exist") + log.info("Build dir '%s' does not exist", build_dir) break env = None @@ -300,7 +331,7 @@ class MakeAMIs: while res.poll() is None: text = res.stdout.readline() out.write(text) - print(text, end="") + print(text, end="") # input is already colorized if res.returncode == 0: UpdateReleases().update_readme(args.profile, build, root) @@ -310,7 +341,7 @@ class MakeAMIs: else: sys.exit(res.returncode) - print("\n=== DONE ===\n") + log.info("\n=== DONE ===\n") class PruneAMIs: @@ -344,7 +375,7 @@ class PruneAMIs: ec2.delete_snapshot(SnapshotId=blockdev["Ebs"]["SnapshotId"]) - def run(self, args, root): + def run(self, args, root, log): now = datetime.utcnow() release_yaml = os.path.join(root, "releases", f"{args.profile}.yaml") @@ -359,12 +390,13 @@ class PruneAMIs: for build_name, releases in before.items(): # this is not the build that was specified if args.build is not None and args.build != build_name: - print(f"< skipping {args.profile}/{build_name}") + log.info("< skipping %s/%s", args.profile, build_name) # ensure its release data remains intact after[build_name] = before[build_name] continue else: - print(f"> PRUNING {args.profile}/{build_name} for {args.level}") + log.info("> PRUNING %s/%s for %s", + args.profile, build_name, args.level) criteria = {} @@ -428,19 +460,19 @@ class PruneAMIs: for session in IdentityBrokerClient().iter_regions(): region = session.region_name - print(f"* scanning: {region} ...") + log.info("* scanning: %s ...", region) ec2 = session.client("ec2") for image in ec2.describe_images(Owners=["self"])["Images"]: image_name, image_id = image["Name"], image["ImageId"] if region in prune and image["ImageId"] in prune[region]: - print(f"REMOVE: {image_name} = {image_id}") + log.info("REMOVE: %s = %s", image_name, image_id) self.delete_image(image) elif region in known and image["ImageId"] in known[region]: - print(f"KEEP: {image_name} = {image_id}") + log.info("KEEP: %s = %s", image_name, image_id) else: - print(f"UNKNOWN: {image_name} = {image_id}") + log.info("UNKNOWN: %s = %s", image_name, image_id) # update releases/.yaml with open(release_yaml, "w") as data: @@ -595,7 +627,7 @@ class ResolveProfiles: else: builder.build_all() - def run(self, args, root): + def run(self, args, root, log): self.resolve_profiles(args.profile, root) @@ -615,7 +647,7 @@ class UpdateReleases: parsed = re.split(":|,", ids) return dict(zip(parsed[0::2], parsed[1::2])) - def run(self, args, root): + def run(self, args, root, log): self.update_readme(args.profile, args.build, root) def update_readme(self, profile, build, root): @@ -671,12 +703,10 @@ class ConvertPackerJSON: def add_args(parser): pass - def run(self, args, root): + def run(self, args, root, log): source = os.path.join(root, "packer.conf") dest = os.path.join(root, "build", "packer.json") - logging.getLogger().setLevel(logging.INFO) - pyhocon.converter.HOCONConverter.convert_from_file( source, dest, "json", 2, False) @@ -697,18 +727,18 @@ class FullBuild: parser.add_argument("builds", nargs="*", help="name of builds within a profile to build") - def run(self, args, root): - print("Converting packer.conf to JSON...", file=sys.stderr) - ConvertPackerJSON().run(args, root) + def run(self, args, root, log): + log.info("Converting packer.conf to JSON...") + ConvertPackerJSON().run(args, root, log) - print("Resolving profiles...", file=sys.stderr) + log.info("Resolving profiles...") ResolveProfiles().resolve_profiles([args.profile], root) - print("Running packer...", file=sys.stderr) - MakeAMIs().run(args, root) + log.info("Running packer...") + MakeAMIs().run(args, root, log) - print("Updating release readme...", file=sys.stderr) - GenReleaseReadme().run(args, root) + log.info("Updating release readme...") + GenReleaseReadme().run(args, root, log) def find_repo_root(): @@ -747,17 +777,25 @@ def main(): rely on object state as it is not invoked with an instance of the object. - run(self, args, root) (instance method) + run(self, args, root, log) (instance method) passed the arguments object as parsed by argparse as well as a string indicating the root of the repository (the folder containing - the .git folder). Should throw exceptions on error and return when - completed. Should *not* execute sys.exit + the .git folder) and an instance of a stanard libary logger for + output. Should throw exceptions on error and return when completed. + Should *not* execute sys.exit """ dispatch = {} parser = argparse.ArgumentParser() subs = parser.add_subparsers(dest="command_name", required=True) + # Configure logger + logger = logging.getLogger() + handler = logging.StreamHandler() + handler.setFormatter(ColoredFormatter(fmt="%(message)s")) + logger.addHandler(handler) + logger.setLevel(logging.INFO) + for command in sys.modules[__name__].__dict__.values(): if not hasattr(command, "command_name"): continue @@ -773,7 +811,8 @@ def main(): command.add_args(subparser) args = parser.parse_args() - dispatch[args.command_name].run(args, find_repo_root()) + command = dispatch[args.command_name] + command.run(args, find_repo_root(), logger) if __name__ == "__main__": From 27491bcb200e78ce114e2452524ffd834bc0f022 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 1 Jun 2020 23:15:38 -0700 Subject: [PATCH 082/125] Add argument checking for commands --- scripts/builder.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/builder.py b/scripts/builder.py index 270a9f8..2107474 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -777,6 +777,12 @@ def main(): rely on object state as it is not invoked with an instance of the object. + check_args(self, args) (class method, optional) + passed the set of arguments that were parsed before the command was + invoked. This function should return a list of errors or None. + Non-empty lists will cause the command to not be executed and help + being printed. + run(self, args, root, log) (instance method) passed the arguments object as parsed by argparse as well as a string indicating the root of the repository (the folder containing @@ -811,8 +817,15 @@ def main(): command.add_args(subparser) args = parser.parse_args() + command = dispatch[args.command_name] - command.run(args, find_repo_root(), logger) + errors = getattr(command, "check_args", lambda x: [])(args) + if errors: + logger.error("\n".join(errors)) + # Ugly hack, gets the help for the subcommand, no public API for this + parser._actions[1]._name_parser_map[args.command_name].print_help() + else: + command.run(args, find_repo_root(), logger) if __name__ == "__main__": From a9ba2532df48b2887649afbe4e83a2b54a9e3143 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sat, 29 Aug 2020 19:09:12 -0700 Subject: [PATCH 083/125] udhcpc hooks for ENI IPv6 & secondary IPv4 Automatically sets up any IPv6 and secondary IPv4 on instance ENIs when DHCP leases are bound or renewed on that interface. Resolves #70 --- scripts/alpine-ec2-eni-hook | 112 ++++++++++++++++++++++++++++++++++++ scripts/builder.py | 3 +- scripts/setup-ami | 10 ++++ 3 files changed, 124 insertions(+), 1 deletion(-) create mode 100755 scripts/alpine-ec2-eni-hook diff --git a/scripts/alpine-ec2-eni-hook b/scripts/alpine-ec2-eni-hook new file mode 100755 index 0000000..a7e2992 --- /dev/null +++ b/scripts/alpine-ec2-eni-hook @@ -0,0 +1,112 @@ +#!/usr/bin/env sh +# vim: set ft=sh noet ts=4: + +# This script should be installed as symlinks in +# /etc/udhcpc//alpine-ec2-eni-hook +# :- +# post-bound - after udhcpc binds an IP to the interface +# post-renew - after udhcpc renews the lease for the IP +# +# udhcpc provides via ENV... +# IFACE - eth0, etc. +# mask - bits in IPv4 subnet mask + +set -e + +HOOK="$(basename "$(dirname "$0")")" + +log() { + LEV="$1" + shift + logger -s -p "daemon.$LEV" -t "udhcpc/${HOOK}[$$]" "$@" +} + +IMDS="X-aws-ec2-metadata-token" + +meta_token() { + echo -ne "PUT /latest/api/token HTTP/1.0\r\n$IMDS-ttl-seconds: 5\r\n\r\n" | + nc 169.254.169.254 80 | tail -n 1 +} + +meta() { + wget -qO - --header "$IMDS: $(meta_token)" \ + "http://169.254.169.254/latest/meta-data/$1" 2>/dev/null \ + || true # when no ipv6s attached, wget will 404 error +} + +iface_mac() { + cat "/sys/class/net/$IFACE/address" +} + +iface_ip6s() { + # only inet6 lines, except fe80:: + ip -6 addr show "$IFACE" | + sed -E -e '/inet6/!d' \ + -e '/inet6 fe80::/d' \ + -e 's/.*inet6 ([0-9a-f:]+).*/\1/' +} + +iface_sec_ip4s() { + # only inet secondary lines + ip -4 addr show "$IFACE" | + sed -E -e '/inet .* secondary/!d' \ + -e 's/.*inet ([0-9.]+).*/\1/' +} + +ec2_ip6s() { + meta "$MAC_PATH/ipv6s" +} + +ec2_sec_ip4s() { + # first one listed is primary + meta "$MAC_PATH/local-ipv4s" | tail +2 +} + +in_list() { + echo "$2" | grep -q "^$1$" +} + +ip_addr() { + [ "$1" -eq 4 ] && MASK="$mask" || MASK=128 + MSG="$IFACE $2 $3" + if ip -"$1" addr "$2" "$3/$MASK" dev "$IFACE"; then + log notice "$MSG - success" + else + log err "$MSG - FAILED" + fi +} + +case "$HOOK" in + #pre-deconfig) ACT=del ;; # issues with 'service networking restart' + post-bound) ACT=add ;; + post-renew) ACT=sync ;; + *) log err "Unhandled udhcpc hook: '$HOOK'"; exit 1 ;; +esac + +MAC_PATH="network/interfaces/macs/$(iface_mac)" +EC2_IP4S="$(ec2_sec_ip4s)" +EC2_IP6S="$(ec2_ip6s)" +IFACE_IP4S="$(iface_sec_ip4s)" +IFACE_IP6S="$(iface_ip6s)" + +# add or sync IPs +if [ "$ACT" != "del" ]; then + for ip4 in $EC2_IP4S; do + in_list "$ip4" "$IFACE_IP4S" || ip_addr 4 add "$ip4" + done + for ip6 in $EC2_IP6S; do + in_list "$ip6" "$IFACE_IP6S" || ip_addr 6 add "$ip6" + done +fi + +# del or sync IPs +if [ "$ACT" != "add" ]; then + for ip4 in $IFACE_IP4S; do + [ "$ACT" = "sync" ] && in_list "$ip4" "$EC2_IP4S" && continue + ip_addr 4 del "$ip4" + done + for ip6 in $IFACE_IP6S; do + [ "$ACT" = "sync" ] && in_list "$ip6" "$EC2_IP6S" && continue + ip_addr 6 del "$ip6" + done +fi diff --git a/scripts/builder.py b/scripts/builder.py index 2107474..e1f0f92 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -576,8 +576,9 @@ class ConfigBuilder: shutil.rmtree(build_dir, ignore_errors=True) os.makedirs(setup_dir) - # symlink nvme script + # symlink nvme and ENI scripts self.rel_symlink("scripts/nvme-ebs-links", setup_dir, "nvme-ebs-links") + self.rel_symlink("scripts/alpine-ec2-eni-hook", setup_dir, "alpine-ec2-eni-hook") # symlink additional setup_script if "setup_script" in cfg.keys() and cfg["setup_script"] is not None: diff --git a/scripts/setup-ami b/scripts/setup-ami index 9688b3b..84b0d46 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -242,6 +242,7 @@ EOF } setup_networking() { + # configure standard interfaces cat > "$TARGET/etc/network/interfaces" < Date: Sat, 12 Sep 2020 10:57:35 -0700 Subject: [PATCH 084/125] ENI Hotplugging, etc. ENI Hotplug / udhcpc script * works with all Alpine versions back to 3.9 * udhcpc handles ENI's primary IPv4 * post-bound/post-renews eth-eni-hook handles secondary IPv4 & IPv6 addresses, route tables, and rules setup-ami tweaks * move scripts to be installed into setup-ami.d/ * move config snippets into setup-ami.d/etc/ (previously embedded in setup-ami) --- profiles/alpine.conf | 10 +- profiles/base/1 | 1 + profiles/base/2 | 1 + scripts/alpine-ec2-eni-hook | 112 ----------- scripts/builder.py | 6 +- scripts/setup-ami | 60 +++--- scripts/setup-ami.d/etc/fstab | 2 + scripts/setup-ami.d/etc/fstab.grub-efi | 1 + scripts/setup-ami.d/etc/grub.default | 5 + scripts/setup-ami.d/etc/interfaces.d/DEFAULT | 3 + scripts/setup-ami.d/etc/interfaces.d/eth0 | 3 + scripts/setup-ami.d/etc/interfaces.d/lo | 6 + scripts/setup-ami.d/etc/mdev-ec2.conf | 6 + scripts/setup-ami.d/eth-eni-hook | 187 +++++++++++++++++++ scripts/setup-ami.d/eth-eni-hotplug | 105 +++++++++++ scripts/{ => setup-ami.d}/nvme-ebs-links | 0 16 files changed, 354 insertions(+), 154 deletions(-) delete mode 100755 scripts/alpine-ec2-eni-hook create mode 100644 scripts/setup-ami.d/etc/fstab create mode 100644 scripts/setup-ami.d/etc/fstab.grub-efi create mode 100644 scripts/setup-ami.d/etc/grub.default create mode 100644 scripts/setup-ami.d/etc/interfaces.d/DEFAULT create mode 100644 scripts/setup-ami.d/etc/interfaces.d/eth0 create mode 100644 scripts/setup-ami.d/etc/interfaces.d/lo create mode 100644 scripts/setup-ami.d/etc/mdev-ec2.conf create mode 100755 scripts/setup-ami.d/eth-eni-hook create mode 100755 scripts/setup-ami.d/eth-eni-hotplug rename scripts/{ => setup-ami.d}/nvme-ebs-links (100%) diff --git a/profiles/alpine.conf b/profiles/alpine.conf index 0c55058..fa5b02f 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -17,12 +17,12 @@ alpine { # Build definitions BUILDS { # merge version, arch, profile; add { revision = "r1" } if needed - v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${alpine} - v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} - v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} - v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} + v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${alpine} + v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} { revision = "r1" } + v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} { revision = "r1" } + v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} { revision = "r1" } - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${alpine} edge-aarch64 = ${version-edge} ${arch-aarch64} ${alpine} + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${alpine} } diff --git a/profiles/base/1 b/profiles/base/1 index 53cb819..b219dda 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -50,6 +50,7 @@ pkgs { linux-virt = true alpine-mirrors = true chrony = true + iproute2 = true nvme-cli = true openssh = true sudo = true diff --git a/profiles/base/2 b/profiles/base/2 index cc90fee..3f1a8b7 100644 --- a/profiles/base/2 +++ b/profiles/base/2 @@ -49,6 +49,7 @@ repos {} pkgs { linux-virt = true chrony = true + iproute2-minimal = true nvme-cli = true openssh = true sudo = true diff --git a/scripts/alpine-ec2-eni-hook b/scripts/alpine-ec2-eni-hook deleted file mode 100755 index a7e2992..0000000 --- a/scripts/alpine-ec2-eni-hook +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env sh -# vim: set ft=sh noet ts=4: - -# This script should be installed as symlinks in -# /etc/udhcpc//alpine-ec2-eni-hook -# :- -# post-bound - after udhcpc binds an IP to the interface -# post-renew - after udhcpc renews the lease for the IP -# -# udhcpc provides via ENV... -# IFACE - eth0, etc. -# mask - bits in IPv4 subnet mask - -set -e - -HOOK="$(basename "$(dirname "$0")")" - -log() { - LEV="$1" - shift - logger -s -p "daemon.$LEV" -t "udhcpc/${HOOK}[$$]" "$@" -} - -IMDS="X-aws-ec2-metadata-token" - -meta_token() { - echo -ne "PUT /latest/api/token HTTP/1.0\r\n$IMDS-ttl-seconds: 5\r\n\r\n" | - nc 169.254.169.254 80 | tail -n 1 -} - -meta() { - wget -qO - --header "$IMDS: $(meta_token)" \ - "http://169.254.169.254/latest/meta-data/$1" 2>/dev/null \ - || true # when no ipv6s attached, wget will 404 error -} - -iface_mac() { - cat "/sys/class/net/$IFACE/address" -} - -iface_ip6s() { - # only inet6 lines, except fe80:: - ip -6 addr show "$IFACE" | - sed -E -e '/inet6/!d' \ - -e '/inet6 fe80::/d' \ - -e 's/.*inet6 ([0-9a-f:]+).*/\1/' -} - -iface_sec_ip4s() { - # only inet secondary lines - ip -4 addr show "$IFACE" | - sed -E -e '/inet .* secondary/!d' \ - -e 's/.*inet ([0-9.]+).*/\1/' -} - -ec2_ip6s() { - meta "$MAC_PATH/ipv6s" -} - -ec2_sec_ip4s() { - # first one listed is primary - meta "$MAC_PATH/local-ipv4s" | tail +2 -} - -in_list() { - echo "$2" | grep -q "^$1$" -} - -ip_addr() { - [ "$1" -eq 4 ] && MASK="$mask" || MASK=128 - MSG="$IFACE $2 $3" - if ip -"$1" addr "$2" "$3/$MASK" dev "$IFACE"; then - log notice "$MSG - success" - else - log err "$MSG - FAILED" - fi -} - -case "$HOOK" in - #pre-deconfig) ACT=del ;; # issues with 'service networking restart' - post-bound) ACT=add ;; - post-renew) ACT=sync ;; - *) log err "Unhandled udhcpc hook: '$HOOK'"; exit 1 ;; -esac - -MAC_PATH="network/interfaces/macs/$(iface_mac)" -EC2_IP4S="$(ec2_sec_ip4s)" -EC2_IP6S="$(ec2_ip6s)" -IFACE_IP4S="$(iface_sec_ip4s)" -IFACE_IP6S="$(iface_ip6s)" - -# add or sync IPs -if [ "$ACT" != "del" ]; then - for ip4 in $EC2_IP4S; do - in_list "$ip4" "$IFACE_IP4S" || ip_addr 4 add "$ip4" - done - for ip6 in $EC2_IP6S; do - in_list "$ip6" "$IFACE_IP6S" || ip_addr 6 add "$ip6" - done -fi - -# del or sync IPs -if [ "$ACT" != "add" ]; then - for ip4 in $IFACE_IP4S; do - [ "$ACT" = "sync" ] && in_list "$ip4" "$EC2_IP4S" && continue - ip_addr 4 del "$ip4" - done - for ip6 in $IFACE_IP6S; do - [ "$ACT" = "sync" ] && in_list "$ip6" "$EC2_IP6S" && continue - ip_addr 6 del "$ip6" - done -fi diff --git a/scripts/builder.py b/scripts/builder.py index e1f0f92..40f029e 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -576,9 +576,9 @@ class ConfigBuilder: shutil.rmtree(build_dir, ignore_errors=True) os.makedirs(setup_dir) - # symlink nvme and ENI scripts - self.rel_symlink("scripts/nvme-ebs-links", setup_dir, "nvme-ebs-links") - self.rel_symlink("scripts/alpine-ec2-eni-hook", setup_dir, "alpine-ec2-eni-hook") + # symlink everything in scripts/setup-ami.d + for item in os.listdir("scripts/setup-ami.d"): + self.rel_symlink(os.path.join("scripts/setup-ami.d", item), setup_dir, item) # symlink additional setup_script if "setup_script" in cfg.keys() and cfg["setup_script"] is not None: diff --git a/scripts/setup-ami b/scripts/setup-ami index 84b0d46..831f772 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -1,10 +1,11 @@ #!/bin/sh # vim: set ts=4 et: -set -eu +set -eux DEVICE=/dev/xvdf TARGET=/mnt/target +SETUP=/tmp/setup-ami.d # what bootloader should we use? [ -d "/sys/firmware/efi" ] && BOOTLOADER=grub-efi || BOOTLOADER=syslinux @@ -85,7 +86,7 @@ setup_partitions() { make_filesystem() { root_dev="$DEVICE" - if [ "$BOOTLOADER" = 'grub-efi' ]; then + if [ "$BOOTLOADER" = grub-efi ]; then # create a small EFI partition (remainder for root), and mount it setup_partitions '5M,U,*' ',L' root_dev="${DEVICE}2" @@ -95,7 +96,7 @@ make_filesystem() { mkfs.ext4 -O ^64bit -L / "$root_dev" mount "$root_dev" "$TARGET" - if [ "$BOOTLOADER" = 'grub-efi' ]; then + if [ "$BOOTLOADER" = grub-efi ]; then mkdir -p "$TARGET/boot/efi" mount -t vfat "${DEVICE}1" "$TARGET/boot/efi" fi @@ -117,7 +118,7 @@ fetch_keys() { install_base() { $apk add --root "$TARGET" --no-cache --initdb alpine-base # verify release matches - if [ "$VERSION" != "edge" ]; then + if [ "$VERSION" != edge ]; then ALPINE_RELEASE=$(cat "$TARGET/etc/alpine-release") [ "$RELEASE" = "$ALPINE_RELEASE" ] || \ die "Newer Alpine release detected: $ALPINE_RELEASE" @@ -155,11 +156,12 @@ install_core_packages() { setup_mdev() { install -o root -g root -Dm755 -t "$TARGET/lib/mdev" \ - /tmp/setup-ami.d/nvme-ebs-links + "$SETUP/nvme-ebs-links" \ + "$SETUP/eth-eni-hotplug" # insert nvme ebs mdev configs just above "# fallback" comment sed -n -i \ - -e '/# fallback/i \\n# ebs nvme links\nnvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links' \ + -e "/# fallback/r $SETUP/etc/mdev-ec2.conf" \ -e 1x -e '2,${x;p}' -e '${x;p}' \ "$TARGET/etc/mdev.conf" } @@ -217,46 +219,38 @@ install_grub_efi() { # fallback mode install -D "$TARGET/boot/efi/EFI/alpine/grub$fwa.efi" "$TARGET/boot/efi/EFI/boot/boot$fwa.efi" - cat > "$TARGET/etc/default/grub" <<- EOF - GRUB_TIMEOUT=0 - GRUB_DISABLE_SUBMENU=y - GRUB_DISABLE_RECOVERY=true - GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" - GRUB_CMDLINE_LINUX_DEFAULT="modules=$KERNEL_MODS $KERNEL_OPTS" - EOF + # install default grub config + install -o root -g root -Dm644 -t "$TARGET/etc/default" \ + "$SETUP/etc/grub.default" grub # generate/install new config chroot "$TARGET" grub-mkconfig -o /boot/grub/grub.cfg } setup_fstab() { - cat > "$TARGET/etc/fstab" < -LABEL=/ / ext4 defaults,noatime 1 1 -EOF + install -o root -g root -Dm644 -t "$TARGET/etc" \ + "$SETUP/etc/fstab" # if we're using grub-efi bootloader, add extra line for EFI partition - if [ "$BOOTLOADER" = 'grub-efi' ]; then - echo "LABEL=EFI /boot/efi vfat defaults,noatime,uid=0,gid=0,umask=077 0 0" >> "$TARGET/etc/fstab" + if [ "$BOOTLOADER" = grub-efi ]; then + cat "$SETUP/etc/fstab.grub-efi" >> "$TARGET/etc/fstab" fi } setup_networking() { # configure standard interfaces - cat > "$TARGET/etc/network/interfaces" < "$IFACE_CFG" # install ucdhcp hooks for EC2 ENI IPv6 and secondary IPv4 install -o root -g root -Dm755 -t "$TARGET/usr/share/udhcpc" \ - /tmp/setup-ami.d/alpine-ec2-eni-hook + "$SETUP/eth-eni-hook" for i in post-bound post-renew; do mkdir -p "$TARGET/etc/udhcpc/$i" - ln -sf /usr/share/udhcpc/alpine-ec2-eni-hook \ + ln -sf /usr/share/udhcpc/eth-eni-hook \ "$TARGET/etc/udhcpc/$i" done } @@ -286,9 +280,7 @@ create_alpine_user() { chroot "$TARGET" /usr/bin/passwd -u "$user" # Let tiny-ec2-bootstrap know what the EC2 user of the AMI is - cat > "$TARGET/etc/conf.d/tiny-ec2-bootstrap" < "$TARGET/etc/conf.d/tiny-ec2-bootstrap" } configure_ntp() { @@ -303,10 +295,10 @@ configure_ntp() { } setup_script() { - if [ -f /tmp/setup-ami.d/setup_script ]; then + if [ -f "$SETUP/setup_script" ]; then einfo "Executing additional setup script" ( - cd /tmp/setup-ami.d + cd "$SETUP" chmod u+x ./setup_script TARGET="$TARGET" ./setup_script ) @@ -324,7 +316,7 @@ cleanup() { "$TARGET/root/.ash_history" \ "$TARGET/etc/"*- - [ "$BOOTLOADER" = 'grub-efi' ] && umount "$TARGET/boot/efi" + [ "$BOOTLOADER" = grub-efi ] && umount "$TARGET/boot/efi" umount \ "$TARGET/dev" \ diff --git a/scripts/setup-ami.d/etc/fstab b/scripts/setup-ami.d/etc/fstab new file mode 100644 index 0000000..3fb8864 --- /dev/null +++ b/scripts/setup-ami.d/etc/fstab @@ -0,0 +1,2 @@ +# +LABEL=/ / ext4 defaults,noatime 1 1 diff --git a/scripts/setup-ami.d/etc/fstab.grub-efi b/scripts/setup-ami.d/etc/fstab.grub-efi new file mode 100644 index 0000000..03d6e96 --- /dev/null +++ b/scripts/setup-ami.d/etc/fstab.grub-efi @@ -0,0 +1 @@ +LABEL=EFI /boot/efi vfat defaults,noatime,uid=0,gid=0,umask=077 0 0 diff --git a/scripts/setup-ami.d/etc/grub.default b/scripts/setup-ami.d/etc/grub.default new file mode 100644 index 0000000..7af988a --- /dev/null +++ b/scripts/setup-ami.d/etc/grub.default @@ -0,0 +1,5 @@ +GRUB_TIMEOUT=0 +GRUB_DISABLE_SUBMENU=y +GRUB_DISABLE_RECOVERY=true +GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" +GRUB_CMDLINE_LINUX_DEFAULT="modules=$KERNEL_MODS $KERNEL_OPTS" diff --git a/scripts/setup-ami.d/etc/interfaces.d/DEFAULT b/scripts/setup-ami.d/etc/interfaces.d/DEFAULT new file mode 100644 index 0000000..b6fdf49 --- /dev/null +++ b/scripts/setup-ami.d/etc/interfaces.d/DEFAULT @@ -0,0 +1,3 @@ +auto %% +iface %% inet dhcp + diff --git a/scripts/setup-ami.d/etc/interfaces.d/eth0 b/scripts/setup-ami.d/etc/interfaces.d/eth0 new file mode 100644 index 0000000..ed9d3b7 --- /dev/null +++ b/scripts/setup-ami.d/etc/interfaces.d/eth0 @@ -0,0 +1,3 @@ +auto eth0 +iface eth0 inet dhcp + diff --git a/scripts/setup-ami.d/etc/interfaces.d/lo b/scripts/setup-ami.d/etc/interfaces.d/lo new file mode 100644 index 0000000..9ebf887 --- /dev/null +++ b/scripts/setup-ami.d/etc/interfaces.d/lo @@ -0,0 +1,6 @@ +# NOTE: /lib/mdev/eth-eni-hotplug rewrites this file. Edit files in +# /etc/network/interfaces.d/ to persist any customizations. + +auto lo +iface lo inet loopback + diff --git a/scripts/setup-ami.d/etc/mdev-ec2.conf b/scripts/setup-ami.d/etc/mdev-ec2.conf new file mode 100644 index 0000000..8cb1c56 --- /dev/null +++ b/scripts/setup-ami.d/etc/mdev-ec2.conf @@ -0,0 +1,6 @@ +# additional ENIs +eth[1-9] root:root 0666 */lib/mdev/eth-eni-hotplug + +# EBS NVMe links +nvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links + diff --git a/scripts/setup-ami.d/eth-eni-hook b/scripts/setup-ami.d/eth-eni-hook new file mode 100755 index 0000000..317f844 --- /dev/null +++ b/scripts/setup-ami.d/eth-eni-hook @@ -0,0 +1,187 @@ +#!/bin/sh +# vim: set ts=4 et: + +# This script should be installed as symlinks in +# /etc/udhcpc//eth-eni-hook +# :- +# post-bound - after udhcpc binds an IP to the interface +# post-renew - after udhcpc renews the lease for the IP +# +# udhcpc provides via ENV... +# IFACE - eth0, etc. +# mask - bits in IPv4 subnet mask + +set -e + +HOOK="$(basename "$(dirname "$0")")" + +DEBUG= + +log() { + [ -z "$DEBUG" ] && [ "$1" = "debug" ] && return + FACILITY="daemon.$1" + shift + logger -s -p "$FACILITY" -t "udhcpc/${HOOK}[$$]" -- "$@" +} + +if [ -z "$IFACE" ] || [ -z "$mask" ]; then + log err "Missing 'IFACE' or 'mask' ENV from udhcpc" + exit 1 +fi + +# route table number +RTABLE="${IFACE#eth}" +let RTABLE+=1000 + +IMDS=X-aws-ec2-metadata-token +IMDS_IP=169.254.169.254 +IMDS_MAC="http://$IMDS_IP/latest/meta-data/network/interfaces/macs/$( + cat "/sys/class/net/$IFACE/address")" + +get_imds_token() { + IMDS_TOKEN="$(echo -ne \ + "PUT /latest/api/token HTTP/1.0\r\n$IMDS-ttl-seconds: 60\r\n\r\n" | + nc "$IMDS_IP" 80 | tail -n 1)" +} + +mac_meta() { + wget -qO - --header "$IMDS: $IMDS_TOKEN" "$IMDS_MAC/$1" 2>/dev/null \ + || true # when no ipv6s attached (yet), IMDS returns 404 error +} + +ip() { + FAIL_OK= + if [ "$1" = '+F' ]; then + FAIL_OK=1 + shift + fi + v=-4 + if [ "$1" = '-4' ] || [ "$1" = '-6' ]; then + v="$1" + shift + fi + OP="$2" + [ "$OP" = show ] && LEV=debug || LEV=info + if /sbin/ip "$v" "$@" || [ -n "$FAIL_OK" ]; then + log "$LEV" "OK: ip $v $*" + else + log err "FAIL: ip $v $*" + fi +} + +iface_ip4s() { + ip -4 addr show "$IFACE" secondary | + sed -E -e '/inet /!d' -e 's/.*inet ([0-9.]+).*/\1/' +} + +iface_ip6s() { + ip -6 addr show "$IFACE" scope global | + sed -E -e '/inet6/!d' -e 's/.*inet6 ([0-9a-f:]+).*/\1/' +} + +ec2_ip4s() { + get_imds_token + # NOTE: metadata for ENI arrives later than hotplug events + TRIES=60 + while true; do + IP4="$(mac_meta local-ipv4s)" + [ -n "$IP4" ] && break + let TRIES-- + if [ "$TRIES" -eq 0 ]; then + log err "Unable to get IPv4 addresses for $IFACE after 30s" + exit 1 + fi + sleep 0.5 + done + IP4S="$(echo "$IP4" | tail +2)" # secondary IPs (udhcpc handles primary) + + # non-eth0 interfaces need custom route tables + # + if [ "$IFACE" != eth0 ] && [ -n "$IP4S" ] && + [ -z "$(ip +F -4 route show table "$RTABLE")" ]; then + IP4P="$(echo "$IP4" | head -1)" # primary IP + IP4_CIDR="$(mac_meta subnet-ipv4-cidr-block)" + IP4_GW="$(echo "$IP4_CIDR" | cut -d/ -f1 | + awk -F. '{ print $1"."$2"."$3"."$4+1 }')" + ip -4 route add default via "$IP4_GW" dev "$IFACE" table "$RTABLE" + ip -4 route add "$IP4_CIDR" dev "$IFACE" proto kernel scope link \ + src "$IP4P" table "$RTABLE" + fi + echo "$IP4S" +} + +ec2_ip6s() { + get_imds_token + # NOTE: IPv6 metadata (if any) may arrive later than IPv4 metadata + TRIES=60 + while true; do + IP6S="$(mac_meta ipv6s)" + [ -n "$IP6S" ] && break + let TRIES-- + if [ "$TRIES" -eq 0 ]; then + log warn "Unable to get IPv6 addresses for $IFACE after 30s" + break + fi + sleep 0.5 + done + + # non-eth0 interfaces need custom route tables + # + # NOTE: busybox iproute2 doesn't do 'route show table' properly for IPv6, + # so iproute2-minimal package is required! + # + if [ "$IFACE" != eth0 ] && [ -n "$IP6S" ] && + [ -z "$(ip +F -6 route show table "$RTABLE")" ]; then + TRIES=20 + while true; do + GW="$(ip -6 route show dev "$IFACE" default | awk '{ print $3 }')" + [ -n "$GW" ] && break + let TRIES-- + if [ "$TRIES" -eq 0 ]; then + log warn "Unable to get IPv6 gateway RA after 10s" + break + fi + sleep 0.5 + done + ip -6 route add default via "$GW" dev "$IFACE" table "$RTABLE" + fi + echo "$IP6S" +} + +in_list() { + echo "$2" | grep -q "^$1$" +} + +# ip_addr {4|6} {add|del} +ip_addr() { + [ "$1" -eq 6 ] && MASK=128 || MASK="$mask" # IP6s are always /128 + ip -"$1" addr "$2" "$3/$MASK" dev "$IFACE" + [ "$IFACE" = eth0 ] && return + + # non-eth0 interfaces get rules associating IPs with route tables + ip -"$1" rule "$2" from "$3" lookup "$RTABLE" +} + +# sync_ips {4|6} "" "" +sync_ips() { + # remove extra IPs + for i in $3; do + in_list "$i" "$2" || ip_addr "$1" del "$i" + done + # add missing IPs + for i in $2; do + in_list "$i" "$3" || ip_addr "$1" add "$i" + done +} + +log info "STARTING: $IFACE" + +if [ "$HOOK" != post-bound ] && [ "$HOOK" != post-renew ]; then + log err "Unhandled udhcpc hook '$HOOK'" + exit 1 +fi + +sync_ips 4 "$(ec2_ip4s)" "$(iface_ip4s)" +sync_ips 6 "$(ec2_ip6s)" "$(iface_ip6s)" + +log info "FINISHED: $IFACE" diff --git a/scripts/setup-ami.d/eth-eni-hotplug b/scripts/setup-ami.d/eth-eni-hotplug new file mode 100755 index 0000000..b28172a --- /dev/null +++ b/scripts/setup-ami.d/eth-eni-hotplug @@ -0,0 +1,105 @@ +#!/bin/sh +# vim: set ts=4 et: + +set -e + +PROC="$(basename "$0")[$$]" + +DEBUG= + +log() { + [ -z "$DEBUG" ] && [ "$1" = "debug" ] && return + FACILITY="kern.$1" + shift + logger -s -p "$FACILITY" -t "$PROC" "$@" +} + +if [ -z "$MDEV" ]; then + log err "MDEV env not defined" + exit 1 +fi + +RTABLE="${MDEV#eth}" +let RTABLE+=1000 + +IFACE_CFG=/etc/network/interfaces +IFACE_DIR="${IFACE_CFG}.d" + +ip() { + v=-4 + if [ "$1" = '-4' ] || [ "$1" = '-6' ]; then + v="$1" + shift + fi + OP="$2" + [ "$OP" = show ] && LEV=debug || LEV=info + if /sbin/ip "$v" "$@" || [ -n "$FAIL_OK" ]; then + log "$LEV" "OK: ip $v $*" + else + log err "FAIL: ip $v $*" + fi +} + +assemble_interfaces() { + log info "Rebuilding $IFACE_CFG" + cd "$IFACE_DIR" + cat lo > "$IFACE_CFG.new" + for i in /sys/class/net/eth*; do + IFACE="$(basename "$i")" + [ ! -f "$IFACE" ] && sed -e "s/%%/$IFACE/g" DEFAULT > "$IFACE" + cat "$IFACE" >> "$IFACE_CFG.new" + done + cp -a "$IFACE_CFG" "$IFACE_CFG.bak" + mv "$IFACE_CFG.new" "$IFACE_CFG" +} + +interface_up() { + log info "Bringing up $MDEV" + ifup "$MDEV" +} + +cleanup_interface() { + log info "Cleaning up $MDEV" + + # kill related udhcpc + kill "$(cat "/run/udhcpc.$MDEV.pid")" + + # tidy up /run/ifstate, if it exists + [ -f /run/ifstate ] && sed -i -e "/^$MDEV=/d" /run/ifstate + + # remove related rules + for V in 4 6; do + for P in $(ip -"$V" rule show table "$RTABLE" | cut -d: -f1); do + ip -"$V" rule del pref "$P" + done + done +} + +log info "STARTING: $ACTION $MDEV" + +if exec 200>>"$IFACE_CFG"; then + if flock 200; then + case $ACTION in + add|"") + assemble_interfaces + interface_up + ;; + remove) + assemble_interfaces + cleanup_interface + ;; + *) + log err "Unknown action '$ACTION'" + exit 1 + ;; + esac + else + log err "Unable to flock $IFACE_CFG" + exit 1 + fi +else + log err "Unable to assign fd 200 to flock $IFACE_CFG" + exit 1 +fi + +log info "FINISHED: $ACTION $MDEV" diff --git a/scripts/nvme-ebs-links b/scripts/setup-ami.d/nvme-ebs-links similarity index 100% rename from scripts/nvme-ebs-links rename to scripts/setup-ami.d/nvme-ebs-links From 1cce13e7229aa4e94a6cb2780b19754f5ef2f87a Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sat, 12 Sep 2020 11:03:58 -0700 Subject: [PATCH 085/125] remove leftover set -x from setup-ami testing --- scripts/setup-ami | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup-ami b/scripts/setup-ami index 831f772..c6aaa50 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -1,7 +1,7 @@ #!/bin/sh # vim: set ts=4 et: -set -eux +set -eu DEVICE=/dev/xvdf TARGET=/mnt/target From e65b2d7720a2acce1284254af83e7bc5a4995220 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 14 Sep 2020 19:50:15 -0700 Subject: [PATCH 086/125] * updates to READMEs --- README.md | 6 ++-- profiles/README.md | 75 +++++++++++++++++++++++++++++----------------- releases/README.md | 15 ++++++---- 3 files changed, 61 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 0f15c07..90c514f 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ for more details and information about how AMI profile configs work. These scripts use the `boto3` library to interact with AWS, enabling you to provide your AWS account credentials in a number of different ways. see the offical `boto3` documentation's section on -[configuring credentials](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#configuring-credentials) +[configuring credentials](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html#guide-credentials) for more details. *Please note that these scripts do not implement the first two methods on the list.* @@ -63,7 +63,7 @@ To build all build targets in a target profile, simply... You can also build specfic build targets within a profile: ``` -./scripts/builder.py amis +./scripts/builder.py amis ... ``` Before each build, new Alpine Linux *releases* are detected and the version's @@ -108,7 +108,7 @@ other target profiles. ### Cleaning up the Build Environment -The build process is careful to place all temporary files in teh `build` +The build process is careful to place all temporary files in the `build` subdirectory. Remove the temporary `build` subdirectory, which contains the resolved profile and Packer configs, the Python virtual environment, and other temporary build-related artifacts. diff --git a/profiles/README.md b/profiles/README.md index 2dfd50e..e1c34a4 100644 --- a/profiles/README.md +++ b/profiles/README.md @@ -14,7 +14,7 @@ This flexibility helps keep configuration for related build targets Core profile configurations are found in the `base`, `version`, and `arch` subdirectories. Core profiles do not have a `.conf` suffix because they're not -meant to be directly used like target profiles with `make`. +meant to be directly used like target profiles with the `builder.py` script. Base core profiles define all build vars with default values -- those left empty or null are usually set in version, arch, or target profile configs. @@ -31,7 +31,7 @@ which `apk-tools` and `alpine-keys` to use (and their SHA256 checksums). ## Target Profiles Target profiles, defined in this directory, are the top-level configuration -used with `make PROFILE=`; they must have a `.conf` suffix. Several +used with `./scripts/builder.py`; they must have a `.conf` suffix. Several configuration objects are defined and later merged within the `BUILDS` object, ultimately defining each individual build. @@ -44,21 +44,23 @@ settings. The `BUILDS` object's elements merge core and profile configs (with optional inline build settings) into named build definitions; these build names can be -used to specify a subset of a profile's builds: -`make PROFILE= BUILDS=" ..."` +used to specify a subset of a profile's builds, for example: +`./scripts/builder.py amis ...` **Please note that merge order matters!** The merge sequence is version --> architecture --> profile --> build. ## Customization -The most important variables to set in your custom profile is `build_region` -and `build_subnet`. Without these, Packer will not know where to build. +If the AWS configuration you're using does not specify a default region, your +custom profile will need to specify `build_region`. If the build region does +not have a default VPC, you'll need to specify `build_subnet`. -`version` and `release` are meant to match Alpine; however,`revision` can be -used to track changes to profile or situations where the AMIs needed to be -rebuilt. The "edge" core version profile sets `revision` to the current -datetime, otherwise the default is `r0`. +`version` and `release` are meant to match Alpine; however, `revision` is used +used to track changes to the profile, additions of new alpine-ec2-ami features, +or other situations where the AMIs needs to be rebuilt. The "edge" core +version profile sets `revision` to null, which translates into the current +datetime. Otherwise, the default set in the base profile is `r0`. You will probably want to personalize the name and description of your AMI. Set `ami_name_prefix` and `ami_name_suffix`; setting `ami_desc_suffix` and @@ -75,7 +77,12 @@ during the first boot, so you shouldn't need to make space for anything other than installed packages. Set `ami_encrypt` to "true" to create an encrypted AMI image. Launching images -from an encrypted AMI results in an encrypted EBS root volume. +from an encrypted AMI results in an encrypted EBS root volume. Please note +that if your AMI is encrypted, only the owning account will be able to use it. + +_*NOTE*: The following funcitonality that is currently not operational -- it +is pending completion and integration of a new release tool. In the meantime, +you will have to manually copy AMIs from the build region to other regions._ To copy newly built AMIs to regions other than the `build_region` region, set `ami_regions`. This variable is a *hash*, which allows for finer control over @@ -92,6 +99,14 @@ ami_regions { } ``` +By default, the AMIs built are accessible only by the owning account. To +make your AMIs publicly available, set the `ami_access` hash variable: +``` +ami_access { + all = true +} +``` + Controlling what packages are installed and enabled in the AMI is the number one reason for creating custom profile. The `repos`, `pkgs`, and `svcs` hash variables serve precisely that purpose. With some exceptions (noted below), @@ -124,19 +139,29 @@ pkgs { ``` To control when (or whether) a system service starts, use the `svcs` hash -variable. Its keys are the service names, as they appear in `/etc/init.d`; -default values are set in the base core profile. Like the other hash -variables, setting `false` or `null` disable the service, `true` will enable -the service at the "default" runlevel. The service can be enabled at a -different runlevel by using that runlevel as the value. +variable. Its first-level keys are names of runlevels ('sysinit', 'boot', +`default`, and `shutown`), and the second-level keys are the services, as they +appear in `/etc/init.d`. Like the other profile hash variables, setting +`false` or `null` disable the service in the runlevel, `true` will enable the +service. -By default, the AMIs built are accessible only by the owning account. To -make your AMIs publicly available, set the `ami_access` hash variable: -``` -ami_access { - all = true -} -``` +Further customization can be done by specifying your own setup script with the +`setup_script` profile variable. This will be copied to the build instance at +`/tmp/setup-ami.d/setup_script`, and executed by the `setup-ami` script just +before the final cleanup phase. + +If there are additional data or scripts that the setup script uses, use the +`setup_copy` hash variable -- the key is the destination path under the build +instance's `/tmp/setup-ami.d` directory, and the value is the local path to +the source file or directory. No data is automatically installed in the AMI, +and no additional scripts are executed -- you must explicitly install/execute +via the `setup_script` script. + +The AMI's default login user is `alpine`. If you want to specify a alternate +login, set it with the `ami_user` profile variable. This setting is saved in +`/etc/conf.d/tiny-ec2-bootstrap` as `EC2_USER` and +[tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) +will use that valie instead of `alpine`. ## Limitations and Caveats @@ -146,7 +171,3 @@ ami_access { hash_var = null # drops inherited values hash_var {} # re-defines as an empty hash ``` - -* The AMI's login user is currently hard coded to be `alpine`. Changes to - [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) are - required before we can truly make `ami_user` configurable. diff --git a/releases/README.md b/releases/README.md index 6af96d2..e8e3b21 100644 --- a/releases/README.md +++ b/releases/README.md @@ -3,17 +3,22 @@ **These are not official AWS or Alpine images. They are community built and supported.** -These AMIs should work with most EC2 features such as Elastic Network Adapters -and NVMe EBS volumes. If you find any problems launching them on current -generation instances, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues) -and include as much detailed information as possible. +These AMIs should work with most EC2 features such as ENI's (Elastic Network +Interfaces) and NVMe EBS (Elastic Block Storage) volumes. If you find any +problems launching them on current generation instances, please open an +[issue](https://github.com/mcrute/alpine-ec2-ami/issues) and include as much +detailed information as possible. + +AMIs built after 2020-09-15 include support for hot-pluggable ENI's and will +sync all private IPv4 and IPv6 address on those ENI's on `udhcpc` post-bound and +post-renew events. During the *first boot* of instances created with these AMIs, the lightweight [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) init script... - sets the instance's hostname, - installs the SSH authorized_keys for the 'alpine' user, -- disables 'root' and 'alpine' users' passwords, +- disables 'root' and AMI user (default 'alpine') passwords, - expands the root partition to use all available EBS volume space, - and executes a "user data" script (must be a shell script that starts with `#!`) From 88e5a6d9cc49df7e8bceea35e30d87c09ab4521b Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Mon, 14 Sep 2020 20:05:57 -0700 Subject: [PATCH 087/125] profiles/README tweaks --- profiles/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/profiles/README.md b/profiles/README.md index e1c34a4..568b2fc 100644 --- a/profiles/README.md +++ b/profiles/README.md @@ -57,7 +57,8 @@ custom profile will need to specify `build_region`. If the build region does not have a default VPC, you'll need to specify `build_subnet`. `version` and `release` are meant to match Alpine; however, `revision` is used -used to track changes to the profile, additions of new alpine-ec2-ami features, +used to track changes to the profile, additions of new +[alpine-ec2-ami](https://github.com/mcrute/alpine-ec2-ami) features, or other situations where the AMIs needs to be rebuilt. The "edge" core version profile sets `revision` to null, which translates into the current datetime. Otherwise, the default set in the base profile is `r0`. @@ -139,7 +140,7 @@ pkgs { ``` To control when (or whether) a system service starts, use the `svcs` hash -variable. Its first-level keys are names of runlevels ('sysinit', 'boot', +variable. Its first-level keys are names of runlevels (`sysinit`, `boot`, `default`, and `shutown`), and the second-level keys are the services, as they appear in `/etc/init.d`. Like the other profile hash variables, setting `false` or `null` disable the service in the runlevel, `true` will enable the @@ -150,7 +151,7 @@ Further customization can be done by specifying your own setup script with the `/tmp/setup-ami.d/setup_script`, and executed by the `setup-ami` script just before the final cleanup phase. -If there are additional data or scripts that the setup script uses, use the +If there are additional data or scripts that your setup script uses, use the `setup_copy` hash variable -- the key is the destination path under the build instance's `/tmp/setup-ami.d` directory, and the value is the local path to the source file or directory. No data is automatically installed in the AMI, From e42c833553d56c05c48121ad344439392b4c4b03 Mon Sep 17 00:00:00 2001 From: tomalok Date: Mon, 21 Sep 2020 19:43:33 -0700 Subject: [PATCH 088/125] eth-eni-setup init script (#87) * eth-eni-setup init script before networking starts up, makes sure eth interfaces match attached ENIs also fixes a permissions problem with eth-eni-hotplug mdev config * fix aarch64 build --- profiles/arch/aarch64-1 | 2 +- profiles/base/1 | 1 + profiles/base/2 | 1 + scripts/setup-ami | 6 +++- .../setup-ami.d/etc/{grub.default => grub} | 0 scripts/setup-ami.d/etc/mdev-ec2.conf | 2 +- scripts/setup-ami.d/eth-eni-setup | 36 +++++++++++++++++++ 7 files changed, 45 insertions(+), 3 deletions(-) rename scripts/setup-ami.d/etc/{grub.default => grub} (100%) create mode 100755 scripts/setup-ami.d/eth-eni-setup diff --git a/profiles/arch/aarch64-1 b/profiles/arch/aarch64-1 index f40af5a..2d1acf7 100644 --- a/profiles/arch/aarch64-1 +++ b/profiles/arch/aarch64-1 @@ -3,7 +3,7 @@ arch = "aarch64" build_arch = "arm64" -build_instance_type = "a1.medium" +build_instance_type = "t4g.nano" apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.3/apk-tools-2.10.3-aarch64-linux.tar.gz" apk_tools_sha256 = "58a07e547c83c3a30eb0a0bd73db57d6bbaf92cc093df7a1d9805631f7d349e3" alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.12/main/aarch64/alpine-keys-2.2-r0.apk" diff --git a/profiles/base/1 b/profiles/base/1 index b219dda..d82270c 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -76,6 +76,7 @@ svcs { } default { chronyd = true + eth-eni-setup = true networking = true sshd = true tiny-ec2-bootstrap = true diff --git a/profiles/base/2 b/profiles/base/2 index 3f1a8b7..3b65243 100644 --- a/profiles/base/2 +++ b/profiles/base/2 @@ -75,6 +75,7 @@ svcs { } default { chronyd = true + eth-eni-setup = true networking = true sshd = true tiny-ec2-bootstrap = true diff --git a/scripts/setup-ami b/scripts/setup-ami index c6aaa50..6084d85 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -221,7 +221,7 @@ install_grub_efi() { # install default grub config install -o root -g root -Dm644 -t "$TARGET/etc/default" \ - "$SETUP/etc/grub.default" grub + "$SETUP/etc/grub" # generate/install new config chroot "$TARGET" grub-mkconfig -o /boot/grub/grub.cfg @@ -253,6 +253,10 @@ setup_networking() { ln -sf /usr/share/udhcpc/eth-eni-hook \ "$TARGET/etc/udhcpc/$i" done + + # install ENI interface setup init script + install -o root -g root -Dm755 -t "$TARGET/etc/init.d" \ + "$SETUP/eth-eni-setup" } enable_services() { diff --git a/scripts/setup-ami.d/etc/grub.default b/scripts/setup-ami.d/etc/grub similarity index 100% rename from scripts/setup-ami.d/etc/grub.default rename to scripts/setup-ami.d/etc/grub diff --git a/scripts/setup-ami.d/etc/mdev-ec2.conf b/scripts/setup-ami.d/etc/mdev-ec2.conf index 8cb1c56..860a96e 100644 --- a/scripts/setup-ami.d/etc/mdev-ec2.conf +++ b/scripts/setup-ami.d/etc/mdev-ec2.conf @@ -1,5 +1,5 @@ # additional ENIs -eth[1-9] root:root 0666 */lib/mdev/eth-eni-hotplug +eth[1-9] root:root 0644 */lib/mdev/eth-eni-hotplug # EBS NVMe links nvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links diff --git a/scripts/setup-ami.d/eth-eni-setup b/scripts/setup-ami.d/eth-eni-setup new file mode 100755 index 0000000..6216008 --- /dev/null +++ b/scripts/setup-ami.d/eth-eni-setup @@ -0,0 +1,36 @@ +#!/sbin/openrc-run + +description="Sets up interfaces for attached Elastic Network Interfaces" + +IFACE_CFG=/etc/network/interfaces + +depend() { + before net + need sysfs +} + +eni_eths() { + local iface + for iface in /sys/class/net/eth*; do + echo "${iface##*/}" + done +} + +start() { + local iface + + ebegin "Setting up interfaces for attached ENIs" + + cat "$IFACE_CFG.d/lo" > "$IFACE_CFG.new" + + for iface in $(eni_eths); do + [ -f "$IFACE_CFG.d/$iface" ] || + sed -e "s/%%/$iface/g" "$IFACE_CFG.d/DEFAULT" > "$IFACE_CFG.d/$iface" + cat "$IFACE_CFG.d/$iface" >> "$IFACE_CFG.new" + einfo "$iface configured" + done + + mv "$IFACE_CFG.new" "$IFACE_CFG" + + eend "$?" +} From 38e7137662ff77149b78e1bd6a04eafd2d380a8c Mon Sep 17 00:00:00 2001 From: tomalok Date: Fri, 30 Oct 2020 11:34:48 -0700 Subject: [PATCH 089/125] Update to 3.12.1 (#88) * Update to Alpine Linux v3.12.1 * Switch to using t3a instances for x86_64 buidls --- profiles/base/2 | 2 +- profiles/version/3.12 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/profiles/base/2 b/profiles/base/2 index 3b65243..20cf98d 100644 --- a/profiles/base/2 +++ b/profiles/base/2 @@ -18,7 +18,7 @@ build_arch = null # Builder-instance build_region = "us-west-2" build_subnet = null -build_instance_type = "t3.nano" +build_instance_type = "t3a.nano" build_public_ip = null build_user = "ec2-user" build_ami_name = "amzn2-ami-hvm-2.0.*-gp2" diff --git a/profiles/version/3.12 b/profiles/version/3.12 index 3a77dd5..de0e82e 100644 --- a/profiles/version/3.12 +++ b/profiles/version/3.12 @@ -6,7 +6,7 @@ include required("../base/1") # set version-specific vars version = "3.12" -release = "3.12.0" +release = "3.12.1" end_of_life = "2022-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.12/main" = true From c49106aadf5c4062a7f079d97d565ed408942729 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Wed, 4 Nov 2020 17:04:33 -0800 Subject: [PATCH 090/125] Update Releases for 3.12.1 --- releases/README.md | 91 +++++++++++++++++++++++++++++++--------------- 1 file changed, 62 insertions(+), 29 deletions(-) diff --git a/releases/README.md b/releases/README.md index e8e3b21..da4083c 100644 --- a/releases/README.md +++ b/releases/README.md @@ -3,36 +3,65 @@ **These are not official AWS or Alpine images. They are community built and supported.** -These AMIs should work with most EC2 features such as ENI's (Elastic Network +These AMIs should work with most EC2 features -- such as ENIs (Elastic Network Interfaces) and NVMe EBS (Elastic Block Storage) volumes. If you find any -problems launching them on current generation instances, please open an +problems launching these AMIs on current generation instances, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues) and include as much detailed information as possible. -AMIs built after 2020-09-15 include support for hot-pluggable ENI's and will -sync all private IPv4 and IPv6 address on those ENI's on `udhcpc` post-bound and +All AMIs built after 2020-09-15 include support for hot-pluggable ENIs, and will +sync all private IPv4 and IPv6 addresses on those ENIs on `udhcpc` post-bound and post-renew events. +Starting with release 3.12.1, IMDSv2 (Instance MetaData Service v2) is fully +supported, and `aarch64` AMIs are provided for EC2 ARM-based instances. + During the *first boot* of instances created with these AMIs, the lightweight [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) init script... - sets the instance's hostname, -- installs the SSH authorized_keys for the 'alpine' user, +- installs the SSH authorized_keys for the AMI user (default 'alpine'), - disables 'root' and AMI user (default 'alpine') passwords, - expands the root partition to use all available EBS volume space, - and executes a "user data" script (must be a shell script that starts with `#!`) If you launch these AMIs to build other images (via [Packer](https://packer.io), -etc.), don't forget to remove `/var/lib/cloud/.bootstrap-complete` -- -otherwise, instances launched from those second-generation AMIs will not run +etc.), don't forget to remove `/var/lib/cloud/.bootstrap-complete` -- otherwise +instances launched from those second-generation AMIs will not run `tiny-ec2-bootstrap` on their first boot. -The more popular [cloud-init](https://cloudinit.readthedocs.io/en/latest/) -is currently not supported on Alpine Linux. If `cloud-init` support is -important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). +The more popular [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is +currently not supported on Alpine Linux. If `cloud-init` support is important +to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs +### Alpine Linux 3.12.1 (2020-11-04) +
click to show/hide

+ +| Region | alpine-ami-3.12.1-x86_64-r0 | alpine-ami-3.12.1-aarch64-r0 | +| ------ | --- | --- | +| af-south-1 | [ami-0fa34e940c7164179](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa34e940c7164179) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa34e940c7164179) | [ami-09fcd0ee80e2c6ced](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09fcd0ee80e2c6ced) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09fcd0ee80e2c6ced) | +| ap-east-1 | [ami-059c371b8d2fd0989](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059c371b8d2fd0989) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c371b8d2fd0989) | [ami-0f951fbb40233338b](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f951fbb40233338b) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f951fbb40233338b) | +| ap-northeast-1 | [ami-010e9eeaa13a80178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010e9eeaa13a80178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010e9eeaa13a80178) | [ami-0269f3543c56a45c8](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0269f3543c56a45c8) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0269f3543c56a45c8) | +| ap-northeast-2 | [ami-08e79a74e23e75e36](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e79a74e23e75e36) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08e79a74e23e75e36) | [ami-071c8f6b35e2c6955](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071c8f6b35e2c6955) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-071c8f6b35e2c6955) | +| ap-south-1 | [ami-0d953dbbf990c3d4f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d953dbbf990c3d4f) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d953dbbf990c3d4f) | [ami-089af5c9b460578db](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089af5c9b460578db) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089af5c9b460578db) | +| ap-southeast-1 | [ami-008bce1c8d323b322](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008bce1c8d323b322) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008bce1c8d323b322) | [ami-0c67eaa9d318acd5e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c67eaa9d318acd5e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c67eaa9d318acd5e) | +| ap-southeast-2 | [ami-013de33f160267640](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013de33f160267640) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013de33f160267640) | [ami-0bf9b7222f35ef0d4](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf9b7222f35ef0d4) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf9b7222f35ef0d4) | +| ca-central-1 | [ami-00a9048619f660a50](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a9048619f660a50) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a9048619f660a50) | [ami-09afe18ad5033a8ce](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09afe18ad5033a8ce) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09afe18ad5033a8ce) | +| eu-central-1 | [ami-03dbad79bee9c8ce1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dbad79bee9c8ce1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dbad79bee9c8ce1) | [ami-07807351a96484447](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07807351a96484447) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07807351a96484447) | +| eu-north-1 | [ami-043101bc60cae6466](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043101bc60cae6466) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043101bc60cae6466) | [ami-0b1aad32939a91c82](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1aad32939a91c82) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1aad32939a91c82) | +| eu-south-1 | [ami-08d5116337ec06c75](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d5116337ec06c75) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d5116337ec06c75) | [ami-057a6cfb896f50fb2](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057a6cfb896f50fb2) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-057a6cfb896f50fb2) | +| eu-west-1 | [ami-04e819555baad56b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e819555baad56b9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e819555baad56b9) | [ami-081896434373f8ca9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-081896434373f8ca9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-081896434373f8ca9) | +| eu-west-2 | [ami-02a0122150c17b830](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a0122150c17b830) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a0122150c17b830) | [ami-0adc0c0202d9c8daa](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adc0c0202d9c8daa) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0adc0c0202d9c8daa) | +| eu-west-3 | [ami-027f6aa3fb3d68650](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027f6aa3fb3d68650) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-027f6aa3fb3d68650) | [ami-057906bbbabb67f73](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057906bbbabb67f73) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-057906bbbabb67f73) | +| me-south-1 | [ami-07bb93ae709388c3c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bb93ae709388c3c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb93ae709388c3c) | [ami-099c448c758de35fa](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-099c448c758de35fa) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-099c448c758de35fa) | +| sa-east-1 | [ami-02e4e0517f1910221](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e4e0517f1910221) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e4e0517f1910221) | [ami-0b7d42fbb0f169c3d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b7d42fbb0f169c3d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b7d42fbb0f169c3d) | +| us-east-1 | [ami-0cc47d8e29142ecac](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc47d8e29142ecac) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc47d8e29142ecac) | [ami-0a31ae1e8fc6de17e](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a31ae1e8fc6de17e) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a31ae1e8fc6de17e) | +| us-east-2 | [ami-07243c178e6ca055c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07243c178e6ca055c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07243c178e6ca055c) | [ami-07deadfa79bb4613a](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07deadfa79bb4613a) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07deadfa79bb4613a) | +| us-west-1 | [ami-0c9a9eac6d74fff97](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9a9eac6d74fff97) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97) | [ami-0daaa29d5c8b1ecaf](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0daaa29d5c8b1ecaf) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0daaa29d5c8b1ecaf) | +| us-west-2 | [ami-03d82b210e0c36983](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d82b210e0c36983) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d82b210e0c36983)) | [ami-0d6579e59926d4377](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6579e59926d4377) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6579e59926d4377)) | + ### Alpine Linux 3.11.6 (2020-04-25)

click to show/hide

@@ -105,26 +134,30 @@ important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-am

-### Alpine Linux Edge (2020-04-25) +### Alpine Linux Edge (2020-11-04)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20200425232123 | -| ------ | --- | -| ap-northeast-1 | [ami-0f64e8385eb16f0c5](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f64e8385eb16f0c5) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f64e8385eb16f0c5)) | -| ap-northeast-2 | [ami-0f6525d9186a0ee66](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6525d9186a0ee66) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6525d9186a0ee66)) | -| ap-south-1 | [ami-034d9a20d9bf2049f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034d9a20d9bf2049f) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034d9a20d9bf2049f)) | -| ap-southeast-1 | [ami-0e64d169297389f9e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e64d169297389f9e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e64d169297389f9e)) | -| ap-southeast-2 | [ami-0afc0bab8196b70e4](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0afc0bab8196b70e4) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0afc0bab8196b70e4)) | -| ca-central-1 | [ami-068da53b91dcfad35](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068da53b91dcfad35) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068da53b91dcfad35)) | -| eu-central-1 | [ami-0b04139e51df7902b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b04139e51df7902b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b04139e51df7902b)) | -| eu-north-1 | [ami-0ac2cb76721262b8f](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ac2cb76721262b8f) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ac2cb76721262b8f)) | -| eu-west-1 | [ami-0a86b121e789d84a2](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a86b121e789d84a2) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a86b121e789d84a2)) | -| eu-west-2 | [ami-0329b37ebc36521c7](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0329b37ebc36521c7) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0329b37ebc36521c7)) | -| eu-west-3 | [ami-037d85dcf06bc913e](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-037d85dcf06bc913e) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-037d85dcf06bc913e)) | -| sa-east-1 | [ami-0b8e53df93ee4132d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b8e53df93ee4132d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b8e53df93ee4132d)) | -| us-east-1 | [ami-097be5ea1a5c7b6ce](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097be5ea1a5c7b6ce) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097be5ea1a5c7b6ce)) | -| us-east-2 | [ami-0f40de04e77f600b6](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f40de04e77f600b6) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f40de04e77f600b6)) | -| us-west-1 | [ami-095527a55aa7c1c1d](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095527a55aa7c1c1d) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-095527a55aa7c1c1d)) | -| us-west-2 | [ami-0e5711189d37ddd64](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e5711189d37ddd64) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e5711189d37ddd64)) | +| Region | alpine-ami-edge-x86_64-20201104223817 | alpine-ami-edge-aarch64-20201104223817 | +| ------ | --- | --- | +| af-south-1 | [ami-0681a1af7ab425246](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0681a1af7ab425246) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0681a1af7ab425246) | [ami-0752fc9ce476a4721](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0752fc9ce476a4721) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0752fc9ce476a4721) | +| ap-east-1 | [ami-05d1ed3955f085103](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05d1ed3955f085103) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05d1ed3955f085103) | [ami-0a676c33f22ff9796](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a676c33f22ff9796) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a676c33f22ff9796) | +| ap-northeast-1 | [ami-0aaba61ca1bf297eb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aaba61ca1bf297eb) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aaba61ca1bf297eb) | [ami-026b0f30357b6c249](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026b0f30357b6c249) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026b0f30357b6c249) | +| ap-northeast-2 | [ami-020f81b319679e216](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020f81b319679e216) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-020f81b319679e216) | [ami-046e31ba8884954fd](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-046e31ba8884954fd) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-046e31ba8884954fd) | +| ap-south-1 | [ami-07a1638dc9908589e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a1638dc9908589e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a1638dc9908589e) | [ami-08c7798c7f965cd80](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c7798c7f965cd80) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c7798c7f965cd80) | +| ap-southeast-1 | [ami-06101a751c65e61cf](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06101a751c65e61cf) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06101a751c65e61cf) | [ami-0466de6f68ac671b5](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0466de6f68ac671b5) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0466de6f68ac671b5) | +| ap-southeast-2 | [ami-04c8d5f2030c3d5f8](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04c8d5f2030c3d5f8) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04c8d5f2030c3d5f8) | [ami-073efd513d0bf10d1](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073efd513d0bf10d1) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-073efd513d0bf10d1) | +| ca-central-1 | [ami-0e0991e0a75183387](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e0991e0a75183387) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e0991e0a75183387) | [ami-0f17d9899463f2d0c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f17d9899463f2d0c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f17d9899463f2d0c) | +| eu-central-1 | [ami-098989b210ae0a152](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098989b210ae0a152) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098989b210ae0a152) | [ami-0632fda5bb88d28fc](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0632fda5bb88d28fc) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0632fda5bb88d28fc) | +| eu-north-1 | [ami-0b6200a74d0b7d7af](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6200a74d0b7d7af) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6200a74d0b7d7af) | [ami-0f4fa14d45948f11a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f4fa14d45948f11a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f4fa14d45948f11a) | +| eu-south-1 | [ami-0697a63a71188ddad](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0697a63a71188ddad) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0697a63a71188ddad) | [ami-05cb6a0b441d9fef4](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05cb6a0b441d9fef4) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05cb6a0b441d9fef4) | +| eu-west-1 | [ami-0d17f108d7b29fc89](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d17f108d7b29fc89) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d17f108d7b29fc89) | [ami-04e9f2e813ff9fe6a](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e9f2e813ff9fe6a) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e9f2e813ff9fe6a) | +| eu-west-2 | [ami-0fa9d7f11b1c55a8d](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa9d7f11b1c55a8d) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa9d7f11b1c55a8d) | [ami-0031a8d8a3e592132](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0031a8d8a3e592132) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0031a8d8a3e592132) | +| eu-west-3 | [ami-0d790428b555a7a7b](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d790428b555a7a7b) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d790428b555a7a7b) | [ami-0f34326e028b1a6b1](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f34326e028b1a6b1) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f34326e028b1a6b1) | +| me-south-1 | [ami-01d3293169fd94d51](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d3293169fd94d51) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01d3293169fd94d51) | [ami-007fc801f4d00c286](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007fc801f4d00c286) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-007fc801f4d00c286) | +| sa-east-1 | [ami-0dd5f9cde76604626](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dd5f9cde76604626) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd5f9cde76604626) | [ami-09a322ab8f34e327f](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a322ab8f34e327f) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a322ab8f34e327f) | +| us-east-1 | [ami-0a2c4c14503968196](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2c4c14503968196) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2c4c14503968196) | [ami-0fb5290b89cd3ae5d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb5290b89cd3ae5d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb5290b89cd3ae5d) | +| us-east-2 | [ami-00ff52d28bb136b3c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ff52d28bb136b3c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00ff52d28bb136b3c) | [ami-0962215a714b76135](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0962215a714b76135) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0962215a714b76135) | +| us-west-1 | [ami-054166b9e67bb0716](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054166b9e67bb0716) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054166b9e67bb0716) | [ami-091c85b576c87cfae](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091c85b576c87cfae) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-091c85b576c87cfae) | +| us-west-2 | [ami-0ca706847efd66e24](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca706847efd66e24) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca706847efd66e24)) | [ami-0fba23a2dedcb193e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fba23a2dedcb193e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fba23a2dedcb193e)) |

From 79beab0f9771a9d959479d4afc3be85f1e3fda0b Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Wed, 4 Nov 2020 17:07:52 -0800 Subject: [PATCH 091/125] grammar tweak --- releases/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/releases/README.md b/releases/README.md index da4083c..bc5984d 100644 --- a/releases/README.md +++ b/releases/README.md @@ -10,8 +10,8 @@ problems launching these AMIs on current generation instances, please open an detailed information as possible. All AMIs built after 2020-09-15 include support for hot-pluggable ENIs, and will -sync all private IPv4 and IPv6 addresses on those ENIs on `udhcpc` post-bound and -post-renew events. +sync all associated IPv6 and private IPv4 addresses during `udhcpc` post-bound +and post-renew events. Starting with release 3.12.1, IMDSv2 (Instance MetaData Service v2) is fully supported, and `aarch64` AMIs are provided for EC2 ARM-based instances. From 2ffd0396923a732367c5fc7b6a9e1941a442e15d Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Wed, 4 Nov 2020 17:09:50 -0800 Subject: [PATCH 092/125] fix collapsable sections --- releases/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/releases/README.md b/releases/README.md index bc5984d..72b819d 100644 --- a/releases/README.md +++ b/releases/README.md @@ -62,6 +62,8 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). | us-west-1 | [ami-0c9a9eac6d74fff97](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9a9eac6d74fff97) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97) | [ami-0daaa29d5c8b1ecaf](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0daaa29d5c8b1ecaf) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0daaa29d5c8b1ecaf) | | us-west-2 | [ami-03d82b210e0c36983](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d82b210e0c36983) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d82b210e0c36983)) | [ami-0d6579e59926d4377](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6579e59926d4377) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6579e59926d4377)) | +

+ ### Alpine Linux 3.11.6 (2020-04-25)
click to show/hide

From e578d23975d5862c488f3e94b7e1e79ec32e202f Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Wed, 4 Nov 2020 17:13:24 -0800 Subject: [PATCH 093/125] add missing ) after (launch --- releases/README.md | 76 +++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/releases/README.md b/releases/README.md index 72b819d..c817ea6 100644 --- a/releases/README.md +++ b/releases/README.md @@ -41,25 +41,25 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). | Region | alpine-ami-3.12.1-x86_64-r0 | alpine-ami-3.12.1-aarch64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-0fa34e940c7164179](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa34e940c7164179) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa34e940c7164179) | [ami-09fcd0ee80e2c6ced](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09fcd0ee80e2c6ced) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09fcd0ee80e2c6ced) | -| ap-east-1 | [ami-059c371b8d2fd0989](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059c371b8d2fd0989) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c371b8d2fd0989) | [ami-0f951fbb40233338b](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f951fbb40233338b) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f951fbb40233338b) | -| ap-northeast-1 | [ami-010e9eeaa13a80178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010e9eeaa13a80178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010e9eeaa13a80178) | [ami-0269f3543c56a45c8](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0269f3543c56a45c8) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0269f3543c56a45c8) | -| ap-northeast-2 | [ami-08e79a74e23e75e36](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e79a74e23e75e36) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08e79a74e23e75e36) | [ami-071c8f6b35e2c6955](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071c8f6b35e2c6955) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-071c8f6b35e2c6955) | -| ap-south-1 | [ami-0d953dbbf990c3d4f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d953dbbf990c3d4f) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d953dbbf990c3d4f) | [ami-089af5c9b460578db](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089af5c9b460578db) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089af5c9b460578db) | -| ap-southeast-1 | [ami-008bce1c8d323b322](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008bce1c8d323b322) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008bce1c8d323b322) | [ami-0c67eaa9d318acd5e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c67eaa9d318acd5e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c67eaa9d318acd5e) | -| ap-southeast-2 | [ami-013de33f160267640](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013de33f160267640) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013de33f160267640) | [ami-0bf9b7222f35ef0d4](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf9b7222f35ef0d4) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf9b7222f35ef0d4) | -| ca-central-1 | [ami-00a9048619f660a50](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a9048619f660a50) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a9048619f660a50) | [ami-09afe18ad5033a8ce](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09afe18ad5033a8ce) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09afe18ad5033a8ce) | -| eu-central-1 | [ami-03dbad79bee9c8ce1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dbad79bee9c8ce1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dbad79bee9c8ce1) | [ami-07807351a96484447](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07807351a96484447) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07807351a96484447) | -| eu-north-1 | [ami-043101bc60cae6466](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043101bc60cae6466) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043101bc60cae6466) | [ami-0b1aad32939a91c82](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1aad32939a91c82) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1aad32939a91c82) | -| eu-south-1 | [ami-08d5116337ec06c75](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d5116337ec06c75) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d5116337ec06c75) | [ami-057a6cfb896f50fb2](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057a6cfb896f50fb2) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-057a6cfb896f50fb2) | -| eu-west-1 | [ami-04e819555baad56b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e819555baad56b9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e819555baad56b9) | [ami-081896434373f8ca9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-081896434373f8ca9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-081896434373f8ca9) | -| eu-west-2 | [ami-02a0122150c17b830](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a0122150c17b830) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a0122150c17b830) | [ami-0adc0c0202d9c8daa](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adc0c0202d9c8daa) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0adc0c0202d9c8daa) | -| eu-west-3 | [ami-027f6aa3fb3d68650](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027f6aa3fb3d68650) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-027f6aa3fb3d68650) | [ami-057906bbbabb67f73](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057906bbbabb67f73) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-057906bbbabb67f73) | -| me-south-1 | [ami-07bb93ae709388c3c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bb93ae709388c3c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb93ae709388c3c) | [ami-099c448c758de35fa](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-099c448c758de35fa) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-099c448c758de35fa) | -| sa-east-1 | [ami-02e4e0517f1910221](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e4e0517f1910221) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e4e0517f1910221) | [ami-0b7d42fbb0f169c3d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b7d42fbb0f169c3d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b7d42fbb0f169c3d) | -| us-east-1 | [ami-0cc47d8e29142ecac](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc47d8e29142ecac) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc47d8e29142ecac) | [ami-0a31ae1e8fc6de17e](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a31ae1e8fc6de17e) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a31ae1e8fc6de17e) | -| us-east-2 | [ami-07243c178e6ca055c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07243c178e6ca055c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07243c178e6ca055c) | [ami-07deadfa79bb4613a](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07deadfa79bb4613a) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07deadfa79bb4613a) | -| us-west-1 | [ami-0c9a9eac6d74fff97](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9a9eac6d74fff97) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97) | [ami-0daaa29d5c8b1ecaf](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0daaa29d5c8b1ecaf) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0daaa29d5c8b1ecaf) | +| af-south-1 | [ami-0fa34e940c7164179](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa34e940c7164179) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa34e940c7164179)) | [ami-09fcd0ee80e2c6ced](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09fcd0ee80e2c6ced) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09fcd0ee80e2c6ced)) | +| ap-east-1 | [ami-059c371b8d2fd0989](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059c371b8d2fd0989) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c371b8d2fd0989)) | [ami-0f951fbb40233338b](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f951fbb40233338b) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f951fbb40233338b)) | +| ap-northeast-1 | [ami-010e9eeaa13a80178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010e9eeaa13a80178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010e9eeaa13a80178)) | [ami-0269f3543c56a45c8](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0269f3543c56a45c8) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0269f3543c56a45c8)) | +| ap-northeast-2 | [ami-08e79a74e23e75e36](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e79a74e23e75e36) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08e79a74e23e75e36)) | [ami-071c8f6b35e2c6955](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071c8f6b35e2c6955) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-071c8f6b35e2c6955)) | +| ap-south-1 | [ami-0d953dbbf990c3d4f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d953dbbf990c3d4f) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d953dbbf990c3d4f)) | [ami-089af5c9b460578db](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089af5c9b460578db) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089af5c9b460578db)) | +| ap-southeast-1 | [ami-008bce1c8d323b322](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008bce1c8d323b322) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008bce1c8d323b322)) | [ami-0c67eaa9d318acd5e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c67eaa9d318acd5e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c67eaa9d318acd5e)) | +| ap-southeast-2 | [ami-013de33f160267640](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013de33f160267640) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013de33f160267640)) | [ami-0bf9b7222f35ef0d4](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf9b7222f35ef0d4) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf9b7222f35ef0d4)) | +| ca-central-1 | [ami-00a9048619f660a50](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a9048619f660a50) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a9048619f660a50)) | [ami-09afe18ad5033a8ce](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09afe18ad5033a8ce) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09afe18ad5033a8ce)) | +| eu-central-1 | [ami-03dbad79bee9c8ce1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dbad79bee9c8ce1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dbad79bee9c8ce1)) | [ami-07807351a96484447](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07807351a96484447) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07807351a96484447)) | +| eu-north-1 | [ami-043101bc60cae6466](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043101bc60cae6466) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043101bc60cae6466)) | [ami-0b1aad32939a91c82](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1aad32939a91c82) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1aad32939a91c82)) | +| eu-south-1 | [ami-08d5116337ec06c75](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d5116337ec06c75) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d5116337ec06c75)) | [ami-057a6cfb896f50fb2](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057a6cfb896f50fb2) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-057a6cfb896f50fb2)) | +| eu-west-1 | [ami-04e819555baad56b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e819555baad56b9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e819555baad56b9)) | [ami-081896434373f8ca9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-081896434373f8ca9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-081896434373f8ca9)) | +| eu-west-2 | [ami-02a0122150c17b830](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a0122150c17b830) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a0122150c17b830)) | [ami-0adc0c0202d9c8daa](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adc0c0202d9c8daa) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0adc0c0202d9c8daa)) | +| eu-west-3 | [ami-027f6aa3fb3d68650](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027f6aa3fb3d68650) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-027f6aa3fb3d68650)) | [ami-057906bbbabb67f73](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057906bbbabb67f73) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-057906bbbabb67f73)) | +| me-south-1 | [ami-07bb93ae709388c3c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bb93ae709388c3c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb93ae709388c3c)) | [ami-099c448c758de35fa](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-099c448c758de35fa) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-099c448c758de35fa)) | +| sa-east-1 | [ami-02e4e0517f1910221](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e4e0517f1910221) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e4e0517f1910221)) | [ami-0b7d42fbb0f169c3d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b7d42fbb0f169c3d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b7d42fbb0f169c3d)) | +| us-east-1 | [ami-0cc47d8e29142ecac](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc47d8e29142ecac) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc47d8e29142ecac)) | [ami-0a31ae1e8fc6de17e](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a31ae1e8fc6de17e) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a31ae1e8fc6de17e)) | +| us-east-2 | [ami-07243c178e6ca055c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07243c178e6ca055c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07243c178e6ca055c)) | [ami-07deadfa79bb4613a](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07deadfa79bb4613a) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07deadfa79bb4613a)) | +| us-west-1 | [ami-0c9a9eac6d74fff97](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9a9eac6d74fff97) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97)) | [ami-0daaa29d5c8b1ecaf](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0daaa29d5c8b1ecaf) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0daaa29d5c8b1ecaf)) | | us-west-2 | [ami-03d82b210e0c36983](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d82b210e0c36983) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d82b210e0c36983)) | [ami-0d6579e59926d4377](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6579e59926d4377) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6579e59926d4377)) |

@@ -141,25 +141,25 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). | Region | alpine-ami-edge-x86_64-20201104223817 | alpine-ami-edge-aarch64-20201104223817 | | ------ | --- | --- | -| af-south-1 | [ami-0681a1af7ab425246](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0681a1af7ab425246) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0681a1af7ab425246) | [ami-0752fc9ce476a4721](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0752fc9ce476a4721) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0752fc9ce476a4721) | -| ap-east-1 | [ami-05d1ed3955f085103](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05d1ed3955f085103) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05d1ed3955f085103) | [ami-0a676c33f22ff9796](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a676c33f22ff9796) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a676c33f22ff9796) | -| ap-northeast-1 | [ami-0aaba61ca1bf297eb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aaba61ca1bf297eb) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aaba61ca1bf297eb) | [ami-026b0f30357b6c249](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026b0f30357b6c249) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026b0f30357b6c249) | -| ap-northeast-2 | [ami-020f81b319679e216](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020f81b319679e216) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-020f81b319679e216) | [ami-046e31ba8884954fd](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-046e31ba8884954fd) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-046e31ba8884954fd) | -| ap-south-1 | [ami-07a1638dc9908589e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a1638dc9908589e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a1638dc9908589e) | [ami-08c7798c7f965cd80](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c7798c7f965cd80) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c7798c7f965cd80) | -| ap-southeast-1 | [ami-06101a751c65e61cf](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06101a751c65e61cf) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06101a751c65e61cf) | [ami-0466de6f68ac671b5](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0466de6f68ac671b5) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0466de6f68ac671b5) | -| ap-southeast-2 | [ami-04c8d5f2030c3d5f8](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04c8d5f2030c3d5f8) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04c8d5f2030c3d5f8) | [ami-073efd513d0bf10d1](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073efd513d0bf10d1) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-073efd513d0bf10d1) | -| ca-central-1 | [ami-0e0991e0a75183387](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e0991e0a75183387) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e0991e0a75183387) | [ami-0f17d9899463f2d0c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f17d9899463f2d0c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f17d9899463f2d0c) | -| eu-central-1 | [ami-098989b210ae0a152](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098989b210ae0a152) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098989b210ae0a152) | [ami-0632fda5bb88d28fc](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0632fda5bb88d28fc) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0632fda5bb88d28fc) | -| eu-north-1 | [ami-0b6200a74d0b7d7af](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6200a74d0b7d7af) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6200a74d0b7d7af) | [ami-0f4fa14d45948f11a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f4fa14d45948f11a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f4fa14d45948f11a) | -| eu-south-1 | [ami-0697a63a71188ddad](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0697a63a71188ddad) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0697a63a71188ddad) | [ami-05cb6a0b441d9fef4](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05cb6a0b441d9fef4) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05cb6a0b441d9fef4) | -| eu-west-1 | [ami-0d17f108d7b29fc89](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d17f108d7b29fc89) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d17f108d7b29fc89) | [ami-04e9f2e813ff9fe6a](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e9f2e813ff9fe6a) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e9f2e813ff9fe6a) | -| eu-west-2 | [ami-0fa9d7f11b1c55a8d](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa9d7f11b1c55a8d) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa9d7f11b1c55a8d) | [ami-0031a8d8a3e592132](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0031a8d8a3e592132) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0031a8d8a3e592132) | -| eu-west-3 | [ami-0d790428b555a7a7b](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d790428b555a7a7b) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d790428b555a7a7b) | [ami-0f34326e028b1a6b1](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f34326e028b1a6b1) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f34326e028b1a6b1) | -| me-south-1 | [ami-01d3293169fd94d51](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d3293169fd94d51) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01d3293169fd94d51) | [ami-007fc801f4d00c286](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007fc801f4d00c286) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-007fc801f4d00c286) | -| sa-east-1 | [ami-0dd5f9cde76604626](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dd5f9cde76604626) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd5f9cde76604626) | [ami-09a322ab8f34e327f](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a322ab8f34e327f) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a322ab8f34e327f) | -| us-east-1 | [ami-0a2c4c14503968196](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2c4c14503968196) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2c4c14503968196) | [ami-0fb5290b89cd3ae5d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb5290b89cd3ae5d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb5290b89cd3ae5d) | -| us-east-2 | [ami-00ff52d28bb136b3c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ff52d28bb136b3c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00ff52d28bb136b3c) | [ami-0962215a714b76135](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0962215a714b76135) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0962215a714b76135) | -| us-west-1 | [ami-054166b9e67bb0716](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054166b9e67bb0716) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054166b9e67bb0716) | [ami-091c85b576c87cfae](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091c85b576c87cfae) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-091c85b576c87cfae) | +| af-south-1 | [ami-0681a1af7ab425246](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0681a1af7ab425246) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0681a1af7ab425246)) | [ami-0752fc9ce476a4721](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0752fc9ce476a4721) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0752fc9ce476a4721)) | +| ap-east-1 | [ami-05d1ed3955f085103](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05d1ed3955f085103) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05d1ed3955f085103)) | [ami-0a676c33f22ff9796](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a676c33f22ff9796) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a676c33f22ff9796)) | +| ap-northeast-1 | [ami-0aaba61ca1bf297eb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aaba61ca1bf297eb) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aaba61ca1bf297eb)) | [ami-026b0f30357b6c249](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026b0f30357b6c249) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026b0f30357b6c249)) | +| ap-northeast-2 | [ami-020f81b319679e216](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020f81b319679e216) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-020f81b319679e216)) | [ami-046e31ba8884954fd](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-046e31ba8884954fd) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-046e31ba8884954fd)) | +| ap-south-1 | [ami-07a1638dc9908589e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a1638dc9908589e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a1638dc9908589e)) | [ami-08c7798c7f965cd80](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c7798c7f965cd80) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c7798c7f965cd80)) | +| ap-southeast-1 | [ami-06101a751c65e61cf](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06101a751c65e61cf) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06101a751c65e61cf)) | [ami-0466de6f68ac671b5](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0466de6f68ac671b5) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0466de6f68ac671b5)) | +| ap-southeast-2 | [ami-04c8d5f2030c3d5f8](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04c8d5f2030c3d5f8) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04c8d5f2030c3d5f8)) | [ami-073efd513d0bf10d1](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073efd513d0bf10d1) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-073efd513d0bf10d1)) | +| ca-central-1 | [ami-0e0991e0a75183387](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e0991e0a75183387) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e0991e0a75183387)) | [ami-0f17d9899463f2d0c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f17d9899463f2d0c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f17d9899463f2d0c)) | +| eu-central-1 | [ami-098989b210ae0a152](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098989b210ae0a152) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098989b210ae0a152)) | [ami-0632fda5bb88d28fc](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0632fda5bb88d28fc) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0632fda5bb88d28fc)) | +| eu-north-1 | [ami-0b6200a74d0b7d7af](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6200a74d0b7d7af) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6200a74d0b7d7af)) | [ami-0f4fa14d45948f11a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f4fa14d45948f11a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f4fa14d45948f11a)) | +| eu-south-1 | [ami-0697a63a71188ddad](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0697a63a71188ddad) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0697a63a71188ddad)) | [ami-05cb6a0b441d9fef4](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05cb6a0b441d9fef4) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05cb6a0b441d9fef4)) | +| eu-west-1 | [ami-0d17f108d7b29fc89](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d17f108d7b29fc89) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d17f108d7b29fc89)) | [ami-04e9f2e813ff9fe6a](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e9f2e813ff9fe6a) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e9f2e813ff9fe6a)) | +| eu-west-2 | [ami-0fa9d7f11b1c55a8d](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa9d7f11b1c55a8d) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa9d7f11b1c55a8d)) | [ami-0031a8d8a3e592132](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0031a8d8a3e592132) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0031a8d8a3e592132)) | +| eu-west-3 | [ami-0d790428b555a7a7b](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d790428b555a7a7b) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d790428b555a7a7b)) | [ami-0f34326e028b1a6b1](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f34326e028b1a6b1) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f34326e028b1a6b1)) | +| me-south-1 | [ami-01d3293169fd94d51](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d3293169fd94d51) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01d3293169fd94d51)) | [ami-007fc801f4d00c286](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007fc801f4d00c286) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-007fc801f4d00c286)) | +| sa-east-1 | [ami-0dd5f9cde76604626](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dd5f9cde76604626) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd5f9cde76604626)) | [ami-09a322ab8f34e327f](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a322ab8f34e327f) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a322ab8f34e327f)) | +| us-east-1 | [ami-0a2c4c14503968196](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2c4c14503968196) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2c4c14503968196)) | [ami-0fb5290b89cd3ae5d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb5290b89cd3ae5d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb5290b89cd3ae5d)) | +| us-east-2 | [ami-00ff52d28bb136b3c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ff52d28bb136b3c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00ff52d28bb136b3c)) | [ami-0962215a714b76135](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0962215a714b76135) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0962215a714b76135)) | +| us-west-1 | [ami-054166b9e67bb0716](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054166b9e67bb0716) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054166b9e67bb0716)) | [ami-091c85b576c87cfae](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091c85b576c87cfae) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-091c85b576c87cfae)) | | us-west-2 | [ami-0ca706847efd66e24](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca706847efd66e24) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca706847efd66e24)) | [ami-0fba23a2dedcb193e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fba23a2dedcb193e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fba23a2dedcb193e)) |

From 909e9fd2a8f0047f43ebbd3e089f4c99a3d0f9ef Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Wed, 4 Nov 2020 17:17:22 -0800 Subject: [PATCH 094/125] specify _Alpine_ release 3.12.1 --- releases/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/releases/README.md b/releases/README.md index c817ea6..e3b400b 100644 --- a/releases/README.md +++ b/releases/README.md @@ -13,8 +13,8 @@ All AMIs built after 2020-09-15 include support for hot-pluggable ENIs, and will sync all associated IPv6 and private IPv4 addresses during `udhcpc` post-bound and post-renew events. -Starting with release 3.12.1, IMDSv2 (Instance MetaData Service v2) is fully -supported, and `aarch64` AMIs are provided for EC2 ARM-based instances. +Starting with Alpine release 3.12.1, IMDSv2 (Instance MetaData Service v2) is +fully supported, and `aarch64` AMIs are provided for EC2 ARM-based instances. During the *first boot* of instances created with these AMIs, the lightweight [tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) init From 9ddcac75c3c23da4ef2786c08a3098ee5f30d251 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Wed, 4 Nov 2020 23:57:46 -0800 Subject: [PATCH 095/125] s/private IPv4/secondary IPv4/ --- releases/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/releases/README.md b/releases/README.md index e3b400b..3310138 100644 --- a/releases/README.md +++ b/releases/README.md @@ -10,7 +10,7 @@ problems launching these AMIs on current generation instances, please open an detailed information as possible. All AMIs built after 2020-09-15 include support for hot-pluggable ENIs, and will -sync all associated IPv6 and private IPv4 addresses during `udhcpc` post-bound +sync all associated IPv6 and secondary IPv4 addresses during `udhcpc` post-bound and post-renew events. Starting with Alpine release 3.12.1, IMDSv2 (Instance MetaData Service v2) is From 24bf01621ff3bb119af1212a5eb3415b554e3f82 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Sat, 14 Nov 2020 23:49:42 -0800 Subject: [PATCH 096/125] Fix assembly of /etc/network/interfaces Include the other interface configs from /etc/network/interfaces.d/ after lo and existing eth*, as was initially intended. Also separate out the assembly code into its own script, as this is done both on boot via eth-eni-setup and on hotplug events by etc-eni-hotplug. Resolves #91 --- scripts/setup-ami | 3 ++ scripts/setup-ami.d/assemble-interfaces | 42 +++++++++++++++++++++++++ scripts/setup-ami.d/etc/interfaces.d/lo | 3 -- scripts/setup-ami.d/eth-eni-hotplug | 11 +------ scripts/setup-ami.d/eth-eni-setup | 22 +------------ 5 files changed, 47 insertions(+), 34 deletions(-) create mode 100755 scripts/setup-ami.d/assemble-interfaces diff --git a/scripts/setup-ami b/scripts/setup-ami index 6084d85..f7bfdb3 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -245,6 +245,9 @@ setup_networking() { "$SETUP/etc/interfaces.d/"* cat "$IFACE_CFG.d/lo" "$IFACE_CFG.d/eth0" > "$IFACE_CFG" + install -o root -g root -Dm755 -t "$TARGET/etc/network" \ + "$SETUP/assemble-interfaces" + # install ucdhcp hooks for EC2 ENI IPv6 and secondary IPv4 install -o root -g root -Dm755 -t "$TARGET/usr/share/udhcpc" \ "$SETUP/eth-eni-hook" diff --git a/scripts/setup-ami.d/assemble-interfaces b/scripts/setup-ami.d/assemble-interfaces new file mode 100755 index 0000000..e723f43 --- /dev/null +++ b/scripts/setup-ami.d/assemble-interfaces @@ -0,0 +1,42 @@ +#!/bin/sh +# vim: set ts=4 et: + +set -e + +IFACE_CFG=/etc/network/interfaces +IFACE_DIR="${IFACE_CFG}.d" + +cd "$IFACE_DIR" + +cat > "$IFACE_CFG.new" <> "$IFACE_CFG.new" + +# existing eths +for i in /sys/class/net/eth*; do + IFACE="$(basename "$i")" + [ ! -f "$IFACE" ] && sed -e "s/%%/$IFACE/g" DEFAULT > "$IFACE" + cat "$IFACE" >> "$IFACE_CFG.new" +done + +# all the rest +for i in "$IFACE_DIR"/*; do + IFACE="$(basename "$i")" + case $IFACE in + DEFAULT|lo|eth*) + continue + ;; + *) + cat "$IFACE" >> "$IFACE_CFG.new" + ;; + esac +done + +# install new interfaces config +cp -a "$IFACE_CFG" "$IFACE_CFG.bak" +mv "$IFACE_CFG.new" "$IFACE_CFG" diff --git a/scripts/setup-ami.d/etc/interfaces.d/lo b/scripts/setup-ami.d/etc/interfaces.d/lo index 9ebf887..77efa67 100644 --- a/scripts/setup-ami.d/etc/interfaces.d/lo +++ b/scripts/setup-ami.d/etc/interfaces.d/lo @@ -1,6 +1,3 @@ -# NOTE: /lib/mdev/eth-eni-hotplug rewrites this file. Edit files in -# /etc/network/interfaces.d/ to persist any customizations. - auto lo iface lo inet loopback diff --git a/scripts/setup-ami.d/eth-eni-hotplug b/scripts/setup-ami.d/eth-eni-hotplug index b28172a..b421942 100755 --- a/scripts/setup-ami.d/eth-eni-hotplug +++ b/scripts/setup-ami.d/eth-eni-hotplug @@ -23,7 +23,6 @@ RTABLE="${MDEV#eth}" let RTABLE+=1000 IFACE_CFG=/etc/network/interfaces -IFACE_DIR="${IFACE_CFG}.d" ip() { v=-4 @@ -42,15 +41,7 @@ ip() { assemble_interfaces() { log info "Rebuilding $IFACE_CFG" - cd "$IFACE_DIR" - cat lo > "$IFACE_CFG.new" - for i in /sys/class/net/eth*; do - IFACE="$(basename "$i")" - [ ! -f "$IFACE" ] && sed -e "s/%%/$IFACE/g" DEFAULT > "$IFACE" - cat "$IFACE" >> "$IFACE_CFG.new" - done - cp -a "$IFACE_CFG" "$IFACE_CFG.bak" - mv "$IFACE_CFG.new" "$IFACE_CFG" + /etc/network/assemble-interfaces } interface_up() { diff --git a/scripts/setup-ami.d/eth-eni-setup b/scripts/setup-ami.d/eth-eni-setup index 6216008..7246dbe 100755 --- a/scripts/setup-ami.d/eth-eni-setup +++ b/scripts/setup-ami.d/eth-eni-setup @@ -2,35 +2,15 @@ description="Sets up interfaces for attached Elastic Network Interfaces" -IFACE_CFG=/etc/network/interfaces - depend() { before net need sysfs } -eni_eths() { - local iface - for iface in /sys/class/net/eth*; do - echo "${iface##*/}" - done -} - start() { local iface ebegin "Setting up interfaces for attached ENIs" - - cat "$IFACE_CFG.d/lo" > "$IFACE_CFG.new" - - for iface in $(eni_eths); do - [ -f "$IFACE_CFG.d/$iface" ] || - sed -e "s/%%/$iface/g" "$IFACE_CFG.d/DEFAULT" > "$IFACE_CFG.d/$iface" - cat "$IFACE_CFG.d/$iface" >> "$IFACE_CFG.new" - einfo "$iface configured" - done - - mv "$IFACE_CFG.new" "$IFACE_CFG" - + /etc/network/assemble-interfaces eend "$?" } From 6e252ce9de885695a41dbb14832f533c7dd6e59a Mon Sep 17 00:00:00 2001 From: tomalok Date: Sun, 22 Nov 2020 16:16:45 -0800 Subject: [PATCH 097/125] Fix 3.12.1 aarch64 Root Resize (#93) release alpine-ami-3.12.1-aarch64-r1 Also... * release new edge builds * Alpine 3.9 is EOL * build_instance_type set in profiles/arch/ * a couple comment fixes --- profiles/alpine.conf | 13 +++- profiles/arch/x86_64-1 | 1 + profiles/base/1 | 8 +-- profiles/base/2 | 10 +-- profiles/test.conf | 3 +- releases/README.md | 116 ++++++++++++++--------------------- scripts/tiny-ec2-backport.sh | 24 ++++++++ 7 files changed, 91 insertions(+), 84 deletions(-) create mode 100755 scripts/tiny-ec2-backport.sh diff --git a/profiles/alpine.conf b/profiles/alpine.conf index fa5b02f..76a73a0 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -4,7 +4,6 @@ version-3_12 { include required("version/3.12") } version-3_11 { include required("version/3.11") } version-3_10 { include required("version/3.10") } -version-3_9 { include required("version/3.9") } version-edge { include required("version/edge") } arch-x86_64 { include required("arch/x86_64") } arch-aarch64 { include required("arch/aarch64") } @@ -14,6 +13,15 @@ alpine { ami_desc_suffix = " - https://github.com/mcrute/alpine-ec2-ami" } +fix_root_resize { + # https://github.com/mcrute/tiny-ec2-bootstrap/pull/16 + pkgs { + sfdisk = true + util-linux = true + } + setup_script = scripts/tiny-ec2-backport.sh +} + # Build definitions BUILDS { # merge version, arch, profile; add { revision = "r1" } if needed @@ -21,8 +29,7 @@ BUILDS { v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${alpine} v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} { revision = "r1" } v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} { revision = "r1" } - v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${alpine} { revision = "r1" } edge-aarch64 = ${version-edge} ${arch-aarch64} ${alpine} - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${alpine} + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${alpine} ${fix_root_resize} { revision = "r1" } } diff --git a/profiles/arch/x86_64-1 b/profiles/arch/x86_64-1 index ce30a7b..2818c17 100644 --- a/profiles/arch/x86_64-1 +++ b/profiles/arch/x86_64-1 @@ -3,6 +3,7 @@ arch = "x86_64" build_arch = "x86_64" +build_instance_type = "t3a.nano" apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.4/apk-tools-2.10.4-x86_64-linux.tar.gz" apk_tools_sha256 = "efe948160317fe78058e207554d0d9195a3dfcc35f77df278d30448d7b3eb892" alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/alpine-keys-2.2-r0.apk" diff --git a/profiles/base/1 b/profiles/base/1 index d82270c..a6a9043 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -12,13 +12,13 @@ release = null end_of_life = null # Architecture -arch = null -build_arch = null +arch = null +build_arch = null +build_instance_type = null # Builder-instance build_region = "us-west-2" build_subnet = null -build_instance_type = "t3.nano" build_public_ip = null build_user = "ec2-user" build_ami_name = "amzn2-ami-hvm-2.0.*-gp2" @@ -36,7 +36,7 @@ ami_volume_size = "1" ami_encrypt = "false" ami_user = "alpine" # modification currently not supported -# NOTE: the following are python format strings, resolved in resolve-profile.py +# NOTE: the following are python format strings, resolved in builder.py ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" diff --git a/profiles/base/2 b/profiles/base/2 index 20cf98d..6b07ada 100644 --- a/profiles/base/2 +++ b/profiles/base/2 @@ -1,4 +1,4 @@ -### base vars, revision 1 +### base vars, revision 2 # vim: ts=2 et: # Profile/Build @@ -12,13 +12,13 @@ release = null end_of_life = null # Architecture -arch = null -build_arch = null +arch = null +build_arch = null +build_instance_type = null # Builder-instance build_region = "us-west-2" build_subnet = null -build_instance_type = "t3a.nano" build_public_ip = null build_user = "ec2-user" build_ami_name = "amzn2-ami-hvm-2.0.*-gp2" @@ -36,7 +36,7 @@ ami_volume_size = "1" ami_encrypt = "false" ami_user = "alpine" -# NOTE: the following are python format strings, resolved in resolve-profile.py +# NOTE: the following are python format strings, resolved in builder.py ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" diff --git a/profiles/test.conf b/profiles/test.conf index dc86fd0..36fd15e 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -4,8 +4,8 @@ version-3_12 { include required("version/3.12") } version-3_11 { include required("version/3.11") } version-3_10 { include required("version/3.10") } -version-3_9 { include required("version/3.9") } version-edge { include required("version/edge") } + arch-x86_64 { include required("arch/x86_64") } arch-aarch64 { include required("arch/aarch64") } @@ -27,7 +27,6 @@ BUILDS { v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${test} v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${test} { revision = "r1" } v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} { revision = "r2" } - v3_9-x86_64 = ${version-3_9} ${arch-x86_64} ${test} { revision = "r3" } edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${test} diff --git a/releases/README.md b/releases/README.md index 3310138..3da1776 100644 --- a/releases/README.md +++ b/releases/README.md @@ -36,31 +36,31 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.12.1 (2020-11-04) +### Alpine Linux 3.12.1 (2020-11-22)
click to show/hide

-| Region | alpine-ami-3.12.1-x86_64-r0 | alpine-ami-3.12.1-aarch64-r0 | -| ------ | --- | --- | -| af-south-1 | [ami-0fa34e940c7164179](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa34e940c7164179) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa34e940c7164179)) | [ami-09fcd0ee80e2c6ced](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09fcd0ee80e2c6ced) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09fcd0ee80e2c6ced)) | -| ap-east-1 | [ami-059c371b8d2fd0989](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059c371b8d2fd0989) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c371b8d2fd0989)) | [ami-0f951fbb40233338b](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f951fbb40233338b) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f951fbb40233338b)) | -| ap-northeast-1 | [ami-010e9eeaa13a80178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010e9eeaa13a80178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010e9eeaa13a80178)) | [ami-0269f3543c56a45c8](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0269f3543c56a45c8) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0269f3543c56a45c8)) | -| ap-northeast-2 | [ami-08e79a74e23e75e36](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e79a74e23e75e36) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08e79a74e23e75e36)) | [ami-071c8f6b35e2c6955](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071c8f6b35e2c6955) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-071c8f6b35e2c6955)) | -| ap-south-1 | [ami-0d953dbbf990c3d4f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d953dbbf990c3d4f) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d953dbbf990c3d4f)) | [ami-089af5c9b460578db](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089af5c9b460578db) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089af5c9b460578db)) | -| ap-southeast-1 | [ami-008bce1c8d323b322](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008bce1c8d323b322) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008bce1c8d323b322)) | [ami-0c67eaa9d318acd5e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c67eaa9d318acd5e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c67eaa9d318acd5e)) | -| ap-southeast-2 | [ami-013de33f160267640](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013de33f160267640) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013de33f160267640)) | [ami-0bf9b7222f35ef0d4](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf9b7222f35ef0d4) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf9b7222f35ef0d4)) | -| ca-central-1 | [ami-00a9048619f660a50](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a9048619f660a50) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a9048619f660a50)) | [ami-09afe18ad5033a8ce](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09afe18ad5033a8ce) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09afe18ad5033a8ce)) | -| eu-central-1 | [ami-03dbad79bee9c8ce1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dbad79bee9c8ce1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dbad79bee9c8ce1)) | [ami-07807351a96484447](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07807351a96484447) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07807351a96484447)) | -| eu-north-1 | [ami-043101bc60cae6466](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043101bc60cae6466) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043101bc60cae6466)) | [ami-0b1aad32939a91c82](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1aad32939a91c82) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1aad32939a91c82)) | -| eu-south-1 | [ami-08d5116337ec06c75](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d5116337ec06c75) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d5116337ec06c75)) | [ami-057a6cfb896f50fb2](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057a6cfb896f50fb2) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-057a6cfb896f50fb2)) | -| eu-west-1 | [ami-04e819555baad56b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e819555baad56b9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e819555baad56b9)) | [ami-081896434373f8ca9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-081896434373f8ca9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-081896434373f8ca9)) | -| eu-west-2 | [ami-02a0122150c17b830](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a0122150c17b830) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a0122150c17b830)) | [ami-0adc0c0202d9c8daa](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adc0c0202d9c8daa) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0adc0c0202d9c8daa)) | -| eu-west-3 | [ami-027f6aa3fb3d68650](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027f6aa3fb3d68650) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-027f6aa3fb3d68650)) | [ami-057906bbbabb67f73](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057906bbbabb67f73) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-057906bbbabb67f73)) | -| me-south-1 | [ami-07bb93ae709388c3c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bb93ae709388c3c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb93ae709388c3c)) | [ami-099c448c758de35fa](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-099c448c758de35fa) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-099c448c758de35fa)) | -| sa-east-1 | [ami-02e4e0517f1910221](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e4e0517f1910221) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e4e0517f1910221)) | [ami-0b7d42fbb0f169c3d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b7d42fbb0f169c3d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b7d42fbb0f169c3d)) | -| us-east-1 | [ami-0cc47d8e29142ecac](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc47d8e29142ecac) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc47d8e29142ecac)) | [ami-0a31ae1e8fc6de17e](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a31ae1e8fc6de17e) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a31ae1e8fc6de17e)) | -| us-east-2 | [ami-07243c178e6ca055c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07243c178e6ca055c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07243c178e6ca055c)) | [ami-07deadfa79bb4613a](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07deadfa79bb4613a) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07deadfa79bb4613a)) | -| us-west-1 | [ami-0c9a9eac6d74fff97](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9a9eac6d74fff97) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97)) | [ami-0daaa29d5c8b1ecaf](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0daaa29d5c8b1ecaf) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0daaa29d5c8b1ecaf)) | -| us-west-2 | [ami-03d82b210e0c36983](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d82b210e0c36983) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d82b210e0c36983)) | [ami-0d6579e59926d4377](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6579e59926d4377) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6579e59926d4377)) | +| Region | alpine-ami-3.12.1-x86_64-r0 | alpine-ami-3.12.1-aarch64-r1 | +| --- | --- | --- | +| af-south-1 | [ami-0fa34e940c7164179](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa34e940c7164179) [(launch)](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa34e940c7164179) | [ami-06588f43a51375252](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06588f43a51375252) [(launch)](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa34e940c7164179) | +| ap-east-1 | [ami-059c371b8d2fd0989](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059c371b8d2fd0989) [(launch)](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c371b8d2fd0989) | [ami-0d30cefbf384f56a1](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d30cefbf384f56a1) [(launch)](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c371b8d2fd0989) | +| ap-northeast-1 | [ami-010e9eeaa13a80178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010e9eeaa13a80178) [(launch)](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010e9eeaa13a80178) | [ami-03cf3e1e77a6c38d1](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cf3e1e77a6c38d1) [(launch)](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010e9eeaa13a80178) | +| ap-northeast-2 | [ami-08e79a74e23e75e36](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e79a74e23e75e36) [(launch)](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08e79a74e23e75e36) | [ami-0c64bd75240f41074](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c64bd75240f41074) [(launch)](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08e79a74e23e75e36) | +| ap-south-1 | [ami-0d953dbbf990c3d4f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d953dbbf990c3d4f) [(launch)](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d953dbbf990c3d4f) | [ami-09cc298b01cf76d37](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09cc298b01cf76d37) [(launch)](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d953dbbf990c3d4f) | +| ap-southeast-1 | [ami-008bce1c8d323b322](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008bce1c8d323b322) [(launch)](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008bce1c8d323b322) | [ami-0b387e2e6db73709a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b387e2e6db73709a) [(launch)](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008bce1c8d323b322) | +| ap-southeast-2 | [ami-013de33f160267640](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013de33f160267640) [(launch)](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013de33f160267640) | [ami-0cc6d6821deb170a9](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc6d6821deb170a9) [(launch)](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013de33f160267640) | +| ca-central-1 | [ami-00a9048619f660a50](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a9048619f660a50) [(launch)](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a9048619f660a50) | [ami-0a7b6973c4d3f0575](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a7b6973c4d3f0575) [(launch)](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a9048619f660a50) | +| eu-central-1 | [ami-03dbad79bee9c8ce1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dbad79bee9c8ce1) [(launch)](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dbad79bee9c8ce1) | [ami-0a39edefd01a2291f](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a39edefd01a2291f) [(launch)](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dbad79bee9c8ce1) | +| eu-north-1 | [ami-043101bc60cae6466](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043101bc60cae6466) [(launch)](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043101bc60cae6466) | [ami-0cfce5134bf4de486](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cfce5134bf4de486) [(launch)](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043101bc60cae6466) | +| eu-south-1 | [ami-08d5116337ec06c75](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d5116337ec06c75) [(launch)](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d5116337ec06c75) | [ami-064f77232ae1a8989](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064f77232ae1a8989) [(launch)](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d5116337ec06c75) | +| eu-west-1 | [ami-04e819555baad56b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e819555baad56b9) [(launch)](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e819555baad56b9) | [ami-0a00b40aa74c41ff0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a00b40aa74c41ff0) [(launch)](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e819555baad56b9) | +| eu-west-2 | [ami-02a0122150c17b830](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a0122150c17b830) [(launch)](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a0122150c17b830) | [ami-0eef6caa5a9e5eae2](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eef6caa5a9e5eae2) [(launch)](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a0122150c17b830) | +| eu-west-3 | [ami-027f6aa3fb3d68650](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027f6aa3fb3d68650) [(launch)](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-027f6aa3fb3d68650) | [ami-04bcba80b692607e5](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04bcba80b692607e5) [(launch)](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-027f6aa3fb3d68650) | +| me-south-1 | [ami-07bb93ae709388c3c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bb93ae709388c3c) [(launch)](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb93ae709388c3c) | [ami-061d84db040baef02](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-061d84db040baef02) [(launch)](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb93ae709388c3c) | +| sa-east-1 | [ami-02e4e0517f1910221](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e4e0517f1910221) [(launch)](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e4e0517f1910221) | [ami-0f326c5e4038adfe2](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f326c5e4038adfe2) [(launch)](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e4e0517f1910221) | +| us-east-1 | [ami-0cc47d8e29142ecac](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc47d8e29142ecac) [(launch)](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc47d8e29142ecac) | [ami-0e2ef8e13935fcead](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2ef8e13935fcead) [(launch)](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc47d8e29142ecac) | +| us-east-2 | [ami-07243c178e6ca055c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07243c178e6ca055c) [(launch)](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07243c178e6ca055c) | [ami-018f0f4eda3104612](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-018f0f4eda3104612) [(launch)](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07243c178e6ca055c) | +| us-west-1 | [ami-0c9a9eac6d74fff97](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9a9eac6d74fff97) [(launch)](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97) | [ami-053fb4aa43b090ad7](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053fb4aa43b090ad7) [(launch)](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97) | +| us-west-2 | [ami-03d82b210e0c36983](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d82b210e0c36983) [(launch)](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d82b210e0c36983) | [ami-0d2a4208becd28b2a](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d2a4208becd28b2a) [(launch)](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d82b210e0c36983) |

@@ -112,54 +112,30 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux 3.9.6 (2020-04-25) +### Alpine Linux Edge (2020-11-22)
click to show/hide

-| Region | alpine-ami-3.9.6-x86_64-r0 | -| ------ | --- | -| ap-northeast-1 | [ami-0133f3a571f684178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0133f3a571f684178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0133f3a571f684178)) | -| ap-northeast-2 | [ami-0f9ad7c51e14bdc3d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ad7c51e14bdc3d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ad7c51e14bdc3d)) | -| ap-south-1 | [ami-00af726ec2f4077a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00af726ec2f4077a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00af726ec2f4077a2)) | -| ap-southeast-1 | [ami-0d52e9d7f91ca051c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d52e9d7f91ca051c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d52e9d7f91ca051c)) | -| ap-southeast-2 | [ami-054360648343b66bc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054360648343b66bc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-054360648343b66bc)) | -| ca-central-1 | [ami-0583a99f342097b6c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0583a99f342097b6c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0583a99f342097b6c)) | -| eu-central-1 | [ami-051eec0106a08df6d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051eec0106a08df6d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051eec0106a08df6d)) | -| eu-north-1 | [ami-07a2b23059054aea3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a2b23059054aea3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a2b23059054aea3)) | -| eu-west-1 | [ami-0eb2b54ab4d09eb80](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb2b54ab4d09eb80) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb2b54ab4d09eb80)) | -| eu-west-2 | [ami-08c87b358b24d1df3](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c87b358b24d1df3) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08c87b358b24d1df3)) | -| eu-west-3 | [ami-00a425aa20737343e](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a425aa20737343e) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00a425aa20737343e)) | -| sa-east-1 | [ami-0ea679407da47b78a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ea679407da47b78a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea679407da47b78a)) | -| us-east-1 | [ami-004f0550310a2d7aa](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004f0550310a2d7aa) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-004f0550310a2d7aa)) | -| us-east-2 | [ami-045a2cc3fe272caee](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045a2cc3fe272caee) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-045a2cc3fe272caee)) | -| us-west-1 | [ami-026a54e52daea1233](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026a54e52daea1233) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026a54e52daea1233)) | -| us-west-2 | [ami-0b933475d362cbfab](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b933475d362cbfab) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b933475d362cbfab)) | - -

- -### Alpine Linux Edge (2020-11-04) -
click to show/hide

- -| Region | alpine-ami-edge-x86_64-20201104223817 | alpine-ami-edge-aarch64-20201104223817 | -| ------ | --- | --- | -| af-south-1 | [ami-0681a1af7ab425246](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0681a1af7ab425246) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0681a1af7ab425246)) | [ami-0752fc9ce476a4721](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0752fc9ce476a4721) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0752fc9ce476a4721)) | -| ap-east-1 | [ami-05d1ed3955f085103](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05d1ed3955f085103) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05d1ed3955f085103)) | [ami-0a676c33f22ff9796](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a676c33f22ff9796) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a676c33f22ff9796)) | -| ap-northeast-1 | [ami-0aaba61ca1bf297eb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aaba61ca1bf297eb) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aaba61ca1bf297eb)) | [ami-026b0f30357b6c249](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026b0f30357b6c249) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026b0f30357b6c249)) | -| ap-northeast-2 | [ami-020f81b319679e216](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020f81b319679e216) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-020f81b319679e216)) | [ami-046e31ba8884954fd](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-046e31ba8884954fd) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-046e31ba8884954fd)) | -| ap-south-1 | [ami-07a1638dc9908589e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a1638dc9908589e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a1638dc9908589e)) | [ami-08c7798c7f965cd80](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c7798c7f965cd80) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c7798c7f965cd80)) | -| ap-southeast-1 | [ami-06101a751c65e61cf](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06101a751c65e61cf) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06101a751c65e61cf)) | [ami-0466de6f68ac671b5](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0466de6f68ac671b5) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0466de6f68ac671b5)) | -| ap-southeast-2 | [ami-04c8d5f2030c3d5f8](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04c8d5f2030c3d5f8) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04c8d5f2030c3d5f8)) | [ami-073efd513d0bf10d1](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073efd513d0bf10d1) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-073efd513d0bf10d1)) | -| ca-central-1 | [ami-0e0991e0a75183387](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e0991e0a75183387) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e0991e0a75183387)) | [ami-0f17d9899463f2d0c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f17d9899463f2d0c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f17d9899463f2d0c)) | -| eu-central-1 | [ami-098989b210ae0a152](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098989b210ae0a152) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098989b210ae0a152)) | [ami-0632fda5bb88d28fc](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0632fda5bb88d28fc) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0632fda5bb88d28fc)) | -| eu-north-1 | [ami-0b6200a74d0b7d7af](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6200a74d0b7d7af) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6200a74d0b7d7af)) | [ami-0f4fa14d45948f11a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f4fa14d45948f11a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f4fa14d45948f11a)) | -| eu-south-1 | [ami-0697a63a71188ddad](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0697a63a71188ddad) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0697a63a71188ddad)) | [ami-05cb6a0b441d9fef4](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05cb6a0b441d9fef4) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05cb6a0b441d9fef4)) | -| eu-west-1 | [ami-0d17f108d7b29fc89](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d17f108d7b29fc89) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d17f108d7b29fc89)) | [ami-04e9f2e813ff9fe6a](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e9f2e813ff9fe6a) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e9f2e813ff9fe6a)) | -| eu-west-2 | [ami-0fa9d7f11b1c55a8d](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa9d7f11b1c55a8d) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa9d7f11b1c55a8d)) | [ami-0031a8d8a3e592132](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0031a8d8a3e592132) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0031a8d8a3e592132)) | -| eu-west-3 | [ami-0d790428b555a7a7b](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d790428b555a7a7b) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d790428b555a7a7b)) | [ami-0f34326e028b1a6b1](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f34326e028b1a6b1) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f34326e028b1a6b1)) | -| me-south-1 | [ami-01d3293169fd94d51](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01d3293169fd94d51) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01d3293169fd94d51)) | [ami-007fc801f4d00c286](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007fc801f4d00c286) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-007fc801f4d00c286)) | -| sa-east-1 | [ami-0dd5f9cde76604626](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dd5f9cde76604626) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd5f9cde76604626)) | [ami-09a322ab8f34e327f](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a322ab8f34e327f) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a322ab8f34e327f)) | -| us-east-1 | [ami-0a2c4c14503968196](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2c4c14503968196) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2c4c14503968196)) | [ami-0fb5290b89cd3ae5d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb5290b89cd3ae5d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb5290b89cd3ae5d)) | -| us-east-2 | [ami-00ff52d28bb136b3c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ff52d28bb136b3c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00ff52d28bb136b3c)) | [ami-0962215a714b76135](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0962215a714b76135) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0962215a714b76135)) | -| us-west-1 | [ami-054166b9e67bb0716](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054166b9e67bb0716) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054166b9e67bb0716)) | [ami-091c85b576c87cfae](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091c85b576c87cfae) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-091c85b576c87cfae)) | -| us-west-2 | [ami-0ca706847efd66e24](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca706847efd66e24) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca706847efd66e24)) | [ami-0fba23a2dedcb193e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fba23a2dedcb193e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fba23a2dedcb193e)) | +| Region | alpine-ami-edge-x86_64-20201122030849 | alpine-ami-edge-aarch64-20201122030849 | +| --- | --- | --- | +| af-south-1 | [ami-00689080a5e228489](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00689080a5e228489) [(launch)](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00689080a5e228489) | [ami-0935c72001f7a2f54](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0935c72001f7a2f54) [(launch)](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00689080a5e228489) | +| ap-east-1 | [ami-04623fc89f566c5f8](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04623fc89f566c5f8) [(launch)](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04623fc89f566c5f8) | [ami-0a043964fc03396fe](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a043964fc03396fe) [(launch)](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04623fc89f566c5f8) | +| ap-northeast-1 | [ami-0a2936daabc513439](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2936daabc513439) [(launch)](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2936daabc513439) | [ami-0d724ea7e866b21ce](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d724ea7e866b21ce) [(launch)](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2936daabc513439) | +| ap-northeast-2 | [ami-0bae21ec956bc0cf1](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bae21ec956bc0cf1) [(launch)](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bae21ec956bc0cf1) | [ami-08c14f5cd992d6cfd](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c14f5cd992d6cfd) [(launch)](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bae21ec956bc0cf1) | +| ap-south-1 | [ami-040e8658c8ebbc192](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-040e8658c8ebbc192) [(launch)](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-040e8658c8ebbc192) | [ami-09ba0c9f67aee101b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09ba0c9f67aee101b) [(launch)](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-040e8658c8ebbc192) | +| ap-southeast-1 | [ami-0aca8ecaf8abeeb65](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aca8ecaf8abeeb65) [(launch)](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aca8ecaf8abeeb65) | [ami-0933f563594672cec](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0933f563594672cec) [(launch)](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aca8ecaf8abeeb65) | +| ap-southeast-2 | [ami-08a6cc6c42c9395e5](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a6cc6c42c9395e5) [(launch)](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08a6cc6c42c9395e5) | [ami-08dbccb68710bda49](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08dbccb68710bda49) [(launch)](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08a6cc6c42c9395e5) | +| ca-central-1 | [ami-07f528b728dd66247](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f528b728dd66247) [(launch)](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f528b728dd66247) | [ami-022ed81730915d151](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-022ed81730915d151) [(launch)](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f528b728dd66247) | +| eu-central-1 | [ami-061e2d779ab8061b1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-061e2d779ab8061b1) [(launch)](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-061e2d779ab8061b1) | [ami-04215f5b57249ad9c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04215f5b57249ad9c) [(launch)](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-061e2d779ab8061b1) | +| eu-north-1 | [ami-083f8b94e6596a053](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-083f8b94e6596a053) [(launch)](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-083f8b94e6596a053) | [ami-036b9e312ed47bc58](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-036b9e312ed47bc58) [(launch)](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-083f8b94e6596a053) | +| eu-south-1 | [ami-00192341756cf9337](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00192341756cf9337) [(launch)](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00192341756cf9337) | [ami-0ed4d967ec895a6dd](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed4d967ec895a6dd) [(launch)](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00192341756cf9337) | +| eu-west-1 | [ami-098d6fa45afb58fbd](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098d6fa45afb58fbd) [(launch)](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098d6fa45afb58fbd) | [ami-0bd9b6eea6a55c618](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd9b6eea6a55c618) [(launch)](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098d6fa45afb58fbd) | +| eu-west-2 | [ami-0d5c28f1f70bebb9b](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d5c28f1f70bebb9b) [(launch)](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5c28f1f70bebb9b) | [ami-010f08d8babfeba66](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010f08d8babfeba66) [(launch)](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5c28f1f70bebb9b) | +| eu-west-3 | [ami-0ed7be4d18b208670](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed7be4d18b208670) [(launch)](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed7be4d18b208670) | [ami-0309fb3773c6ca01f](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0309fb3773c6ca01f) [(launch)](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed7be4d18b208670) | +| me-south-1 | [ami-06edc731c09e741f5](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06edc731c09e741f5) [(launch)](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06edc731c09e741f5) | [ami-0a57b6a1ca13e2c16](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a57b6a1ca13e2c16) [(launch)](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06edc731c09e741f5) | +| sa-east-1 | [ami-0d5af6ce4179ba5dc](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d5af6ce4179ba5dc) [(launch)](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5af6ce4179ba5dc) | [ami-0fa45fb2df9da5785](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa45fb2df9da5785) [(launch)](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5af6ce4179ba5dc) | +| us-east-1 | [ami-0ef054923c6569a9a](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef054923c6569a9a) [(launch)](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef054923c6569a9a) | [ami-0929958d98bd00814](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0929958d98bd00814) [(launch)](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef054923c6569a9a) | +| us-east-2 | [ami-06fd7a587efa80ed2](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06fd7a587efa80ed2) [(launch)](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06fd7a587efa80ed2) | [ami-0b7166a71a0e31b0b](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b7166a71a0e31b0b) [(launch)](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06fd7a587efa80ed2) | +| us-west-1 | [ami-0fdd31127fae3ba4b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fdd31127fae3ba4b) [(launch)](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fdd31127fae3ba4b) | [ami-0cef2acb137d37026](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cef2acb137d37026) [(launch)](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fdd31127fae3ba4b) | +| us-west-2 | [ami-06739656bc1b7c92e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06739656bc1b7c92e) [(launch)](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06739656bc1b7c92e) | [ami-0d4de7896759005a1](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d4de7896759005a1) [(launch)](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06739656bc1b7c92e) |

diff --git a/scripts/tiny-ec2-backport.sh b/scripts/tiny-ec2-backport.sh new file mode 100755 index 0000000..1aae591 --- /dev/null +++ b/scripts/tiny-ec2-backport.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +set -ex + +# Backports tiny-ec2-bootstrap 1.4.1 to Alpine 3.12 and earlier. This fixes +# resizing the root partition on aarch64 AMIs, and is NOT NECESSARY FOR x86_64. +# +# The build profile should also include the following dependencies... +# +# pkgs { +# sfdisk = true +# util-linux = true +# } +# + +TINY_EC2_BOOTSTRAP_VERSION=1.4.1 +TINY_EC2_BOOTSTRAP_URL="$(printf \ + https://raw.githubusercontent.com/mcrute/tiny-ec2-bootstrap/release-%s/tiny-ec2-bootstrap \ + "${TINY_EC2_BOOTSTRAP_VERSION}" +)" + +wget "$TINY_EC2_BOOTSTRAP_URL" +chmod +x tiny-ec2-bootstrap +cp -a tiny-ec2-bootstrap "$TARGET"/etc/init.d From 20ee5f5bc11f7c28f2986752a22d8135dcc9dfc7 Mon Sep 17 00:00:00 2001 From: tomalok Date: Fri, 11 Dec 2020 17:43:27 -0800 Subject: [PATCH 098/125] Define Bootloader in Profiles, etc. (#94) * make it easier to switch between bootloaders * experimental (non-working) EFI_STUB bootloader * remove apk_tools & alpine_keys from profiles * determine & install appropriate apk_toosl & alpine_keys in setup-ami based on version and arch. --- packer.conf | 5 +-- profiles/arch/aarch64-1 | 5 +-- profiles/arch/x86_64-1 | 5 +-- profiles/base/1 | 7 +--- profiles/base/2 | 5 +-- profiles/test.conf | 1 + scripts/setup-ami | 83 ++++++++++++++++++++++++++++------------- 7 files changed, 64 insertions(+), 47 deletions(-) diff --git a/packer.conf b/packer.conf index 08a0d2c..b7ab850 100644 --- a/packer.conf +++ b/packer.conf @@ -80,10 +80,7 @@ provisioners = [ "RELEASE={{user `release`}}" "REVISION={{user `revision`}}" "ARCH={{user `arch`}}" - "APK_TOOLS={{user `apk_tools`}}" - "APK_TOOLS_SHA256={{user `apk_tools_sha256`}}" - "ALPINE_KEYS={{user `alpine_keys`}}" - "ALPINE_KEYS_SHA256={{user `alpine_keys_sha256`}}" + "BOOTLOADER={{user `bootloader`}}" "REPOS={{user `repos`}}" "PKGS={{user `pkgs`}}" "SVCS={{user `svcs`}}" diff --git a/profiles/arch/aarch64-1 b/profiles/arch/aarch64-1 index 2d1acf7..34eb665 100644 --- a/profiles/arch/aarch64-1 +++ b/profiles/arch/aarch64-1 @@ -2,9 +2,6 @@ # vim: ts=2 et: arch = "aarch64" +bootloader = "grub-efi" build_arch = "arm64" build_instance_type = "t4g.nano" -apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.3/apk-tools-2.10.3-aarch64-linux.tar.gz" -apk_tools_sha256 = "58a07e547c83c3a30eb0a0bd73db57d6bbaf92cc093df7a1d9805631f7d349e3" -alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.12/main/aarch64/alpine-keys-2.2-r0.apk" -alpine_keys_sha256 = "94f287d541a03017d37895e46dc43bb62ce2e66ee99bb96b8c3de5c6638d5953" diff --git a/profiles/arch/x86_64-1 b/profiles/arch/x86_64-1 index 2818c17..3deceff 100644 --- a/profiles/arch/x86_64-1 +++ b/profiles/arch/x86_64-1 @@ -2,9 +2,6 @@ # vim: ts=2 et: arch = "x86_64" +bootloader = "syslinux" build_arch = "x86_64" build_instance_type = "t3a.nano" -apk_tools = "https://github.com/alpinelinux/apk-tools/releases/download/v2.10.4/apk-tools-2.10.4-x86_64-linux.tar.gz" -apk_tools_sha256 = "efe948160317fe78058e207554d0d9195a3dfcc35f77df278d30448d7b3eb892" -alpine_keys = "http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/alpine-keys-2.2-r0.apk" -alpine_keys_sha256 = "d75cfd3eb6c863779f4eccb55ab5b6c5a8e47e4538c717fae580d3c47c70574a" diff --git a/profiles/base/1 b/profiles/base/1 index a6a9043..814a6e9 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -34,17 +34,14 @@ ami_desc_prefix = "Alpine Linux " ami_desc_suffix = "" ami_volume_size = "1" ami_encrypt = "false" -ami_user = "alpine" # modification currently not supported +ami_user = "alpine" # NOTE: the following are python format strings, resolved in builder.py ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" # AMI configuration -apk_tools = null -apk_tools_sha256 = null -alpine_keys = null -alpine_keys_sha256 = null +bootloader = null repos {} pkgs { linux-virt = true diff --git a/profiles/base/2 b/profiles/base/2 index 6b07ada..0ee84bc 100644 --- a/profiles/base/2 +++ b/profiles/base/2 @@ -41,10 +41,7 @@ ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{ ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" # AMI configuration -apk_tools = null -apk_tools_sha256 = null -alpine_keys = null -alpine_keys_sha256 = null +bootloader = null repos {} pkgs { linux-virt = true diff --git a/profiles/test.conf b/profiles/test.conf index 36fd15e..5c0c17a 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -11,6 +11,7 @@ arch-aarch64 { include required("arch/aarch64") } # specific to this profile's builds test { + #bootloader = "EFI_STUB" # currently does not work ami_name_prefix = "test-" ami_desc_prefix = "Alpine Test " ami_user = "test" diff --git a/scripts/setup-ami b/scripts/setup-ami index f7bfdb3..9063021 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -7,8 +7,8 @@ DEVICE=/dev/xvdf TARGET=/mnt/target SETUP=/tmp/setup-ami.d -# what bootloader should we use? -[ -d "/sys/firmware/efi" ] && BOOTLOADER=grub-efi || BOOTLOADER=syslinux +[ "$VERSION" = 'edge' ] && V= || V=v +MAIN_REPO="https://dl-cdn.alpinelinux.org/alpine/$V$VERSION/main/$ARCH" die() { printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red @@ -30,15 +30,6 @@ rc_add() { done } -wgets() ( - url="$1" # url to fetch - sha256="$2" # expected SHA256 sum of output - dest="$3" # output path and filename - - wget -T 10 -q -O "$dest" "$url" - echo "$sha256 $dest" | sha256sum -c > /dev/null -) - validate_block_device() { lsblk -P --fs "$DEVICE" >/dev/null 2>&1 || \ die "'$DEVICE' is not a valid block device" @@ -48,14 +39,18 @@ validate_block_device() { fi } +main_repo_pkgs() { + wget -T 10 -q -O - "$MAIN_REPO/" | grep '^> "$TARGET/etc/fstab" fi } @@ -323,7 +351,10 @@ cleanup() { "$TARGET/root/.ash_history" \ "$TARGET/etc/"*- - [ "$BOOTLOADER" = grub-efi ] && umount "$TARGET/boot/efi" + # unmount extra EFI mount + if [ "$BOOTLOADER" = grub-efi ] || [ "$BOOTLOADER" = EFI_STUB ]; then + umount "$TARGET/boot/efi" + fi umount \ "$TARGET/dev" \ @@ -358,7 +389,7 @@ main() { einfo "Installing core packages" install_core_packages - einfo "Configuring and enabling boot loader" + einfo "Configuring and enabling '$BOOTLOADER' boot loader" create_initfs install_bootloader From 3b4e39585053adf33958cee6da340ff68ed356d6 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Fri, 11 Dec 2020 18:02:13 -0800 Subject: [PATCH 099/125] New Release Tool (#83) * Add EC2 data types * Add release command --- scripts/builder.py | 401 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 401 insertions(+) diff --git a/scripts/builder.py b/scripts/builder.py index 40f029e..a98d7c1 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -43,6 +43,7 @@ import textwrap import subprocess import urllib.error +from enum import Enum from collections import defaultdict from datetime import datetime, timedelta from distutils.version import StrictVersion @@ -53,6 +54,211 @@ import boto3 import pyhocon +# This is an ugly hack. We occasionally need the region name but it's not +# attached to anything publicly exposed on the client objects. Hide this here. +def region_from_client(client): + return client._client_config.region_name + + +class EC2Architecture(Enum): + + I386 = "i386" + X86_64 = "x86_64" + ARM64 = "arm64" + + +class AMIState(Enum): + + PENDING = "pending" + AVAILABLE = "available" + INVALID = "invalid" + DEREGISTERED = "deregistered" + TRANSIENT = "transient" + FAILED = "failed" + ERROR = "error" + + +class EC2SnapshotState(Enum): + + PENDING = "pending" + COMPLETED = "completed" + ERROR = "error" + + +class TaggedAWSObject: + """Base class for AWS API models that support tagging + """ + + EDGE = StrictVersion("0.0") + + missing_known_tags = None + + _identity = lambda x: x + _known_tags = { + "Name": _identity, + "profile": _identity, + "revision": _identity, + "profile_build": _identity, + "source_ami": _identity, + "arch": lambda x: EC2Architecture(x), + "end_of_life": lambda x: datetime.fromisoformat(x), + "release": lambda v: EDGE if v == "edge" else StrictVersion(v), + "version": lambda v: EDGE if v == "edge" else StrictVersion(v), + } + + def __repr__(self): + attrs = [] + for k, v in self.__dict__.items(): + if isinstance(v, TaggedAWSObject): + attrs.append(f"{k}=" + object.__repr__(v)) + elif not k.startswith("_"): + attrs.append(f"{k}={v!r}") + attrs = ", ".join(attrs) + + return f"{self.__class__.__name__}({attrs})" + + __str__ = __repr__ + + @property + def aws_tags(self): + """Convert python tags to AWS API tags + + See AMI.aws_permissions for rationale. + """ + for key, values in self.tags.items(): + for value in values: + yield { "Key": key, "Value": value } + + @aws_tags.setter + def aws_tags(self, values): + """Convert AWS API tags to python tags + + See AMI.aws_permissions for rationale. + """ + if not getattr(self, "tags", None): + self.tags = {} + + tags = defaultdict(list) + + for tag in values: + tags[tag["Key"]].append(tag["Value"]) + + self.tags.update(tags) + self._transform_known_tags() + + # XXX(mcrute): The second paragraph might be considered a bug and worth + # fixing at some point. For now those are all read-only attributes though. + def _transform_known_tags(self): + """Convert well known tags into python attributes + + Some tags have special meanings for the model objects that they're + attached to. This copies those tags, transforms them, then sets them in + the model attributes. + + It doesn't touch the tag itself so if that + attribute needs updated and re-saved the tag must be updated in + addition to the model. + """ + self.missing_known_tags = [] + + for k, tf in self._known_tags.items(): + v = self.tags.get(k, []) + if not v: + self.missing_known_tags.append(k) + continue + + if len(v) > 1: + raise Exception(f"multiple instances of tag {k}") + + setattr(self, k, v[0]) + + +class AMI(TaggedAWSObject): + + @property + def aws_permissions(self): + """Convert python permissions to AWS API permissions + + The permissions model for the API makes more sense for a web service + but is overly verbose for working with in Python. This and the setter + allow transforming to/from the API syntax. The python code should + consume the allowed_groups and allowed_users lists directly. + """ + perms = [] + for g in self.allowed_groups: + perms.append({"Group": g}) + + for i in self.allowed_users: + perms.append({"UserId": i}) + + return perms + + @aws_permissions.setter + def aws_permissions(self, perms): + """Convert AWS API permissions to python permissions + """ + for perm in perms: + group = perm.get("Group") + if group: + self.allowed_groups.append(group) + + user = perm.get("UserId") + if user: + self.allowed_users.append(user) + + @classmethod + def from_aws_model(cls, ob, region): + self = cls() + + self.linked_snapshot = None + self.allowed_groups = [] + self.allowed_users = [] + self.region = region + self.architecture = EC2Architecture(ob["Architecture"]) + self.creation_date = ob["CreationDate"] + self.description = ob.get("Description", None) + self.image_id = ob["ImageId"] + self.name = ob.get("Name") + self.owner_id = int(ob["OwnerId"]) + self.public = ob["Public"] + self.state = AMIState(ob["State"]) + self.virtualization_type = ob["VirtualizationType"] + self.state_reason = ob.get("StateReason", {}).get("Message", None) + self.aws_tags = ob.get("Tags", []) + + # XXX(mcrute): Assumes we only ever have one device mapping, which is + # valid for Alpine AMIs but not a good general assumption. + # + # This should always resolve for AVAILABLE images but any part of the + # data structure may not yet exist for images that are still in the + # process of copying. + if ob.get("BlockDeviceMappings"): + self.snapshot_id = \ + ob["BlockDeviceMappings"][0]["Ebs"].get("SnapshotId") + + return self + + +class EC2Snapshot(TaggedAWSObject): + + @classmethod + def from_aws_model(cls, ob, region): + self = cls() + + self.linked_ami = None + self.region = region + self.snapshot_id = ob["SnapshotId"] + self.description = ob.get("Description", None) + self.owner_id = int(ob["OwnerId"]) + self.progress = int(ob["Progress"].rstrip("%")) / 100 + self.start_time = ob["StartTime"] + self.state = EC2SnapshotState(ob["State"]) + self.volume_size = ob["VolumeSize"] + self.aws_tags = ob.get("Tags", []) + + return self + + class ColoredFormatter(logging.Formatter): """Log formatter that colors output based on level """ @@ -694,6 +900,201 @@ class UpdateReleases: yaml.dump(releases, data, sort_keys=False) +class ReleaseAMIs: + """Copy AMIs to other regions and optionally make them public. + + Copies an AMI from a source region to destination regions. If the AMI + exists in some regions but not others it will copy only to the new regions. + This copy will add tags to the destination AMIs to link them to the source + AMI. + + By default does not make the AMIs public. Running the command a second time + with the --public flag will make the already copied AMIs public. If some + AMIs are public and others are not, will make them all public. + + This command will fill in missing regions and synchronized public settings + if it's re-run with the same AMI ID as new regions are added. + """ + + command_name = "release" + + @staticmethod + def add_args(parser): + parser.add_argument("--use-broker", action="store_true", + help="use identity broker to obtain per-region credentials") + parser.add_argument("--public", action="store_true", + help="make all copied images public, even previously copied ones") + parser.add_argument("--source-region", default="us-west-2", + help="source region hosting ami to copy") + parser.add_argument("--region", "-r", action="append", + help="destination regions for copy, may be specified multiple " + "times") + parser.add_argument("--allow-accounts", action="append", + help="add permissions for other accounts to non-public images, " + "may be specified multiple times") + parser.add_argument("--out-file", "-o", + help="output file for JSON AMI map, otherwise stdout") + parser.add_argument("ami", help="ami id to copy") + + @staticmethod + def check_args(args): + if not args.use_broker and not args.region: + return ["Use broker or region must be specified"] + + if args.use_broker and args.region: + return ["Broker and region flags are mutually exclusive."] + + if args.out_file and os.path.exists(args.out_file): + return ["Output file already exists"] + + def get_source_region_client(self, use_broker, source_region): + if use_broker: + return IdentityBrokerClient().boto3_session_for_region( + source_region).client("ec2") + else: + return boto3.session.Session(region_name=source_region).client( + "ec2") + + def iter_regions(self, use_broker, regions): + if use_broker: + for region in IdentityBrokerClient().iter_regions(): + yield region.client("ec2") + return + + for region in regions: + yield boto3.session.Session(region_name=region).client("ec2") + + def get_image(self, client, image_id): + images = client.describe_images(ImageIds=[image_id], Owners=["self"]) + perms = client.describe_image_attribute( + Attribute="launchPermission", ImageId=image_id) + + ami = AMI.from_aws_model( + images["Images"][0], region_from_client(client)) + ami.aws_permissions = perms["LaunchPermissions"] + + return ami + + def get_image_with_tags(self, client, **tags): + images = self.get_images_with_tags(client, **tags) + if len(images) > 1: + raise Exception(f"Too many images for query {tags!r}") + elif len(images) == 0: + return None + else: + return images[0] + + def get_images_with_tags(self, client, **tags): + images = [] + + res = client.describe_images(Owners=["self"], Filters=[ + {"Name": f"tag:{k}", "Values": [v]} for k, v in tags.items()]) + + for image in res["Images"]: + ami = AMI.from_aws_model(image, region_from_client(client)) + perms = client.describe_image_attribute( + Attribute="launchPermission", ImageId=ami.image_id) + ami.aws_permissions = perms["LaunchPermissions"] + images.append(ami) + + return images + + def copy_image(self, from_client, to_client, image_id): + source = self.get_image(from_client, image_id) + + res = to_client.copy_image( + Name=source.name, Description=source.description, + SourceImageId=source.image_id, SourceRegion=source.region) + + tags = [{ + "Key": "source_ami", + "Value": source.image_id, + }] + tags.extend(source.aws_tags) + + to_client.create_tags(Resources=[res["ImageId"]], Tags=tags) + + return self.get_image(to_client, res["ImageId"]) + + def has_incorrect_perms(self, ami, accounts, public): + if accounts and set(ami.allowed_users) != set(accounts): + return True + + if public and not ami.public: + return True + + def update_image_permissions(self, client, ami): + client.modify_image_attribute( + Attribute="launchPermission", ImageId=ami.image_id, + LaunchPermission={"Add": ami.aws_permissions}) + + def run(self, args, root, log): + released = {} + pending_copy = [] + pending_perms = [] + + source_client = self.get_source_region_client( + args.use_broker, args.source_region) + + # Copy image to regions where it is missing, catalog images that need + # permission fixes + for client in self.iter_regions(args.use_broker, args.region): + region_name = region_from_client(client) # For logging + + # Don't copy to source region + if region_name == region_from_client(source_client): + continue + + log.info(f"Considering region {region_name}") + image = self.get_image_with_tags(client, source_ami=args.ami) + if not image: + log.info(f"Copying ami {args.ami} from {args.source_region} " + f"to {region_name}") + ami = self.copy_image(source_client, client, args.ami) + pending_copy.append((client, ami.image_id)) + elif self.has_incorrect_perms( + image, args.allow_accounts, args.public): + log.info(f"Incorrect permissions for ami {args.ami} in region " + f"{region_name}") + pending_perms.append((client, image.image_id)) + + # Wait for images to copy + while pending_copy: + client, id = pending_copy.pop(0) # emulate a FIFO queue + region_name = region_from_client(client) # For logging + image = self.get_image(client, id) + if image.state != AMIState.AVAILABLE: + log.info(f"Waiting for image copy for {id} to complete " + f"in {region_name}") + pending_copy.append((client, id)) + else: + pending_perms.append((client, id)) + released[region_name] = id + + time.sleep(30) + + # Update all permissions + for client, id in pending_perms: + region_name = region_from_client(client) # For logging + + log.info(f"Updating permissions on ami {id} in " + f"{region_name}") + image = self.get_image(client, id) + + if args.public: + image.allowed_groups = ["all"] + elif args.allow_accounts: + image.allowed_users = args.allow_accounts + + self.update_image_permissions(client, image) + + if args.out_file: + with open(args.out_file, "w") as fp: + json.dump(released, fp, indent=4) + else: + json.dump(released, sys.stdout, indent=4) + + class ConvertPackerJSON: """Convert packer.conf to packer.json """ From a530e331f324e499272a0227fd30c55d9a98f62c Mon Sep 17 00:00:00 2001 From: tomalok Date: Mon, 14 Dec 2020 22:24:29 -0800 Subject: [PATCH 100/125] Add refresh-releases subcommand, etc. (#97) * Add refresh-releases subcommand, etc. * builder.py + gen-release-readme - convert `build_time` to int + release - add `source_region` to copied AMI tags - check source AMI's permissions, queue for fixing, if necessary + refresh-releases - update releases/.yaml based on AMIs that exist in regions + explicitly call out `python-dateutil` dependency and `pip install` it into the venv * Release Alpine 3.12.2 & today's edge --- profiles/alpine.conf | 2 +- profiles/version/3.12 | 2 +- releases/README.md | 152 +++--- releases/alpine.yaml | 1197 +++++++++++++++++++++++++++-------------- scripts/builder.py | 105 +++- 5 files changed, 989 insertions(+), 469 deletions(-) diff --git a/profiles/alpine.conf b/profiles/alpine.conf index 76a73a0..cf22041 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -31,5 +31,5 @@ BUILDS { v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} { revision = "r1" } edge-aarch64 = ${version-edge} ${arch-aarch64} ${alpine} - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${alpine} ${fix_root_resize} { revision = "r1" } + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${alpine} ${fix_root_resize} } diff --git a/profiles/version/3.12 b/profiles/version/3.12 index de0e82e..8c8fa68 100644 --- a/profiles/version/3.12 +++ b/profiles/version/3.12 @@ -6,7 +6,7 @@ include required("../base/1") # set version-specific vars version = "3.12" -release = "3.12.1" +release = "3.12.2" end_of_life = "2022-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.12/main" = true diff --git a/releases/README.md b/releases/README.md index 3da1776..bdef193 100644 --- a/releases/README.md +++ b/releases/README.md @@ -36,51 +36,51 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.12.1 (2020-11-22) +### Alpine Linux 3.12.2 (2020-12-14)
click to show/hide

-| Region | alpine-ami-3.12.1-x86_64-r0 | alpine-ami-3.12.1-aarch64-r1 | -| --- | --- | --- | -| af-south-1 | [ami-0fa34e940c7164179](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa34e940c7164179) [(launch)](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa34e940c7164179) | [ami-06588f43a51375252](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06588f43a51375252) [(launch)](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa34e940c7164179) | -| ap-east-1 | [ami-059c371b8d2fd0989](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059c371b8d2fd0989) [(launch)](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c371b8d2fd0989) | [ami-0d30cefbf384f56a1](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d30cefbf384f56a1) [(launch)](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c371b8d2fd0989) | -| ap-northeast-1 | [ami-010e9eeaa13a80178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010e9eeaa13a80178) [(launch)](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010e9eeaa13a80178) | [ami-03cf3e1e77a6c38d1](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cf3e1e77a6c38d1) [(launch)](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010e9eeaa13a80178) | -| ap-northeast-2 | [ami-08e79a74e23e75e36](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08e79a74e23e75e36) [(launch)](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08e79a74e23e75e36) | [ami-0c64bd75240f41074](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c64bd75240f41074) [(launch)](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08e79a74e23e75e36) | -| ap-south-1 | [ami-0d953dbbf990c3d4f](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d953dbbf990c3d4f) [(launch)](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d953dbbf990c3d4f) | [ami-09cc298b01cf76d37](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09cc298b01cf76d37) [(launch)](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d953dbbf990c3d4f) | -| ap-southeast-1 | [ami-008bce1c8d323b322](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008bce1c8d323b322) [(launch)](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008bce1c8d323b322) | [ami-0b387e2e6db73709a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b387e2e6db73709a) [(launch)](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008bce1c8d323b322) | -| ap-southeast-2 | [ami-013de33f160267640](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013de33f160267640) [(launch)](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013de33f160267640) | [ami-0cc6d6821deb170a9](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc6d6821deb170a9) [(launch)](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013de33f160267640) | -| ca-central-1 | [ami-00a9048619f660a50](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a9048619f660a50) [(launch)](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a9048619f660a50) | [ami-0a7b6973c4d3f0575](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a7b6973c4d3f0575) [(launch)](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a9048619f660a50) | -| eu-central-1 | [ami-03dbad79bee9c8ce1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dbad79bee9c8ce1) [(launch)](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dbad79bee9c8ce1) | [ami-0a39edefd01a2291f](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a39edefd01a2291f) [(launch)](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dbad79bee9c8ce1) | -| eu-north-1 | [ami-043101bc60cae6466](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043101bc60cae6466) [(launch)](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043101bc60cae6466) | [ami-0cfce5134bf4de486](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cfce5134bf4de486) [(launch)](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043101bc60cae6466) | -| eu-south-1 | [ami-08d5116337ec06c75](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d5116337ec06c75) [(launch)](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d5116337ec06c75) | [ami-064f77232ae1a8989](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064f77232ae1a8989) [(launch)](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08d5116337ec06c75) | -| eu-west-1 | [ami-04e819555baad56b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e819555baad56b9) [(launch)](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e819555baad56b9) | [ami-0a00b40aa74c41ff0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a00b40aa74c41ff0) [(launch)](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e819555baad56b9) | -| eu-west-2 | [ami-02a0122150c17b830](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a0122150c17b830) [(launch)](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a0122150c17b830) | [ami-0eef6caa5a9e5eae2](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eef6caa5a9e5eae2) [(launch)](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02a0122150c17b830) | -| eu-west-3 | [ami-027f6aa3fb3d68650](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027f6aa3fb3d68650) [(launch)](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-027f6aa3fb3d68650) | [ami-04bcba80b692607e5](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04bcba80b692607e5) [(launch)](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-027f6aa3fb3d68650) | -| me-south-1 | [ami-07bb93ae709388c3c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bb93ae709388c3c) [(launch)](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb93ae709388c3c) | [ami-061d84db040baef02](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-061d84db040baef02) [(launch)](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bb93ae709388c3c) | -| sa-east-1 | [ami-02e4e0517f1910221](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e4e0517f1910221) [(launch)](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e4e0517f1910221) | [ami-0f326c5e4038adfe2](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f326c5e4038adfe2) [(launch)](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e4e0517f1910221) | -| us-east-1 | [ami-0cc47d8e29142ecac](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc47d8e29142ecac) [(launch)](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc47d8e29142ecac) | [ami-0e2ef8e13935fcead](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2ef8e13935fcead) [(launch)](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc47d8e29142ecac) | -| us-east-2 | [ami-07243c178e6ca055c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07243c178e6ca055c) [(launch)](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07243c178e6ca055c) | [ami-018f0f4eda3104612](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-018f0f4eda3104612) [(launch)](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07243c178e6ca055c) | -| us-west-1 | [ami-0c9a9eac6d74fff97](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c9a9eac6d74fff97) [(launch)](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97) | [ami-053fb4aa43b090ad7](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053fb4aa43b090ad7) [(launch)](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c9a9eac6d74fff97) | -| us-west-2 | [ami-03d82b210e0c36983](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d82b210e0c36983) [(launch)](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d82b210e0c36983) | [ami-0d2a4208becd28b2a](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d2a4208becd28b2a) [(launch)](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d82b210e0c36983) | +| Region | alpine-ami-3.12.2-x86_64-r0 | alpine-ami-3.12.2-aarch64-r0 | +| ------ | --- | --- | +| af-south-1 | [ami-0a2c528c48b724eb1](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2c528c48b724eb1) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2c528c48b724eb1)) | [ami-01bddee275c090a50](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01bddee275c090a50) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01bddee275c090a50)) | +| eu-north-1 | [ami-0f97b4e83b330a44b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f97b4e83b330a44b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f97b4e83b330a44b)) | [ami-07b793f6b41391228](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07b793f6b41391228) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07b793f6b41391228)) | +| ap-south-1 | [ami-0082a1edc963aa684](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0082a1edc963aa684) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0082a1edc963aa684)) | [ami-0759affb95b30e7fb](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0759affb95b30e7fb) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0759affb95b30e7fb)) | +| eu-west-3 | [ami-0837b3fcb00163a7d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0837b3fcb00163a7d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0837b3fcb00163a7d)) | [ami-0e27cfc827138e618](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e27cfc827138e618) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0e27cfc827138e618)) | +| eu-west-2 | [ami-0a8578d7d4ebca125](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8578d7d4ebca125) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8578d7d4ebca125)) | [ami-007b53f9896902dbb](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007b53f9896902dbb) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-007b53f9896902dbb)) | +| eu-south-1 | [ami-027ed683f42684d45](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027ed683f42684d45) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-027ed683f42684d45)) | [ami-093ee59d023f73f01](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-093ee59d023f73f01) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-093ee59d023f73f01)) | +| eu-west-1 | [ami-00185f6c477e1099d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00185f6c477e1099d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00185f6c477e1099d)) | [ami-0872a57824a7c8a0f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0872a57824a7c8a0f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0872a57824a7c8a0f)) | +| ap-northeast-2 | [ami-0c869c3c23407b0d5](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c869c3c23407b0d5) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c869c3c23407b0d5)) | [ami-053378f981bc37c5a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053378f981bc37c5a) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-053378f981bc37c5a)) | +| me-south-1 | [ami-0ff80f770d65d1cbf](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ff80f770d65d1cbf) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ff80f770d65d1cbf)) | [ami-0d6b8517fe502f094](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6b8517fe502f094) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6b8517fe502f094)) | +| ap-northeast-1 | [ami-0e4245b0cbe57cb99](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e4245b0cbe57cb99) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e4245b0cbe57cb99)) | [ami-0a5c2347daea31320](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5c2347daea31320) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5c2347daea31320)) | +| sa-east-1 | [ami-0d276bc117826a38a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d276bc117826a38a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d276bc117826a38a)) | [ami-0cb7785de4b330978](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cb7785de4b330978) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb7785de4b330978)) | +| ca-central-1 | [ami-090b8e0d13afd07c1](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-090b8e0d13afd07c1) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-090b8e0d13afd07c1)) | [ami-0d144a02a790d54a3](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d144a02a790d54a3) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d144a02a790d54a3)) | +| ap-east-1 | [ami-0efde8684085c8a1e](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0efde8684085c8a1e) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0efde8684085c8a1e)) | [ami-0f991dfb212ea3e30](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f991dfb212ea3e30) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f991dfb212ea3e30)) | +| ap-southeast-1 | [ami-0a40d2bc9bfc47553](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a40d2bc9bfc47553) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a40d2bc9bfc47553)) | [ami-0a9dfde00c4fdbf44](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a9dfde00c4fdbf44) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a9dfde00c4fdbf44)) | +| ap-southeast-2 | [ami-0e7c828c974171a77](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e7c828c974171a77) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e7c828c974171a77)) | [ami-0432ec565b29d3f0e](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0432ec565b29d3f0e) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0432ec565b29d3f0e)) | +| eu-central-1 | [ami-062cda84fa4f4abe0](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-062cda84fa4f4abe0) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-062cda84fa4f4abe0)) | [ami-0bde2f5e41915b4a2](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bde2f5e41915b4a2) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bde2f5e41915b4a2)) | +| us-east-1 | [ami-042e99e8ac5b82667](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042e99e8ac5b82667) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042e99e8ac5b82667)) | [ami-0f20521153a6af3e7](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f20521153a6af3e7) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f20521153a6af3e7)) | +| us-east-2 | [ami-0bf39a1d2a7d83170](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf39a1d2a7d83170) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf39a1d2a7d83170)) | [ami-064923dd78bf778a8](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064923dd78bf778a8) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-064923dd78bf778a8)) | +| us-west-1 | [ami-089fe5bbb8ee72815](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089fe5bbb8ee72815) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089fe5bbb8ee72815)) | [ami-0f49257c4ee6311a5](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f49257c4ee6311a5) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f49257c4ee6311a5)) | +| us-west-2 | [ami-096f9b59745c9d447](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-096f9b59745c9d447) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-096f9b59745c9d447)) | [ami-0e308f03a3776ea1f](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e308f03a3776ea1f) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e308f03a3776ea1f)) |

-### Alpine Linux 3.11.6 (2020-04-25) +### Alpine Linux 3.11.6 (2020-04-26)
click to show/hide

| Region | alpine-ami-3.11.6-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-04dd34605aba7ce11](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04dd34605aba7ce11) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04dd34605aba7ce11)) | -| ap-northeast-2 | [ami-0fd25bd139c05812d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fd25bd139c05812d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fd25bd139c05812d)) | +| eu-north-1 | [ami-03830331da71d3b6a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03830331da71d3b6a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03830331da71d3b6a)) | | ap-south-1 | [ami-08437e8244154999a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08437e8244154999a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08437e8244154999a)) | +| eu-west-3 | [ami-043d77b850fc69cff](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043d77b850fc69cff) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-043d77b850fc69cff)) | +| eu-west-2 | [ami-0dcb13d7ab5820ac0](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dcb13d7ab5820ac0) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0dcb13d7ab5820ac0)) | +| eu-west-1 | [ami-0a3bf003cc0e5cbaf](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3bf003cc0e5cbaf) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3bf003cc0e5cbaf)) | +| ap-northeast-2 | [ami-0fd25bd139c05812d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fd25bd139c05812d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fd25bd139c05812d)) | +| ap-northeast-1 | [ami-04dd34605aba7ce11](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04dd34605aba7ce11) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04dd34605aba7ce11)) | +| sa-east-1 | [ami-0056de88b2ebc5071](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0056de88b2ebc5071) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0056de88b2ebc5071)) | +| ca-central-1 | [ami-013d1db5df4ad7d4a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013d1db5df4ad7d4a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-013d1db5df4ad7d4a)) | | ap-southeast-1 | [ami-04a63840be47a0816](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04a63840be47a0816) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a63840be47a0816)) | | ap-southeast-2 | [ami-07be0b72172a63df3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07be0b72172a63df3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07be0b72172a63df3)) | -| ca-central-1 | [ami-013d1db5df4ad7d4a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013d1db5df4ad7d4a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-013d1db5df4ad7d4a)) | | eu-central-1 | [ami-03bc1e4d4bf636895](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03bc1e4d4bf636895) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03bc1e4d4bf636895)) | -| eu-north-1 | [ami-03830331da71d3b6a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03830331da71d3b6a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03830331da71d3b6a)) | -| eu-west-1 | [ami-0a3bf003cc0e5cbaf](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3bf003cc0e5cbaf) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3bf003cc0e5cbaf)) | -| eu-west-2 | [ami-0dcb13d7ab5820ac0](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dcb13d7ab5820ac0) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0dcb13d7ab5820ac0)) | -| eu-west-3 | [ami-043d77b850fc69cff](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043d77b850fc69cff) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-043d77b850fc69cff)) | -| sa-east-1 | [ami-0056de88b2ebc5071](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0056de88b2ebc5071) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0056de88b2ebc5071)) | | us-east-1 | [ami-0da684cce2ab4aadb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0da684cce2ab4aadb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0da684cce2ab4aadb)) | | us-east-2 | [ami-014d15ba809c1e48f](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014d15ba809c1e48f) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014d15ba809c1e48f)) | | us-west-1 | [ami-05f659e5fe3528bbd](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f659e5fe3528bbd) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f659e5fe3528bbd)) | @@ -88,23 +88,23 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux 3.10.5 (2020-04-25) +### Alpine Linux 3.10.5 (2020-04-26)
click to show/hide

| Region | alpine-ami-3.10.5-x86_64-r0 | | ------ | --- | -| ap-northeast-1 | [ami-043d40c880c7a176b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043d40c880c7a176b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043d40c880c7a176b)) | -| ap-northeast-2 | [ami-0595dc50c0f0e23f7](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0595dc50c0f0e23f7) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0595dc50c0f0e23f7)) | +| eu-north-1 | [ami-041b6bdb27dbc8226](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-041b6bdb27dbc8226) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-041b6bdb27dbc8226)) | | ap-south-1 | [ami-0c8a22fa0ee90c07a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c8a22fa0ee90c07a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c8a22fa0ee90c07a)) | +| eu-west-3 | [ami-0bbb1a9d10ee0e6ee](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bbb1a9d10ee0e6ee) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bbb1a9d10ee0e6ee)) | +| eu-west-2 | [ami-08ca328d558bee247](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08ca328d558bee247) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08ca328d558bee247)) | +| eu-west-1 | [ami-0451f26166639b1b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0451f26166639b1b9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0451f26166639b1b9)) | +| ap-northeast-2 | [ami-0595dc50c0f0e23f7](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0595dc50c0f0e23f7) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0595dc50c0f0e23f7)) | +| ap-northeast-1 | [ami-043d40c880c7a176b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043d40c880c7a176b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043d40c880c7a176b)) | +| sa-east-1 | [ami-088bc83fe1497e710](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088bc83fe1497e710) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-088bc83fe1497e710)) | +| ca-central-1 | [ami-08c250f635a417222](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c250f635a417222) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c250f635a417222)) | | ap-southeast-1 | [ami-0244d1373053cfe5b](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0244d1373053cfe5b) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0244d1373053cfe5b)) | | ap-southeast-2 | [ami-0cf284dc25e35862d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cf284dc25e35862d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cf284dc25e35862d)) | -| ca-central-1 | [ami-08c250f635a417222](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c250f635a417222) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c250f635a417222)) | | eu-central-1 | [ami-0a626b78c94340b6e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a626b78c94340b6e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a626b78c94340b6e)) | -| eu-north-1 | [ami-041b6bdb27dbc8226](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-041b6bdb27dbc8226) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-041b6bdb27dbc8226)) | -| eu-west-1 | [ami-0451f26166639b1b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0451f26166639b1b9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0451f26166639b1b9)) | -| eu-west-2 | [ami-08ca328d558bee247](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08ca328d558bee247) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08ca328d558bee247)) | -| eu-west-3 | [ami-0bbb1a9d10ee0e6ee](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bbb1a9d10ee0e6ee) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bbb1a9d10ee0e6ee)) | -| sa-east-1 | [ami-088bc83fe1497e710](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088bc83fe1497e710) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-088bc83fe1497e710)) | | us-east-1 | [ami-0e635ea3ca126c707](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e635ea3ca126c707) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e635ea3ca126c707)) | | us-east-2 | [ami-0f5a09a7d1d0ae35f](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f5a09a7d1d0ae35f) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f5a09a7d1d0ae35f)) | | us-west-1 | [ami-06c2aa86f3a72385e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c2aa86f3a72385e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06c2aa86f3a72385e)) | @@ -112,30 +112,54 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux Edge (2020-11-22) +### Alpine Linux 3.9.6 (2020-04-26)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20201122030849 | alpine-ami-edge-aarch64-20201122030849 | -| --- | --- | --- | -| af-south-1 | [ami-00689080a5e228489](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00689080a5e228489) [(launch)](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00689080a5e228489) | [ami-0935c72001f7a2f54](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0935c72001f7a2f54) [(launch)](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00689080a5e228489) | -| ap-east-1 | [ami-04623fc89f566c5f8](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04623fc89f566c5f8) [(launch)](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04623fc89f566c5f8) | [ami-0a043964fc03396fe](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a043964fc03396fe) [(launch)](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04623fc89f566c5f8) | -| ap-northeast-1 | [ami-0a2936daabc513439](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2936daabc513439) [(launch)](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2936daabc513439) | [ami-0d724ea7e866b21ce](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d724ea7e866b21ce) [(launch)](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2936daabc513439) | -| ap-northeast-2 | [ami-0bae21ec956bc0cf1](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bae21ec956bc0cf1) [(launch)](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bae21ec956bc0cf1) | [ami-08c14f5cd992d6cfd](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c14f5cd992d6cfd) [(launch)](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bae21ec956bc0cf1) | -| ap-south-1 | [ami-040e8658c8ebbc192](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-040e8658c8ebbc192) [(launch)](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-040e8658c8ebbc192) | [ami-09ba0c9f67aee101b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09ba0c9f67aee101b) [(launch)](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-040e8658c8ebbc192) | -| ap-southeast-1 | [ami-0aca8ecaf8abeeb65](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aca8ecaf8abeeb65) [(launch)](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aca8ecaf8abeeb65) | [ami-0933f563594672cec](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0933f563594672cec) [(launch)](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aca8ecaf8abeeb65) | -| ap-southeast-2 | [ami-08a6cc6c42c9395e5](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a6cc6c42c9395e5) [(launch)](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08a6cc6c42c9395e5) | [ami-08dbccb68710bda49](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08dbccb68710bda49) [(launch)](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08a6cc6c42c9395e5) | -| ca-central-1 | [ami-07f528b728dd66247](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f528b728dd66247) [(launch)](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f528b728dd66247) | [ami-022ed81730915d151](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-022ed81730915d151) [(launch)](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f528b728dd66247) | -| eu-central-1 | [ami-061e2d779ab8061b1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-061e2d779ab8061b1) [(launch)](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-061e2d779ab8061b1) | [ami-04215f5b57249ad9c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04215f5b57249ad9c) [(launch)](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-061e2d779ab8061b1) | -| eu-north-1 | [ami-083f8b94e6596a053](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-083f8b94e6596a053) [(launch)](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-083f8b94e6596a053) | [ami-036b9e312ed47bc58](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-036b9e312ed47bc58) [(launch)](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-083f8b94e6596a053) | -| eu-south-1 | [ami-00192341756cf9337](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00192341756cf9337) [(launch)](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00192341756cf9337) | [ami-0ed4d967ec895a6dd](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed4d967ec895a6dd) [(launch)](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00192341756cf9337) | -| eu-west-1 | [ami-098d6fa45afb58fbd](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098d6fa45afb58fbd) [(launch)](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098d6fa45afb58fbd) | [ami-0bd9b6eea6a55c618](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd9b6eea6a55c618) [(launch)](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098d6fa45afb58fbd) | -| eu-west-2 | [ami-0d5c28f1f70bebb9b](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d5c28f1f70bebb9b) [(launch)](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5c28f1f70bebb9b) | [ami-010f08d8babfeba66](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010f08d8babfeba66) [(launch)](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5c28f1f70bebb9b) | -| eu-west-3 | [ami-0ed7be4d18b208670](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed7be4d18b208670) [(launch)](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed7be4d18b208670) | [ami-0309fb3773c6ca01f](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0309fb3773c6ca01f) [(launch)](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed7be4d18b208670) | -| me-south-1 | [ami-06edc731c09e741f5](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06edc731c09e741f5) [(launch)](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06edc731c09e741f5) | [ami-0a57b6a1ca13e2c16](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a57b6a1ca13e2c16) [(launch)](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06edc731c09e741f5) | -| sa-east-1 | [ami-0d5af6ce4179ba5dc](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d5af6ce4179ba5dc) [(launch)](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5af6ce4179ba5dc) | [ami-0fa45fb2df9da5785](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa45fb2df9da5785) [(launch)](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5af6ce4179ba5dc) | -| us-east-1 | [ami-0ef054923c6569a9a](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef054923c6569a9a) [(launch)](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef054923c6569a9a) | [ami-0929958d98bd00814](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0929958d98bd00814) [(launch)](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef054923c6569a9a) | -| us-east-2 | [ami-06fd7a587efa80ed2](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06fd7a587efa80ed2) [(launch)](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06fd7a587efa80ed2) | [ami-0b7166a71a0e31b0b](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b7166a71a0e31b0b) [(launch)](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06fd7a587efa80ed2) | -| us-west-1 | [ami-0fdd31127fae3ba4b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fdd31127fae3ba4b) [(launch)](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fdd31127fae3ba4b) | [ami-0cef2acb137d37026](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cef2acb137d37026) [(launch)](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fdd31127fae3ba4b) | -| us-west-2 | [ami-06739656bc1b7c92e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06739656bc1b7c92e) [(launch)](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06739656bc1b7c92e) | [ami-0d4de7896759005a1](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d4de7896759005a1) [(launch)](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06739656bc1b7c92e) | +| Region | alpine-ami-3.9.6-x86_64-r0 | +| ------ | --- | +| eu-north-1 | [ami-07a2b23059054aea3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a2b23059054aea3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a2b23059054aea3)) | +| ap-south-1 | [ami-00af726ec2f4077a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00af726ec2f4077a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00af726ec2f4077a2)) | +| eu-west-3 | [ami-00a425aa20737343e](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a425aa20737343e) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00a425aa20737343e)) | +| eu-west-2 | [ami-08c87b358b24d1df3](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c87b358b24d1df3) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08c87b358b24d1df3)) | +| eu-west-1 | [ami-0eb2b54ab4d09eb80](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb2b54ab4d09eb80) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb2b54ab4d09eb80)) | +| ap-northeast-2 | [ami-0f9ad7c51e14bdc3d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ad7c51e14bdc3d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ad7c51e14bdc3d)) | +| ap-northeast-1 | [ami-0133f3a571f684178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0133f3a571f684178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0133f3a571f684178)) | +| sa-east-1 | [ami-0ea679407da47b78a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ea679407da47b78a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea679407da47b78a)) | +| ca-central-1 | [ami-0583a99f342097b6c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0583a99f342097b6c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0583a99f342097b6c)) | +| ap-southeast-1 | [ami-0d52e9d7f91ca051c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d52e9d7f91ca051c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d52e9d7f91ca051c)) | +| ap-southeast-2 | [ami-054360648343b66bc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054360648343b66bc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-054360648343b66bc)) | +| eu-central-1 | [ami-051eec0106a08df6d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051eec0106a08df6d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051eec0106a08df6d)) | +| us-east-1 | [ami-004f0550310a2d7aa](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004f0550310a2d7aa) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-004f0550310a2d7aa)) | +| us-east-2 | [ami-045a2cc3fe272caee](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045a2cc3fe272caee) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-045a2cc3fe272caee)) | +| us-west-1 | [ami-026a54e52daea1233](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026a54e52daea1233) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026a54e52daea1233)) | +| us-west-2 | [ami-0b933475d362cbfab](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b933475d362cbfab) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b933475d362cbfab)) | + +

+ +### Alpine Linux Edge (2020-12-14) +
click to show/hide

+ +| Region | alpine-ami-edge-x86_64-20201213190459 | alpine-ami-edge-aarch64-20201213190459 | +| ------ | --- | --- | +| af-south-1 | [ami-0f910995b3fcbc2a1](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f910995b3fcbc2a1) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f910995b3fcbc2a1)) | [ami-0ef1ed51536d4c21c](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef1ed51536d4c21c) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef1ed51536d4c21c)) | +| eu-north-1 | [ami-00d23d9fe5e916760](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00d23d9fe5e916760) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00d23d9fe5e916760)) | [ami-0fd0089405ce34751](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fd0089405ce34751) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fd0089405ce34751)) | +| ap-south-1 | [ami-02cdde8617c38b6da](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02cdde8617c38b6da) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02cdde8617c38b6da)) | [ami-0fb7826afebdee836](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb7826afebdee836) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb7826afebdee836)) | +| eu-west-3 | [ami-06649b9ba1b9c6625](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06649b9ba1b9c6625) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06649b9ba1b9c6625)) | [ami-0a5b6e3683e165f46](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5b6e3683e165f46) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5b6e3683e165f46)) | +| eu-west-2 | [ami-0b54da8cc7d2e71ab](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b54da8cc7d2e71ab) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b54da8cc7d2e71ab)) | [ami-01f876c398a9a1e8a](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01f876c398a9a1e8a) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01f876c398a9a1e8a)) | +| eu-south-1 | [ami-0e119f0362787d26f](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e119f0362787d26f) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e119f0362787d26f)) | [ami-08a7fd2863b4cf769](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a7fd2863b4cf769) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08a7fd2863b4cf769)) | +| eu-west-1 | [ami-06bb894c2ea22cfa7](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06bb894c2ea22cfa7) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06bb894c2ea22cfa7)) | [ami-06844e8cfb88e3488](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06844e8cfb88e3488) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06844e8cfb88e3488)) | +| ap-northeast-2 | [ami-0608684322b1df99d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0608684322b1df99d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0608684322b1df99d)) | [ami-0be33da35fb42cf91](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be33da35fb42cf91) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0be33da35fb42cf91)) | +| me-south-1 | [ami-00ad5f5422bb04d33](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ad5f5422bb04d33) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00ad5f5422bb04d33)) | [ami-012a6c8b0aa9755e5](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-012a6c8b0aa9755e5) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-012a6c8b0aa9755e5)) | +| ap-northeast-1 | [ami-00f04e83341318e5d](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00f04e83341318e5d) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00f04e83341318e5d)) | [ami-0c3e9ea96d54b2fa6](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3e9ea96d54b2fa6) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3e9ea96d54b2fa6)) | +| sa-east-1 | [ami-048f22481002c6990](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-048f22481002c6990) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-048f22481002c6990)) | [ami-0490301bf3d8f367b](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0490301bf3d8f367b) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0490301bf3d8f367b)) | +| ca-central-1 | [ami-0c6173e1c33395119](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c6173e1c33395119) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c6173e1c33395119)) | [ami-03a14b888f050a80c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03a14b888f050a80c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03a14b888f050a80c)) | +| ap-east-1 | [ami-0843f7ca1455bbcf3](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0843f7ca1455bbcf3) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0843f7ca1455bbcf3)) | [ami-0960c97dbfb4c2370](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0960c97dbfb4c2370) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0960c97dbfb4c2370)) | +| ap-southeast-1 | [ami-0a0f9e02019761a7d](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a0f9e02019761a7d) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a0f9e02019761a7d)) | [ami-052c0924f23638e55](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052c0924f23638e55) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052c0924f23638e55)) | +| ap-southeast-2 | [ami-0a4aef473ddfc4942](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a4aef473ddfc4942) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a4aef473ddfc4942)) | [ami-08a3a7e67af495c34](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a3a7e67af495c34) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08a3a7e67af495c34)) | +| eu-central-1 | [ami-0f7ba6027999c7b2c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7ba6027999c7b2c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7ba6027999c7b2c)) | [ami-0c1ed5c6c58a479a1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c1ed5c6c58a479a1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c1ed5c6c58a479a1)) | +| us-east-1 | [ami-04c9b228d4a45c132](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04c9b228d4a45c132) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04c9b228d4a45c132)) | [ami-088169794239b59c9](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088169794239b59c9) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-088169794239b59c9)) | +| us-east-2 | [ami-026a039af74def437](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026a039af74def437) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-026a039af74def437)) | [ami-08d78e14e90b41779](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d78e14e90b41779) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08d78e14e90b41779)) | +| us-west-1 | [ami-0a9ffe73ca66b492b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a9ffe73ca66b492b) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a9ffe73ca66b492b)) | [ami-0fc9b035119434b1a](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc9b035119434b1a) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc9b035119434b1a)) | +| us-west-2 | [ami-0b91b7b604d8e2698](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b91b7b604d8e2698) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b91b7b604d8e2698)) | [ami-0769e7ae6646ee6ce](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0769e7ae6646ee6ce) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0769e7ae6646ee6ce)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 02da4e1..d5e889d 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,5 +1,67 @@ edge-x86_64: edge: + alpine-ami-edge-x86_64-20201122030849: + description: Alpine Linux edge x86_64 20201122030849 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20201122030849' + end_of_life: '2020-11-23T03:08:49' + build_time: '1606045539' + artifacts: + af-south-1: ami-00689080a5e228489 + eu-north-1: ami-083f8b94e6596a053 + ap-south-1: ami-040e8658c8ebbc192 + eu-west-3: ami-0ed7be4d18b208670 + eu-west-2: ami-0d5c28f1f70bebb9b + eu-south-1: ami-00192341756cf9337 + eu-west-1: ami-098d6fa45afb58fbd + ap-northeast-2: ami-0bae21ec956bc0cf1 + me-south-1: ami-06edc731c09e741f5 + ap-northeast-1: ami-0a2936daabc513439 + sa-east-1: ami-0d5af6ce4179ba5dc + ca-central-1: ami-07f528b728dd66247 + ap-east-1: ami-04623fc89f566c5f8 + ap-southeast-1: ami-0aca8ecaf8abeeb65 + ap-southeast-2: ami-08a6cc6c42c9395e5 + eu-central-1: ami-061e2d779ab8061b1 + us-east-1: ami-0ef054923c6569a9a + us-east-2: ami-06fd7a587efa80ed2 + us-west-1: ami-0fdd31127fae3ba4b + us-west-2: ami-06739656bc1b7c92e + alpine-ami-edge-x86_64-20201104223817: + description: Alpine Linux edge x86_64 20201104223817 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20201104223817' + end_of_life: '2020-11-05T22:38:17' + build_time: '1604559572' + artifacts: + af-south-1: ami-0681a1af7ab425246 + eu-north-1: ami-0b6200a74d0b7d7af + ap-south-1: ami-07a1638dc9908589e + eu-west-3: ami-0d790428b555a7a7b + eu-west-2: ami-0fa9d7f11b1c55a8d + eu-south-1: ami-0697a63a71188ddad + eu-west-1: ami-0d17f108d7b29fc89 + ap-northeast-2: ami-020f81b319679e216 + me-south-1: ami-01d3293169fd94d51 + ap-northeast-1: ami-0aaba61ca1bf297eb + sa-east-1: ami-0dd5f9cde76604626 + ca-central-1: ami-0e0991e0a75183387 + ap-east-1: ami-05d1ed3955f085103 + ap-southeast-1: ami-06101a751c65e61cf + ap-southeast-2: ami-04c8d5f2030c3d5f8 + eu-central-1: ami-098989b210ae0a152 + us-east-1: ami-0a2c4c14503968196 + us-east-2: ami-00ff52d28bb136b3c + us-west-1: ami-054166b9e67bb0716 + us-west-2: ami-0ca706847efd66e24 alpine-ami-edge-x86_64-20190826015716: description: Alpine Linux edge x86_64 20190826015716 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -9,105 +71,24 @@ edge-x86_64: arch: x86_64 revision: '20190826015716' end_of_life: '2019-08-27T01:57:16' - build_time: 1566785209 + build_time: '1566813607' artifacts: - ap-northeast-1: ami-0aee477cc2cee23cf - ap-northeast-2: ami-05cbcb200dde2845b + eu-north-1: ami-042a6066f12f93411 ap-south-1: ami-0c3747e69c2496209 + eu-west-3: ami-07614b8be5de3b1a0 + eu-west-2: ami-0fa5a6db02d8cff64 + eu-west-1: ami-04b8b162151a2e45d + ap-northeast-2: ami-05cbcb200dde2845b + ap-northeast-1: ami-0aee477cc2cee23cf + sa-east-1: ami-09324c8018c018931 + ca-central-1: ami-0e4a890b424d67f67 ap-southeast-1: ami-02f37bdd135ec4d42 ap-southeast-2: ami-0463b6ff7b57d9090 - ca-central-1: ami-0e4a890b424d67f67 eu-central-1: ami-092b4f46b7d79af32 - eu-north-1: ami-042a6066f12f93411 - eu-west-1: ami-04b8b162151a2e45d - eu-west-2: ami-0fa5a6db02d8cff64 - eu-west-3: ami-07614b8be5de3b1a0 - sa-east-1: ami-09324c8018c018931 us-east-1: ami-08f2e440a4fc821b0 us-east-2: ami-002f49d922035cd6b us-west-1: ami-0e146ed2f408cfaee us-west-2: ami-052fcb0bc085a75a2 - alpine-ami-edge-x86_64-20191026200352: - description: Alpine Linux edge x86_64 20191026200352 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20191026200352' - end_of_life: '2019-10-27T20:03:52' - build_time: 1572120756 - artifacts: - ap-northeast-1: ami-0112f6ea81c86d5e6 - ap-northeast-2: ami-085769ebaedbfdf81 - ap-south-1: ami-018d0a72b1c1b2923 - ap-southeast-1: ami-0efbcf7df7751898a - ap-southeast-2: ami-06dc954ca0af33023 - ca-central-1: ami-029fabbc15f6ec893 - eu-central-1: ami-01353f3799d62f271 - eu-north-1: ami-0787f149b1a3f8194 - eu-west-1: ami-068378748044554e5 - eu-west-2: ami-058faf9bf50c5fdc4 - eu-west-3: ami-0f0bdda8a983eace3 - sa-east-1: ami-08b88bdd43ac5d063 - us-east-1: ami-0193a17629e6377fc - us-east-2: ami-03db856d0b5b661ce - us-west-1: ami-04864199556e66fad - us-west-2: ami-03e59f12dbbee65d4 - alpine-ami-edge-x86_64-20191220032351: - description: Alpine Linux edge x86_64 20191220032351 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20191220032351' - end_of_life: '2019-12-21T03:23:51' - build_time: 1576812862 - artifacts: - ap-northeast-1: ami-09c848c4cb4b2bfcc - ap-northeast-2: ami-0ce75b84103d6cf1b - ap-south-1: ami-024a83d2f5f690e9c - ap-southeast-1: ami-045d3298bde43a38e - ap-southeast-2: ami-02a507af131b58f77 - ca-central-1: ami-00f6c418339093258 - eu-central-1: ami-00e094f733fa389c1 - eu-north-1: ami-069b1f7572e57e869 - eu-west-1: ami-0fe261f4ce1adac48 - eu-west-2: ami-0c8643b000cb720b6 - eu-west-3: ami-0bfe5b9d1a2d3c6c9 - sa-east-1: ami-075e2722dd4b1e660 - us-east-1: ami-0d42d7ed27a1b508a - us-east-2: ami-016775e32e6c85c18 - us-west-1: ami-065cbd73f2f0dd6d6 - us-west-2: ami-0897367ecebfd4b79 - alpine-ami-edge-x86_64-20200104190012: - description: Alpine Linux edge x86_64 20200104190012 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20200104190012' - end_of_life: '2020-01-05T19:00:12' - build_time: 1578165015 - artifacts: - ap-northeast-1: ami-0fda74ed5ffb7ccd7 - ap-northeast-2: ami-0be5d677b47fce454 - ap-south-1: ami-094720b652f133f9c - ap-southeast-1: ami-0f7d8a18e9be21cd1 - ap-southeast-2: ami-0386d4dc2cf9f3d91 - ca-central-1: ami-0fe2907efc576aa3c - eu-central-1: ami-08caf54970e53151e - eu-north-1: ami-063212df61bebdfac - eu-west-1: ami-034638ad783384202 - eu-west-2: ami-041fba8b0ded32106 - eu-west-3: ami-015e5b9edb52ee495 - sa-east-1: ami-0dbd80d9204b2a206 - us-east-1: ami-0047bb64e977f5521 - us-east-2: ami-024246dd06d739e37 - us-west-1: ami-089f878b5816e24f4 - us-west-2: ami-0f6dc9ba311992682 alpine-ami-edge-x86_64-20200205024005: description: Alpine Linux edge x86_64 20200205024005 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -117,20 +98,20 @@ edge-x86_64: arch: x86_64 revision: '20200205024005' end_of_life: '2020-02-06T02:40:05' - build_time: 1580871011 + build_time: '1580899414' artifacts: - ap-northeast-1: ami-0e66e152e67bd01c4 - ap-northeast-2: ami-0da81d92789ac64c9 + eu-north-1: ami-0440a037c49287602 ap-south-1: ami-00563d27b2511771e + eu-west-3: ami-0a96a077e024cf68c + eu-west-2: ami-0c89e502a2bbae39c + eu-west-1: ami-0c6e2f66869524c92 + ap-northeast-2: ami-0da81d92789ac64c9 + ap-northeast-1: ami-0e66e152e67bd01c4 + sa-east-1: ami-0701231683e53500b + ca-central-1: ami-09f98f0464adfebb2 ap-southeast-1: ami-0c319f4e0be04ba59 ap-southeast-2: ami-0a3ef06def6f50c0d - ca-central-1: ami-09f98f0464adfebb2 eu-central-1: ami-001559f80be1add88 - eu-north-1: ami-0440a037c49287602 - eu-west-1: ami-0c6e2f66869524c92 - eu-west-2: ami-0c89e502a2bbae39c - eu-west-3: ami-0a96a077e024cf68c - sa-east-1: ami-0701231683e53500b us-east-1: ami-002a48030440e00da us-east-2: ami-0ae27524e2b9bb820 us-west-1: ami-02a94605eedcd1d51 @@ -144,24 +125,105 @@ edge-x86_64: arch: x86_64 revision: '20200403021415' end_of_life: '2020-04-04T02:14:15' - build_time: 1585880640 + build_time: '1585909041' artifacts: - ap-northeast-1: ami-0a930ab443e79658a - ap-northeast-2: ami-0e5c3704b08250be0 + eu-north-1: ami-046e324b95557b67e ap-south-1: ami-0e9b4aa2c6dfa1c6b + eu-west-3: ami-03b6049476dc86faa + eu-west-2: ami-0581c02f513cab380 + eu-west-1: ami-0370efeca292a68fa + ap-northeast-2: ami-0e5c3704b08250be0 + ap-northeast-1: ami-0a930ab443e79658a + sa-east-1: ami-0a82e4262b07441f2 + ca-central-1: ami-078a0413716fb1ee2 ap-southeast-1: ami-017d1c8652fe5fb6e ap-southeast-2: ami-0b20e853350fcc974 - ca-central-1: ami-078a0413716fb1ee2 eu-central-1: ami-0b949041038ac64f8 - eu-north-1: ami-046e324b95557b67e - eu-west-1: ami-0370efeca292a68fa - eu-west-2: ami-0581c02f513cab380 - eu-west-3: ami-03b6049476dc86faa - sa-east-1: ami-0a82e4262b07441f2 us-east-1: ami-034b4fb0ea71693e3 us-east-2: ami-058700b313ac9dde9 us-west-1: ami-08e25ab23aa5a3904 us-west-2: ami-08f7bd174f27a0375 + alpine-ami-edge-x86_64-20200104190012: + description: Alpine Linux edge x86_64 20200104190012 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20200104190012' + end_of_life: '2020-01-05T19:00:12' + build_time: '1578193428' + artifacts: + eu-north-1: ami-063212df61bebdfac + ap-south-1: ami-094720b652f133f9c + eu-west-3: ami-015e5b9edb52ee495 + eu-west-2: ami-041fba8b0ded32106 + eu-west-1: ami-034638ad783384202 + ap-northeast-2: ami-0be5d677b47fce454 + ap-northeast-1: ami-0fda74ed5ffb7ccd7 + sa-east-1: ami-0dbd80d9204b2a206 + ca-central-1: ami-0fe2907efc576aa3c + ap-southeast-1: ami-0f7d8a18e9be21cd1 + ap-southeast-2: ami-0386d4dc2cf9f3d91 + eu-central-1: ami-08caf54970e53151e + us-east-1: ami-0047bb64e977f5521 + us-east-2: ami-024246dd06d739e37 + us-west-1: ami-089f878b5816e24f4 + us-west-2: ami-0f6dc9ba311992682 + alpine-ami-edge-x86_64-20191220032351: + description: Alpine Linux edge x86_64 20191220032351 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20191220032351' + end_of_life: '2019-12-21T03:23:51' + build_time: '1576841260' + artifacts: + eu-north-1: ami-069b1f7572e57e869 + ap-south-1: ami-024a83d2f5f690e9c + eu-west-3: ami-0bfe5b9d1a2d3c6c9 + eu-west-2: ami-0c8643b000cb720b6 + eu-west-1: ami-0fe261f4ce1adac48 + ap-northeast-2: ami-0ce75b84103d6cf1b + ap-northeast-1: ami-09c848c4cb4b2bfcc + sa-east-1: ami-075e2722dd4b1e660 + ca-central-1: ami-00f6c418339093258 + ap-southeast-1: ami-045d3298bde43a38e + ap-southeast-2: ami-02a507af131b58f77 + eu-central-1: ami-00e094f733fa389c1 + us-east-1: ami-0d42d7ed27a1b508a + us-east-2: ami-016775e32e6c85c18 + us-west-1: ami-065cbd73f2f0dd6d6 + us-west-2: ami-0897367ecebfd4b79 + alpine-ami-edge-x86_64-20191026200352: + description: Alpine Linux edge x86_64 20191026200352 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20191026200352' + end_of_life: '2019-10-27T20:03:52' + build_time: '1572149159' + artifacts: + eu-north-1: ami-0787f149b1a3f8194 + ap-south-1: ami-018d0a72b1c1b2923 + eu-west-3: ami-0f0bdda8a983eace3 + eu-west-2: ami-058faf9bf50c5fdc4 + eu-west-1: ami-068378748044554e5 + ap-northeast-2: ami-085769ebaedbfdf81 + ap-northeast-1: ami-0112f6ea81c86d5e6 + sa-east-1: ami-08b88bdd43ac5d063 + ca-central-1: ami-029fabbc15f6ec893 + ap-southeast-1: ami-0efbcf7df7751898a + ap-southeast-2: ami-06dc954ca0af33023 + eu-central-1: ami-01353f3799d62f271 + us-east-1: ami-0193a17629e6377fc + us-east-2: ami-03db856d0b5b661ce + us-west-1: ami-04864199556e66fad + us-west-2: ami-03e59f12dbbee65d4 alpine-ami-edge-x86_64-20200425232123: description: Alpine Linux edge x86_64 20200425232123 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -171,53 +233,394 @@ edge-x86_64: arch: x86_64 revision: '20200425232123' end_of_life: '2020-04-26T23:21:23' - build_time: 1587857443 + build_time: '1587885839' artifacts: - ap-northeast-1: ami-0f64e8385eb16f0c5 - ap-northeast-2: ami-0f6525d9186a0ee66 + eu-north-1: ami-0ac2cb76721262b8f ap-south-1: ami-034d9a20d9bf2049f + eu-west-3: ami-037d85dcf06bc913e + eu-west-2: ami-0329b37ebc36521c7 + eu-west-1: ami-0a86b121e789d84a2 + ap-northeast-2: ami-0f6525d9186a0ee66 + ap-northeast-1: ami-0f64e8385eb16f0c5 + sa-east-1: ami-0b8e53df93ee4132d + ca-central-1: ami-068da53b91dcfad35 ap-southeast-1: ami-0e64d169297389f9e ap-southeast-2: ami-0afc0bab8196b70e4 - ca-central-1: ami-068da53b91dcfad35 eu-central-1: ami-0b04139e51df7902b - eu-north-1: ami-0ac2cb76721262b8f - eu-west-1: ami-0a86b121e789d84a2 - eu-west-2: ami-0329b37ebc36521c7 - eu-west-3: ami-037d85dcf06bc913e - sa-east-1: ami-0b8e53df93ee4132d us-east-1: ami-097be5ea1a5c7b6ce us-east-2: ami-0f40de04e77f600b6 us-west-1: ami-095527a55aa7c1c1d us-west-2: ami-0e5711189d37ddd64 + alpine-ami-edge-x86_64-20190611031724: + description: Alpine Linux edge x86_64 20190611031724 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20190611031724' + end_of_life: '2019-06-12T03:17:24' + build_time: '1560252501' + artifacts: + eu-north-1: ami-0c3152b1fd3b21ae9 + ap-south-1: ami-09e1d1ef7cd517a64 + eu-west-3: ami-0d1e6f66f5a7fc568 + eu-west-2: ami-029d4646a3ea4fc0f + eu-west-1: ami-031b9d6c98019452b + ap-northeast-2: ami-00cceaf8288ee7386 + ap-northeast-1: ami-0c97e7cdda534346b + sa-east-1: ami-0b00f41d3df265296 + ca-central-1: ami-008c0bd239c168b34 + ap-southeast-1: ami-037323416789f3ce1 + ap-southeast-2: ami-0d182653643257211 + eu-central-1: ami-0d808164dace58b4e + us-east-1: ami-014a8bfc05b292686 + us-east-2: ami-0d99a25549626e548 + us-west-1: ami-03f03158096a615cd + alpine-ami-edge-x86_64-20201213190459: + description: Alpine Linux edge x86_64 20201213190459 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20201213190459' + end_of_life: '2020-12-14T19:04:59' + build_time: '1607915630' + artifacts: + us-west-2: ami-0b91b7b604d8e2698 + af-south-1: ami-0f910995b3fcbc2a1 + eu-north-1: ami-00d23d9fe5e916760 + ap-south-1: ami-02cdde8617c38b6da + eu-west-3: ami-06649b9ba1b9c6625 + eu-west-2: ami-0b54da8cc7d2e71ab + eu-south-1: ami-0e119f0362787d26f + eu-west-1: ami-06bb894c2ea22cfa7 + ap-northeast-2: ami-0608684322b1df99d + me-south-1: ami-00ad5f5422bb04d33 + ap-northeast-1: ami-00f04e83341318e5d + sa-east-1: ami-048f22481002c6990 + ca-central-1: ami-0c6173e1c33395119 + ap-east-1: ami-0843f7ca1455bbcf3 + ap-southeast-1: ami-0a0f9e02019761a7d + ap-southeast-2: ami-0a4aef473ddfc4942 + eu-central-1: ami-0f7ba6027999c7b2c + us-east-1: ami-04c9b228d4a45c132 + us-east-2: ami-026a039af74def437 + us-west-1: ami-0a9ffe73ca66b492b +v3_12-aarch64: + 3.12.1: + alpine-ami-3.12.1-aarch64-r1: + description: Alpine Linux 3.12.1 aarch64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-aarch64 + version: '3.12' + release: 3.12.1 + arch: aarch64 + revision: r1 + end_of_life: '2022-05-01T00:00:00' + build_time: '1606044423' + artifacts: + af-south-1: ami-06588f43a51375252 + eu-north-1: ami-0cfce5134bf4de486 + ap-south-1: ami-09cc298b01cf76d37 + eu-west-3: ami-04bcba80b692607e5 + eu-west-2: ami-0eef6caa5a9e5eae2 + eu-south-1: ami-064f77232ae1a8989 + eu-west-1: ami-0a00b40aa74c41ff0 + ap-northeast-2: ami-0c64bd75240f41074 + me-south-1: ami-061d84db040baef02 + ap-northeast-1: ami-03cf3e1e77a6c38d1 + sa-east-1: ami-0f326c5e4038adfe2 + ca-central-1: ami-0a7b6973c4d3f0575 + ap-east-1: ami-0d30cefbf384f56a1 + ap-southeast-1: ami-0b387e2e6db73709a + ap-southeast-2: ami-0cc6d6821deb170a9 + eu-central-1: ami-0a39edefd01a2291f + us-east-1: ami-0e2ef8e13935fcead + us-east-2: ami-018f0f4eda3104612 + us-west-1: ami-053fb4aa43b090ad7 + us-west-2: ami-0d2a4208becd28b2a + alpine-ami-3.12.1-aarch64-r0: + description: Alpine Linux 3.12.1 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-aarch64 + version: '3.12' + release: 3.12.1 + arch: aarch64 + revision: r0 + end_of_life: '2022-05-01T00:00:00' + build_time: '1604561089' + artifacts: + af-south-1: ami-09fcd0ee80e2c6ced + eu-north-1: ami-0b1aad32939a91c82 + ap-south-1: ami-089af5c9b460578db + eu-west-3: ami-057906bbbabb67f73 + eu-west-2: ami-0adc0c0202d9c8daa + eu-south-1: ami-057a6cfb896f50fb2 + eu-west-1: ami-081896434373f8ca9 + ap-northeast-2: ami-071c8f6b35e2c6955 + me-south-1: ami-099c448c758de35fa + ap-northeast-1: ami-0269f3543c56a45c8 + sa-east-1: ami-0b7d42fbb0f169c3d + ca-central-1: ami-09afe18ad5033a8ce + ap-east-1: ami-0f951fbb40233338b + ap-southeast-1: ami-0c67eaa9d318acd5e + ap-southeast-2: ami-0bf9b7222f35ef0d4 + eu-central-1: ami-07807351a96484447 + us-east-1: ami-0a31ae1e8fc6de17e + us-east-2: ami-07deadfa79bb4613a + us-west-1: ami-0daaa29d5c8b1ecaf + us-west-2: ami-0d6579e59926d4377 + 3.12.2: + alpine-ami-3.12.2-aarch64-r0: + description: Alpine Linux 3.12.2 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-aarch64 + version: '3.12' + release: 3.12.2 + arch: aarch64 + revision: r0 + end_of_life: '2022-05-01T00:00:00' + build_time: '1607916556' + artifacts: + us-west-2: ami-0e308f03a3776ea1f + af-south-1: ami-01bddee275c090a50 + eu-north-1: ami-07b793f6b41391228 + ap-south-1: ami-0759affb95b30e7fb + eu-west-3: ami-0e27cfc827138e618 + eu-west-2: ami-007b53f9896902dbb + eu-south-1: ami-093ee59d023f73f01 + eu-west-1: ami-0872a57824a7c8a0f + ap-northeast-2: ami-053378f981bc37c5a + me-south-1: ami-0d6b8517fe502f094 + ap-northeast-1: ami-0a5c2347daea31320 + sa-east-1: ami-0cb7785de4b330978 + ca-central-1: ami-0d144a02a790d54a3 + ap-east-1: ami-0f991dfb212ea3e30 + ap-southeast-1: ami-0a9dfde00c4fdbf44 + ap-southeast-2: ami-0432ec565b29d3f0e + eu-central-1: ami-0bde2f5e41915b4a2 + us-east-1: ami-0f20521153a6af3e7 + us-east-2: ami-064923dd78bf778a8 + us-west-1: ami-0f49257c4ee6311a5 +edge-aarch64: + edge: + alpine-ami-edge-aarch64-20201104223817: + description: Alpine Linux edge aarch64 20201104223817 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20201104223817' + end_of_life: '2020-11-05T22:38:17' + build_time: '1604559828' + artifacts: + af-south-1: ami-0752fc9ce476a4721 + eu-north-1: ami-0f4fa14d45948f11a + ap-south-1: ami-08c7798c7f965cd80 + eu-west-3: ami-0f34326e028b1a6b1 + eu-west-2: ami-0031a8d8a3e592132 + eu-south-1: ami-05cb6a0b441d9fef4 + eu-west-1: ami-04e9f2e813ff9fe6a + ap-northeast-2: ami-046e31ba8884954fd + me-south-1: ami-007fc801f4d00c286 + ap-northeast-1: ami-026b0f30357b6c249 + sa-east-1: ami-09a322ab8f34e327f + ca-central-1: ami-0f17d9899463f2d0c + ap-east-1: ami-0a676c33f22ff9796 + ap-southeast-1: ami-0466de6f68ac671b5 + ap-southeast-2: ami-073efd513d0bf10d1 + eu-central-1: ami-0632fda5bb88d28fc + us-east-1: ami-0fb5290b89cd3ae5d + us-east-2: ami-0962215a714b76135 + us-west-1: ami-091c85b576c87cfae + us-west-2: ami-0fba23a2dedcb193e + alpine-ami-edge-aarch64-20201122030849: + description: Alpine Linux edge aarch64 20201122030849 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20201122030849' + end_of_life: '2020-11-23T03:08:49' + build_time: '1606047950' + artifacts: + af-south-1: ami-0935c72001f7a2f54 + eu-north-1: ami-036b9e312ed47bc58 + ap-south-1: ami-09ba0c9f67aee101b + eu-west-3: ami-0309fb3773c6ca01f + eu-west-2: ami-010f08d8babfeba66 + eu-south-1: ami-0ed4d967ec895a6dd + eu-west-1: ami-0bd9b6eea6a55c618 + ap-northeast-2: ami-08c14f5cd992d6cfd + me-south-1: ami-0a57b6a1ca13e2c16 + ap-northeast-1: ami-0d724ea7e866b21ce + sa-east-1: ami-0fa45fb2df9da5785 + ca-central-1: ami-022ed81730915d151 + ap-east-1: ami-0a043964fc03396fe + ap-southeast-1: ami-0933f563594672cec + ap-southeast-2: ami-08dbccb68710bda49 + eu-central-1: ami-04215f5b57249ad9c + us-east-1: ami-0929958d98bd00814 + us-east-2: ami-0b7166a71a0e31b0b + us-west-1: ami-0cef2acb137d37026 + us-west-2: ami-0d4de7896759005a1 + alpine-ami-edge-aarch64-20201213190459: + description: Alpine Linux edge aarch64 20201213190459 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20201213190459' + end_of_life: '2020-12-14T19:04:59' + build_time: '1607915770' + artifacts: + us-west-2: ami-0769e7ae6646ee6ce + af-south-1: ami-0ef1ed51536d4c21c + eu-north-1: ami-0fd0089405ce34751 + ap-south-1: ami-0fb7826afebdee836 + eu-west-3: ami-0a5b6e3683e165f46 + eu-west-2: ami-01f876c398a9a1e8a + eu-south-1: ami-08a7fd2863b4cf769 + eu-west-1: ami-06844e8cfb88e3488 + ap-northeast-2: ami-0be33da35fb42cf91 + me-south-1: ami-012a6c8b0aa9755e5 + ap-northeast-1: ami-0c3e9ea96d54b2fa6 + sa-east-1: ami-0490301bf3d8f367b + ca-central-1: ami-03a14b888f050a80c + ap-east-1: ami-0960c97dbfb4c2370 + ap-southeast-1: ami-052c0924f23638e55 + ap-southeast-2: ami-08a3a7e67af495c34 + eu-central-1: ami-0c1ed5c6c58a479a1 + us-east-1: ami-088169794239b59c9 + us-east-2: ami-08d78e14e90b41779 + us-west-1: ami-0fc9b035119434b1a +v3_12-x86_64: + 3.12.1: + alpine-ami-3.12.1-x86_64-r0: + description: Alpine Linux 3.12.1 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-x86_64 + version: '3.12' + release: 3.12.1 + arch: x86_64 + revision: r0 + end_of_life: '2022-05-01T00:00:00' + build_time: '1604561032' + artifacts: + af-south-1: ami-0fa34e940c7164179 + eu-north-1: ami-043101bc60cae6466 + ap-south-1: ami-0d953dbbf990c3d4f + eu-west-3: ami-027f6aa3fb3d68650 + eu-west-2: ami-02a0122150c17b830 + eu-south-1: ami-08d5116337ec06c75 + eu-west-1: ami-04e819555baad56b9 + ap-northeast-2: ami-08e79a74e23e75e36 + me-south-1: ami-07bb93ae709388c3c + ap-northeast-1: ami-010e9eeaa13a80178 + sa-east-1: ami-02e4e0517f1910221 + ca-central-1: ami-00a9048619f660a50 + ap-east-1: ami-059c371b8d2fd0989 + ap-southeast-1: ami-008bce1c8d323b322 + ap-southeast-2: ami-013de33f160267640 + eu-central-1: ami-03dbad79bee9c8ce1 + us-east-1: ami-0cc47d8e29142ecac + us-east-2: ami-07243c178e6ca055c + us-west-1: ami-0c9a9eac6d74fff97 + us-west-2: ami-03d82b210e0c36983 + 3.12.2: + alpine-ami-3.12.2-x86_64-r0: + description: Alpine Linux 3.12.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-x86_64 + version: '3.12' + release: 3.12.2 + arch: x86_64 + revision: r0 + end_of_life: '2022-05-01T00:00:00' + build_time: '1607915274' + artifacts: + us-west-2: ami-096f9b59745c9d447 + af-south-1: ami-0a2c528c48b724eb1 + eu-north-1: ami-0f97b4e83b330a44b + ap-south-1: ami-0082a1edc963aa684 + eu-west-3: ami-0837b3fcb00163a7d + eu-west-2: ami-0a8578d7d4ebca125 + eu-south-1: ami-027ed683f42684d45 + eu-west-1: ami-00185f6c477e1099d + ap-northeast-2: ami-0c869c3c23407b0d5 + me-south-1: ami-0ff80f770d65d1cbf + ap-northeast-1: ami-0e4245b0cbe57cb99 + sa-east-1: ami-0d276bc117826a38a + ca-central-1: ami-090b8e0d13afd07c1 + ap-east-1: ami-0efde8684085c8a1e + ap-southeast-1: ami-0a40d2bc9bfc47553 + ap-southeast-2: ami-0e7c828c974171a77 + eu-central-1: ami-062cda84fa4f4abe0 + us-east-1: ami-042e99e8ac5b82667 + us-east-2: ami-0bf39a1d2a7d83170 + us-west-1: ami-089fe5bbb8ee72815 v3_10-x86_64: - 3.10.0: - alpine-ami-3.10.0-x86_64-r0: - description: Alpine Linux 3.10.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + 3.10.4: + alpine-ami-3.10.4-x86_64-r0: + description: Alpine Linux 3.10.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_10-x86_64 version: '3.10' - release: 3.10.0 + release: 3.10.4 arch: x86_64 revision: r0 end_of_life: '2021-05-01T00:00:00' - build_time: 1561007696 + build_time: '1580899963' artifacts: - ap-northeast-1: ami-00d72ba9e4e50e6f0 - ap-northeast-2: ami-0b2ab59439d69c87f - ap-south-1: ami-06ab2e1b19df43403 - ap-southeast-1: ami-097e487f602370726 - ap-southeast-2: ami-0f2248216c030f2ea - ca-central-1: ami-035f9ddc53b8e3c94 - eu-central-1: ami-0c2583ed13862fb17 - eu-north-1: ami-069c11c7844825375 - eu-west-1: ami-076b4d480f72a117f - eu-west-2: ami-0a5d209eea58688c2 - eu-west-3: ami-0385dc3d759aaa464 - sa-east-1: ami-04ddd371cd342921d - us-east-1: ami-0647412cf72f247d9 - us-east-2: ami-0fb394548acf15691 - us-west-1: ami-04d80966c446c3f58 - us-west-2: ami-0c71a8664131b42b3 + eu-north-1: ami-0011e13dbacb8fcb4 + ap-south-1: ami-00fac10f41dff96e4 + eu-west-3: ami-070b405f25870cfa4 + eu-west-2: ami-047029018b46688b5 + eu-west-1: ami-0d645d9aa9af199e7 + ap-northeast-2: ami-03a2be707d4d83cea + ap-northeast-1: ami-0dc770d65f50e9339 + sa-east-1: ami-01af983d84e7075aa + ca-central-1: ami-0a54918dadce6828a + ap-southeast-1: ami-0aadcaa1f71c42546 + ap-southeast-2: ami-0ba48065660ab830f + eu-central-1: ami-01de425983c4c1bfc + us-east-1: ami-014e31a6d6da30eb7 + us-east-2: ami-004421f607bf25444 + us-west-1: ami-0e07b975efa6cba65 + us-west-2: ami-07128e75c4dcc9c7c + 3.10.3: + alpine-ami-3.10.3-x86_64-r1: + description: Alpine Linux 3.10.3 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.3 + arch: x86_64 + revision: r1 + end_of_life: '2021-05-01T00:00:00' + build_time: '1572150070' + artifacts: + eu-north-1: ami-00207f3df9a9cb088 + ap-south-1: ami-0a8839c12787f0c46 + eu-west-3: ami-0ef9a828aded0a0de + eu-west-2: ami-02520e7e046db5d8f + eu-west-1: ami-01c1ec8fdefc61650 + ap-northeast-2: ami-0e749a03d064c1e47 + ap-northeast-1: ami-0760cd78e75cb77a4 + sa-east-1: ami-0ee958f7773223770 + ca-central-1: ami-016d172dee4ff4a22 + ap-southeast-1: ami-0f0e2be5d8c0110c1 + ap-southeast-2: ami-0ca4caea0ce1f4a8a + eu-central-1: ami-04e50c8006d4bc2bf + us-east-1: ami-063cb098a86c1c4cc + us-east-2: ami-0110d80369eb75f49 + us-west-1: ami-00b06ce695a617956 + us-west-2: ami-0d0b7768c8cd9a8c8 3.10.1: alpine-ami-3.10.1-x86_64-r0: description: Alpine Linux 3.10.1 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami @@ -228,20 +631,20 @@ v3_10-x86_64: arch: x86_64 revision: r0 end_of_life: '2021-05-01T00:00:00' - build_time: 1562946814 + build_time: '1562975219' artifacts: - ap-northeast-1: ami-039a6734ca3e107c2 - ap-northeast-2: ami-0fc9157e14e1701ea + eu-north-1: ami-020c6eab877f87e9c ap-south-1: ami-0f704cf587a1bd591 + eu-west-3: ami-07098b9dc4e34adee + eu-west-2: ami-01fe12a7b5f0ae5e4 + eu-west-1: ami-08f5d4eaae3855536 + ap-northeast-2: ami-0fc9157e14e1701ea + ap-northeast-1: ami-039a6734ca3e107c2 + sa-east-1: ami-06b3a596069b29720 + ca-central-1: ami-073a7bdf1f93fdf07 ap-southeast-1: ami-04ee093ad3986c1e2 ap-southeast-2: ami-08b686d005668aa12 - ca-central-1: ami-073a7bdf1f93fdf07 eu-central-1: ami-02b0787907fb72c16 - eu-north-1: ami-020c6eab877f87e9c - eu-west-1: ami-08f5d4eaae3855536 - eu-west-2: ami-01fe12a7b5f0ae5e4 - eu-west-3: ami-07098b9dc4e34adee - sa-east-1: ami-06b3a596069b29720 us-east-1: ami-0cce76b5f0a9c52f3 us-east-2: ami-0e0eea8fb3cea9bf6 us-west-1: ami-0db3b834555de24aa @@ -255,108 +658,24 @@ v3_10-x86_64: arch: x86_64 revision: r1 end_of_life: '2021-05-01T00:00:00' - build_time: 1564184744 + build_time: '1564213143' artifacts: - ap-northeast-1: ami-0adeee26a46805278 - ap-northeast-2: ami-06637cd011ec49efa + eu-north-1: ami-0859a31a742c902ed ap-south-1: ami-09e1bd549945283a2 + eu-west-3: ami-06a5559ce996d5bac + eu-west-2: ami-06e36c52d4a7c245a + eu-west-1: ami-00fcd74ef57d7f27d + ap-northeast-2: ami-06637cd011ec49efa + ap-northeast-1: ami-0adeee26a46805278 + sa-east-1: ami-0087fd3ce3d62d34d + ca-central-1: ami-02fed61c453469d90 ap-southeast-1: ami-081de8e0c4d9e28e5 ap-southeast-2: ami-0e2c774fdc1d38ba1 - ca-central-1: ami-02fed61c453469d90 eu-central-1: ami-0659cf3939d5818e6 - eu-north-1: ami-0859a31a742c902ed - eu-west-1: ami-00fcd74ef57d7f27d - eu-west-2: ami-06e36c52d4a7c245a - eu-west-3: ami-06a5559ce996d5bac - sa-east-1: ami-0087fd3ce3d62d34d us-east-1: ami-063929a9ea787ced6 us-east-2: ami-0a5ef71ab2deee8fd us-west-1: ami-04165aa967c5fb241 us-west-2: ami-08147c2b1a80b44c4 - 3.10.2: - alpine-ami-3.10.2-x86_64-r1: - description: Alpine Linux 3.10.2 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.2 - arch: x86_64 - revision: r1 - end_of_life: '2021-05-01T00:00:00' - build_time: 1566786155 - artifacts: - ap-northeast-1: ami-0865b6aea9d3d4e9a - ap-northeast-2: ami-0eb3806a09c62e80a - ap-south-1: ami-03c079c4f6a77bcd8 - ap-southeast-1: ami-03cbf9e5c42bd2de0 - ap-southeast-2: ami-040ee9c325bd773bb - ca-central-1: ami-0aeee1c23a65f09e5 - eu-central-1: ami-01c4a5f25d39d8c1d - eu-north-1: ami-0ac4f026a4624309e - eu-west-1: ami-073456a92b131bee5 - eu-west-2: ami-04c585868e7f9016e - eu-west-3: ami-0196d7c3d0c2e5230 - sa-east-1: ami-0437041273be4d2b3 - us-east-1: ami-0b13bd8ab9492449c - us-east-2: ami-0a87fa8a73b9b850c - us-west-1: ami-009961e3d2d7ccaa8 - us-west-2: ami-0a083cc95e2bbc4b0 - 3.10.3: - alpine-ami-3.10.3-x86_64-r1: - description: Alpine Linux 3.10.3 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.3 - arch: x86_64 - revision: r1 - end_of_life: '2021-05-01T00:00:00' - build_time: 1572121673 - artifacts: - ap-northeast-1: ami-0760cd78e75cb77a4 - ap-northeast-2: ami-0e749a03d064c1e47 - ap-south-1: ami-0a8839c12787f0c46 - ap-southeast-1: ami-0f0e2be5d8c0110c1 - ap-southeast-2: ami-0ca4caea0ce1f4a8a - ca-central-1: ami-016d172dee4ff4a22 - eu-central-1: ami-04e50c8006d4bc2bf - eu-north-1: ami-00207f3df9a9cb088 - eu-west-1: ami-01c1ec8fdefc61650 - eu-west-2: ami-02520e7e046db5d8f - eu-west-3: ami-0ef9a828aded0a0de - sa-east-1: ami-0ee958f7773223770 - us-east-1: ami-063cb098a86c1c4cc - us-east-2: ami-0110d80369eb75f49 - us-west-1: ami-00b06ce695a617956 - us-west-2: ami-0d0b7768c8cd9a8c8 - 3.10.4: - alpine-ami-3.10.4-x86_64-r0: - description: Alpine Linux 3.10.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.4 - arch: x86_64 - revision: r0 - end_of_life: '2021-05-01T00:00:00' - build_time: 1580871554 - artifacts: - ap-northeast-1: ami-0dc770d65f50e9339 - ap-northeast-2: ami-03a2be707d4d83cea - ap-south-1: ami-00fac10f41dff96e4 - ap-southeast-1: ami-0aadcaa1f71c42546 - ap-southeast-2: ami-0ba48065660ab830f - ca-central-1: ami-0a54918dadce6828a - eu-central-1: ami-01de425983c4c1bfc - eu-north-1: ami-0011e13dbacb8fcb4 - eu-west-1: ami-0d645d9aa9af199e7 - eu-west-2: ami-047029018b46688b5 - eu-west-3: ami-070b405f25870cfa4 - sa-east-1: ami-01af983d84e7075aa - us-east-1: ami-014e31a6d6da30eb7 - us-east-2: ami-004421f607bf25444 - us-west-1: ami-0e07b975efa6cba65 - us-west-2: ami-07128e75c4dcc9c7c 3.10.5: alpine-ami-3.10.5-x86_64-r0: description: Alpine Linux 3.10.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami @@ -367,53 +686,82 @@ v3_10-x86_64: arch: x86_64 revision: r0 end_of_life: '2021-05-01T00:00:00' - build_time: 1587857969 + build_time: '1587886362' artifacts: - ap-northeast-1: ami-043d40c880c7a176b - ap-northeast-2: ami-0595dc50c0f0e23f7 + eu-north-1: ami-041b6bdb27dbc8226 ap-south-1: ami-0c8a22fa0ee90c07a + eu-west-3: ami-0bbb1a9d10ee0e6ee + eu-west-2: ami-08ca328d558bee247 + eu-west-1: ami-0451f26166639b1b9 + ap-northeast-2: ami-0595dc50c0f0e23f7 + ap-northeast-1: ami-043d40c880c7a176b + sa-east-1: ami-088bc83fe1497e710 + ca-central-1: ami-08c250f635a417222 ap-southeast-1: ami-0244d1373053cfe5b ap-southeast-2: ami-0cf284dc25e35862d - ca-central-1: ami-08c250f635a417222 eu-central-1: ami-0a626b78c94340b6e - eu-north-1: ami-041b6bdb27dbc8226 - eu-west-1: ami-0451f26166639b1b9 - eu-west-2: ami-08ca328d558bee247 - eu-west-3: ami-0bbb1a9d10ee0e6ee - sa-east-1: ami-088bc83fe1497e710 us-east-1: ami-0e635ea3ca126c707 us-east-2: ami-0f5a09a7d1d0ae35f us-west-1: ami-06c2aa86f3a72385e us-west-2: ami-0b6f8a395fa8b5961 -v3_9-x86_64: - 3.9.4: - alpine-ami-3.9.4-x86_64-r0: - description: Alpine Linux 3.9.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + 3.10.0: + alpine-ami-3.10.0-x86_64-r0: + description: Alpine Linux 3.10.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine - profile_build: v3_9-x86_64 - version: '3.9' - release: 3.9.4 + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.0 arch: x86_64 revision: r0 - end_of_life: '2021-01-01T00:00:00' - build_time: 1561008208 + end_of_life: '2021-05-01T00:00:00' + build_time: '1561036079' artifacts: - ap-northeast-1: ami-03d9fcbacd2999688 - ap-northeast-2: ami-004989011ec957b83 - ap-south-1: ami-0cb67b835ca871537 - ap-southeast-1: ami-03f6391214dbfd225 - ap-southeast-2: ami-0074f16503a9ebe8c - ca-central-1: ami-0a3cf4fc46141c449 - eu-central-1: ami-007081891d730c5f1 - eu-north-1: ami-09267b5c6d7722fdd - eu-west-1: ami-0587fd7b04af5d01d - eu-west-2: ami-09b9943895590f23e - eu-west-3: ami-01dcaa2533a49748d - sa-east-1: ami-0645cb90aca8de136 - us-east-1: ami-0ac744c9e5e2dcbcf - us-east-2: ami-074a01fd0b7de0135 - us-west-1: ami-0a70d6f1ce22ddfb1 - us-west-2: ami-006aeb6d57c92f978 + eu-north-1: ami-069c11c7844825375 + ap-south-1: ami-06ab2e1b19df43403 + eu-west-3: ami-0385dc3d759aaa464 + eu-west-2: ami-0a5d209eea58688c2 + eu-west-1: ami-076b4d480f72a117f + ap-northeast-2: ami-0b2ab59439d69c87f + ap-northeast-1: ami-00d72ba9e4e50e6f0 + sa-east-1: ami-04ddd371cd342921d + ca-central-1: ami-035f9ddc53b8e3c94 + ap-southeast-1: ami-097e487f602370726 + ap-southeast-2: ami-0f2248216c030f2ea + eu-central-1: ami-0c2583ed13862fb17 + us-east-1: ami-0647412cf72f247d9 + us-east-2: ami-0fb394548acf15691 + us-west-1: ami-04d80966c446c3f58 + us-west-2: ami-0c71a8664131b42b3 + 3.10.2: + alpine-ami-3.10.2-x86_64-r1: + description: Alpine Linux 3.10.2 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.2 + arch: x86_64 + revision: r1 + end_of_life: '2021-05-01T00:00:00' + build_time: '1566814550' + artifacts: + eu-north-1: ami-0ac4f026a4624309e + ap-south-1: ami-03c079c4f6a77bcd8 + eu-west-3: ami-0196d7c3d0c2e5230 + eu-west-2: ami-04c585868e7f9016e + eu-west-1: ami-073456a92b131bee5 + ap-northeast-2: ami-0eb3806a09c62e80a + ap-northeast-1: ami-0865b6aea9d3d4e9a + sa-east-1: ami-0437041273be4d2b3 + ca-central-1: ami-0aeee1c23a65f09e5 + ap-southeast-1: ami-03cbf9e5c42bd2de0 + ap-southeast-2: ami-040ee9c325bd773bb + eu-central-1: ami-01c4a5f25d39d8c1d + us-east-1: ami-0b13bd8ab9492449c + us-east-2: ami-0a87fa8a73b9b850c + us-west-1: ami-009961e3d2d7ccaa8 + us-west-2: ami-0a083cc95e2bbc4b0 +v3_9-x86_64: + 3.9.4: alpine-ami-3.9.4-x86_64-r1: description: Alpine Linux 3.9.4 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -423,52 +771,51 @@ v3_9-x86_64: arch: x86_64 revision: r1 end_of_life: '2021-01-01T00:00:00' - build_time: 1564185305 + build_time: '1564213710' artifacts: - ap-northeast-1: ami-0d12649cf98b9c29b - ap-northeast-2: ami-004372232cf1a20ac + eu-north-1: ami-01c04b1d21717da2d ap-south-1: ami-091de53a3582f2779 + eu-west-3: ami-0ebda60768a596a7f + eu-west-2: ami-0bc07c10c240525e4 + eu-west-1: ami-0c9ac6e4570bad5c1 + ap-northeast-2: ami-004372232cf1a20ac + ap-northeast-1: ami-0d12649cf98b9c29b + sa-east-1: ami-0a2d4fb282401447a + ca-central-1: ami-011ad5e9b2fcfa1d5 ap-southeast-1: ami-07f6f363322b884d5 ap-southeast-2: ami-0eeff0d7c1943665c - ca-central-1: ami-011ad5e9b2fcfa1d5 eu-central-1: ami-0d4f6bb2a4f857256 - eu-north-1: ami-01c04b1d21717da2d - eu-west-1: ami-0c9ac6e4570bad5c1 - eu-west-2: ami-0bc07c10c240525e4 - eu-west-3: ami-0ebda60768a596a7f - sa-east-1: ami-0a2d4fb282401447a us-east-1: ami-0a8b8edcf88c2e496 us-east-2: ami-030ce78952c4c097c us-west-1: ami-0e27a7d83365f16be us-west-2: ami-07f10e32e0621a4eb - 3.9.5: - alpine-ami-3.9.5-x86_64-r0: - description: Alpine Linux 3.9.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.9.4-x86_64-r0: + description: Alpine Linux 3.9.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_9-x86_64 version: '3.9' - release: 3.9.5 + release: 3.9.4 arch: x86_64 revision: r0 end_of_life: '2021-01-01T00:00:00' - build_time: 1580872699 + build_time: '1561036615' artifacts: - ap-northeast-1: ami-0f22ba5f542102103 - ap-northeast-2: ami-042ed34c048fd4dde - ap-south-1: ami-03aa6dfb6b5c5b24d - ap-southeast-1: ami-09aa8a66b52872964 - ap-southeast-2: ami-0883e80a814ca1ead - ca-central-1: ami-07ced81b329157965 - eu-central-1: ami-0b1156425ee49460e - eu-north-1: ami-0dae27e872bbb58a3 - eu-west-1: ami-032df31e3645eac89 - eu-west-2: ami-0ca53eef190752d9b - eu-west-3: ami-01d92abfc31832091 - sa-east-1: ami-044b116c38c67bbe6 - us-east-1: ami-01d51c30d2c611d0b - us-east-2: ami-023a120054be00f14 - us-west-1: ami-0b628545bb655d1e3 - us-west-2: ami-06dc8e37edaccd91d + eu-north-1: ami-09267b5c6d7722fdd + ap-south-1: ami-0cb67b835ca871537 + eu-west-3: ami-01dcaa2533a49748d + eu-west-2: ami-09b9943895590f23e + eu-west-1: ami-0587fd7b04af5d01d + ap-northeast-2: ami-004989011ec957b83 + ap-northeast-1: ami-03d9fcbacd2999688 + sa-east-1: ami-0645cb90aca8de136 + ca-central-1: ami-0a3cf4fc46141c449 + ap-southeast-1: ami-03f6391214dbfd225 + ap-southeast-2: ami-0074f16503a9ebe8c + eu-central-1: ami-007081891d730c5f1 + us-east-1: ami-0ac744c9e5e2dcbcf + us-east-2: ami-074a01fd0b7de0135 + us-west-1: ami-0a70d6f1ce22ddfb1 + us-west-2: ami-006aeb6d57c92f978 3.9.6: alpine-ami-3.9.6-x86_64-r0: description: Alpine Linux 3.9.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami @@ -479,24 +826,52 @@ v3_9-x86_64: arch: x86_64 revision: r0 end_of_life: '2021-01-01T00:00:00' - build_time: 1587859015 + build_time: '1587887420' artifacts: - ap-northeast-1: ami-0133f3a571f684178 - ap-northeast-2: ami-0f9ad7c51e14bdc3d + eu-north-1: ami-07a2b23059054aea3 ap-south-1: ami-00af726ec2f4077a2 + eu-west-3: ami-00a425aa20737343e + eu-west-2: ami-08c87b358b24d1df3 + eu-west-1: ami-0eb2b54ab4d09eb80 + ap-northeast-2: ami-0f9ad7c51e14bdc3d + ap-northeast-1: ami-0133f3a571f684178 + sa-east-1: ami-0ea679407da47b78a + ca-central-1: ami-0583a99f342097b6c ap-southeast-1: ami-0d52e9d7f91ca051c ap-southeast-2: ami-054360648343b66bc - ca-central-1: ami-0583a99f342097b6c eu-central-1: ami-051eec0106a08df6d - eu-north-1: ami-07a2b23059054aea3 - eu-west-1: ami-0eb2b54ab4d09eb80 - eu-west-2: ami-08c87b358b24d1df3 - eu-west-3: ami-00a425aa20737343e - sa-east-1: ami-0ea679407da47b78a us-east-1: ami-004f0550310a2d7aa us-east-2: ami-045a2cc3fe272caee us-west-1: ami-026a54e52daea1233 us-west-2: ami-0b933475d362cbfab + 3.9.5: + alpine-ami-3.9.5-x86_64-r0: + description: Alpine Linux 3.9.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_9-x86_64 + version: '3.9' + release: 3.9.5 + arch: x86_64 + revision: r0 + end_of_life: '2021-01-01T00:00:00' + build_time: '1580901101' + artifacts: + eu-north-1: ami-0dae27e872bbb58a3 + ap-south-1: ami-03aa6dfb6b5c5b24d + eu-west-3: ami-01d92abfc31832091 + eu-west-2: ami-0ca53eef190752d9b + eu-west-1: ami-032df31e3645eac89 + ap-northeast-2: ami-042ed34c048fd4dde + ap-northeast-1: ami-0f22ba5f542102103 + sa-east-1: ami-044b116c38c67bbe6 + ca-central-1: ami-07ced81b329157965 + ap-southeast-1: ami-09aa8a66b52872964 + ap-southeast-2: ami-0883e80a814ca1ead + eu-central-1: ami-0b1156425ee49460e + us-east-1: ami-01d51c30d2c611d0b + us-east-2: ami-023a120054be00f14 + us-west-1: ami-0b628545bb655d1e3 + us-west-2: ami-06dc8e37edaccd91d v3_11-x86_64: 3.11.0: alpine-ami-3.11.0-x86_64-r0: @@ -507,53 +882,25 @@ v3_11-x86_64: release: 3.11.0 arch: x86_64 revision: r0 - end_of_life: null - build_time: 1576813536 + end_of_life: '2021-05-01T00:00:00' + build_time: '1576841818' artifacts: - ap-northeast-1: ami-01dd2c66370a9c622 - ap-northeast-2: ami-06b08ab572a319365 + eu-north-1: ami-01dc7a794c0c8062b ap-south-1: ami-0dba9ec182268ab0a + eu-west-3: ami-00d99d7627002d662 + eu-west-2: ami-04426be48498be7af + eu-west-1: ami-0d219c533643cb00f + ap-northeast-2: ami-06b08ab572a319365 + ap-northeast-1: ami-01dd2c66370a9c622 + sa-east-1: ami-05de427871abe1c40 + ca-central-1: ami-02bb57a6922018826 ap-southeast-1: ami-0c210488756706fe7 ap-southeast-2: ami-05e1972740cba6e7b - ca-central-1: ami-02bb57a6922018826 eu-central-1: ami-09a7075582e44cc4a - eu-north-1: ami-01dc7a794c0c8062b - eu-west-1: ami-0d219c533643cb00f - eu-west-2: ami-04426be48498be7af - eu-west-3: ami-00d99d7627002d662 - sa-east-1: ami-05de427871abe1c40 us-east-1: ami-00ee2daec698aab7c us-east-2: ami-01d8b7e276ad609aa us-west-1: ami-08d909997839b6030 us-west-2: ami-07a62f65352c51750 - 3.11.2: - alpine-ami-3.11.2-x86_64-r0: - description: Alpine Linux 3.11.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.2 - arch: x86_64 - revision: r0 - end_of_life: '2021-11-01T00:00:00' - build_time: 1578165575 - artifacts: - ap-northeast-1: ami-0231a40676931971a - ap-northeast-2: ami-066b4452a247d5533 - ap-south-1: ami-0b0f33d8cfb9e5051 - ap-southeast-1: ami-0949989f302945c5a - ap-southeast-2: ami-08fb0d3aaf8945d02 - ca-central-1: ami-0e26eeafdc083c6e9 - eu-central-1: ami-02fa942a71aadf188 - eu-north-1: ami-03ce6e520f43392b9 - eu-west-1: ami-07becf48e2f4057c8 - eu-west-2: ami-02ac6b3300d9070b1 - eu-west-3: ami-0b0726c29a8feff8a - sa-east-1: ami-029a4c0dd953fdc64 - us-east-1: ami-06dcf76ec7ffac7cb - us-east-2: ami-018b2823c3aa8b78e - us-west-1: ami-04de5ae2ed495f580 - us-west-2: ami-0282e49ac0502691d 3.11.3: alpine-ami-3.11.3-x86_64-r0: description: Alpine Linux 3.11.3 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami @@ -564,52 +911,24 @@ v3_11-x86_64: arch: x86_64 revision: r0 end_of_life: '2021-11-01T00:00:00' - build_time: 1580872119 + build_time: '1580900519' artifacts: - ap-northeast-1: ami-0a21fceb3a679c6a0 - ap-northeast-2: ami-0446572a036203a7f + eu-north-1: ami-025350371c14bbcf9 ap-south-1: ami-01597af5b044c6534 + eu-west-3: ami-0a3aecc0fe5a748e0 + eu-west-2: ami-0fe16a039c49375e1 + eu-west-1: ami-0719f170fa096b7c6 + ap-northeast-2: ami-0446572a036203a7f + ap-northeast-1: ami-0a21fceb3a679c6a0 + sa-east-1: ami-0f28a75976a21bca7 + ca-central-1: ami-064cc1f1e4a3d17e7 ap-southeast-1: ami-06add570453657288 ap-southeast-2: ami-014d6b6e0544303db - ca-central-1: ami-064cc1f1e4a3d17e7 eu-central-1: ami-06190102f27180777 - eu-north-1: ami-025350371c14bbcf9 - eu-west-1: ami-0719f170fa096b7c6 - eu-west-2: ami-0fe16a039c49375e1 - eu-west-3: ami-0a3aecc0fe5a748e0 - sa-east-1: ami-0f28a75976a21bca7 us-east-1: ami-0bd10e597480e8fdc us-east-2: ami-0741188fc6d365c12 us-west-1: ami-065633a2b189f7550 us-west-2: ami-050dd0423825ae4cd - 3.11.5: - alpine-ami-3.11.5-x86_64-r0: - description: Alpine Linux 3.11.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.5 - arch: x86_64 - revision: r0 - end_of_life: '2021-11-01T00:00:00' - build_time: 1585881226 - artifacts: - ap-northeast-1: ami-02945e11777c5d74a - ap-northeast-2: ami-071e19bba641e10c1 - ap-south-1: ami-0df79a6a767372395 - ap-southeast-1: ami-092bdb41e6d9f7060 - ap-southeast-2: ami-02a1c7112bbe60f00 - ca-central-1: ami-0081665c09326cae2 - eu-central-1: ami-09d753422dab3888f - eu-north-1: ami-0f326f36494b66d68 - eu-west-1: ami-0c1e8337e5112eb80 - eu-west-2: ami-06ec140a6fa5ff24c - eu-west-3: ami-05270703db64782c3 - sa-east-1: ami-08e5a4dc318e84618 - us-east-1: ami-02fa6ea44ed68cbd1 - us-east-2: ami-0325fc21b50ee19ba - us-west-1: ami-003d6e7746c7e938e - us-west-2: ami-0966c757f79c1a553 3.11.6: alpine-ami-3.11.6-x86_64-r0: description: Alpine Linux 3.11.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami @@ -620,21 +939,105 @@ v3_11-x86_64: arch: x86_64 revision: r0 end_of_life: '2021-11-01T00:00:00' - build_time: 1587858467 + build_time: '1587886872' artifacts: - ap-northeast-1: ami-04dd34605aba7ce11 - ap-northeast-2: ami-0fd25bd139c05812d + eu-north-1: ami-03830331da71d3b6a ap-south-1: ami-08437e8244154999a + eu-west-3: ami-043d77b850fc69cff + eu-west-2: ami-0dcb13d7ab5820ac0 + eu-west-1: ami-0a3bf003cc0e5cbaf + ap-northeast-2: ami-0fd25bd139c05812d + ap-northeast-1: ami-04dd34605aba7ce11 + sa-east-1: ami-0056de88b2ebc5071 + ca-central-1: ami-013d1db5df4ad7d4a ap-southeast-1: ami-04a63840be47a0816 ap-southeast-2: ami-07be0b72172a63df3 - ca-central-1: ami-013d1db5df4ad7d4a eu-central-1: ami-03bc1e4d4bf636895 - eu-north-1: ami-03830331da71d3b6a - eu-west-1: ami-0a3bf003cc0e5cbaf - eu-west-2: ami-0dcb13d7ab5820ac0 - eu-west-3: ami-043d77b850fc69cff - sa-east-1: ami-0056de88b2ebc5071 us-east-1: ami-0da684cce2ab4aadb us-east-2: ami-014d15ba809c1e48f us-west-1: ami-05f659e5fe3528bbd us-west-2: ami-0380e01590d421d3e + 3.11.2: + alpine-ami-3.11.2-x86_64-r0: + description: Alpine Linux 3.11.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.2 + arch: x86_64 + revision: r0 + end_of_life: '2021-11-01T00:00:00' + build_time: '1578193976' + artifacts: + eu-north-1: ami-03ce6e520f43392b9 + ap-south-1: ami-0b0f33d8cfb9e5051 + eu-west-3: ami-0b0726c29a8feff8a + eu-west-2: ami-02ac6b3300d9070b1 + eu-west-1: ami-07becf48e2f4057c8 + ap-northeast-2: ami-066b4452a247d5533 + ap-northeast-1: ami-0231a40676931971a + sa-east-1: ami-029a4c0dd953fdc64 + ca-central-1: ami-0e26eeafdc083c6e9 + ap-southeast-1: ami-0949989f302945c5a + ap-southeast-2: ami-08fb0d3aaf8945d02 + eu-central-1: ami-02fa942a71aadf188 + us-east-1: ami-06dcf76ec7ffac7cb + us-east-2: ami-018b2823c3aa8b78e + us-west-1: ami-04de5ae2ed495f580 + us-west-2: ami-0282e49ac0502691d + 3.11.5: + alpine-ami-3.11.5-x86_64-r0: + description: Alpine Linux 3.11.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.5 + arch: x86_64 + revision: r0 + end_of_life: '2021-11-01T00:00:00' + build_time: '1585909634' + artifacts: + eu-north-1: ami-0f326f36494b66d68 + ap-south-1: ami-0df79a6a767372395 + eu-west-3: ami-05270703db64782c3 + eu-west-2: ami-06ec140a6fa5ff24c + eu-west-1: ami-0c1e8337e5112eb80 + ap-northeast-2: ami-071e19bba641e10c1 + ap-northeast-1: ami-02945e11777c5d74a + sa-east-1: ami-08e5a4dc318e84618 + ca-central-1: ami-0081665c09326cae2 + ap-southeast-1: ami-092bdb41e6d9f7060 + ap-southeast-2: ami-02a1c7112bbe60f00 + eu-central-1: ami-09d753422dab3888f + us-east-1: ami-02fa6ea44ed68cbd1 + us-east-2: ami-0325fc21b50ee19ba + us-west-1: ami-003d6e7746c7e938e + us-west-2: ami-0966c757f79c1a553 +current-x86_64: + 3.9.4: + alpine-ami-3.9.4-x86_64-r0: + description: Alpine Linux 3.9.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: current-x86_64 + version: '3.9' + release: 3.9.4 + arch: x86_64 + revision: r0 + end_of_life: '2021-01-01T00:00:00' + build_time: '1560251961' + artifacts: + eu-north-1: ami-0f7b7e2bef1209f6c + ap-south-1: ami-0f94a69d1ff0a7860 + eu-west-3: ami-084cb673481c3f793 + eu-west-2: ami-091a16ac6bd29bdd3 + eu-west-1: ami-09234e83a8015efa4 + ap-northeast-2: ami-028d3d1675161319e + ap-northeast-1: ami-0bb4073495ff2021e + sa-east-1: ami-014d631c23ebf306a + ca-central-1: ami-05a3c167410bf6b35 + ap-southeast-1: ami-0f1c039e595dd2d02 + ap-southeast-2: ami-0ca5b7ca3caa92758 + eu-central-1: ami-02df82b83ad2cdaec + us-east-1: ami-04a29b11e34acf54d + us-east-2: ami-0d9445885a19e00ca + us-west-1: ami-0bef2dc6d3f4e19a2 diff --git a/scripts/builder.py b/scripts/builder.py index a98d7c1..4e553e5 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -17,7 +17,7 @@ if not os.path.exists("build"): print("Build environment does not exist, creating...", file=sys.stderr) venv.create("build", with_pip=True) subprocess.run(["build/bin/pip", "install", "-U", "pip", - "pyhocon", "boto3", "PyYAML"]) + "pyhocon", "boto3", "python-dateutil", "PyYAML"]) print("Re-executing with builder python...", file=sys.stderr) os.execv(args[0], args) @@ -42,6 +42,7 @@ import argparse import textwrap import subprocess import urllib.error +import dateutil.parser from enum import Enum from collections import defaultdict @@ -100,6 +101,7 @@ class TaggedAWSObject: "revision": _identity, "profile_build": _identity, "source_ami": _identity, + "source_region": _identity, "arch": lambda x: EC2Architecture(x), "end_of_life": lambda x: datetime.fromisoformat(x), "release": lambda v: EDGE if v == "edge" else StrictVersion(v), @@ -413,7 +415,7 @@ class ReleaseReadmeUpdater: for release, amis in releases.items(): for name, info in amis.items(): arch = info["arch"] - built = info["build_time"] + built = int(info["build_time"]) ver = sections[info["version"]] if arch not in ver["built"] or ver["built"][arch] < built: @@ -935,6 +937,8 @@ class ReleaseAMIs: parser.add_argument("--out-file", "-o", help="output file for JSON AMI map, otherwise stdout") parser.add_argument("ami", help="ami id to copy") +# TODO: for efficiency, the main release loop will need some work +# parser.add_argument("amis", nargs="+", help="ami(s) to copy") @staticmethod def check_args(args): @@ -1006,10 +1010,10 @@ class ReleaseAMIs: Name=source.name, Description=source.description, SourceImageId=source.image_id, SourceRegion=source.region) - tags = [{ - "Key": "source_ami", - "Value": source.image_id, - }] + tags = [ + { "Key": "source_ami", "Value": source.image_id, }, + { "Key": "source_region", "Value": source.region, } + ] tags.extend(source.aws_tags) to_client.create_tags(Resources=[res["ImageId"]], Tags=tags) @@ -1036,6 +1040,16 @@ class ReleaseAMIs: source_client = self.get_source_region_client( args.use_broker, args.source_region) +# TODO: iterate over amis from the command line + + # check source ami perms, queue for fixing if necessary + source_ami = self.get_image(source_client, args.ami) + if self.has_incorrect_perms( + source_ami, args.allow_accounts, args.public): + log.info(f"Incorrect permissions for ami {args.ami} in region " + f"{source_ami.region}") + pending_perms.append((source_client, source_ami.image_id)) + # Copy image to regions where it is missing, catalog images that need # permission fixes for client in self.iter_regions(args.use_broker, args.region): @@ -1095,6 +1109,85 @@ class ReleaseAMIs: json.dump(released, sys.stdout, indent=4) +class RefreshReleases: + """Refresh releases YAML with existing profile/build AMIs + """ + + command_name = "refresh-releases" + + @staticmethod + def add_args(parser): + parser.add_argument("--use-broker", action="store_true", + help="use identity broker to obtain per-region credentials") + parser.add_argument("--region", "-r", action="append", + help="regions for check, may be specified multiple times") + parser.add_argument("profile", help="name of profile to refresh") +# TODO: get_images_with_tags needs to support tag filters with array of values +# parser.add_argument("builds", nargs="*", +# help="names of builds within the profile to refresh") + + @staticmethod + def check_args(args): + if not args.use_broker and not args.region: + return ['Use broker or region must be specified'] + + if args.use_broker and args.region: + return ['Broker and region flags are mutually exclusive'] + + def run(self, args, root, log): + profile = args.profile + tags = { 'profile': args.profile } + + release_dir = os.path.join(root, "releases") + if not os.path.exists(release_dir): + os.makedirs(release_dir) + release_yaml = os.path.join(release_dir, f"{profile}.yaml") + releases = {} + if os.path.exists(release_yaml): + with open(release_yaml, "r") as data: + releases = yaml.safe_load(data) + + for client in ReleaseAMIs().iter_regions(args.use_broker, args.region): + region_name = region_from_client(client) # For logging + log.info(f"Refreshing {profile} AMIs from {region_name}...") + amis = ReleaseAMIs().get_images_with_tags(client, **tags) + + for ami in amis: + build = ami.profile_build + release = ami.release + name = ami.name + ami_id = ami.image_id + + log.info(f" * {ami_id} {name}") + + if build not in releases: + releases[build] = {} + + if release not in releases[build]: + releases[build][release] = {} + + if name not in releases[build][release]: + releases[build][release][name] = { + 'description': ami.description, + 'profile': profile, + 'profile_build': build, + 'version': ami.version, + 'release': ami.release, + 'arch': ami.arch, + 'revision': ami.revision, + 'end_of_life': ami.end_of_life, + 'build_time': dateutil.parser.parse(ami.creation_date).strftime('%s'), + # TODO? source_ami, source_region + 'artifacts': {} + } + + releases[build][release][name]['artifacts'][region_name] = ami_id + + log.info(f"Writing new {release_yaml}") + with open(release_yaml, "w") as data: + yaml.dump(releases, data, sort_keys=False) + + class ConvertPackerJSON: """Convert packer.conf to packer.json """ From 4494aa44633351920f0aaa93c883d0e55ee5eba8 Mon Sep 17 00:00:00 2001 From: tomalok Date: Sat, 19 Dec 2020 11:16:48 -0800 Subject: [PATCH 101/125] Release the latest versions (#101) Release the latest versions * v3.12.3 (x86_64 & aarch64) * v3.11.7 (x86_64) * v3.10.5-r1 (x86_64) * today's edge (x86_64 & aarch64) * sort the release AMIs by region builder.py timings, roughly * amis - 23m * release (serial) - 1h38m * refresh-releases - 4m * gen-release-readme - instantaneous --- profiles/alpine.conf | 2 +- profiles/version/3.11 | 2 +- profiles/version/3.12 | 2 +- releases/README.md | 184 ++++++++++++++++++++-------------------- releases/alpine.yaml | 189 ++++++++++++++++++++++++++++++++++++++++++ scripts/builder.py | 2 +- 6 files changed, 289 insertions(+), 92 deletions(-) diff --git a/profiles/alpine.conf b/profiles/alpine.conf index cf22041..515eab1 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -27,7 +27,7 @@ BUILDS { # merge version, arch, profile; add { revision = "r1" } if needed edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${alpine} - v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} { revision = "r1" } + v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} { revision = "r1" } edge-aarch64 = ${version-edge} ${arch-aarch64} ${alpine} diff --git a/profiles/version/3.11 b/profiles/version/3.11 index f46a210..cce3750 100644 --- a/profiles/version/3.11 +++ b/profiles/version/3.11 @@ -6,7 +6,7 @@ include required("../base/1") # set version-specific vars version = "3.11" -release = "3.11.6" +release = "3.11.7" end_of_life = "2021-11-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" = true diff --git a/profiles/version/3.12 b/profiles/version/3.12 index 8c8fa68..c8d06f4 100644 --- a/profiles/version/3.12 +++ b/profiles/version/3.12 @@ -6,7 +6,7 @@ include required("../base/1") # set version-specific vars version = "3.12" -release = "3.12.2" +release = "3.12.3" end_of_life = "2022-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.12/main" = true diff --git a/releases/README.md b/releases/README.md index bdef193..0590451 100644 --- a/releases/README.md +++ b/releases/README.md @@ -36,79 +36,87 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.12.2 (2020-12-14) +### Alpine Linux 3.12.3 (2020-12-19)
click to show/hide

-| Region | alpine-ami-3.12.2-x86_64-r0 | alpine-ami-3.12.2-aarch64-r0 | +| Region | alpine-ami-3.12.3-x86_64-r0 | alpine-ami-3.12.3-aarch64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-0a2c528c48b724eb1](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2c528c48b724eb1) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2c528c48b724eb1)) | [ami-01bddee275c090a50](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01bddee275c090a50) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01bddee275c090a50)) | -| eu-north-1 | [ami-0f97b4e83b330a44b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f97b4e83b330a44b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f97b4e83b330a44b)) | [ami-07b793f6b41391228](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07b793f6b41391228) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07b793f6b41391228)) | -| ap-south-1 | [ami-0082a1edc963aa684](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0082a1edc963aa684) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0082a1edc963aa684)) | [ami-0759affb95b30e7fb](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0759affb95b30e7fb) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0759affb95b30e7fb)) | -| eu-west-3 | [ami-0837b3fcb00163a7d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0837b3fcb00163a7d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0837b3fcb00163a7d)) | [ami-0e27cfc827138e618](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e27cfc827138e618) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0e27cfc827138e618)) | -| eu-west-2 | [ami-0a8578d7d4ebca125](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8578d7d4ebca125) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8578d7d4ebca125)) | [ami-007b53f9896902dbb](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007b53f9896902dbb) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-007b53f9896902dbb)) | -| eu-south-1 | [ami-027ed683f42684d45](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027ed683f42684d45) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-027ed683f42684d45)) | [ami-093ee59d023f73f01](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-093ee59d023f73f01) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-093ee59d023f73f01)) | -| eu-west-1 | [ami-00185f6c477e1099d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00185f6c477e1099d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00185f6c477e1099d)) | [ami-0872a57824a7c8a0f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0872a57824a7c8a0f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0872a57824a7c8a0f)) | -| ap-northeast-2 | [ami-0c869c3c23407b0d5](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c869c3c23407b0d5) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c869c3c23407b0d5)) | [ami-053378f981bc37c5a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053378f981bc37c5a) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-053378f981bc37c5a)) | -| me-south-1 | [ami-0ff80f770d65d1cbf](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ff80f770d65d1cbf) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ff80f770d65d1cbf)) | [ami-0d6b8517fe502f094](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6b8517fe502f094) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6b8517fe502f094)) | -| ap-northeast-1 | [ami-0e4245b0cbe57cb99](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e4245b0cbe57cb99) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e4245b0cbe57cb99)) | [ami-0a5c2347daea31320](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5c2347daea31320) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5c2347daea31320)) | -| sa-east-1 | [ami-0d276bc117826a38a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d276bc117826a38a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d276bc117826a38a)) | [ami-0cb7785de4b330978](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cb7785de4b330978) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb7785de4b330978)) | -| ca-central-1 | [ami-090b8e0d13afd07c1](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-090b8e0d13afd07c1) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-090b8e0d13afd07c1)) | [ami-0d144a02a790d54a3](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d144a02a790d54a3) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d144a02a790d54a3)) | -| ap-east-1 | [ami-0efde8684085c8a1e](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0efde8684085c8a1e) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0efde8684085c8a1e)) | [ami-0f991dfb212ea3e30](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f991dfb212ea3e30) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f991dfb212ea3e30)) | -| ap-southeast-1 | [ami-0a40d2bc9bfc47553](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a40d2bc9bfc47553) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a40d2bc9bfc47553)) | [ami-0a9dfde00c4fdbf44](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a9dfde00c4fdbf44) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a9dfde00c4fdbf44)) | -| ap-southeast-2 | [ami-0e7c828c974171a77](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e7c828c974171a77) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e7c828c974171a77)) | [ami-0432ec565b29d3f0e](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0432ec565b29d3f0e) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0432ec565b29d3f0e)) | -| eu-central-1 | [ami-062cda84fa4f4abe0](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-062cda84fa4f4abe0) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-062cda84fa4f4abe0)) | [ami-0bde2f5e41915b4a2](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bde2f5e41915b4a2) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bde2f5e41915b4a2)) | -| us-east-1 | [ami-042e99e8ac5b82667](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042e99e8ac5b82667) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042e99e8ac5b82667)) | [ami-0f20521153a6af3e7](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f20521153a6af3e7) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f20521153a6af3e7)) | -| us-east-2 | [ami-0bf39a1d2a7d83170](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf39a1d2a7d83170) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf39a1d2a7d83170)) | [ami-064923dd78bf778a8](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064923dd78bf778a8) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-064923dd78bf778a8)) | -| us-west-1 | [ami-089fe5bbb8ee72815](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089fe5bbb8ee72815) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-089fe5bbb8ee72815)) | [ami-0f49257c4ee6311a5](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f49257c4ee6311a5) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f49257c4ee6311a5)) | -| us-west-2 | [ami-096f9b59745c9d447](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-096f9b59745c9d447) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-096f9b59745c9d447)) | [ami-0e308f03a3776ea1f](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e308f03a3776ea1f) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e308f03a3776ea1f)) | +| af-south-1 | [ami-06d5540221d65ca01](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d5540221d65ca01) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06d5540221d65ca01)) | [ami-025ddc2e2931d0bf2](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-025ddc2e2931d0bf2) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-025ddc2e2931d0bf2)) | +| ap-east-1 | [ami-02c576f223356bf34](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02c576f223356bf34) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02c576f223356bf34)) | [ami-023ba7dde5800c5b5](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023ba7dde5800c5b5) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023ba7dde5800c5b5)) | +| ap-northeast-1 | [ami-0250e4a691729357a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0250e4a691729357a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0250e4a691729357a)) | [ami-010debbee0fe7fbcb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010debbee0fe7fbcb) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010debbee0fe7fbcb)) | +| ap-northeast-2 | [ami-0cfb5eabfb58d5f72](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cfb5eabfb58d5f72) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cfb5eabfb58d5f72)) | [ami-09702b3f22e8616c8](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09702b3f22e8616c8) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09702b3f22e8616c8)) | +| ap-south-1 | [ami-023fe0b4c4dc73f8c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023fe0b4c4dc73f8c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023fe0b4c4dc73f8c)) | [ami-00de8b114b35175e6](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00de8b114b35175e6) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00de8b114b35175e6)) | +| ap-southeast-1 | [ami-0f06993534aec820f](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f06993534aec820f) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f06993534aec820f)) | [ami-0e3ff62bec8a2f949](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3ff62bec8a2f949) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3ff62bec8a2f949)) | +| ap-southeast-2 | [ami-0f66203a3a619f732](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f66203a3a619f732) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f66203a3a619f732)) | [ami-077f7467876246e89](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-077f7467876246e89) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-077f7467876246e89)) | +| ca-central-1 | [ami-0a5084eac39a18d31](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5084eac39a18d31) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5084eac39a18d31)) | [ami-0a1a8875a6a460565](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a1a8875a6a460565) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a1a8875a6a460565)) | +| eu-central-1 | [ami-06a298dc479cf2a73](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a298dc479cf2a73) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a298dc479cf2a73)) | [ami-00e9dcc013b89ec7b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e9dcc013b89ec7b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00e9dcc013b89ec7b)) | +| eu-north-1 | [ami-051fcf0312ac02b05](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051fcf0312ac02b05) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051fcf0312ac02b05)) | [ami-0e3ad874b66b72f5b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3ad874b66b72f5b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3ad874b66b72f5b)) | +| eu-south-1 | [ami-06b311d896c16a3a2](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b311d896c16a3a2) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b311d896c16a3a2)) | [ami-084274896601da8f5](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-084274896601da8f5) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-084274896601da8f5)) | +| eu-west-1 | [ami-0846229ad28aefe20](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0846229ad28aefe20) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0846229ad28aefe20)) | [ami-055f823d50dc901c0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-055f823d50dc901c0) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-055f823d50dc901c0)) | +| eu-west-2 | [ami-01282190055d34e3e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01282190055d34e3e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01282190055d34e3e)) | [ami-08b76009eb990b44a](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b76009eb990b44a) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08b76009eb990b44a)) | +| eu-west-3 | [ami-0fa68ac5365833d75](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa68ac5365833d75) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa68ac5365833d75)) | [ami-0d3cfa58b050f7090](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d3cfa58b050f7090) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d3cfa58b050f7090)) | +| me-south-1 | [ami-0bee0f3b523892c11](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bee0f3b523892c11) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bee0f3b523892c11)) | [ami-05a9eaed7e7f67c95](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05a9eaed7e7f67c95) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05a9eaed7e7f67c95)) | +| sa-east-1 | [ami-0af3d5295dfa78f9a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0af3d5295dfa78f9a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0af3d5295dfa78f9a)) | [ami-00890e1d93b0d2750](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00890e1d93b0d2750) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00890e1d93b0d2750)) | +| us-east-1 | [ami-098a996634a88542f](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098a996634a88542f) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098a996634a88542f)) | [ami-044f158b810baa6d4](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-044f158b810baa6d4) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-044f158b810baa6d4)) | +| us-east-2 | [ami-07012d290ef9c028e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07012d290ef9c028e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07012d290ef9c028e)) | [ami-0973e3c7bc90a4801](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0973e3c7bc90a4801) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0973e3c7bc90a4801)) | +| us-west-1 | [ami-0570d3bcb39152bb8](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0570d3bcb39152bb8) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0570d3bcb39152bb8)) | [ami-01834462564dfb367](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01834462564dfb367) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01834462564dfb367)) | +| us-west-2 | [ami-009f13dc01dec6a56](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009f13dc01dec6a56) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009f13dc01dec6a56)) | [ami-0bedcc0226437e2e0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bedcc0226437e2e0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bedcc0226437e2e0)) |

-### Alpine Linux 3.11.6 (2020-04-26) +### Alpine Linux 3.11.7 (2020-12-19)
click to show/hide

-| Region | alpine-ami-3.11.6-x86_64-r0 | +| Region | alpine-ami-3.11.7-x86_64-r0 | | ------ | --- | -| eu-north-1 | [ami-03830331da71d3b6a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03830331da71d3b6a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03830331da71d3b6a)) | -| ap-south-1 | [ami-08437e8244154999a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08437e8244154999a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08437e8244154999a)) | -| eu-west-3 | [ami-043d77b850fc69cff](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043d77b850fc69cff) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-043d77b850fc69cff)) | -| eu-west-2 | [ami-0dcb13d7ab5820ac0](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dcb13d7ab5820ac0) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0dcb13d7ab5820ac0)) | -| eu-west-1 | [ami-0a3bf003cc0e5cbaf](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3bf003cc0e5cbaf) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3bf003cc0e5cbaf)) | -| ap-northeast-2 | [ami-0fd25bd139c05812d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fd25bd139c05812d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fd25bd139c05812d)) | -| ap-northeast-1 | [ami-04dd34605aba7ce11](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04dd34605aba7ce11) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04dd34605aba7ce11)) | -| sa-east-1 | [ami-0056de88b2ebc5071](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0056de88b2ebc5071) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0056de88b2ebc5071)) | -| ca-central-1 | [ami-013d1db5df4ad7d4a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013d1db5df4ad7d4a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-013d1db5df4ad7d4a)) | -| ap-southeast-1 | [ami-04a63840be47a0816](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04a63840be47a0816) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04a63840be47a0816)) | -| ap-southeast-2 | [ami-07be0b72172a63df3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07be0b72172a63df3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07be0b72172a63df3)) | -| eu-central-1 | [ami-03bc1e4d4bf636895](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03bc1e4d4bf636895) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03bc1e4d4bf636895)) | -| us-east-1 | [ami-0da684cce2ab4aadb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0da684cce2ab4aadb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0da684cce2ab4aadb)) | -| us-east-2 | [ami-014d15ba809c1e48f](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014d15ba809c1e48f) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014d15ba809c1e48f)) | -| us-west-1 | [ami-05f659e5fe3528bbd](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f659e5fe3528bbd) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f659e5fe3528bbd)) | -| us-west-2 | [ami-0380e01590d421d3e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0380e01590d421d3e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0380e01590d421d3e)) | +| af-south-1 | [ami-05cf48a10f6002168](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05cf48a10f6002168) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05cf48a10f6002168)) | +| ap-east-1 | [ami-096def05737bb9fa5](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-096def05737bb9fa5) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-096def05737bb9fa5)) | +| ap-northeast-1 | [ami-0dc80e3c7e0aedb4e](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc80e3c7e0aedb4e) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc80e3c7e0aedb4e)) | +| ap-northeast-2 | [ami-09346dc8fc008c9f3](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09346dc8fc008c9f3) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09346dc8fc008c9f3)) | +| ap-south-1 | [ami-050c579c7459a48c2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-050c579c7459a48c2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-050c579c7459a48c2)) | +| ap-southeast-1 | [ami-02d1e1bf59cca56f6](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02d1e1bf59cca56f6) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02d1e1bf59cca56f6)) | +| ap-southeast-2 | [ami-055e9bb961d28d69d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-055e9bb961d28d69d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-055e9bb961d28d69d)) | +| ca-central-1 | [ami-0af7eccbeacce0f05](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0af7eccbeacce0f05) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0af7eccbeacce0f05)) | +| eu-central-1 | [ami-05794ddba50a9a744](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05794ddba50a9a744) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05794ddba50a9a744)) | +| eu-north-1 | [ami-05b0683850b38c6d5](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05b0683850b38c6d5) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05b0683850b38c6d5)) | +| eu-south-1 | [ami-0642f11c989872666](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0642f11c989872666) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0642f11c989872666)) | +| eu-west-1 | [ami-0956524d21583a27a](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0956524d21583a27a) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0956524d21583a27a)) | +| eu-west-2 | [ami-07e738b263969a042](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e738b263969a042) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07e738b263969a042)) | +| eu-west-3 | [ami-07e0f0262ff7b7da9](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e0f0262ff7b7da9) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07e0f0262ff7b7da9)) | +| me-south-1 | [ami-0d033bc51aa9fc3c6](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d033bc51aa9fc3c6) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d033bc51aa9fc3c6)) | +| sa-east-1 | [ami-07ec4797792079c72](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ec4797792079c72) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07ec4797792079c72)) | +| us-east-1 | [ami-0f5a58345290f20fe](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f5a58345290f20fe) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f5a58345290f20fe)) | +| us-east-2 | [ami-089db2524f896109e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089db2524f896109e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-089db2524f896109e)) | +| us-west-1 | [ami-0a0564916b7d4a510](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a0564916b7d4a510) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a0564916b7d4a510)) | +| us-west-2 | [ami-0b9f7e5619a03a0ea](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9f7e5619a03a0ea) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9f7e5619a03a0ea)) |

-### Alpine Linux 3.10.5 (2020-04-26) +### Alpine Linux 3.10.5 (2020-12-19)
click to show/hide

-| Region | alpine-ami-3.10.5-x86_64-r0 | +| Region | alpine-ami-3.10.5-x86_64-r1 | | ------ | --- | -| eu-north-1 | [ami-041b6bdb27dbc8226](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-041b6bdb27dbc8226) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-041b6bdb27dbc8226)) | -| ap-south-1 | [ami-0c8a22fa0ee90c07a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c8a22fa0ee90c07a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c8a22fa0ee90c07a)) | -| eu-west-3 | [ami-0bbb1a9d10ee0e6ee](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bbb1a9d10ee0e6ee) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bbb1a9d10ee0e6ee)) | -| eu-west-2 | [ami-08ca328d558bee247](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08ca328d558bee247) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08ca328d558bee247)) | -| eu-west-1 | [ami-0451f26166639b1b9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0451f26166639b1b9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0451f26166639b1b9)) | -| ap-northeast-2 | [ami-0595dc50c0f0e23f7](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0595dc50c0f0e23f7) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0595dc50c0f0e23f7)) | -| ap-northeast-1 | [ami-043d40c880c7a176b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043d40c880c7a176b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043d40c880c7a176b)) | -| sa-east-1 | [ami-088bc83fe1497e710](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088bc83fe1497e710) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-088bc83fe1497e710)) | -| ca-central-1 | [ami-08c250f635a417222](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c250f635a417222) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c250f635a417222)) | -| ap-southeast-1 | [ami-0244d1373053cfe5b](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0244d1373053cfe5b) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0244d1373053cfe5b)) | -| ap-southeast-2 | [ami-0cf284dc25e35862d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cf284dc25e35862d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cf284dc25e35862d)) | -| eu-central-1 | [ami-0a626b78c94340b6e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a626b78c94340b6e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a626b78c94340b6e)) | -| us-east-1 | [ami-0e635ea3ca126c707](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e635ea3ca126c707) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e635ea3ca126c707)) | -| us-east-2 | [ami-0f5a09a7d1d0ae35f](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f5a09a7d1d0ae35f) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f5a09a7d1d0ae35f)) | -| us-west-1 | [ami-06c2aa86f3a72385e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c2aa86f3a72385e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06c2aa86f3a72385e)) | -| us-west-2 | [ami-0b6f8a395fa8b5961](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6f8a395fa8b5961) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6f8a395fa8b5961)) | +| af-south-1 | [ami-0f04d696b9bb2a043](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f04d696b9bb2a043) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f04d696b9bb2a043)) | +| ap-east-1 | [ami-0392cbf555ce3a146](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0392cbf555ce3a146) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0392cbf555ce3a146)) | +| ap-northeast-1 | [ami-095d84c90b5d8aeee](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095d84c90b5d8aeee) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-095d84c90b5d8aeee)) | +| ap-northeast-2 | [ami-0f6d55079fee59400](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6d55079fee59400) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6d55079fee59400)) | +| ap-south-1 | [ami-07e6e99350bef94dd](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e6e99350bef94dd) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07e6e99350bef94dd)) | +| ap-southeast-1 | [ami-0f784485a4589cf66](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f784485a4589cf66) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f784485a4589cf66)) | +| ap-southeast-2 | [ami-0886f3fffb96b61ba](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0886f3fffb96b61ba) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0886f3fffb96b61ba)) | +| ca-central-1 | [ami-078f16db0a269ea93](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-078f16db0a269ea93) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-078f16db0a269ea93)) | +| eu-central-1 | [ami-0380ce28ef629d90d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0380ce28ef629d90d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0380ce28ef629d90d)) | +| eu-north-1 | [ami-00b16b9ae0a30f956](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00b16b9ae0a30f956) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00b16b9ae0a30f956)) | +| eu-south-1 | [ami-0d6b6ed478eac773c](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6b6ed478eac773c) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6b6ed478eac773c)) | +| eu-west-1 | [ami-04b775d6fe1735210](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b775d6fe1735210) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04b775d6fe1735210)) | +| eu-west-2 | [ami-014e97d83f67eaa97](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014e97d83f67eaa97) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014e97d83f67eaa97)) | +| eu-west-3 | [ami-0288c23df586bd137](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0288c23df586bd137) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0288c23df586bd137)) | +| me-south-1 | [ami-0f2301c3be4340833](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2301c3be4340833) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2301c3be4340833)) | +| sa-east-1 | [ami-0a431dbfae17074be](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a431dbfae17074be) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a431dbfae17074be)) | +| us-east-1 | [ami-0ad73f561b0d903fa](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ad73f561b0d903fa) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ad73f561b0d903fa)) | +| us-east-2 | [ami-0c15ef6ad3bdb364d](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c15ef6ad3bdb364d) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c15ef6ad3bdb364d)) | +| us-west-1 | [ami-0f06f7abd4a2481fc](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f06f7abd4a2481fc) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f06f7abd4a2481fc)) | +| us-west-2 | [ami-0605acecb09204ae6](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0605acecb09204ae6) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0605acecb09204ae6)) |

@@ -117,18 +125,18 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). | Region | alpine-ami-3.9.6-x86_64-r0 | | ------ | --- | -| eu-north-1 | [ami-07a2b23059054aea3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a2b23059054aea3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a2b23059054aea3)) | -| ap-south-1 | [ami-00af726ec2f4077a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00af726ec2f4077a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00af726ec2f4077a2)) | -| eu-west-3 | [ami-00a425aa20737343e](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a425aa20737343e) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00a425aa20737343e)) | -| eu-west-2 | [ami-08c87b358b24d1df3](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c87b358b24d1df3) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08c87b358b24d1df3)) | -| eu-west-1 | [ami-0eb2b54ab4d09eb80](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb2b54ab4d09eb80) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb2b54ab4d09eb80)) | -| ap-northeast-2 | [ami-0f9ad7c51e14bdc3d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ad7c51e14bdc3d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ad7c51e14bdc3d)) | | ap-northeast-1 | [ami-0133f3a571f684178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0133f3a571f684178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0133f3a571f684178)) | -| sa-east-1 | [ami-0ea679407da47b78a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ea679407da47b78a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea679407da47b78a)) | -| ca-central-1 | [ami-0583a99f342097b6c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0583a99f342097b6c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0583a99f342097b6c)) | +| ap-northeast-2 | [ami-0f9ad7c51e14bdc3d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ad7c51e14bdc3d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ad7c51e14bdc3d)) | +| ap-south-1 | [ami-00af726ec2f4077a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00af726ec2f4077a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00af726ec2f4077a2)) | | ap-southeast-1 | [ami-0d52e9d7f91ca051c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d52e9d7f91ca051c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d52e9d7f91ca051c)) | | ap-southeast-2 | [ami-054360648343b66bc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054360648343b66bc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-054360648343b66bc)) | +| ca-central-1 | [ami-0583a99f342097b6c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0583a99f342097b6c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0583a99f342097b6c)) | | eu-central-1 | [ami-051eec0106a08df6d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051eec0106a08df6d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051eec0106a08df6d)) | +| eu-north-1 | [ami-07a2b23059054aea3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a2b23059054aea3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a2b23059054aea3)) | +| eu-west-1 | [ami-0eb2b54ab4d09eb80](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb2b54ab4d09eb80) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb2b54ab4d09eb80)) | +| eu-west-2 | [ami-08c87b358b24d1df3](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c87b358b24d1df3) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08c87b358b24d1df3)) | +| eu-west-3 | [ami-00a425aa20737343e](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a425aa20737343e) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00a425aa20737343e)) | +| sa-east-1 | [ami-0ea679407da47b78a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ea679407da47b78a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea679407da47b78a)) | | us-east-1 | [ami-004f0550310a2d7aa](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004f0550310a2d7aa) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-004f0550310a2d7aa)) | | us-east-2 | [ami-045a2cc3fe272caee](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045a2cc3fe272caee) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-045a2cc3fe272caee)) | | us-west-1 | [ami-026a54e52daea1233](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026a54e52daea1233) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026a54e52daea1233)) | @@ -136,30 +144,30 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux Edge (2020-12-14) +### Alpine Linux Edge (2020-12-19)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20201213190459 | alpine-ami-edge-aarch64-20201213190459 | +| Region | alpine-ami-edge-x86_64-20201219023017 | alpine-ami-edge-aarch64-20201219023017 | | ------ | --- | --- | -| af-south-1 | [ami-0f910995b3fcbc2a1](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f910995b3fcbc2a1) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f910995b3fcbc2a1)) | [ami-0ef1ed51536d4c21c](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef1ed51536d4c21c) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef1ed51536d4c21c)) | -| eu-north-1 | [ami-00d23d9fe5e916760](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00d23d9fe5e916760) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00d23d9fe5e916760)) | [ami-0fd0089405ce34751](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fd0089405ce34751) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fd0089405ce34751)) | -| ap-south-1 | [ami-02cdde8617c38b6da](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02cdde8617c38b6da) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02cdde8617c38b6da)) | [ami-0fb7826afebdee836](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb7826afebdee836) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb7826afebdee836)) | -| eu-west-3 | [ami-06649b9ba1b9c6625](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06649b9ba1b9c6625) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06649b9ba1b9c6625)) | [ami-0a5b6e3683e165f46](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5b6e3683e165f46) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5b6e3683e165f46)) | -| eu-west-2 | [ami-0b54da8cc7d2e71ab](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b54da8cc7d2e71ab) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b54da8cc7d2e71ab)) | [ami-01f876c398a9a1e8a](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01f876c398a9a1e8a) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01f876c398a9a1e8a)) | -| eu-south-1 | [ami-0e119f0362787d26f](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e119f0362787d26f) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e119f0362787d26f)) | [ami-08a7fd2863b4cf769](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a7fd2863b4cf769) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08a7fd2863b4cf769)) | -| eu-west-1 | [ami-06bb894c2ea22cfa7](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06bb894c2ea22cfa7) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06bb894c2ea22cfa7)) | [ami-06844e8cfb88e3488](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06844e8cfb88e3488) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06844e8cfb88e3488)) | -| ap-northeast-2 | [ami-0608684322b1df99d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0608684322b1df99d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0608684322b1df99d)) | [ami-0be33da35fb42cf91](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be33da35fb42cf91) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0be33da35fb42cf91)) | -| me-south-1 | [ami-00ad5f5422bb04d33](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ad5f5422bb04d33) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00ad5f5422bb04d33)) | [ami-012a6c8b0aa9755e5](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-012a6c8b0aa9755e5) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-012a6c8b0aa9755e5)) | -| ap-northeast-1 | [ami-00f04e83341318e5d](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00f04e83341318e5d) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00f04e83341318e5d)) | [ami-0c3e9ea96d54b2fa6](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3e9ea96d54b2fa6) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3e9ea96d54b2fa6)) | -| sa-east-1 | [ami-048f22481002c6990](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-048f22481002c6990) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-048f22481002c6990)) | [ami-0490301bf3d8f367b](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0490301bf3d8f367b) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0490301bf3d8f367b)) | -| ca-central-1 | [ami-0c6173e1c33395119](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c6173e1c33395119) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c6173e1c33395119)) | [ami-03a14b888f050a80c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03a14b888f050a80c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03a14b888f050a80c)) | -| ap-east-1 | [ami-0843f7ca1455bbcf3](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0843f7ca1455bbcf3) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0843f7ca1455bbcf3)) | [ami-0960c97dbfb4c2370](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0960c97dbfb4c2370) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0960c97dbfb4c2370)) | -| ap-southeast-1 | [ami-0a0f9e02019761a7d](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a0f9e02019761a7d) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a0f9e02019761a7d)) | [ami-052c0924f23638e55](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052c0924f23638e55) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052c0924f23638e55)) | -| ap-southeast-2 | [ami-0a4aef473ddfc4942](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a4aef473ddfc4942) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a4aef473ddfc4942)) | [ami-08a3a7e67af495c34](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a3a7e67af495c34) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08a3a7e67af495c34)) | -| eu-central-1 | [ami-0f7ba6027999c7b2c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7ba6027999c7b2c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7ba6027999c7b2c)) | [ami-0c1ed5c6c58a479a1](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c1ed5c6c58a479a1) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c1ed5c6c58a479a1)) | -| us-east-1 | [ami-04c9b228d4a45c132](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04c9b228d4a45c132) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04c9b228d4a45c132)) | [ami-088169794239b59c9](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088169794239b59c9) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-088169794239b59c9)) | -| us-east-2 | [ami-026a039af74def437](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026a039af74def437) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-026a039af74def437)) | [ami-08d78e14e90b41779](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08d78e14e90b41779) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08d78e14e90b41779)) | -| us-west-1 | [ami-0a9ffe73ca66b492b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a9ffe73ca66b492b) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a9ffe73ca66b492b)) | [ami-0fc9b035119434b1a](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc9b035119434b1a) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc9b035119434b1a)) | -| us-west-2 | [ami-0b91b7b604d8e2698](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b91b7b604d8e2698) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b91b7b604d8e2698)) | [ami-0769e7ae6646ee6ce](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0769e7ae6646ee6ce) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0769e7ae6646ee6ce)) | +| af-south-1 | [ami-022ac59bcd87cd5dc](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-022ac59bcd87cd5dc) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-022ac59bcd87cd5dc)) | [ami-07a6dbca85456ca7d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a6dbca85456ca7d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a6dbca85456ca7d)) | +| ap-east-1 | [ami-0c146b06f89e12aa9](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c146b06f89e12aa9) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c146b06f89e12aa9)) | [ami-07f55a0f369e88cc4](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f55a0f369e88cc4) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f55a0f369e88cc4)) | +| ap-northeast-1 | [ami-0d17941cd28072770](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d17941cd28072770) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d17941cd28072770)) | [ami-059d668e854ac0219](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059d668e854ac0219) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059d668e854ac0219)) | +| ap-northeast-2 | [ami-06d5011c4ae6a7166](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d5011c4ae6a7166) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06d5011c4ae6a7166)) | [ami-00c4b2ff9ba78029f](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00c4b2ff9ba78029f) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00c4b2ff9ba78029f)) | +| ap-south-1 | [ami-03d1da261501ebbdc](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d1da261501ebbdc) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03d1da261501ebbdc)) | [ami-083d9e5de667bf303](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-083d9e5de667bf303) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-083d9e5de667bf303)) | +| ap-southeast-1 | [ami-0b4cbe54908f69a4d](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b4cbe54908f69a4d) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b4cbe54908f69a4d)) | [ami-0ccbac70492a3aaaf](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ccbac70492a3aaaf) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ccbac70492a3aaaf)) | +| ap-southeast-2 | [ami-09bc28136809b7dd0](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09bc28136809b7dd0) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09bc28136809b7dd0)) | [ami-0ae21901800152085](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ae21901800152085) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ae21901800152085)) | +| ca-central-1 | [ami-0b5e13380e240d13c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b5e13380e240d13c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b5e13380e240d13c)) | [ami-0727dd3c84677edaa](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0727dd3c84677edaa) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0727dd3c84677edaa)) | +| eu-central-1 | [ami-0dd96a983af0fa240](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dd96a983af0fa240) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd96a983af0fa240)) | [ami-0d31dea4e6538c397](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d31dea4e6538c397) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d31dea4e6538c397)) | +| eu-north-1 | [ami-0a0db680071981da9](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a0db680071981da9) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a0db680071981da9)) | [ami-0e99b8aafb11d906e](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e99b8aafb11d906e) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e99b8aafb11d906e)) | +| eu-south-1 | [ami-03eb2aa305b859ceb](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03eb2aa305b859ceb) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03eb2aa305b859ceb)) | [ami-0439753d6d0a62c8c](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0439753d6d0a62c8c) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0439753d6d0a62c8c)) | +| eu-west-1 | [ami-0c6dc60db5f0a3398](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c6dc60db5f0a3398) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c6dc60db5f0a3398)) | [ami-0fb7049a355e67dd0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb7049a355e67dd0) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb7049a355e67dd0)) | +| eu-west-2 | [ami-006f06c7bf63c7cf9](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-006f06c7bf63c7cf9) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-006f06c7bf63c7cf9)) | [ami-06a6c48ddf101be91](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a6c48ddf101be91) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06a6c48ddf101be91)) | +| eu-west-3 | [ami-07d44564a98b9fad6](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07d44564a98b9fad6) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07d44564a98b9fad6)) | [ami-071c3f1a5e6149b8d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071c3f1a5e6149b8d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-071c3f1a5e6149b8d)) | +| me-south-1 | [ami-00c3f62d4f482de1a](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00c3f62d4f482de1a) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00c3f62d4f482de1a)) | [ami-0c104cc8c6b41dee0](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c104cc8c6b41dee0) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c104cc8c6b41dee0)) | +| sa-east-1 | [ami-0cf3e2b703ef1767e](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cf3e2b703ef1767e) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cf3e2b703ef1767e)) | [ami-005599fbab4c82cc9](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005599fbab4c82cc9) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-005599fbab4c82cc9)) | +| us-east-1 | [ami-0472ae2f8f4bf32df](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0472ae2f8f4bf32df) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0472ae2f8f4bf32df)) | [ami-04e9e4c6e875ee40d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e9e4c6e875ee40d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e9e4c6e875ee40d)) | +| us-east-2 | [ami-0f1724b67cf38a4d3](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1724b67cf38a4d3) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1724b67cf38a4d3)) | [ami-06f27121f9aae420c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06f27121f9aae420c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06f27121f9aae420c)) | +| us-west-1 | [ami-09eb6f67937a05178](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09eb6f67937a05178) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09eb6f67937a05178)) | [ami-0dbd39c2a43b4775c](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dbd39c2a43b4775c) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dbd39c2a43b4775c)) | +| us-west-2 | [ami-09d1611a460f7db7e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09d1611a460f7db7e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09d1611a460f7db7e)) | [ami-082390a369bbeec92](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082390a369bbeec92) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-082390a369bbeec92)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index d5e889d..a43627a 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -308,6 +308,37 @@ edge-x86_64: us-east-1: ami-04c9b228d4a45c132 us-east-2: ami-026a039af74def437 us-west-1: ami-0a9ffe73ca66b492b + alpine-ami-edge-x86_64-20201219023017: + description: Alpine Linux edge x86_64 20201219023017 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20201219023017' + end_of_life: '2020-12-20T02:30:17' + build_time: 1608345732 + artifacts: + us-west-2: ami-09d1611a460f7db7e + af-south-1: ami-022ac59bcd87cd5dc + eu-north-1: ami-0a0db680071981da9 + ap-south-1: ami-03d1da261501ebbdc + eu-west-3: ami-07d44564a98b9fad6 + eu-west-2: ami-006f06c7bf63c7cf9 + eu-south-1: ami-03eb2aa305b859ceb + eu-west-1: ami-0c6dc60db5f0a3398 + ap-northeast-2: ami-06d5011c4ae6a7166 + me-south-1: ami-00c3f62d4f482de1a + ap-northeast-1: ami-0d17941cd28072770 + sa-east-1: ami-0cf3e2b703ef1767e + ca-central-1: ami-0b5e13380e240d13c + ap-east-1: ami-0c146b06f89e12aa9 + ap-southeast-1: ami-0b4cbe54908f69a4d + ap-southeast-2: ami-09bc28136809b7dd0 + eu-central-1: ami-0dd96a983af0fa240 + us-east-1: ami-0472ae2f8f4bf32df + us-east-2: ami-0f1724b67cf38a4d3 + us-west-1: ami-09eb6f67937a05178 v3_12-aarch64: 3.12.1: alpine-ami-3.12.1-aarch64-r1: @@ -404,6 +435,38 @@ v3_12-aarch64: us-east-1: ami-0f20521153a6af3e7 us-east-2: ami-064923dd78bf778a8 us-west-1: ami-0f49257c4ee6311a5 + 3.12.3: + alpine-ami-3.12.3-aarch64-r0: + description: Alpine Linux 3.12.3 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-aarch64 + version: '3.12' + release: 3.12.3 + arch: aarch64 + revision: r0 + end_of_life: '2022-05-01T00:00:00' + build_time: 1608345895 + artifacts: + us-west-2: ami-0bedcc0226437e2e0 + af-south-1: ami-025ddc2e2931d0bf2 + eu-north-1: ami-0e3ad874b66b72f5b + ap-south-1: ami-00de8b114b35175e6 + eu-west-3: ami-0d3cfa58b050f7090 + eu-west-2: ami-08b76009eb990b44a + eu-south-1: ami-084274896601da8f5 + eu-west-1: ami-055f823d50dc901c0 + ap-northeast-2: ami-09702b3f22e8616c8 + me-south-1: ami-05a9eaed7e7f67c95 + ap-northeast-1: ami-010debbee0fe7fbcb + sa-east-1: ami-00890e1d93b0d2750 + ca-central-1: ami-0a1a8875a6a460565 + ap-east-1: ami-023ba7dde5800c5b5 + ap-southeast-1: ami-0e3ff62bec8a2f949 + ap-southeast-2: ami-077f7467876246e89 + eu-central-1: ami-00e9dcc013b89ec7b + us-east-1: ami-044f158b810baa6d4 + us-east-2: ami-0973e3c7bc90a4801 + us-west-1: ami-01834462564dfb367 edge-aarch64: edge: alpine-ami-edge-aarch64-20201104223817: @@ -499,6 +562,37 @@ edge-aarch64: us-east-1: ami-088169794239b59c9 us-east-2: ami-08d78e14e90b41779 us-west-1: ami-0fc9b035119434b1a + alpine-ami-edge-aarch64-20201219023017: + description: Alpine Linux edge aarch64 20201219023017 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20201219023017' + end_of_life: '2020-12-20T02:30:17' + build_time: 1608345536 + artifacts: + us-west-2: ami-082390a369bbeec92 + af-south-1: ami-07a6dbca85456ca7d + eu-north-1: ami-0e99b8aafb11d906e + ap-south-1: ami-083d9e5de667bf303 + eu-west-3: ami-071c3f1a5e6149b8d + eu-west-2: ami-06a6c48ddf101be91 + eu-south-1: ami-0439753d6d0a62c8c + eu-west-1: ami-0fb7049a355e67dd0 + ap-northeast-2: ami-00c4b2ff9ba78029f + me-south-1: ami-0c104cc8c6b41dee0 + ap-northeast-1: ami-059d668e854ac0219 + sa-east-1: ami-005599fbab4c82cc9 + ca-central-1: ami-0727dd3c84677edaa + ap-east-1: ami-07f55a0f369e88cc4 + ap-southeast-1: ami-0ccbac70492a3aaaf + ap-southeast-2: ami-0ae21901800152085 + eu-central-1: ami-0d31dea4e6538c397 + us-east-1: ami-04e9e4c6e875ee40d + us-east-2: ami-06f27121f9aae420c + us-west-1: ami-0dbd39c2a43b4775c v3_12-x86_64: 3.12.1: alpine-ami-3.12.1-x86_64-r0: @@ -564,6 +658,38 @@ v3_12-x86_64: us-east-1: ami-042e99e8ac5b82667 us-east-2: ami-0bf39a1d2a7d83170 us-west-1: ami-089fe5bbb8ee72815 + 3.12.3: + alpine-ami-3.12.3-x86_64-r0: + description: Alpine Linux 3.12.3 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-x86_64 + version: '3.12' + release: 3.12.3 + arch: x86_64 + revision: r0 + end_of_life: '2022-05-01T00:00:00' + build_time: 1608345219 + artifacts: + us-west-2: ami-009f13dc01dec6a56 + af-south-1: ami-06d5540221d65ca01 + eu-north-1: ami-051fcf0312ac02b05 + ap-south-1: ami-023fe0b4c4dc73f8c + eu-west-3: ami-0fa68ac5365833d75 + eu-west-2: ami-01282190055d34e3e + eu-south-1: ami-06b311d896c16a3a2 + eu-west-1: ami-0846229ad28aefe20 + ap-northeast-2: ami-0cfb5eabfb58d5f72 + me-south-1: ami-0bee0f3b523892c11 + ap-northeast-1: ami-0250e4a691729357a + sa-east-1: ami-0af3d5295dfa78f9a + ca-central-1: ami-0a5084eac39a18d31 + ap-east-1: ami-02c576f223356bf34 + ap-southeast-1: ami-0f06993534aec820f + ap-southeast-2: ami-0f66203a3a619f732 + eu-central-1: ami-06a298dc479cf2a73 + us-east-1: ami-098a996634a88542f + us-east-2: ami-07012d290ef9c028e + us-west-1: ami-0570d3bcb39152bb8 v3_10-x86_64: 3.10.4: alpine-ami-3.10.4-x86_64-r0: @@ -704,6 +830,37 @@ v3_10-x86_64: us-east-2: ami-0f5a09a7d1d0ae35f us-west-1: ami-06c2aa86f3a72385e us-west-2: ami-0b6f8a395fa8b5961 + alpine-ami-3.10.5-x86_64-r1: + description: Alpine Linux 3.10.5 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.5 + arch: x86_64 + revision: r1 + end_of_life: '2021-05-01T00:00:00' + build_time: 1608345383 + artifacts: + us-west-2: ami-0605acecb09204ae6 + af-south-1: ami-0f04d696b9bb2a043 + eu-north-1: ami-00b16b9ae0a30f956 + ap-south-1: ami-07e6e99350bef94dd + eu-west-3: ami-0288c23df586bd137 + eu-west-2: ami-014e97d83f67eaa97 + eu-south-1: ami-0d6b6ed478eac773c + eu-west-1: ami-04b775d6fe1735210 + ap-northeast-2: ami-0f6d55079fee59400 + me-south-1: ami-0f2301c3be4340833 + ap-northeast-1: ami-095d84c90b5d8aeee + sa-east-1: ami-0a431dbfae17074be + ca-central-1: ami-078f16db0a269ea93 + ap-east-1: ami-0392cbf555ce3a146 + ap-southeast-1: ami-0f784485a4589cf66 + ap-southeast-2: ami-0886f3fffb96b61ba + eu-central-1: ami-0380ce28ef629d90d + us-east-1: ami-0ad73f561b0d903fa + us-east-2: ami-0c15ef6ad3bdb364d + us-west-1: ami-0f06f7abd4a2481fc 3.10.0: alpine-ami-3.10.0-x86_64-r0: description: Alpine Linux 3.10.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami @@ -1013,6 +1170,38 @@ v3_11-x86_64: us-east-2: ami-0325fc21b50ee19ba us-west-1: ami-003d6e7746c7e938e us-west-2: ami-0966c757f79c1a553 + 3.11.7: + alpine-ami-3.11.7-x86_64-r0: + description: Alpine Linux 3.11.7 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.7 + arch: x86_64 + revision: r0 + end_of_life: '2021-11-01T00:00:00' + build_time: 1608346108 + artifacts: + us-west-2: ami-0b9f7e5619a03a0ea + af-south-1: ami-05cf48a10f6002168 + eu-north-1: ami-05b0683850b38c6d5 + ap-south-1: ami-050c579c7459a48c2 + eu-west-3: ami-07e0f0262ff7b7da9 + eu-west-2: ami-07e738b263969a042 + eu-south-1: ami-0642f11c989872666 + eu-west-1: ami-0956524d21583a27a + ap-northeast-2: ami-09346dc8fc008c9f3 + me-south-1: ami-0d033bc51aa9fc3c6 + ap-northeast-1: ami-0dc80e3c7e0aedb4e + sa-east-1: ami-07ec4797792079c72 + ca-central-1: ami-0af7eccbeacce0f05 + ap-east-1: ami-096def05737bb9fa5 + ap-southeast-1: ami-02d1e1bf59cca56f6 + ap-southeast-2: ami-055e9bb961d28d69d + eu-central-1: ami-05794ddba50a9a744 + us-east-1: ami-0f5a58345290f20fe + us-east-2: ami-089db2524f896109e + us-west-1: ami-0a0564916b7d4a510 current-x86_64: 3.9.4: alpine-ami-3.9.4-x86_64-r0: diff --git a/scripts/builder.py b/scripts/builder.py index 4e553e5..6867c3c 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -439,7 +439,7 @@ class ReleaseReadmeUpdater: rows[0] += f" {info['name'][arch]} |" rows[1] += " --- |" - for region, amis in info["ami"].items(): + for region, amis in sorted(info["ami"].items()): row = f"| {region} |" for arch in self.archs: if arch in amis: From e5b574f48fc4fa57a4b81528c1a3f665f9ea33e1 Mon Sep 17 00:00:00 2001 From: Jake Buchholz Date: Tue, 22 Dec 2020 08:25:12 -0800 Subject: [PATCH 102/125] Post-Build Cleanup, etc. scripts/builder.py... GenReleaseReadme: * combine with ReleaseReadmeUpdater * generates README_.md * README_alpine.md is a symlink to README.md * don't crash when README doesn't preexist * append image list to README if no list found to replace MakeAMIs: * collect all artifact IDs and report after all builds * don't update releases/readme PruneAMIs: * defaults to pretend mode, unless --no-pretend * improve readability UpdateReleases: * replace code with what was RefreshReleases --- releases/README_alpine.md | 1 + scripts/builder.py | 193 +++++++++++++++----------------------- 2 files changed, 77 insertions(+), 117 deletions(-) create mode 120000 releases/README_alpine.md diff --git a/releases/README_alpine.md b/releases/README_alpine.md new file mode 120000 index 0000000..42061c0 --- /dev/null +++ b/releases/README_alpine.md @@ -0,0 +1 @@ +README.md \ No newline at end of file diff --git a/scripts/builder.py b/scripts/builder.py index 6867c3c..26c2826 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -376,7 +376,11 @@ class IdentityBrokerClient: yield self._boto3_session_from_creds(self._get(cred_url), region) -class ReleaseReadmeUpdater: +class GenReleaseReadme: + """Generate releases/README_.md + """ + + command_name = "gen-release-readme" SECTION_TPL = textwrap.dedent(""" ### Alpine Linux {release} ({date}) @@ -394,10 +398,7 @@ class ReleaseReadmeUpdater: "#launchAmi={id})) |" ) - def __init__(self, repo_root, profile, archs=None): - self.repo_root = repo_root - self.profile = profile - self.archs = archs or ["x86_64", "aarch64"] + archs = ['x86_64', 'aarch64'] @staticmethod def extract_ver(x): @@ -431,6 +432,8 @@ class ReleaseReadmeUpdater: def make_ami_list(self, sorted_releases): ami_list = "## AMIs\n" + # TODO: this may need some more thought for (rare) cases when regions + # don't all have the same-named images for some reason for info in sorted_releases: rows = ["| Region |", "| ------ |"] @@ -454,36 +457,41 @@ class ReleaseReadmeUpdater: return ami_list - def update_markdown(self): - release_dir = os.path.join(self.repo_root, "releases") - profile_file = os.path.join(release_dir, f"{self.profile}.yaml") - - with open(profile_file, "r") as data: - sorted_releases = self.get_sorted_releases(yaml.safe_load(data)) - - readme_md = os.path.join(release_dir, "README.md") - - with open(readme_md, "r") as file: - readme = file.read() - - with open(readme_md, "w") as file: - file.write( - re.sub("## AMIs.*\Z", self.make_ami_list(sorted_releases), - readme, flags=re.S)) - - -class GenReleaseReadme: - """Update release README - """ - - command_name = "gen-release-readme" - @staticmethod def add_args(parser): parser.add_argument("profile", help="name of profile to update") def run(self, args, root, log): - ReleaseReadmeUpdater(root, args.profile).update_markdown() + profile = args.profile + + release_dir = os.path.join(root, "releases") + profile_file = os.path.join(release_dir, f"{profile}.yaml") + with open(profile_file, "r") as data: + sorted_releases = self.get_sorted_releases(yaml.safe_load(data)) + + readme_md = os.path.join(release_dir, f"README_{profile}.md") + + readme = "" + action = "Updated" + if os.path.exists(readme_md): + with open(readme_md, "r") as file: + readme = file.read() + else: + action = "Created" + + re_images = re.compile(r"## AMIs.*\Z", flags=re.DOTALL) + + if re_images.search(readme): + re_images.sub( + self.make_ami_list(sorted_releases), + readme) + else: + readme += "\n" + self.make_ami_list(sorted_releases) + + with open(readme_md, "w") as file: + file.write(readme) + + log.info(f"{action} {readme_md}") class MakeAMIs: @@ -502,12 +510,23 @@ class MakeAMIs: parser.add_argument("builds", nargs="*", help="name of builds within a profile to build") + @staticmethod + def get_artifact_id(root, profile, build): + manifest_json = os.path.join( + root, "build", "profile", profile, build, + "manifest.json") + with open(manifest_json, "r") as data: + manifest = json.load(data) + return manifest['builds'][0]['artifact_id'].split(':')[1] + def run(self, args, root, log): os.chdir(os.path.join(root, "build")) builds = args.builds or os.listdir( os.path.join("profile", args.profile)) + artifacts = [] + for build in builds: log.info("\n*** Building %s/%s ***\n\n", args.profile, build) @@ -542,16 +561,19 @@ class MakeAMIs: print(text, end="") # input is already colorized if res.returncode == 0: - UpdateReleases().update_readme(args.profile, build, root) + artifacts.append(self.get_artifact_id(root, args.profile, build)) else: if "is used by an existing AMI" in out.getvalue(): continue else: sys.exit(res.returncode) - log.info("\n=== DONE ===\n") + log.info("\n=== DONE ===\n\nNew: " + ' '.join(artifacts) + "\n") +# TODO: profiles should encode retention policy... +# - keeping latest images per +# - keeping images past their EOL class PruneAMIs: """Prune AMIs from AWS """ @@ -569,9 +591,14 @@ class PruneAMIs: parser.add_argument( "level", choices=["revision", "release", "version"], help=LEVEL_HELP) + # TODO: add --region and --use-broker parser.add_argument("profile", help="profile to prune") parser.add_argument( - "build", nargs="?", help="build within profile to prune") + "build", nargs="?", help="build(s) within profile to prune") + parser.add_argument( + '--no-pretend', action='store_true', + help='actually prune images' + ) @staticmethod def delete_image(ec2, image): @@ -675,16 +702,19 @@ class PruneAMIs: image_name, image_id = image["Name"], image["ImageId"] if region in prune and image["ImageId"] in prune[region]: - log.info("REMOVE: %s = %s", image_name, image_id) - self.delete_image(image) + if args.no_pretend is True: + log.error("REMOVING: %s = %s", image_id, image_name) + self.delete_image(image) + else: + log.error("TO_PRUNE: %s = %s", image_id, image_name) elif region in known and image["ImageId"] in known[region]: - log.info("KEEP: %s = %s", image_name, image_id) + log.info("KEEPING: %s = %s", image_id, image_name) else: - log.info("UNKNOWN: %s = %s", image_name, image_id) + log.warning("UNKNOWN: %s = %s", image_id, image_name) - # update releases/.yaml - with open(release_yaml, "w") as data: - yaml.dump(after, data, sort_keys=False) + # TODO: need parity with args first + #if args.no_pretend is True: + # UpdateReleases.run(args, root, log) class ConfigBuilder: @@ -840,68 +870,6 @@ class ResolveProfiles: self.resolve_profiles(args.profile, root) -class UpdateReleases: - """Update release YAML - """ - - command_name = "update-releases" - - @staticmethod - def add_args(parser): - parser.add_argument("profile", help="name of profile to update") - parser.add_argument("build", help="name of build to update") - - @staticmethod - def parse_ids(ids): - parsed = re.split(":|,", ids) - return dict(zip(parsed[0::2], parsed[1::2])) - - def run(self, args, root, log): - self.update_readme(args.profile, args.build, root) - - def update_readme(self, profile, build, root): - release_dir = os.path.join(root, "releases") - if not os.path.exists(release_dir): - os.makedirs(release_dir) - - release_yaml = os.path.join(release_dir, f"{profile}.yaml") - releases = {} - if os.path.exists(release_yaml): - with open(release_yaml, "r") as data: - releases = yaml.safe_load(data) - - manifest_json = os.path.join( - root, "build", "profile", profile, build, - "manifest.json") - with open(manifest_json, "r") as data: - manifest = json.load(data) - - data = manifest["builds"][0]["custom_data"] - release = data["release"] - - if build not in releases: - releases[build] = {} - - if release not in releases[build]: - releases[build][release] = {} - - releases[build][release][data["ami_name"]] = { - "description": data["ami_desc"], - "profile": profile, - "profile_build": build, - "version": data["version"], - "release": release, - "arch": data["arch"], - "revision": data["revision"], - "end_of_life": data["end_of_life"], - "build_time": manifest["builds"][0]["build_time"], - "artifacts": self.parse_ids(manifest["builds"][0]["artifact_id"]), - } - - with open(release_yaml, "w") as data: - yaml.dump(releases, data, sort_keys=False) - - class ReleaseAMIs: """Copy AMIs to other regions and optionally make them public. @@ -1108,12 +1076,11 @@ class ReleaseAMIs: else: json.dump(released, sys.stdout, indent=4) - -class RefreshReleases: - """Refresh releases YAML with existing profile/build AMIs +class UpdateReleases: + """Update releases YAML with info about currently existing profile AMIs """ - command_name = "refresh-releases" + command_name = "update-releases" @staticmethod def add_args(parser): @@ -1122,9 +1089,6 @@ class RefreshReleases: parser.add_argument("--region", "-r", action="append", help="regions for check, may be specified multiple times") parser.add_argument("profile", help="name of profile to refresh") -# TODO: get_images_with_tags needs to support tag filters with array of values -# parser.add_argument("builds", nargs="*", -# help="names of builds within the profile to refresh") @staticmethod def check_args(args): @@ -1142,14 +1106,12 @@ class RefreshReleases: if not os.path.exists(release_dir): os.makedirs(release_dir) release_yaml = os.path.join(release_dir, f"{profile}.yaml") - releases = {} - if os.path.exists(release_yaml): - with open(release_yaml, "r") as data: - releases = yaml.safe_load(data) + # TODO: break this off into its own piece for reuse for pruning too + releases = {} for client in ReleaseAMIs().iter_regions(args.use_broker, args.region): region_name = region_from_client(client) # For logging - log.info(f"Refreshing {profile} AMIs from {region_name}...") + log.info(f"Getting {profile} AMIs from {region_name}...") amis = ReleaseAMIs().get_images_with_tags(client, **tags) for ami in amis: @@ -1232,9 +1194,6 @@ class FullBuild: log.info("Running packer...") MakeAMIs().run(args, root, log) - log.info("Updating release readme...") - GenReleaseReadme().run(args, root, log) - def find_repo_root(): """Find the root of the repo, which contains a .git folder From 53fd1d27b13db93ac824adf2fe86e4c28cb1ce27 Mon Sep 17 00:00:00 2001 From: tomalok Date: Mon, 4 Jan 2021 17:36:15 -0800 Subject: [PATCH 103/125] Builder Overhaul (#106) Subcommands * merge 'resolve-profiles' and 'make-amis' into 'amis' * rename 'update-releases' to 'release-yaml' * rename 'gen-release-readme' to 'release-readme' * rename 'prune-amis' to 'prune' * reorder to match the usual workflow * use argparse mutually-exclusive group where appropriate * use argparse 'metavar' and 'nargs' for more salient help release * can now specify multiple AMIs on command line * add explicit '--private' argument * if no '--private', '--public', or '--allow-account' is specified, default to propagate the source AMI's permissions to its copies * move 'iter_regions' and 'get*image' methods out of ReleaseAMIs class because they're also used elsewhere * 'update_image_permissions' resets perms before adding new perms * pending_copy loop, reports on everything in progress, waits 3m before reporting on everything again, and then waits 30s between reports * pending_copy also notes when a copy has completed (and only queues for pending_perms if they need adjustment) Releases class * used by release-yaml and prune subcommands * caches region client objects for later use (by prune) * loads images from region - either from a profile or "unknown" (no profile tag) * builds the releases object - now structured release -> build (instead of build -> release) ReleasesReadme * works with new releases object format * improve sorting and selection of latest per version per-build AMIs * empty cell if a region doesn't happen to have a build AMI there PruneAMIs * rename 'version' level to 'end-of-life' * add 'UNKNOWN' pruning level * works, even if you don't want to --use-broker * --keep N - keeps an additional N AMIs that would otherwise have been purged per build * --defer-eol DAYS - give EOL AMIs a grace period past their official EOL date * no AMI deletion happens unless --no-pretend arg is provided * improve pruning criteria scan and candidate selection Co-authored-by: Jake Buchholz --- releases/README.md | 86 +-- releases/alpine.yaml | 1598 +++++++++++++++++++----------------------- scripts/builder.py | 1198 +++++++++++++++---------------- 3 files changed, 1369 insertions(+), 1513 deletions(-) diff --git a/releases/README.md b/releases/README.md index 0590451..0115786 100644 --- a/releases/README.md +++ b/releases/README.md @@ -39,28 +39,28 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ### Alpine Linux 3.12.3 (2020-12-19)
click to show/hide

-| Region | alpine-ami-3.12.3-x86_64-r0 | alpine-ami-3.12.3-aarch64-r0 | +| Region | alpine-ami-3.12.3-aarch64-r0 | alpine-ami-3.12.3-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-06d5540221d65ca01](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d5540221d65ca01) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06d5540221d65ca01)) | [ami-025ddc2e2931d0bf2](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-025ddc2e2931d0bf2) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-025ddc2e2931d0bf2)) | -| ap-east-1 | [ami-02c576f223356bf34](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02c576f223356bf34) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02c576f223356bf34)) | [ami-023ba7dde5800c5b5](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023ba7dde5800c5b5) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023ba7dde5800c5b5)) | -| ap-northeast-1 | [ami-0250e4a691729357a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0250e4a691729357a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0250e4a691729357a)) | [ami-010debbee0fe7fbcb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010debbee0fe7fbcb) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010debbee0fe7fbcb)) | -| ap-northeast-2 | [ami-0cfb5eabfb58d5f72](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cfb5eabfb58d5f72) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cfb5eabfb58d5f72)) | [ami-09702b3f22e8616c8](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09702b3f22e8616c8) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09702b3f22e8616c8)) | -| ap-south-1 | [ami-023fe0b4c4dc73f8c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023fe0b4c4dc73f8c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023fe0b4c4dc73f8c)) | [ami-00de8b114b35175e6](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00de8b114b35175e6) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00de8b114b35175e6)) | -| ap-southeast-1 | [ami-0f06993534aec820f](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f06993534aec820f) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f06993534aec820f)) | [ami-0e3ff62bec8a2f949](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3ff62bec8a2f949) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3ff62bec8a2f949)) | -| ap-southeast-2 | [ami-0f66203a3a619f732](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f66203a3a619f732) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f66203a3a619f732)) | [ami-077f7467876246e89](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-077f7467876246e89) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-077f7467876246e89)) | -| ca-central-1 | [ami-0a5084eac39a18d31](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5084eac39a18d31) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5084eac39a18d31)) | [ami-0a1a8875a6a460565](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a1a8875a6a460565) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a1a8875a6a460565)) | -| eu-central-1 | [ami-06a298dc479cf2a73](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a298dc479cf2a73) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a298dc479cf2a73)) | [ami-00e9dcc013b89ec7b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e9dcc013b89ec7b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00e9dcc013b89ec7b)) | -| eu-north-1 | [ami-051fcf0312ac02b05](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051fcf0312ac02b05) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051fcf0312ac02b05)) | [ami-0e3ad874b66b72f5b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3ad874b66b72f5b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3ad874b66b72f5b)) | -| eu-south-1 | [ami-06b311d896c16a3a2](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b311d896c16a3a2) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b311d896c16a3a2)) | [ami-084274896601da8f5](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-084274896601da8f5) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-084274896601da8f5)) | -| eu-west-1 | [ami-0846229ad28aefe20](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0846229ad28aefe20) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0846229ad28aefe20)) | [ami-055f823d50dc901c0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-055f823d50dc901c0) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-055f823d50dc901c0)) | -| eu-west-2 | [ami-01282190055d34e3e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01282190055d34e3e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01282190055d34e3e)) | [ami-08b76009eb990b44a](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b76009eb990b44a) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08b76009eb990b44a)) | -| eu-west-3 | [ami-0fa68ac5365833d75](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa68ac5365833d75) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa68ac5365833d75)) | [ami-0d3cfa58b050f7090](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d3cfa58b050f7090) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d3cfa58b050f7090)) | -| me-south-1 | [ami-0bee0f3b523892c11](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bee0f3b523892c11) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bee0f3b523892c11)) | [ami-05a9eaed7e7f67c95](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05a9eaed7e7f67c95) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05a9eaed7e7f67c95)) | -| sa-east-1 | [ami-0af3d5295dfa78f9a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0af3d5295dfa78f9a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0af3d5295dfa78f9a)) | [ami-00890e1d93b0d2750](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00890e1d93b0d2750) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00890e1d93b0d2750)) | -| us-east-1 | [ami-098a996634a88542f](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098a996634a88542f) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098a996634a88542f)) | [ami-044f158b810baa6d4](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-044f158b810baa6d4) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-044f158b810baa6d4)) | -| us-east-2 | [ami-07012d290ef9c028e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07012d290ef9c028e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07012d290ef9c028e)) | [ami-0973e3c7bc90a4801](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0973e3c7bc90a4801) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0973e3c7bc90a4801)) | -| us-west-1 | [ami-0570d3bcb39152bb8](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0570d3bcb39152bb8) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0570d3bcb39152bb8)) | [ami-01834462564dfb367](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01834462564dfb367) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01834462564dfb367)) | -| us-west-2 | [ami-009f13dc01dec6a56](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009f13dc01dec6a56) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009f13dc01dec6a56)) | [ami-0bedcc0226437e2e0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bedcc0226437e2e0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bedcc0226437e2e0)) | +| af-south-1 | [ami-025ddc2e2931d0bf2](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-025ddc2e2931d0bf2) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-025ddc2e2931d0bf2)) | [ami-06d5540221d65ca01](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d5540221d65ca01) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06d5540221d65ca01)) | +| ap-east-1 | [ami-023ba7dde5800c5b5](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023ba7dde5800c5b5) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023ba7dde5800c5b5)) | [ami-02c576f223356bf34](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02c576f223356bf34) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02c576f223356bf34)) | +| ap-northeast-1 | [ami-010debbee0fe7fbcb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010debbee0fe7fbcb) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010debbee0fe7fbcb)) | [ami-0250e4a691729357a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0250e4a691729357a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0250e4a691729357a)) | +| ap-northeast-2 | [ami-09702b3f22e8616c8](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09702b3f22e8616c8) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09702b3f22e8616c8)) | [ami-0cfb5eabfb58d5f72](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cfb5eabfb58d5f72) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cfb5eabfb58d5f72)) | +| ap-south-1 | [ami-00de8b114b35175e6](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00de8b114b35175e6) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00de8b114b35175e6)) | [ami-023fe0b4c4dc73f8c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023fe0b4c4dc73f8c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023fe0b4c4dc73f8c)) | +| ap-southeast-1 | [ami-0e3ff62bec8a2f949](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3ff62bec8a2f949) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3ff62bec8a2f949)) | [ami-0f06993534aec820f](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f06993534aec820f) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f06993534aec820f)) | +| ap-southeast-2 | [ami-077f7467876246e89](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-077f7467876246e89) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-077f7467876246e89)) | [ami-0f66203a3a619f732](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f66203a3a619f732) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f66203a3a619f732)) | +| ca-central-1 | [ami-0a1a8875a6a460565](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a1a8875a6a460565) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a1a8875a6a460565)) | [ami-0a5084eac39a18d31](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5084eac39a18d31) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5084eac39a18d31)) | +| eu-central-1 | [ami-00e9dcc013b89ec7b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e9dcc013b89ec7b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00e9dcc013b89ec7b)) | [ami-06a298dc479cf2a73](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a298dc479cf2a73) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a298dc479cf2a73)) | +| eu-north-1 | [ami-0e3ad874b66b72f5b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3ad874b66b72f5b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3ad874b66b72f5b)) | [ami-051fcf0312ac02b05](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051fcf0312ac02b05) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051fcf0312ac02b05)) | +| eu-south-1 | [ami-084274896601da8f5](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-084274896601da8f5) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-084274896601da8f5)) | [ami-06b311d896c16a3a2](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b311d896c16a3a2) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b311d896c16a3a2)) | +| eu-west-1 | [ami-055f823d50dc901c0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-055f823d50dc901c0) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-055f823d50dc901c0)) | [ami-0846229ad28aefe20](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0846229ad28aefe20) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0846229ad28aefe20)) | +| eu-west-2 | [ami-08b76009eb990b44a](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b76009eb990b44a) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08b76009eb990b44a)) | [ami-01282190055d34e3e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01282190055d34e3e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01282190055d34e3e)) | +| eu-west-3 | [ami-0d3cfa58b050f7090](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d3cfa58b050f7090) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d3cfa58b050f7090)) | [ami-0fa68ac5365833d75](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa68ac5365833d75) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa68ac5365833d75)) | +| me-south-1 | [ami-05a9eaed7e7f67c95](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05a9eaed7e7f67c95) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05a9eaed7e7f67c95)) | [ami-0bee0f3b523892c11](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bee0f3b523892c11) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bee0f3b523892c11)) | +| sa-east-1 | [ami-00890e1d93b0d2750](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00890e1d93b0d2750) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00890e1d93b0d2750)) | [ami-0af3d5295dfa78f9a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0af3d5295dfa78f9a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0af3d5295dfa78f9a)) | +| us-east-1 | [ami-044f158b810baa6d4](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-044f158b810baa6d4) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-044f158b810baa6d4)) | [ami-098a996634a88542f](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098a996634a88542f) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098a996634a88542f)) | +| us-east-2 | [ami-0973e3c7bc90a4801](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0973e3c7bc90a4801) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0973e3c7bc90a4801)) | [ami-07012d290ef9c028e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07012d290ef9c028e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07012d290ef9c028e)) | +| us-west-1 | [ami-01834462564dfb367](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01834462564dfb367) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01834462564dfb367)) | [ami-0570d3bcb39152bb8](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0570d3bcb39152bb8) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0570d3bcb39152bb8)) | +| us-west-2 | [ami-0bedcc0226437e2e0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bedcc0226437e2e0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bedcc0226437e2e0)) | [ami-009f13dc01dec6a56](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009f13dc01dec6a56) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009f13dc01dec6a56)) |

@@ -144,30 +144,30 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux Edge (2020-12-19) +### Alpine Linux Edge (2020-12-31)
click to show/hide

-| Region | alpine-ami-edge-x86_64-20201219023017 | alpine-ami-edge-aarch64-20201219023017 | +| Region | alpine-ami-edge-aarch64-20201231045833 | alpine-ami-edge-x86_64-20201231045833 | | ------ | --- | --- | -| af-south-1 | [ami-022ac59bcd87cd5dc](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-022ac59bcd87cd5dc) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-022ac59bcd87cd5dc)) | [ami-07a6dbca85456ca7d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a6dbca85456ca7d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a6dbca85456ca7d)) | -| ap-east-1 | [ami-0c146b06f89e12aa9](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c146b06f89e12aa9) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c146b06f89e12aa9)) | [ami-07f55a0f369e88cc4](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f55a0f369e88cc4) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f55a0f369e88cc4)) | -| ap-northeast-1 | [ami-0d17941cd28072770](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d17941cd28072770) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d17941cd28072770)) | [ami-059d668e854ac0219](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059d668e854ac0219) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059d668e854ac0219)) | -| ap-northeast-2 | [ami-06d5011c4ae6a7166](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d5011c4ae6a7166) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06d5011c4ae6a7166)) | [ami-00c4b2ff9ba78029f](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00c4b2ff9ba78029f) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00c4b2ff9ba78029f)) | -| ap-south-1 | [ami-03d1da261501ebbdc](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d1da261501ebbdc) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03d1da261501ebbdc)) | [ami-083d9e5de667bf303](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-083d9e5de667bf303) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-083d9e5de667bf303)) | -| ap-southeast-1 | [ami-0b4cbe54908f69a4d](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b4cbe54908f69a4d) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b4cbe54908f69a4d)) | [ami-0ccbac70492a3aaaf](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ccbac70492a3aaaf) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ccbac70492a3aaaf)) | -| ap-southeast-2 | [ami-09bc28136809b7dd0](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09bc28136809b7dd0) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09bc28136809b7dd0)) | [ami-0ae21901800152085](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ae21901800152085) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ae21901800152085)) | -| ca-central-1 | [ami-0b5e13380e240d13c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b5e13380e240d13c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b5e13380e240d13c)) | [ami-0727dd3c84677edaa](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0727dd3c84677edaa) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0727dd3c84677edaa)) | -| eu-central-1 | [ami-0dd96a983af0fa240](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dd96a983af0fa240) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd96a983af0fa240)) | [ami-0d31dea4e6538c397](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d31dea4e6538c397) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d31dea4e6538c397)) | -| eu-north-1 | [ami-0a0db680071981da9](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a0db680071981da9) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a0db680071981da9)) | [ami-0e99b8aafb11d906e](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e99b8aafb11d906e) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e99b8aafb11d906e)) | -| eu-south-1 | [ami-03eb2aa305b859ceb](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03eb2aa305b859ceb) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03eb2aa305b859ceb)) | [ami-0439753d6d0a62c8c](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0439753d6d0a62c8c) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0439753d6d0a62c8c)) | -| eu-west-1 | [ami-0c6dc60db5f0a3398](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c6dc60db5f0a3398) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c6dc60db5f0a3398)) | [ami-0fb7049a355e67dd0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb7049a355e67dd0) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb7049a355e67dd0)) | -| eu-west-2 | [ami-006f06c7bf63c7cf9](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-006f06c7bf63c7cf9) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-006f06c7bf63c7cf9)) | [ami-06a6c48ddf101be91](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a6c48ddf101be91) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06a6c48ddf101be91)) | -| eu-west-3 | [ami-07d44564a98b9fad6](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07d44564a98b9fad6) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07d44564a98b9fad6)) | [ami-071c3f1a5e6149b8d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071c3f1a5e6149b8d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-071c3f1a5e6149b8d)) | -| me-south-1 | [ami-00c3f62d4f482de1a](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00c3f62d4f482de1a) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00c3f62d4f482de1a)) | [ami-0c104cc8c6b41dee0](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c104cc8c6b41dee0) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c104cc8c6b41dee0)) | -| sa-east-1 | [ami-0cf3e2b703ef1767e](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cf3e2b703ef1767e) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cf3e2b703ef1767e)) | [ami-005599fbab4c82cc9](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005599fbab4c82cc9) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-005599fbab4c82cc9)) | -| us-east-1 | [ami-0472ae2f8f4bf32df](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0472ae2f8f4bf32df) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0472ae2f8f4bf32df)) | [ami-04e9e4c6e875ee40d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e9e4c6e875ee40d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e9e4c6e875ee40d)) | -| us-east-2 | [ami-0f1724b67cf38a4d3](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1724b67cf38a4d3) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1724b67cf38a4d3)) | [ami-06f27121f9aae420c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06f27121f9aae420c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06f27121f9aae420c)) | -| us-west-1 | [ami-09eb6f67937a05178](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09eb6f67937a05178) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09eb6f67937a05178)) | [ami-0dbd39c2a43b4775c](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dbd39c2a43b4775c) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dbd39c2a43b4775c)) | -| us-west-2 | [ami-09d1611a460f7db7e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09d1611a460f7db7e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09d1611a460f7db7e)) | [ami-082390a369bbeec92](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082390a369bbeec92) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-082390a369bbeec92)) | +| af-south-1 | [ami-0b183c56bd131ed3a](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b183c56bd131ed3a) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b183c56bd131ed3a)) | [ami-011743658a67dd855](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011743658a67dd855) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011743658a67dd855)) | +| ap-east-1 | [ami-08b75758d2db7dfca](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b75758d2db7dfca) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b75758d2db7dfca)) | [ami-0d216cd3d020468f4](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d216cd3d020468f4) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d216cd3d020468f4)) | +| ap-northeast-1 | [ami-0e4e372058199d5ef](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e4e372058199d5ef) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e4e372058199d5ef)) | [ami-080ee407fba860248](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-080ee407fba860248) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-080ee407fba860248)) | +| ap-northeast-2 | [ami-0b1cb303b405d3097](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1cb303b405d3097) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1cb303b405d3097)) | [ami-0f9ab3123bd36ee7c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ab3123bd36ee7c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ab3123bd36ee7c)) | +| ap-south-1 | [ami-03dd8e847479cf769](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dd8e847479cf769) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dd8e847479cf769)) | [ami-0180ec8a9b842fb7b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0180ec8a9b842fb7b) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0180ec8a9b842fb7b)) | +| ap-southeast-1 | [ami-0f63ec4ee42f919af](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f63ec4ee42f919af) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f63ec4ee42f919af)) | [ami-068588a4eea7ad3a3](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068588a4eea7ad3a3) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068588a4eea7ad3a3)) | +| ap-southeast-2 | [ami-0cfb54d89d91b4588](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cfb54d89d91b4588) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cfb54d89d91b4588)) | [ami-0ae9daf7a58df4934](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ae9daf7a58df4934) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ae9daf7a58df4934)) | +| ca-central-1 | [ami-0028affab88bac113](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0028affab88bac113) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0028affab88bac113)) | [ami-07bcbb6f6af86f511](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bcbb6f6af86f511) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bcbb6f6af86f511)) | +| eu-central-1 | [ami-0a3002a25422450ec](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3002a25422450ec) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3002a25422450ec)) | [ami-052c85ff0f5526102](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052c85ff0f5526102) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052c85ff0f5526102)) | +| eu-north-1 | [ami-0164bce0c7d9f1741](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0164bce0c7d9f1741) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0164bce0c7d9f1741)) | [ami-050c04068b77339c8](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-050c04068b77339c8) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-050c04068b77339c8)) | +| eu-south-1 | [ami-02fe886c007469453](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fe886c007469453) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fe886c007469453)) | [ami-0d0c75892f636d022](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0c75892f636d022) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0c75892f636d022)) | +| eu-west-1 | [ami-052c81600bc9265a2](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052c81600bc9265a2) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052c81600bc9265a2)) | [ami-05e2518be7f8858dd](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e2518be7f8858dd) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05e2518be7f8858dd)) | +| eu-west-2 | [ami-0dbd0469355fb628b](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dbd0469355fb628b) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0dbd0469355fb628b)) | [ami-0feefbd48a8e39699](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0feefbd48a8e39699) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0feefbd48a8e39699)) | +| eu-west-3 | [ami-0a8f99b7d240e427c](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8f99b7d240e427c) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8f99b7d240e427c)) | [ami-0423ae73dd6a792bf](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0423ae73dd6a792bf) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0423ae73dd6a792bf)) | +| me-south-1 | [ami-03e34a8c3f39d75a8](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e34a8c3f39d75a8) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03e34a8c3f39d75a8)) | [ami-04649d2d92b0365f7](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04649d2d92b0365f7) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04649d2d92b0365f7)) | +| sa-east-1 | [ami-0c049c43758d1c6ae](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c049c43758d1c6ae) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c049c43758d1c6ae)) | [ami-0a9fcc32957c9f42f](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a9fcc32957c9f42f) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a9fcc32957c9f42f)) | +| us-east-1 | [ami-0d4bf5cbd324d086a](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d4bf5cbd324d086a) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d4bf5cbd324d086a)) | [ami-047669701018a01ac](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-047669701018a01ac) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-047669701018a01ac)) | +| us-east-2 | [ami-07434f0295f2816c8](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07434f0295f2816c8) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07434f0295f2816c8)) | [ami-0f811ec590362fd5e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f811ec590362fd5e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f811ec590362fd5e)) | +| us-west-1 | [ami-0e2ddb3719b40d721](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2ddb3719b40d721) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2ddb3719b40d721)) | [ami-02a9a916ff04c9553](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a9a916ff04c9553) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02a9a916ff04c9553)) | +| us-west-2 | [ami-07ab85086738d655c](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ab85086738d655c) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07ab85086738d655c)) | [ami-003decaff69790d71](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-003decaff69790d71) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-003decaff69790d71)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index a43627a..2a0f2f6 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,313 +1,37 @@ -edge-x86_64: - edge: - alpine-ami-edge-x86_64-20201122030849: - description: Alpine Linux edge x86_64 20201122030849 - https://github.com/mcrute/alpine-ec2-ami +edge: + edge-x86_64: + alpine-ami-edge-x86_64-20201231045833: + description: Alpine Linux edge x86_64 20201231045833 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: edge-x86_64 version: edge release: edge arch: x86_64 - revision: '20201122030849' - end_of_life: '2020-11-23T03:08:49' - build_time: '1606045539' + revision: '20201231045833' + creation_date: '2020-12-31T05:01:00.000Z' + end_of_life: '2021-01-01T04:58:33' + build_time: 1609419660 artifacts: - af-south-1: ami-00689080a5e228489 - eu-north-1: ami-083f8b94e6596a053 - ap-south-1: ami-040e8658c8ebbc192 - eu-west-3: ami-0ed7be4d18b208670 - eu-west-2: ami-0d5c28f1f70bebb9b - eu-south-1: ami-00192341756cf9337 - eu-west-1: ami-098d6fa45afb58fbd - ap-northeast-2: ami-0bae21ec956bc0cf1 - me-south-1: ami-06edc731c09e741f5 - ap-northeast-1: ami-0a2936daabc513439 - sa-east-1: ami-0d5af6ce4179ba5dc - ca-central-1: ami-07f528b728dd66247 - ap-east-1: ami-04623fc89f566c5f8 - ap-southeast-1: ami-0aca8ecaf8abeeb65 - ap-southeast-2: ami-08a6cc6c42c9395e5 - eu-central-1: ami-061e2d779ab8061b1 - us-east-1: ami-0ef054923c6569a9a - us-east-2: ami-06fd7a587efa80ed2 - us-west-1: ami-0fdd31127fae3ba4b - us-west-2: ami-06739656bc1b7c92e - alpine-ami-edge-x86_64-20201104223817: - description: Alpine Linux edge x86_64 20201104223817 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20201104223817' - end_of_life: '2020-11-05T22:38:17' - build_time: '1604559572' - artifacts: - af-south-1: ami-0681a1af7ab425246 - eu-north-1: ami-0b6200a74d0b7d7af - ap-south-1: ami-07a1638dc9908589e - eu-west-3: ami-0d790428b555a7a7b - eu-west-2: ami-0fa9d7f11b1c55a8d - eu-south-1: ami-0697a63a71188ddad - eu-west-1: ami-0d17f108d7b29fc89 - ap-northeast-2: ami-020f81b319679e216 - me-south-1: ami-01d3293169fd94d51 - ap-northeast-1: ami-0aaba61ca1bf297eb - sa-east-1: ami-0dd5f9cde76604626 - ca-central-1: ami-0e0991e0a75183387 - ap-east-1: ami-05d1ed3955f085103 - ap-southeast-1: ami-06101a751c65e61cf - ap-southeast-2: ami-04c8d5f2030c3d5f8 - eu-central-1: ami-098989b210ae0a152 - us-east-1: ami-0a2c4c14503968196 - us-east-2: ami-00ff52d28bb136b3c - us-west-1: ami-054166b9e67bb0716 - us-west-2: ami-0ca706847efd66e24 - alpine-ami-edge-x86_64-20190826015716: - description: Alpine Linux edge x86_64 20190826015716 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20190826015716' - end_of_life: '2019-08-27T01:57:16' - build_time: '1566813607' - artifacts: - eu-north-1: ami-042a6066f12f93411 - ap-south-1: ami-0c3747e69c2496209 - eu-west-3: ami-07614b8be5de3b1a0 - eu-west-2: ami-0fa5a6db02d8cff64 - eu-west-1: ami-04b8b162151a2e45d - ap-northeast-2: ami-05cbcb200dde2845b - ap-northeast-1: ami-0aee477cc2cee23cf - sa-east-1: ami-09324c8018c018931 - ca-central-1: ami-0e4a890b424d67f67 - ap-southeast-1: ami-02f37bdd135ec4d42 - ap-southeast-2: ami-0463b6ff7b57d9090 - eu-central-1: ami-092b4f46b7d79af32 - us-east-1: ami-08f2e440a4fc821b0 - us-east-2: ami-002f49d922035cd6b - us-west-1: ami-0e146ed2f408cfaee - us-west-2: ami-052fcb0bc085a75a2 - alpine-ami-edge-x86_64-20200205024005: - description: Alpine Linux edge x86_64 20200205024005 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20200205024005' - end_of_life: '2020-02-06T02:40:05' - build_time: '1580899414' - artifacts: - eu-north-1: ami-0440a037c49287602 - ap-south-1: ami-00563d27b2511771e - eu-west-3: ami-0a96a077e024cf68c - eu-west-2: ami-0c89e502a2bbae39c - eu-west-1: ami-0c6e2f66869524c92 - ap-northeast-2: ami-0da81d92789ac64c9 - ap-northeast-1: ami-0e66e152e67bd01c4 - sa-east-1: ami-0701231683e53500b - ca-central-1: ami-09f98f0464adfebb2 - ap-southeast-1: ami-0c319f4e0be04ba59 - ap-southeast-2: ami-0a3ef06def6f50c0d - eu-central-1: ami-001559f80be1add88 - us-east-1: ami-002a48030440e00da - us-east-2: ami-0ae27524e2b9bb820 - us-west-1: ami-02a94605eedcd1d51 - us-west-2: ami-034def9257bc1fa27 - alpine-ami-edge-x86_64-20200403021415: - description: Alpine Linux edge x86_64 20200403021415 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20200403021415' - end_of_life: '2020-04-04T02:14:15' - build_time: '1585909041' - artifacts: - eu-north-1: ami-046e324b95557b67e - ap-south-1: ami-0e9b4aa2c6dfa1c6b - eu-west-3: ami-03b6049476dc86faa - eu-west-2: ami-0581c02f513cab380 - eu-west-1: ami-0370efeca292a68fa - ap-northeast-2: ami-0e5c3704b08250be0 - ap-northeast-1: ami-0a930ab443e79658a - sa-east-1: ami-0a82e4262b07441f2 - ca-central-1: ami-078a0413716fb1ee2 - ap-southeast-1: ami-017d1c8652fe5fb6e - ap-southeast-2: ami-0b20e853350fcc974 - eu-central-1: ami-0b949041038ac64f8 - us-east-1: ami-034b4fb0ea71693e3 - us-east-2: ami-058700b313ac9dde9 - us-west-1: ami-08e25ab23aa5a3904 - us-west-2: ami-08f7bd174f27a0375 - alpine-ami-edge-x86_64-20200104190012: - description: Alpine Linux edge x86_64 20200104190012 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20200104190012' - end_of_life: '2020-01-05T19:00:12' - build_time: '1578193428' - artifacts: - eu-north-1: ami-063212df61bebdfac - ap-south-1: ami-094720b652f133f9c - eu-west-3: ami-015e5b9edb52ee495 - eu-west-2: ami-041fba8b0ded32106 - eu-west-1: ami-034638ad783384202 - ap-northeast-2: ami-0be5d677b47fce454 - ap-northeast-1: ami-0fda74ed5ffb7ccd7 - sa-east-1: ami-0dbd80d9204b2a206 - ca-central-1: ami-0fe2907efc576aa3c - ap-southeast-1: ami-0f7d8a18e9be21cd1 - ap-southeast-2: ami-0386d4dc2cf9f3d91 - eu-central-1: ami-08caf54970e53151e - us-east-1: ami-0047bb64e977f5521 - us-east-2: ami-024246dd06d739e37 - us-west-1: ami-089f878b5816e24f4 - us-west-2: ami-0f6dc9ba311992682 - alpine-ami-edge-x86_64-20191220032351: - description: Alpine Linux edge x86_64 20191220032351 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20191220032351' - end_of_life: '2019-12-21T03:23:51' - build_time: '1576841260' - artifacts: - eu-north-1: ami-069b1f7572e57e869 - ap-south-1: ami-024a83d2f5f690e9c - eu-west-3: ami-0bfe5b9d1a2d3c6c9 - eu-west-2: ami-0c8643b000cb720b6 - eu-west-1: ami-0fe261f4ce1adac48 - ap-northeast-2: ami-0ce75b84103d6cf1b - ap-northeast-1: ami-09c848c4cb4b2bfcc - sa-east-1: ami-075e2722dd4b1e660 - ca-central-1: ami-00f6c418339093258 - ap-southeast-1: ami-045d3298bde43a38e - ap-southeast-2: ami-02a507af131b58f77 - eu-central-1: ami-00e094f733fa389c1 - us-east-1: ami-0d42d7ed27a1b508a - us-east-2: ami-016775e32e6c85c18 - us-west-1: ami-065cbd73f2f0dd6d6 - us-west-2: ami-0897367ecebfd4b79 - alpine-ami-edge-x86_64-20191026200352: - description: Alpine Linux edge x86_64 20191026200352 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20191026200352' - end_of_life: '2019-10-27T20:03:52' - build_time: '1572149159' - artifacts: - eu-north-1: ami-0787f149b1a3f8194 - ap-south-1: ami-018d0a72b1c1b2923 - eu-west-3: ami-0f0bdda8a983eace3 - eu-west-2: ami-058faf9bf50c5fdc4 - eu-west-1: ami-068378748044554e5 - ap-northeast-2: ami-085769ebaedbfdf81 - ap-northeast-1: ami-0112f6ea81c86d5e6 - sa-east-1: ami-08b88bdd43ac5d063 - ca-central-1: ami-029fabbc15f6ec893 - ap-southeast-1: ami-0efbcf7df7751898a - ap-southeast-2: ami-06dc954ca0af33023 - eu-central-1: ami-01353f3799d62f271 - us-east-1: ami-0193a17629e6377fc - us-east-2: ami-03db856d0b5b661ce - us-west-1: ami-04864199556e66fad - us-west-2: ami-03e59f12dbbee65d4 - alpine-ami-edge-x86_64-20200425232123: - description: Alpine Linux edge x86_64 20200425232123 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20200425232123' - end_of_life: '2020-04-26T23:21:23' - build_time: '1587885839' - artifacts: - eu-north-1: ami-0ac2cb76721262b8f - ap-south-1: ami-034d9a20d9bf2049f - eu-west-3: ami-037d85dcf06bc913e - eu-west-2: ami-0329b37ebc36521c7 - eu-west-1: ami-0a86b121e789d84a2 - ap-northeast-2: ami-0f6525d9186a0ee66 - ap-northeast-1: ami-0f64e8385eb16f0c5 - sa-east-1: ami-0b8e53df93ee4132d - ca-central-1: ami-068da53b91dcfad35 - ap-southeast-1: ami-0e64d169297389f9e - ap-southeast-2: ami-0afc0bab8196b70e4 - eu-central-1: ami-0b04139e51df7902b - us-east-1: ami-097be5ea1a5c7b6ce - us-east-2: ami-0f40de04e77f600b6 - us-west-1: ami-095527a55aa7c1c1d - us-west-2: ami-0e5711189d37ddd64 - alpine-ami-edge-x86_64-20190611031724: - description: Alpine Linux edge x86_64 20190611031724 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20190611031724' - end_of_life: '2019-06-12T03:17:24' - build_time: '1560252501' - artifacts: - eu-north-1: ami-0c3152b1fd3b21ae9 - ap-south-1: ami-09e1d1ef7cd517a64 - eu-west-3: ami-0d1e6f66f5a7fc568 - eu-west-2: ami-029d4646a3ea4fc0f - eu-west-1: ami-031b9d6c98019452b - ap-northeast-2: ami-00cceaf8288ee7386 - ap-northeast-1: ami-0c97e7cdda534346b - sa-east-1: ami-0b00f41d3df265296 - ca-central-1: ami-008c0bd239c168b34 - ap-southeast-1: ami-037323416789f3ce1 - ap-southeast-2: ami-0d182653643257211 - eu-central-1: ami-0d808164dace58b4e - us-east-1: ami-014a8bfc05b292686 - us-east-2: ami-0d99a25549626e548 - us-west-1: ami-03f03158096a615cd - alpine-ami-edge-x86_64-20201213190459: - description: Alpine Linux edge x86_64 20201213190459 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20201213190459' - end_of_life: '2020-12-14T19:04:59' - build_time: '1607915630' - artifacts: - us-west-2: ami-0b91b7b604d8e2698 - af-south-1: ami-0f910995b3fcbc2a1 - eu-north-1: ami-00d23d9fe5e916760 - ap-south-1: ami-02cdde8617c38b6da - eu-west-3: ami-06649b9ba1b9c6625 - eu-west-2: ami-0b54da8cc7d2e71ab - eu-south-1: ami-0e119f0362787d26f - eu-west-1: ami-06bb894c2ea22cfa7 - ap-northeast-2: ami-0608684322b1df99d - me-south-1: ami-00ad5f5422bb04d33 - ap-northeast-1: ami-00f04e83341318e5d - sa-east-1: ami-048f22481002c6990 - ca-central-1: ami-0c6173e1c33395119 - ap-east-1: ami-0843f7ca1455bbcf3 - ap-southeast-1: ami-0a0f9e02019761a7d - ap-southeast-2: ami-0a4aef473ddfc4942 - eu-central-1: ami-0f7ba6027999c7b2c - us-east-1: ami-04c9b228d4a45c132 - us-east-2: ami-026a039af74def437 - us-west-1: ami-0a9ffe73ca66b492b + af-south-1: ami-011743658a67dd855 + eu-north-1: ami-050c04068b77339c8 + ap-south-1: ami-0180ec8a9b842fb7b + eu-west-3: ami-0423ae73dd6a792bf + eu-west-2: ami-0feefbd48a8e39699 + eu-south-1: ami-0d0c75892f636d022 + eu-west-1: ami-05e2518be7f8858dd + ap-northeast-2: ami-0f9ab3123bd36ee7c + me-south-1: ami-04649d2d92b0365f7 + ap-northeast-1: ami-080ee407fba860248 + sa-east-1: ami-0a9fcc32957c9f42f + ca-central-1: ami-07bcbb6f6af86f511 + ap-east-1: ami-0d216cd3d020468f4 + ap-southeast-1: ami-068588a4eea7ad3a3 + ap-southeast-2: ami-0ae9daf7a58df4934 + eu-central-1: ami-052c85ff0f5526102 + us-east-1: ami-047669701018a01ac + us-east-2: ami-0f811ec590362fd5e + us-west-1: ami-02a9a916ff04c9553 + us-west-2: ami-003decaff69790d71 alpine-ami-edge-x86_64-20201219023017: description: Alpine Linux edge x86_64 20201219023017 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -316,10 +40,10 @@ edge-x86_64: release: edge arch: x86_64 revision: '20201219023017' + creation_date: '2020-12-19T02:41:55.000Z' end_of_life: '2020-12-20T02:30:17' - build_time: 1608345732 + build_time: 1608374515 artifacts: - us-west-2: ami-09d1611a460f7db7e af-south-1: ami-022ac59bcd87cd5dc eu-north-1: ami-0a0db680071981da9 ap-south-1: ami-03d1da261501ebbdc @@ -339,8 +63,402 @@ edge-x86_64: us-east-1: ami-0472ae2f8f4bf32df us-east-2: ami-0f1724b67cf38a4d3 us-west-1: ami-09eb6f67937a05178 -v3_12-aarch64: - 3.12.1: + us-west-2: ami-09d1611a460f7db7e + alpine-ami-edge-x86_64-20201229232619: + description: Alpine Linux edge x86_64 20201229232619 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20201229232619' + creation_date: '2020-12-29T23:29:13.000Z' + end_of_life: '2020-12-30T23:26:19' + build_time: 1609313353 + artifacts: + af-south-1: ami-06d08d91f91f63804 + eu-north-1: ami-00886727f059b0afe + ap-south-1: ami-0cb996c5d5d55aa32 + eu-west-3: ami-0a9ab81ddd9fdd793 + eu-west-2: ami-0da5d25c4237ce335 + eu-south-1: ami-0d054749ede29dad2 + eu-west-1: ami-034b257e9f49bccd3 + ap-northeast-2: ami-0ee08d2da0b365caf + me-south-1: ami-08b358b4f6cc096a5 + ap-northeast-1: ami-07fdc870b8939e163 + sa-east-1: ami-0f0a9a43ade16b9f6 + ca-central-1: ami-003a2a13710a487e0 + ap-east-1: ami-0f9ca91da6150b03a + ap-southeast-1: ami-016403a889f9108c9 + ap-southeast-2: ami-0c809f2c61684080d + eu-central-1: ami-05592a5b5a37344b5 + us-east-1: ami-0710a2b23bc39e67a + us-east-2: ami-069a7171fde662e9b + us-west-1: ami-076dc2e3957834509 + us-west-2: ami-0fd667e7abfe3b6d2 + alpine-ami-edge-x86_64-20201229214956: + description: Alpine Linux edge x86_64 20201229214956 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20201229214956' + creation_date: '2020-12-29T21:53:05.000Z' + end_of_life: '2020-12-30T21:49:56' + build_time: 1609307585 + artifacts: + af-south-1: ami-08dc0399ed9bd830f + eu-north-1: ami-02593586a624c644e + ap-south-1: ami-0485245862afd6a94 + eu-west-3: ami-08a2c7883f069fa11 + eu-west-2: ami-085e38f6a9097b10d + eu-south-1: ami-0031e41f580bd7bc6 + eu-west-1: ami-01d646d460450e5df + ap-northeast-2: ami-0cb9c48206930d2e1 + me-south-1: ami-085f853cc2b44d8a9 + ap-northeast-1: ami-007fdf68b6a1ea3d7 + sa-east-1: ami-0abf25b78b35ce41d + ca-central-1: ami-0d32f1c3b151a073b + ap-east-1: ami-00eba1e6d8c374fa3 + ap-southeast-1: ami-004c0b5ee0b352196 + ap-southeast-2: ami-0fe124200ff8062fd + eu-central-1: ami-0b9ee3bdd290af3c4 + us-east-1: ami-062feb589ae24631b + us-east-2: ami-07188d526cdddcda9 + us-west-1: ami-080688ba76a53e6f7 + us-west-2: ami-086cf146f39eb2693 + alpine-ami-edge-x86_64-20201229224611: + description: Alpine Linux edge x86_64 20201229224611 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20201229224611' + creation_date: '2020-12-29T22:48:52.000Z' + end_of_life: '2020-12-30T22:46:11' + build_time: 1609310932 + artifacts: + af-south-1: ami-0c0c9f458cd3302b7 + eu-north-1: ami-0de5739f5fc9d92b0 + ap-south-1: ami-07ff15b57d4238dec + eu-west-3: ami-0ee119647d35ac82e + eu-west-2: ami-077605ea3fb11b261 + eu-south-1: ami-0cbb4d2d2edeffedf + eu-west-1: ami-0b763b5fcd836a2c7 + ap-northeast-2: ami-05f53fe3ad2cf3558 + me-south-1: ami-079cc6ecfba9ad180 + ap-northeast-1: ami-0a475efe1d176f2ef + sa-east-1: ami-0ccfaae08a3064763 + ca-central-1: ami-0644084a7cdbd26fc + ap-east-1: ami-099b5dd0fcedb734d + ap-southeast-1: ami-027dfaccb2e7e74a5 + ap-southeast-2: ami-010fee6f93cdc98ef + eu-central-1: ami-0e03ed40c25ffa518 + us-east-1: ami-0d7e8605cde01ae43 + us-east-2: ami-0726364161f193345 + us-west-1: ami-0d2806a3f473e92d3 + us-west-2: ami-0062c351ab20e14cf + edge-aarch64: + alpine-ami-edge-aarch64-20201219023017: + description: Alpine Linux edge aarch64 20201219023017 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20201219023017' + creation_date: '2020-12-19T02:38:38.000Z' + end_of_life: '2020-12-20T02:30:17' + build_time: 1608374318 + artifacts: + af-south-1: ami-07a6dbca85456ca7d + eu-north-1: ami-0e99b8aafb11d906e + ap-south-1: ami-083d9e5de667bf303 + eu-west-3: ami-071c3f1a5e6149b8d + eu-west-2: ami-06a6c48ddf101be91 + eu-south-1: ami-0439753d6d0a62c8c + eu-west-1: ami-0fb7049a355e67dd0 + ap-northeast-2: ami-00c4b2ff9ba78029f + me-south-1: ami-0c104cc8c6b41dee0 + ap-northeast-1: ami-059d668e854ac0219 + sa-east-1: ami-005599fbab4c82cc9 + ca-central-1: ami-0727dd3c84677edaa + ap-east-1: ami-07f55a0f369e88cc4 + ap-southeast-1: ami-0ccbac70492a3aaaf + ap-southeast-2: ami-0ae21901800152085 + eu-central-1: ami-0d31dea4e6538c397 + us-east-1: ami-04e9e4c6e875ee40d + us-east-2: ami-06f27121f9aae420c + us-west-1: ami-0dbd39c2a43b4775c + us-west-2: ami-082390a369bbeec92 + alpine-ami-edge-aarch64-20201229230708: + description: Alpine Linux edge aarch64 20201229230708 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20201229230708' + creation_date: '2020-12-29T23:09:57.000Z' + end_of_life: '2020-12-30T23:07:08' + build_time: 1609312197 + artifacts: + af-south-1: ami-0a3bd3c9b36d7c6c7 + eu-north-1: ami-0bcce26e70065a5bc + ap-south-1: ami-087b62ebfa3c397c2 + eu-west-3: ami-0a1fbfa66ea6eecb5 + eu-west-2: ami-0595a6eca3bd3c78c + eu-south-1: ami-0163588672a0237ac + eu-west-1: ami-051a49d029615ee41 + ap-northeast-2: ami-0197cd016b53ae164 + me-south-1: ami-07f6eca663666a336 + ap-northeast-1: ami-0243bfa4774e3c140 + sa-east-1: ami-042078f38a1acc839 + ca-central-1: ami-0e37054697017f838 + ap-east-1: ami-0bbd759c49ca213cd + ap-southeast-1: ami-01390e61c6fc639fb + ap-southeast-2: ami-0a71db741f8439bdb + eu-central-1: ami-0a3f2fc4f69b52ef6 + us-east-1: ami-05f3be0c13cf0567e + us-east-2: ami-0ca827ab7ce9db92a + us-west-1: ami-01a1c6b3c2c1952d0 + us-west-2: ami-0abd8ada6afb9e527 + alpine-ami-edge-aarch64-20201231045833: + description: Alpine Linux edge aarch64 20201231045833 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20201231045833' + creation_date: '2020-12-31T05:04:00.000Z' + end_of_life: '2021-01-01T04:58:33' + build_time: 1609419840 + artifacts: + af-south-1: ami-0b183c56bd131ed3a + eu-north-1: ami-0164bce0c7d9f1741 + ap-south-1: ami-03dd8e847479cf769 + eu-west-3: ami-0a8f99b7d240e427c + eu-west-2: ami-0dbd0469355fb628b + eu-south-1: ami-02fe886c007469453 + eu-west-1: ami-052c81600bc9265a2 + ap-northeast-2: ami-0b1cb303b405d3097 + me-south-1: ami-03e34a8c3f39d75a8 + ap-northeast-1: ami-0e4e372058199d5ef + sa-east-1: ami-0c049c43758d1c6ae + ca-central-1: ami-0028affab88bac113 + ap-east-1: ami-08b75758d2db7dfca + ap-southeast-1: ami-0f63ec4ee42f919af + ap-southeast-2: ami-0cfb54d89d91b4588 + eu-central-1: ami-0a3002a25422450ec + us-east-1: ami-0d4bf5cbd324d086a + us-east-2: ami-07434f0295f2816c8 + us-west-1: ami-0e2ddb3719b40d721 + us-west-2: ami-07ab85086738d655c + alpine-ami-edge-aarch64-20201229214956: + description: Alpine Linux edge aarch64 20201229214956 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20201229214956' + creation_date: '2020-12-29T21:56:23.000Z' + end_of_life: '2020-12-30T21:49:56' + build_time: 1609307783 + artifacts: + af-south-1: ami-0c04fcc8f2372b696 + eu-north-1: ami-05a8bf63fc921394d + ap-south-1: ami-0f5ede5d876f0f06d + eu-west-3: ami-057f73f3491d66c21 + eu-west-2: ami-0408124ec9dfa3e42 + eu-south-1: ami-00ea83ffa212c5b83 + eu-west-1: ami-08e4b7b4d0254bfe2 + ap-northeast-2: ami-0ac6766dfdf0ecbd7 + me-south-1: ami-0cc2a40f9ac891f6c + ap-northeast-1: ami-029e0d778de8f78cd + sa-east-1: ami-0aa2d0ef1395143d7 + ca-central-1: ami-0b25ce7faaa294f50 + ap-east-1: ami-07b598f5bafaae0e7 + ap-southeast-1: ami-0e41f9097081fb82b + ap-southeast-2: ami-0a892f43c87a6bf46 + eu-central-1: ami-039e58598e4e69589 + us-east-1: ami-0c5fa29ef9fde7556 + us-east-2: ami-0f573107d2294271b + us-west-1: ami-059fba50c56721d6a + us-west-2: ami-01e0b20bb07854059 +3.12.2: + v3_12-aarch64: + alpine-ami-3.12.2-aarch64-r0: + description: Alpine Linux 3.12.2 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-aarch64 + version: '3.12' + release: 3.12.2 + arch: aarch64 + revision: r0 + creation_date: '2020-12-13T19:29:16.000Z' + end_of_life: '2022-05-01T00:00:00' + build_time: 1607916556 + artifacts: + af-south-1: ami-01bddee275c090a50 + eu-north-1: ami-07b793f6b41391228 + ap-south-1: ami-0759affb95b30e7fb + eu-west-3: ami-0e27cfc827138e618 + eu-west-2: ami-007b53f9896902dbb + eu-south-1: ami-093ee59d023f73f01 + eu-west-1: ami-0872a57824a7c8a0f + ap-northeast-2: ami-053378f981bc37c5a + me-south-1: ami-0d6b8517fe502f094 + ap-northeast-1: ami-0a5c2347daea31320 + sa-east-1: ami-0cb7785de4b330978 + ca-central-1: ami-0d144a02a790d54a3 + ap-east-1: ami-0f991dfb212ea3e30 + ap-southeast-1: ami-0a9dfde00c4fdbf44 + ap-southeast-2: ami-0432ec565b29d3f0e + eu-central-1: ami-0bde2f5e41915b4a2 + us-east-1: ami-0f20521153a6af3e7 + us-east-2: ami-064923dd78bf778a8 + us-west-1: ami-0f49257c4ee6311a5 + us-west-2: ami-0e308f03a3776ea1f + v3_12-x86_64: + alpine-ami-3.12.2-x86_64-r0: + description: Alpine Linux 3.12.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-x86_64 + version: '3.12' + release: 3.12.2 + arch: x86_64 + revision: r0 + creation_date: '2020-12-13T19:07:54.000Z' + end_of_life: '2022-05-01T00:00:00' + build_time: 1607915274 + artifacts: + af-south-1: ami-0a2c528c48b724eb1 + eu-north-1: ami-0f97b4e83b330a44b + ap-south-1: ami-0082a1edc963aa684 + eu-west-3: ami-0837b3fcb00163a7d + eu-west-2: ami-0a8578d7d4ebca125 + eu-south-1: ami-027ed683f42684d45 + eu-west-1: ami-00185f6c477e1099d + ap-northeast-2: ami-0c869c3c23407b0d5 + me-south-1: ami-0ff80f770d65d1cbf + ap-northeast-1: ami-0e4245b0cbe57cb99 + sa-east-1: ami-0d276bc117826a38a + ca-central-1: ami-090b8e0d13afd07c1 + ap-east-1: ami-0efde8684085c8a1e + ap-southeast-1: ami-0a40d2bc9bfc47553 + ap-southeast-2: ami-0e7c828c974171a77 + eu-central-1: ami-062cda84fa4f4abe0 + us-east-1: ami-042e99e8ac5b82667 + us-east-2: ami-0bf39a1d2a7d83170 + us-west-1: ami-089fe5bbb8ee72815 + us-west-2: ami-096f9b59745c9d447 +3.12.3: + v3_12-aarch64: + alpine-ami-3.12.3-aarch64-r0: + description: Alpine Linux 3.12.3 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-aarch64 + version: '3.12' + release: 3.12.3 + arch: aarch64 + revision: r0 + creation_date: '2020-12-19T02:44:37.000Z' + end_of_life: '2022-05-01T00:00:00' + build_time: 1608374677 + artifacts: + af-south-1: ami-025ddc2e2931d0bf2 + eu-north-1: ami-0e3ad874b66b72f5b + ap-south-1: ami-00de8b114b35175e6 + eu-west-3: ami-0d3cfa58b050f7090 + eu-west-2: ami-08b76009eb990b44a + eu-south-1: ami-084274896601da8f5 + eu-west-1: ami-055f823d50dc901c0 + ap-northeast-2: ami-09702b3f22e8616c8 + me-south-1: ami-05a9eaed7e7f67c95 + ap-northeast-1: ami-010debbee0fe7fbcb + sa-east-1: ami-00890e1d93b0d2750 + ca-central-1: ami-0a1a8875a6a460565 + ap-east-1: ami-023ba7dde5800c5b5 + ap-southeast-1: ami-0e3ff62bec8a2f949 + ap-southeast-2: ami-077f7467876246e89 + eu-central-1: ami-00e9dcc013b89ec7b + us-east-1: ami-044f158b810baa6d4 + us-east-2: ami-0973e3c7bc90a4801 + us-west-1: ami-01834462564dfb367 + us-west-2: ami-0bedcc0226437e2e0 + v3_12-x86_64: + alpine-ami-3.12.3-x86_64-r0: + description: Alpine Linux 3.12.3 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_12-x86_64 + version: '3.12' + release: 3.12.3 + arch: x86_64 + revision: r0 + creation_date: '2020-12-19T02:33:21.000Z' + end_of_life: '2022-05-01T00:00:00' + build_time: 1608374001 + artifacts: + af-south-1: ami-06d5540221d65ca01 + eu-north-1: ami-051fcf0312ac02b05 + ap-south-1: ami-023fe0b4c4dc73f8c + eu-west-3: ami-0fa68ac5365833d75 + eu-west-2: ami-01282190055d34e3e + eu-south-1: ami-06b311d896c16a3a2 + eu-west-1: ami-0846229ad28aefe20 + ap-northeast-2: ami-0cfb5eabfb58d5f72 + me-south-1: ami-0bee0f3b523892c11 + ap-northeast-1: ami-0250e4a691729357a + sa-east-1: ami-0af3d5295dfa78f9a + ca-central-1: ami-0a5084eac39a18d31 + ap-east-1: ami-02c576f223356bf34 + ap-southeast-1: ami-0f06993534aec820f + ap-southeast-2: ami-0f66203a3a619f732 + eu-central-1: ami-06a298dc479cf2a73 + us-east-1: ami-098a996634a88542f + us-east-2: ami-07012d290ef9c028e + us-west-1: ami-0570d3bcb39152bb8 + us-west-2: ami-009f13dc01dec6a56 +3.11.7: + v3_11-x86_64: + alpine-ami-3.11.7-x86_64-r0: + description: Alpine Linux 3.11.7 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.7 + arch: x86_64 + revision: r0 + creation_date: '2020-12-19T02:48:10.000Z' + end_of_life: '2021-11-01T00:00:00' + build_time: 1608374890 + artifacts: + af-south-1: ami-05cf48a10f6002168 + eu-north-1: ami-05b0683850b38c6d5 + ap-south-1: ami-050c579c7459a48c2 + eu-west-3: ami-07e0f0262ff7b7da9 + eu-west-2: ami-07e738b263969a042 + eu-south-1: ami-0642f11c989872666 + eu-west-1: ami-0956524d21583a27a + ap-northeast-2: ami-09346dc8fc008c9f3 + me-south-1: ami-0d033bc51aa9fc3c6 + ap-northeast-1: ami-0dc80e3c7e0aedb4e + sa-east-1: ami-07ec4797792079c72 + ca-central-1: ami-0af7eccbeacce0f05 + ap-east-1: ami-096def05737bb9fa5 + ap-southeast-1: ami-02d1e1bf59cca56f6 + ap-southeast-2: ami-055e9bb961d28d69d + eu-central-1: ami-05794ddba50a9a744 + us-east-1: ami-0f5a58345290f20fe + us-east-2: ami-089db2524f896109e + us-west-1: ami-0a0564916b7d4a510 + us-west-2: ami-0b9f7e5619a03a0ea +3.12.1: + v3_12-aarch64: alpine-ami-3.12.1-aarch64-r1: description: Alpine Linux 3.12.1 aarch64 r1 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -349,8 +467,9 @@ v3_12-aarch64: release: 3.12.1 arch: aarch64 revision: r1 + creation_date: '2020-11-22T03:11:36.000Z' end_of_life: '2022-05-01T00:00:00' - build_time: '1606044423' + build_time: 1606043496 artifacts: af-south-1: ami-06588f43a51375252 eu-north-1: ami-0cfce5134bf4de486 @@ -380,8 +499,9 @@ v3_12-aarch64: release: 3.12.1 arch: aarch64 revision: r0 + creation_date: '2020-11-04T22:49:01.000Z' end_of_life: '2022-05-01T00:00:00' - build_time: '1604561089' + build_time: 1604558941 artifacts: af-south-1: ami-09fcd0ee80e2c6ced eu-north-1: ami-0b1aad32939a91c82 @@ -403,198 +523,7 @@ v3_12-aarch64: us-east-2: ami-07deadfa79bb4613a us-west-1: ami-0daaa29d5c8b1ecaf us-west-2: ami-0d6579e59926d4377 - 3.12.2: - alpine-ami-3.12.2-aarch64-r0: - description: Alpine Linux 3.12.2 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-aarch64 - version: '3.12' - release: 3.12.2 - arch: aarch64 - revision: r0 - end_of_life: '2022-05-01T00:00:00' - build_time: '1607916556' - artifacts: - us-west-2: ami-0e308f03a3776ea1f - af-south-1: ami-01bddee275c090a50 - eu-north-1: ami-07b793f6b41391228 - ap-south-1: ami-0759affb95b30e7fb - eu-west-3: ami-0e27cfc827138e618 - eu-west-2: ami-007b53f9896902dbb - eu-south-1: ami-093ee59d023f73f01 - eu-west-1: ami-0872a57824a7c8a0f - ap-northeast-2: ami-053378f981bc37c5a - me-south-1: ami-0d6b8517fe502f094 - ap-northeast-1: ami-0a5c2347daea31320 - sa-east-1: ami-0cb7785de4b330978 - ca-central-1: ami-0d144a02a790d54a3 - ap-east-1: ami-0f991dfb212ea3e30 - ap-southeast-1: ami-0a9dfde00c4fdbf44 - ap-southeast-2: ami-0432ec565b29d3f0e - eu-central-1: ami-0bde2f5e41915b4a2 - us-east-1: ami-0f20521153a6af3e7 - us-east-2: ami-064923dd78bf778a8 - us-west-1: ami-0f49257c4ee6311a5 - 3.12.3: - alpine-ami-3.12.3-aarch64-r0: - description: Alpine Linux 3.12.3 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-aarch64 - version: '3.12' - release: 3.12.3 - arch: aarch64 - revision: r0 - end_of_life: '2022-05-01T00:00:00' - build_time: 1608345895 - artifacts: - us-west-2: ami-0bedcc0226437e2e0 - af-south-1: ami-025ddc2e2931d0bf2 - eu-north-1: ami-0e3ad874b66b72f5b - ap-south-1: ami-00de8b114b35175e6 - eu-west-3: ami-0d3cfa58b050f7090 - eu-west-2: ami-08b76009eb990b44a - eu-south-1: ami-084274896601da8f5 - eu-west-1: ami-055f823d50dc901c0 - ap-northeast-2: ami-09702b3f22e8616c8 - me-south-1: ami-05a9eaed7e7f67c95 - ap-northeast-1: ami-010debbee0fe7fbcb - sa-east-1: ami-00890e1d93b0d2750 - ca-central-1: ami-0a1a8875a6a460565 - ap-east-1: ami-023ba7dde5800c5b5 - ap-southeast-1: ami-0e3ff62bec8a2f949 - ap-southeast-2: ami-077f7467876246e89 - eu-central-1: ami-00e9dcc013b89ec7b - us-east-1: ami-044f158b810baa6d4 - us-east-2: ami-0973e3c7bc90a4801 - us-west-1: ami-01834462564dfb367 -edge-aarch64: - edge: - alpine-ami-edge-aarch64-20201104223817: - description: Alpine Linux edge aarch64 20201104223817 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20201104223817' - end_of_life: '2020-11-05T22:38:17' - build_time: '1604559828' - artifacts: - af-south-1: ami-0752fc9ce476a4721 - eu-north-1: ami-0f4fa14d45948f11a - ap-south-1: ami-08c7798c7f965cd80 - eu-west-3: ami-0f34326e028b1a6b1 - eu-west-2: ami-0031a8d8a3e592132 - eu-south-1: ami-05cb6a0b441d9fef4 - eu-west-1: ami-04e9f2e813ff9fe6a - ap-northeast-2: ami-046e31ba8884954fd - me-south-1: ami-007fc801f4d00c286 - ap-northeast-1: ami-026b0f30357b6c249 - sa-east-1: ami-09a322ab8f34e327f - ca-central-1: ami-0f17d9899463f2d0c - ap-east-1: ami-0a676c33f22ff9796 - ap-southeast-1: ami-0466de6f68ac671b5 - ap-southeast-2: ami-073efd513d0bf10d1 - eu-central-1: ami-0632fda5bb88d28fc - us-east-1: ami-0fb5290b89cd3ae5d - us-east-2: ami-0962215a714b76135 - us-west-1: ami-091c85b576c87cfae - us-west-2: ami-0fba23a2dedcb193e - alpine-ami-edge-aarch64-20201122030849: - description: Alpine Linux edge aarch64 20201122030849 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20201122030849' - end_of_life: '2020-11-23T03:08:49' - build_time: '1606047950' - artifacts: - af-south-1: ami-0935c72001f7a2f54 - eu-north-1: ami-036b9e312ed47bc58 - ap-south-1: ami-09ba0c9f67aee101b - eu-west-3: ami-0309fb3773c6ca01f - eu-west-2: ami-010f08d8babfeba66 - eu-south-1: ami-0ed4d967ec895a6dd - eu-west-1: ami-0bd9b6eea6a55c618 - ap-northeast-2: ami-08c14f5cd992d6cfd - me-south-1: ami-0a57b6a1ca13e2c16 - ap-northeast-1: ami-0d724ea7e866b21ce - sa-east-1: ami-0fa45fb2df9da5785 - ca-central-1: ami-022ed81730915d151 - ap-east-1: ami-0a043964fc03396fe - ap-southeast-1: ami-0933f563594672cec - ap-southeast-2: ami-08dbccb68710bda49 - eu-central-1: ami-04215f5b57249ad9c - us-east-1: ami-0929958d98bd00814 - us-east-2: ami-0b7166a71a0e31b0b - us-west-1: ami-0cef2acb137d37026 - us-west-2: ami-0d4de7896759005a1 - alpine-ami-edge-aarch64-20201213190459: - description: Alpine Linux edge aarch64 20201213190459 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20201213190459' - end_of_life: '2020-12-14T19:04:59' - build_time: '1607915770' - artifacts: - us-west-2: ami-0769e7ae6646ee6ce - af-south-1: ami-0ef1ed51536d4c21c - eu-north-1: ami-0fd0089405ce34751 - ap-south-1: ami-0fb7826afebdee836 - eu-west-3: ami-0a5b6e3683e165f46 - eu-west-2: ami-01f876c398a9a1e8a - eu-south-1: ami-08a7fd2863b4cf769 - eu-west-1: ami-06844e8cfb88e3488 - ap-northeast-2: ami-0be33da35fb42cf91 - me-south-1: ami-012a6c8b0aa9755e5 - ap-northeast-1: ami-0c3e9ea96d54b2fa6 - sa-east-1: ami-0490301bf3d8f367b - ca-central-1: ami-03a14b888f050a80c - ap-east-1: ami-0960c97dbfb4c2370 - ap-southeast-1: ami-052c0924f23638e55 - ap-southeast-2: ami-08a3a7e67af495c34 - eu-central-1: ami-0c1ed5c6c58a479a1 - us-east-1: ami-088169794239b59c9 - us-east-2: ami-08d78e14e90b41779 - us-west-1: ami-0fc9b035119434b1a - alpine-ami-edge-aarch64-20201219023017: - description: Alpine Linux edge aarch64 20201219023017 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20201219023017' - end_of_life: '2020-12-20T02:30:17' - build_time: 1608345536 - artifacts: - us-west-2: ami-082390a369bbeec92 - af-south-1: ami-07a6dbca85456ca7d - eu-north-1: ami-0e99b8aafb11d906e - ap-south-1: ami-083d9e5de667bf303 - eu-west-3: ami-071c3f1a5e6149b8d - eu-west-2: ami-06a6c48ddf101be91 - eu-south-1: ami-0439753d6d0a62c8c - eu-west-1: ami-0fb7049a355e67dd0 - ap-northeast-2: ami-00c4b2ff9ba78029f - me-south-1: ami-0c104cc8c6b41dee0 - ap-northeast-1: ami-059d668e854ac0219 - sa-east-1: ami-005599fbab4c82cc9 - ca-central-1: ami-0727dd3c84677edaa - ap-east-1: ami-07f55a0f369e88cc4 - ap-southeast-1: ami-0ccbac70492a3aaaf - ap-southeast-2: ami-0ae21901800152085 - eu-central-1: ami-0d31dea4e6538c397 - us-east-1: ami-04e9e4c6e875ee40d - us-east-2: ami-06f27121f9aae420c - us-west-1: ami-0dbd39c2a43b4775c -v3_12-x86_64: - 3.12.1: + v3_12-x86_64: alpine-ami-3.12.1-x86_64-r0: description: Alpine Linux 3.12.1 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -603,8 +532,9 @@ v3_12-x86_64: release: 3.12.1 arch: x86_64 revision: r0 + creation_date: '2020-11-04T22:43:40.000Z' end_of_life: '2022-05-01T00:00:00' - build_time: '1604561032' + build_time: 1604558620 artifacts: af-south-1: ami-0fa34e940c7164179 eu-north-1: ami-043101bc60cae6466 @@ -626,210 +556,8 @@ v3_12-x86_64: us-east-2: ami-07243c178e6ca055c us-west-1: ami-0c9a9eac6d74fff97 us-west-2: ami-03d82b210e0c36983 - 3.12.2: - alpine-ami-3.12.2-x86_64-r0: - description: Alpine Linux 3.12.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-x86_64 - version: '3.12' - release: 3.12.2 - arch: x86_64 - revision: r0 - end_of_life: '2022-05-01T00:00:00' - build_time: '1607915274' - artifacts: - us-west-2: ami-096f9b59745c9d447 - af-south-1: ami-0a2c528c48b724eb1 - eu-north-1: ami-0f97b4e83b330a44b - ap-south-1: ami-0082a1edc963aa684 - eu-west-3: ami-0837b3fcb00163a7d - eu-west-2: ami-0a8578d7d4ebca125 - eu-south-1: ami-027ed683f42684d45 - eu-west-1: ami-00185f6c477e1099d - ap-northeast-2: ami-0c869c3c23407b0d5 - me-south-1: ami-0ff80f770d65d1cbf - ap-northeast-1: ami-0e4245b0cbe57cb99 - sa-east-1: ami-0d276bc117826a38a - ca-central-1: ami-090b8e0d13afd07c1 - ap-east-1: ami-0efde8684085c8a1e - ap-southeast-1: ami-0a40d2bc9bfc47553 - ap-southeast-2: ami-0e7c828c974171a77 - eu-central-1: ami-062cda84fa4f4abe0 - us-east-1: ami-042e99e8ac5b82667 - us-east-2: ami-0bf39a1d2a7d83170 - us-west-1: ami-089fe5bbb8ee72815 - 3.12.3: - alpine-ami-3.12.3-x86_64-r0: - description: Alpine Linux 3.12.3 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-x86_64 - version: '3.12' - release: 3.12.3 - arch: x86_64 - revision: r0 - end_of_life: '2022-05-01T00:00:00' - build_time: 1608345219 - artifacts: - us-west-2: ami-009f13dc01dec6a56 - af-south-1: ami-06d5540221d65ca01 - eu-north-1: ami-051fcf0312ac02b05 - ap-south-1: ami-023fe0b4c4dc73f8c - eu-west-3: ami-0fa68ac5365833d75 - eu-west-2: ami-01282190055d34e3e - eu-south-1: ami-06b311d896c16a3a2 - eu-west-1: ami-0846229ad28aefe20 - ap-northeast-2: ami-0cfb5eabfb58d5f72 - me-south-1: ami-0bee0f3b523892c11 - ap-northeast-1: ami-0250e4a691729357a - sa-east-1: ami-0af3d5295dfa78f9a - ca-central-1: ami-0a5084eac39a18d31 - ap-east-1: ami-02c576f223356bf34 - ap-southeast-1: ami-0f06993534aec820f - ap-southeast-2: ami-0f66203a3a619f732 - eu-central-1: ami-06a298dc479cf2a73 - us-east-1: ami-098a996634a88542f - us-east-2: ami-07012d290ef9c028e - us-west-1: ami-0570d3bcb39152bb8 -v3_10-x86_64: - 3.10.4: - alpine-ami-3.10.4-x86_64-r0: - description: Alpine Linux 3.10.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.4 - arch: x86_64 - revision: r0 - end_of_life: '2021-05-01T00:00:00' - build_time: '1580899963' - artifacts: - eu-north-1: ami-0011e13dbacb8fcb4 - ap-south-1: ami-00fac10f41dff96e4 - eu-west-3: ami-070b405f25870cfa4 - eu-west-2: ami-047029018b46688b5 - eu-west-1: ami-0d645d9aa9af199e7 - ap-northeast-2: ami-03a2be707d4d83cea - ap-northeast-1: ami-0dc770d65f50e9339 - sa-east-1: ami-01af983d84e7075aa - ca-central-1: ami-0a54918dadce6828a - ap-southeast-1: ami-0aadcaa1f71c42546 - ap-southeast-2: ami-0ba48065660ab830f - eu-central-1: ami-01de425983c4c1bfc - us-east-1: ami-014e31a6d6da30eb7 - us-east-2: ami-004421f607bf25444 - us-west-1: ami-0e07b975efa6cba65 - us-west-2: ami-07128e75c4dcc9c7c - 3.10.3: - alpine-ami-3.10.3-x86_64-r1: - description: Alpine Linux 3.10.3 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.3 - arch: x86_64 - revision: r1 - end_of_life: '2021-05-01T00:00:00' - build_time: '1572150070' - artifacts: - eu-north-1: ami-00207f3df9a9cb088 - ap-south-1: ami-0a8839c12787f0c46 - eu-west-3: ami-0ef9a828aded0a0de - eu-west-2: ami-02520e7e046db5d8f - eu-west-1: ami-01c1ec8fdefc61650 - ap-northeast-2: ami-0e749a03d064c1e47 - ap-northeast-1: ami-0760cd78e75cb77a4 - sa-east-1: ami-0ee958f7773223770 - ca-central-1: ami-016d172dee4ff4a22 - ap-southeast-1: ami-0f0e2be5d8c0110c1 - ap-southeast-2: ami-0ca4caea0ce1f4a8a - eu-central-1: ami-04e50c8006d4bc2bf - us-east-1: ami-063cb098a86c1c4cc - us-east-2: ami-0110d80369eb75f49 - us-west-1: ami-00b06ce695a617956 - us-west-2: ami-0d0b7768c8cd9a8c8 - 3.10.1: - alpine-ami-3.10.1-x86_64-r0: - description: Alpine Linux 3.10.1 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.1 - arch: x86_64 - revision: r0 - end_of_life: '2021-05-01T00:00:00' - build_time: '1562975219' - artifacts: - eu-north-1: ami-020c6eab877f87e9c - ap-south-1: ami-0f704cf587a1bd591 - eu-west-3: ami-07098b9dc4e34adee - eu-west-2: ami-01fe12a7b5f0ae5e4 - eu-west-1: ami-08f5d4eaae3855536 - ap-northeast-2: ami-0fc9157e14e1701ea - ap-northeast-1: ami-039a6734ca3e107c2 - sa-east-1: ami-06b3a596069b29720 - ca-central-1: ami-073a7bdf1f93fdf07 - ap-southeast-1: ami-04ee093ad3986c1e2 - ap-southeast-2: ami-08b686d005668aa12 - eu-central-1: ami-02b0787907fb72c16 - us-east-1: ami-0cce76b5f0a9c52f3 - us-east-2: ami-0e0eea8fb3cea9bf6 - us-west-1: ami-0db3b834555de24aa - us-west-2: ami-01ddc73ca7c75f53d - alpine-ami-3.10.1-x86_64-r1: - description: Alpine Linux 3.10.1 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.1 - arch: x86_64 - revision: r1 - end_of_life: '2021-05-01T00:00:00' - build_time: '1564213143' - artifacts: - eu-north-1: ami-0859a31a742c902ed - ap-south-1: ami-09e1bd549945283a2 - eu-west-3: ami-06a5559ce996d5bac - eu-west-2: ami-06e36c52d4a7c245a - eu-west-1: ami-00fcd74ef57d7f27d - ap-northeast-2: ami-06637cd011ec49efa - ap-northeast-1: ami-0adeee26a46805278 - sa-east-1: ami-0087fd3ce3d62d34d - ca-central-1: ami-02fed61c453469d90 - ap-southeast-1: ami-081de8e0c4d9e28e5 - ap-southeast-2: ami-0e2c774fdc1d38ba1 - eu-central-1: ami-0659cf3939d5818e6 - us-east-1: ami-063929a9ea787ced6 - us-east-2: ami-0a5ef71ab2deee8fd - us-west-1: ami-04165aa967c5fb241 - us-west-2: ami-08147c2b1a80b44c4 - 3.10.5: - alpine-ami-3.10.5-x86_64-r0: - description: Alpine Linux 3.10.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.5 - arch: x86_64 - revision: r0 - end_of_life: '2021-05-01T00:00:00' - build_time: '1587886362' - artifacts: - eu-north-1: ami-041b6bdb27dbc8226 - ap-south-1: ami-0c8a22fa0ee90c07a - eu-west-3: ami-0bbb1a9d10ee0e6ee - eu-west-2: ami-08ca328d558bee247 - eu-west-1: ami-0451f26166639b1b9 - ap-northeast-2: ami-0595dc50c0f0e23f7 - ap-northeast-1: ami-043d40c880c7a176b - sa-east-1: ami-088bc83fe1497e710 - ca-central-1: ami-08c250f635a417222 - ap-southeast-1: ami-0244d1373053cfe5b - ap-southeast-2: ami-0cf284dc25e35862d - eu-central-1: ami-0a626b78c94340b6e - us-east-1: ami-0e635ea3ca126c707 - us-east-2: ami-0f5a09a7d1d0ae35f - us-west-1: ami-06c2aa86f3a72385e - us-west-2: ami-0b6f8a395fa8b5961 +3.10.5: + v3_10-x86_64: alpine-ami-3.10.5-x86_64-r1: description: Alpine Linux 3.10.5 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -838,10 +566,10 @@ v3_10-x86_64: release: 3.10.5 arch: x86_64 revision: r1 + creation_date: '2020-12-19T02:36:06.000Z' end_of_life: '2021-05-01T00:00:00' - build_time: 1608345383 + build_time: 1608374166 artifacts: - us-west-2: ami-0605acecb09204ae6 af-south-1: ami-0f04d696b9bb2a043 eu-north-1: ami-00b16b9ae0a30f956 ap-south-1: ami-07e6e99350bef94dd @@ -861,64 +589,97 @@ v3_10-x86_64: us-east-1: ami-0ad73f561b0d903fa us-east-2: ami-0c15ef6ad3bdb364d us-west-1: ami-0f06f7abd4a2481fc - 3.10.0: - alpine-ami-3.10.0-x86_64-r0: - description: Alpine Linux 3.10.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + us-west-2: ami-0605acecb09204ae6 + alpine-ami-3.10.5-x86_64-r0: + description: Alpine Linux 3.10.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_10-x86_64 version: '3.10' - release: 3.10.0 + release: 3.10.5 arch: x86_64 revision: r0 + creation_date: '2020-04-25T23:32:37.000Z' end_of_life: '2021-05-01T00:00:00' - build_time: '1561036079' + build_time: 1587886357 artifacts: - eu-north-1: ami-069c11c7844825375 - ap-south-1: ami-06ab2e1b19df43403 - eu-west-3: ami-0385dc3d759aaa464 - eu-west-2: ami-0a5d209eea58688c2 - eu-west-1: ami-076b4d480f72a117f - ap-northeast-2: ami-0b2ab59439d69c87f - ap-northeast-1: ami-00d72ba9e4e50e6f0 - sa-east-1: ami-04ddd371cd342921d - ca-central-1: ami-035f9ddc53b8e3c94 - ap-southeast-1: ami-097e487f602370726 - ap-southeast-2: ami-0f2248216c030f2ea - eu-central-1: ami-0c2583ed13862fb17 - us-east-1: ami-0647412cf72f247d9 - us-east-2: ami-0fb394548acf15691 - us-west-1: ami-04d80966c446c3f58 - us-west-2: ami-0c71a8664131b42b3 - 3.10.2: - alpine-ami-3.10.2-x86_64-r1: - description: Alpine Linux 3.10.2 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + eu-north-1: ami-041b6bdb27dbc8226 + ap-south-1: ami-0c8a22fa0ee90c07a + eu-west-3: ami-0bbb1a9d10ee0e6ee + eu-west-2: ami-08ca328d558bee247 + eu-west-1: ami-0451f26166639b1b9 + ap-northeast-2: ami-0595dc50c0f0e23f7 + ap-northeast-1: ami-043d40c880c7a176b + sa-east-1: ami-088bc83fe1497e710 + ca-central-1: ami-08c250f635a417222 + ap-southeast-1: ami-0244d1373053cfe5b + ap-southeast-2: ami-0cf284dc25e35862d + eu-central-1: ami-0a626b78c94340b6e + us-east-1: ami-0e635ea3ca126c707 + us-east-2: ami-0f5a09a7d1d0ae35f + us-west-1: ami-06c2aa86f3a72385e + us-west-2: ami-0b6f8a395fa8b5961 +3.10.4: + v3_10-x86_64: + alpine-ami-3.10.4-x86_64-r0: + description: Alpine Linux 3.10.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_10-x86_64 version: '3.10' - release: 3.10.2 + release: 3.10.4 + arch: x86_64 + revision: r0 + creation_date: '2020-02-05T02:52:39.000Z' + end_of_life: '2021-05-01T00:00:00' + build_time: 1580899959 + artifacts: + eu-north-1: ami-0011e13dbacb8fcb4 + ap-south-1: ami-00fac10f41dff96e4 + eu-west-3: ami-070b405f25870cfa4 + eu-west-2: ami-047029018b46688b5 + eu-west-1: ami-0d645d9aa9af199e7 + ap-northeast-2: ami-03a2be707d4d83cea + ap-northeast-1: ami-0dc770d65f50e9339 + sa-east-1: ami-01af983d84e7075aa + ca-central-1: ami-0a54918dadce6828a + ap-southeast-1: ami-0aadcaa1f71c42546 + ap-southeast-2: ami-0ba48065660ab830f + eu-central-1: ami-01de425983c4c1bfc + us-east-1: ami-014e31a6d6da30eb7 + us-east-2: ami-004421f607bf25444 + us-west-1: ami-0e07b975efa6cba65 + us-west-2: ami-07128e75c4dcc9c7c +3.10.3: + v3_10-x86_64: + alpine-ami-3.10.3-x86_64-r1: + description: Alpine Linux 3.10.3 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.3 arch: x86_64 revision: r1 + creation_date: '2019-10-26T20:21:08.000Z' end_of_life: '2021-05-01T00:00:00' - build_time: '1566814550' + build_time: 1572150068 artifacts: - eu-north-1: ami-0ac4f026a4624309e - ap-south-1: ami-03c079c4f6a77bcd8 - eu-west-3: ami-0196d7c3d0c2e5230 - eu-west-2: ami-04c585868e7f9016e - eu-west-1: ami-073456a92b131bee5 - ap-northeast-2: ami-0eb3806a09c62e80a - ap-northeast-1: ami-0865b6aea9d3d4e9a - sa-east-1: ami-0437041273be4d2b3 - ca-central-1: ami-0aeee1c23a65f09e5 - ap-southeast-1: ami-03cbf9e5c42bd2de0 - ap-southeast-2: ami-040ee9c325bd773bb - eu-central-1: ami-01c4a5f25d39d8c1d - us-east-1: ami-0b13bd8ab9492449c - us-east-2: ami-0a87fa8a73b9b850c - us-west-1: ami-009961e3d2d7ccaa8 - us-west-2: ami-0a083cc95e2bbc4b0 -v3_9-x86_64: - 3.9.4: + eu-north-1: ami-00207f3df9a9cb088 + ap-south-1: ami-0a8839c12787f0c46 + eu-west-3: ami-0ef9a828aded0a0de + eu-west-2: ami-02520e7e046db5d8f + eu-west-1: ami-01c1ec8fdefc61650 + ap-northeast-2: ami-0e749a03d064c1e47 + ap-northeast-1: ami-0760cd78e75cb77a4 + sa-east-1: ami-0ee958f7773223770 + ca-central-1: ami-016d172dee4ff4a22 + ap-southeast-1: ami-0f0e2be5d8c0110c1 + ap-southeast-2: ami-0ca4caea0ce1f4a8a + eu-central-1: ami-04e50c8006d4bc2bf + us-east-1: ami-063cb098a86c1c4cc + us-east-2: ami-0110d80369eb75f49 + us-west-1: ami-00b06ce695a617956 + us-west-2: ami-0d0b7768c8cd9a8c8 +3.9.4: + v3_9-x86_64: alpine-ami-3.9.4-x86_64-r1: description: Alpine Linux 3.9.4 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -927,8 +688,9 @@ v3_9-x86_64: release: 3.9.4 arch: x86_64 revision: r1 + creation_date: '2019-07-26T23:48:27.000Z' end_of_life: '2021-01-01T00:00:00' - build_time: '1564213710' + build_time: 1564213707 artifacts: eu-north-1: ami-01c04b1d21717da2d ap-south-1: ami-091de53a3582f2779 @@ -954,8 +716,9 @@ v3_9-x86_64: release: 3.9.4 arch: x86_64 revision: r0 + creation_date: '2019-06-20T05:16:50.000Z' end_of_life: '2021-01-01T00:00:00' - build_time: '1561036615' + build_time: 1561036610 artifacts: eu-north-1: ami-09267b5c6d7722fdd ap-south-1: ami-0cb67b835ca871537 @@ -973,64 +736,8 @@ v3_9-x86_64: us-east-2: ami-074a01fd0b7de0135 us-west-1: ami-0a70d6f1ce22ddfb1 us-west-2: ami-006aeb6d57c92f978 - 3.9.6: - alpine-ami-3.9.6-x86_64-r0: - description: Alpine Linux 3.9.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_9-x86_64 - version: '3.9' - release: 3.9.6 - arch: x86_64 - revision: r0 - end_of_life: '2021-01-01T00:00:00' - build_time: '1587887420' - artifacts: - eu-north-1: ami-07a2b23059054aea3 - ap-south-1: ami-00af726ec2f4077a2 - eu-west-3: ami-00a425aa20737343e - eu-west-2: ami-08c87b358b24d1df3 - eu-west-1: ami-0eb2b54ab4d09eb80 - ap-northeast-2: ami-0f9ad7c51e14bdc3d - ap-northeast-1: ami-0133f3a571f684178 - sa-east-1: ami-0ea679407da47b78a - ca-central-1: ami-0583a99f342097b6c - ap-southeast-1: ami-0d52e9d7f91ca051c - ap-southeast-2: ami-054360648343b66bc - eu-central-1: ami-051eec0106a08df6d - us-east-1: ami-004f0550310a2d7aa - us-east-2: ami-045a2cc3fe272caee - us-west-1: ami-026a54e52daea1233 - us-west-2: ami-0b933475d362cbfab - 3.9.5: - alpine-ami-3.9.5-x86_64-r0: - description: Alpine Linux 3.9.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_9-x86_64 - version: '3.9' - release: 3.9.5 - arch: x86_64 - revision: r0 - end_of_life: '2021-01-01T00:00:00' - build_time: '1580901101' - artifacts: - eu-north-1: ami-0dae27e872bbb58a3 - ap-south-1: ami-03aa6dfb6b5c5b24d - eu-west-3: ami-01d92abfc31832091 - eu-west-2: ami-0ca53eef190752d9b - eu-west-1: ami-032df31e3645eac89 - ap-northeast-2: ami-042ed34c048fd4dde - ap-northeast-1: ami-0f22ba5f542102103 - sa-east-1: ami-044b116c38c67bbe6 - ca-central-1: ami-07ced81b329157965 - ap-southeast-1: ami-09aa8a66b52872964 - ap-southeast-2: ami-0883e80a814ca1ead - eu-central-1: ami-0b1156425ee49460e - us-east-1: ami-01d51c30d2c611d0b - us-east-2: ami-023a120054be00f14 - us-west-1: ami-0b628545bb655d1e3 - us-west-2: ami-06dc8e37edaccd91d -v3_11-x86_64: - 3.11.0: +3.11.0: + v3_11-x86_64: alpine-ami-3.11.0-x86_64-r0: description: Alpine Linux 3.11.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -1039,8 +746,9 @@ v3_11-x86_64: release: 3.11.0 arch: x86_64 revision: r0 + creation_date: '2019-12-20T03:36:53.000Z' end_of_life: '2021-05-01T00:00:00' - build_time: '1576841818' + build_time: 1576841813 artifacts: eu-north-1: ami-01dc7a794c0c8062b ap-south-1: ami-0dba9ec182268ab0a @@ -1058,7 +766,66 @@ v3_11-x86_64: us-east-2: ami-01d8b7e276ad609aa us-west-1: ami-08d909997839b6030 us-west-2: ami-07a62f65352c51750 - 3.11.3: +3.10.1: + v3_10-x86_64: + alpine-ami-3.10.1-x86_64-r0: + description: Alpine Linux 3.10.1 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.1 + arch: x86_64 + revision: r0 + creation_date: '2019-07-12T15:46:56.000Z' + end_of_life: '2021-05-01T00:00:00' + build_time: 1562975216 + artifacts: + eu-north-1: ami-020c6eab877f87e9c + ap-south-1: ami-0f704cf587a1bd591 + eu-west-3: ami-07098b9dc4e34adee + eu-west-2: ami-01fe12a7b5f0ae5e4 + eu-west-1: ami-08f5d4eaae3855536 + ap-northeast-2: ami-0fc9157e14e1701ea + ap-northeast-1: ami-039a6734ca3e107c2 + sa-east-1: ami-06b3a596069b29720 + ca-central-1: ami-073a7bdf1f93fdf07 + ap-southeast-1: ami-04ee093ad3986c1e2 + ap-southeast-2: ami-08b686d005668aa12 + eu-central-1: ami-02b0787907fb72c16 + us-east-1: ami-0cce76b5f0a9c52f3 + us-east-2: ami-0e0eea8fb3cea9bf6 + us-west-1: ami-0db3b834555de24aa + us-west-2: ami-01ddc73ca7c75f53d + alpine-ami-3.10.1-x86_64-r1: + description: Alpine Linux 3.10.1 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.1 + arch: x86_64 + revision: r1 + creation_date: '2019-07-26T23:39:00.000Z' + end_of_life: '2021-05-01T00:00:00' + build_time: 1564213140 + artifacts: + eu-north-1: ami-0859a31a742c902ed + ap-south-1: ami-09e1bd549945283a2 + eu-west-3: ami-06a5559ce996d5bac + eu-west-2: ami-06e36c52d4a7c245a + eu-west-1: ami-00fcd74ef57d7f27d + ap-northeast-2: ami-06637cd011ec49efa + ap-northeast-1: ami-0adeee26a46805278 + sa-east-1: ami-0087fd3ce3d62d34d + ca-central-1: ami-02fed61c453469d90 + ap-southeast-1: ami-081de8e0c4d9e28e5 + ap-southeast-2: ami-0e2c774fdc1d38ba1 + eu-central-1: ami-0659cf3939d5818e6 + us-east-1: ami-063929a9ea787ced6 + us-east-2: ami-0a5ef71ab2deee8fd + us-west-1: ami-04165aa967c5fb241 + us-west-2: ami-08147c2b1a80b44c4 +3.11.3: + v3_11-x86_64: alpine-ami-3.11.3-x86_64-r0: description: Alpine Linux 3.11.3 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -1067,8 +834,9 @@ v3_11-x86_64: release: 3.11.3 arch: x86_64 revision: r0 + creation_date: '2020-02-05T03:01:56.000Z' end_of_life: '2021-11-01T00:00:00' - build_time: '1580900519' + build_time: 1580900516 artifacts: eu-north-1: ami-025350371c14bbcf9 ap-south-1: ami-01597af5b044c6534 @@ -1086,7 +854,8 @@ v3_11-x86_64: us-east-2: ami-0741188fc6d365c12 us-west-1: ami-065633a2b189f7550 us-west-2: ami-050dd0423825ae4cd - 3.11.6: +3.11.6: + v3_11-x86_64: alpine-ami-3.11.6-x86_64-r0: description: Alpine Linux 3.11.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -1095,8 +864,9 @@ v3_11-x86_64: release: 3.11.6 arch: x86_64 revision: r0 + creation_date: '2020-04-25T23:41:10.000Z' end_of_life: '2021-11-01T00:00:00' - build_time: '1587886872' + build_time: 1587886870 artifacts: eu-north-1: ami-03830331da71d3b6a ap-south-1: ami-08437e8244154999a @@ -1114,7 +884,8 @@ v3_11-x86_64: us-east-2: ami-014d15ba809c1e48f us-west-1: ami-05f659e5fe3528bbd us-west-2: ami-0380e01590d421d3e - 3.11.2: +3.11.2: + v3_11-x86_64: alpine-ami-3.11.2-x86_64-r0: description: Alpine Linux 3.11.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -1123,8 +894,9 @@ v3_11-x86_64: release: 3.11.2 arch: x86_64 revision: r0 + creation_date: '2020-01-04T19:12:52.000Z' end_of_life: '2021-11-01T00:00:00' - build_time: '1578193976' + build_time: 1578193972 artifacts: eu-north-1: ami-03ce6e520f43392b9 ap-south-1: ami-0b0f33d8cfb9e5051 @@ -1142,7 +914,128 @@ v3_11-x86_64: us-east-2: ami-018b2823c3aa8b78e us-west-1: ami-04de5ae2ed495f580 us-west-2: ami-0282e49ac0502691d - 3.11.5: +3.10.0: + v3_10-x86_64: + alpine-ami-3.10.0-x86_64-r0: + description: Alpine Linux 3.10.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.0 + arch: x86_64 + revision: r0 + creation_date: '2019-06-20T05:07:53.000Z' + end_of_life: '2021-05-01T00:00:00' + build_time: 1561036073 + artifacts: + eu-north-1: ami-069c11c7844825375 + ap-south-1: ami-06ab2e1b19df43403 + eu-west-3: ami-0385dc3d759aaa464 + eu-west-2: ami-0a5d209eea58688c2 + eu-west-1: ami-076b4d480f72a117f + ap-northeast-2: ami-0b2ab59439d69c87f + ap-northeast-1: ami-00d72ba9e4e50e6f0 + sa-east-1: ami-04ddd371cd342921d + ca-central-1: ami-035f9ddc53b8e3c94 + ap-southeast-1: ami-097e487f602370726 + ap-southeast-2: ami-0f2248216c030f2ea + eu-central-1: ami-0c2583ed13862fb17 + us-east-1: ami-0647412cf72f247d9 + us-east-2: ami-0fb394548acf15691 + us-west-1: ami-04d80966c446c3f58 + us-west-2: ami-0c71a8664131b42b3 +3.9.6: + v3_9-x86_64: + alpine-ami-3.9.6-x86_64-r0: + description: Alpine Linux 3.9.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_9-x86_64 + version: '3.9' + release: 3.9.6 + arch: x86_64 + revision: r0 + creation_date: '2020-04-25T23:50:15.000Z' + end_of_life: '2021-01-01T00:00:00' + build_time: 1587887415 + artifacts: + eu-north-1: ami-07a2b23059054aea3 + ap-south-1: ami-00af726ec2f4077a2 + eu-west-3: ami-00a425aa20737343e + eu-west-2: ami-08c87b358b24d1df3 + eu-west-1: ami-0eb2b54ab4d09eb80 + ap-northeast-2: ami-0f9ad7c51e14bdc3d + ap-northeast-1: ami-0133f3a571f684178 + sa-east-1: ami-0ea679407da47b78a + ca-central-1: ami-0583a99f342097b6c + ap-southeast-1: ami-0d52e9d7f91ca051c + ap-southeast-2: ami-054360648343b66bc + eu-central-1: ami-051eec0106a08df6d + us-east-1: ami-004f0550310a2d7aa + us-east-2: ami-045a2cc3fe272caee + us-west-1: ami-026a54e52daea1233 + us-west-2: ami-0b933475d362cbfab +3.10.2: + v3_10-x86_64: + alpine-ami-3.10.2-x86_64-r1: + description: Alpine Linux 3.10.2 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_10-x86_64 + version: '3.10' + release: 3.10.2 + arch: x86_64 + revision: r1 + creation_date: '2019-08-26T02:15:44.000Z' + end_of_life: '2021-05-01T00:00:00' + build_time: 1566814544 + artifacts: + eu-north-1: ami-0ac4f026a4624309e + ap-south-1: ami-03c079c4f6a77bcd8 + eu-west-3: ami-0196d7c3d0c2e5230 + eu-west-2: ami-04c585868e7f9016e + eu-west-1: ami-073456a92b131bee5 + ap-northeast-2: ami-0eb3806a09c62e80a + ap-northeast-1: ami-0865b6aea9d3d4e9a + sa-east-1: ami-0437041273be4d2b3 + ca-central-1: ami-0aeee1c23a65f09e5 + ap-southeast-1: ami-03cbf9e5c42bd2de0 + ap-southeast-2: ami-040ee9c325bd773bb + eu-central-1: ami-01c4a5f25d39d8c1d + us-east-1: ami-0b13bd8ab9492449c + us-east-2: ami-0a87fa8a73b9b850c + us-west-1: ami-009961e3d2d7ccaa8 + us-west-2: ami-0a083cc95e2bbc4b0 +3.9.5: + v3_9-x86_64: + alpine-ami-3.9.5-x86_64-r0: + description: Alpine Linux 3.9.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_9-x86_64 + version: '3.9' + release: 3.9.5 + arch: x86_64 + revision: r0 + creation_date: '2020-02-05T03:11:35.000Z' + end_of_life: '2021-01-01T00:00:00' + build_time: 1580901095 + artifacts: + eu-north-1: ami-0dae27e872bbb58a3 + ap-south-1: ami-03aa6dfb6b5c5b24d + eu-west-3: ami-01d92abfc31832091 + eu-west-2: ami-0ca53eef190752d9b + eu-west-1: ami-032df31e3645eac89 + ap-northeast-2: ami-042ed34c048fd4dde + ap-northeast-1: ami-0f22ba5f542102103 + sa-east-1: ami-044b116c38c67bbe6 + ca-central-1: ami-07ced81b329157965 + ap-southeast-1: ami-09aa8a66b52872964 + ap-southeast-2: ami-0883e80a814ca1ead + eu-central-1: ami-0b1156425ee49460e + us-east-1: ami-01d51c30d2c611d0b + us-east-2: ami-023a120054be00f14 + us-west-1: ami-0b628545bb655d1e3 + us-west-2: ami-06dc8e37edaccd91d +3.11.5: + v3_11-x86_64: alpine-ami-3.11.5-x86_64-r0: description: Alpine Linux 3.11.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine @@ -1151,8 +1044,9 @@ v3_11-x86_64: release: 3.11.5 arch: x86_64 revision: r0 + creation_date: '2020-04-03T02:27:09.000Z' end_of_life: '2021-11-01T00:00:00' - build_time: '1585909634' + build_time: 1585909629 artifacts: eu-north-1: ami-0f326f36494b66d68 ap-south-1: ami-0df79a6a767372395 @@ -1170,63 +1064,3 @@ v3_11-x86_64: us-east-2: ami-0325fc21b50ee19ba us-west-1: ami-003d6e7746c7e938e us-west-2: ami-0966c757f79c1a553 - 3.11.7: - alpine-ami-3.11.7-x86_64-r0: - description: Alpine Linux 3.11.7 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.7 - arch: x86_64 - revision: r0 - end_of_life: '2021-11-01T00:00:00' - build_time: 1608346108 - artifacts: - us-west-2: ami-0b9f7e5619a03a0ea - af-south-1: ami-05cf48a10f6002168 - eu-north-1: ami-05b0683850b38c6d5 - ap-south-1: ami-050c579c7459a48c2 - eu-west-3: ami-07e0f0262ff7b7da9 - eu-west-2: ami-07e738b263969a042 - eu-south-1: ami-0642f11c989872666 - eu-west-1: ami-0956524d21583a27a - ap-northeast-2: ami-09346dc8fc008c9f3 - me-south-1: ami-0d033bc51aa9fc3c6 - ap-northeast-1: ami-0dc80e3c7e0aedb4e - sa-east-1: ami-07ec4797792079c72 - ca-central-1: ami-0af7eccbeacce0f05 - ap-east-1: ami-096def05737bb9fa5 - ap-southeast-1: ami-02d1e1bf59cca56f6 - ap-southeast-2: ami-055e9bb961d28d69d - eu-central-1: ami-05794ddba50a9a744 - us-east-1: ami-0f5a58345290f20fe - us-east-2: ami-089db2524f896109e - us-west-1: ami-0a0564916b7d4a510 -current-x86_64: - 3.9.4: - alpine-ami-3.9.4-x86_64-r0: - description: Alpine Linux 3.9.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: current-x86_64 - version: '3.9' - release: 3.9.4 - arch: x86_64 - revision: r0 - end_of_life: '2021-01-01T00:00:00' - build_time: '1560251961' - artifacts: - eu-north-1: ami-0f7b7e2bef1209f6c - ap-south-1: ami-0f94a69d1ff0a7860 - eu-west-3: ami-084cb673481c3f793 - eu-west-2: ami-091a16ac6bd29bdd3 - eu-west-1: ami-09234e83a8015efa4 - ap-northeast-2: ami-028d3d1675161319e - ap-northeast-1: ami-0bb4073495ff2021e - sa-east-1: ami-014d631c23ebf306a - ca-central-1: ami-05a3c167410bf6b35 - ap-southeast-1: ami-0f1c039e595dd2d02 - ap-southeast-2: ami-0ca5b7ca3caa92758 - eu-central-1: ami-02df82b83ad2cdaec - us-east-1: ami-04a29b11e34acf54d - us-east-2: ami-0d9445885a19e00ca - us-west-1: ami-0bef2dc6d3f4e19a2 diff --git a/scripts/builder.py b/scripts/builder.py index 26c2826..8eb1c70 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -55,6 +55,16 @@ import boto3 import pyhocon +# allows us to set values deep within an object that might not be fully defined +def dictfactory(): + return defaultdict(dictfactory) + +# undo dictfactory() objects to normal objects +def undictfactory(o): + if isinstance(o, defaultdict): + o = {k: undictfactory(v) for k, v in o.items()} + return o + # This is an ugly hack. We occasionally need the region name but it's not # attached to anything publicly exposed on the client objects. Hide this here. def region_from_client(client): @@ -376,347 +386,6 @@ class IdentityBrokerClient: yield self._boto3_session_from_creds(self._get(cred_url), region) -class GenReleaseReadme: - """Generate releases/README_.md - """ - - command_name = "gen-release-readme" - - SECTION_TPL = textwrap.dedent(""" - ### Alpine Linux {release} ({date}) -
click to show/hide

- - {rows} - -

- """) - - AMI_TPL = ( - " [{id}](https://{r}.console.aws.amazon.com/ec2/home" - "#Images:visibility=public-images;imageId={id}) " - "([launch](https://{r}.console.aws.amazon.com/ec2/home" - "#launchAmi={id})) |" - ) - - archs = ['x86_64', 'aarch64'] - - @staticmethod - def extract_ver(x): - return StrictVersion("0.0" if x["release"] == "edge" else x["release"]) - - def get_sorted_releases(self, release_data): - sections = defaultdict(lambda: { - "release": "", - "built": {}, - "name": {}, - "ami": defaultdict(dict) - }) - - for build, releases in release_data.items(): - for release, amis in releases.items(): - for name, info in amis.items(): - arch = info["arch"] - built = int(info["build_time"]) - ver = sections[info["version"]] - - if arch not in ver["built"] or ver["built"][arch] < built: - ver["release"] = release - ver["name"][arch] = name - ver["built"][arch] = built - - for region, ami in info["artifacts"].items(): - ver["ami"][region][arch] = ami - - return sorted(sections.values(), key=self.extract_ver, reverse=True) - - def make_ami_list(self, sorted_releases): - ami_list = "## AMIs\n" - - # TODO: this may need some more thought for (rare) cases when regions - # don't all have the same-named images for some reason - for info in sorted_releases: - rows = ["| Region |", "| ------ |"] - - for arch in self.archs: - if arch in info["name"]: - rows[0] += f" {info['name'][arch]} |" - rows[1] += " --- |" - - for region, amis in sorted(info["ami"].items()): - row = f"| {region} |" - for arch in self.archs: - if arch in amis: - row += self.AMI_TPL.format(r=region, id=amis[arch]) - rows.append(row) - - ami_list += self.SECTION_TPL.format( - release=info["release"].capitalize(), - date=datetime.utcfromtimestamp( - max(info["built"].values())).date(), - rows="\n".join(rows)) - - return ami_list - - @staticmethod - def add_args(parser): - parser.add_argument("profile", help="name of profile to update") - - def run(self, args, root, log): - profile = args.profile - - release_dir = os.path.join(root, "releases") - profile_file = os.path.join(release_dir, f"{profile}.yaml") - with open(profile_file, "r") as data: - sorted_releases = self.get_sorted_releases(yaml.safe_load(data)) - - readme_md = os.path.join(release_dir, f"README_{profile}.md") - - readme = "" - action = "Updated" - if os.path.exists(readme_md): - with open(readme_md, "r") as file: - readme = file.read() - else: - action = "Created" - - re_images = re.compile(r"## AMIs.*\Z", flags=re.DOTALL) - - if re_images.search(readme): - re_images.sub( - self.make_ami_list(sorted_releases), - readme) - else: - readme += "\n" + self.make_ami_list(sorted_releases) - - with open(readme_md, "w") as file: - file.write(readme) - - log.info(f"{action} {readme_md}") - - -class MakeAMIs: - """Build Packer JSON variable files from HOCON build profiles - """ - - command_name = "make-amis" - - @staticmethod - def add_args(parser): - parser.add_argument("--region", "-r", default="us-west-2", - help="region to use for build") - parser.add_argument("--use-broker", action="store_true", - help="use identity broker to obtain per-region credentials") - parser.add_argument("profile", help="name of profile to build") - parser.add_argument("builds", nargs="*", - help="name of builds within a profile to build") - - @staticmethod - def get_artifact_id(root, profile, build): - manifest_json = os.path.join( - root, "build", "profile", profile, build, - "manifest.json") - with open(manifest_json, "r") as data: - manifest = json.load(data) - return manifest['builds'][0]['artifact_id'].split(':')[1] - - def run(self, args, root, log): - os.chdir(os.path.join(root, "build")) - - builds = args.builds or os.listdir( - os.path.join("profile", args.profile)) - - artifacts = [] - - for build in builds: - log.info("\n*** Building %s/%s ***\n\n", args.profile, build) - - build_dir = os.path.join("profile", args.profile, build) - if not os.path.exists(build_dir): - log.info("Build dir '%s' does not exist", build_dir) - break - - env = None - if args.use_broker: - creds = IdentityBrokerClient().get_credentials(args.region) - env = { - "PATH": os.environ.get("PATH"), - "AWS_ACCESS_KEY_ID": creds["access_key"], - "AWS_SECRET_ACCESS_KEY": creds["secret_key"], - "AWS_SESSION_TOKEN": creds["session_token"], - "AWS_DEFAULT_REGION": args.region, - } - - out = io.StringIO() - - res = subprocess.Popen([ - os.environ.get("PACKER", "packer"), - "build", - f"-var-file={build_dir}/vars.json", - "packer.json" - ], stdout=subprocess.PIPE, encoding="utf-8", env=env) - - while res.poll() is None: - text = res.stdout.readline() - out.write(text) - print(text, end="") # input is already colorized - - if res.returncode == 0: - artifacts.append(self.get_artifact_id(root, args.profile, build)) - else: - if "is used by an existing AMI" in out.getvalue(): - continue - else: - sys.exit(res.returncode) - - log.info("\n=== DONE ===\n\nNew: " + ' '.join(artifacts) + "\n") - - -# TODO: profiles should encode retention policy... -# - keeping latest images per -# - keeping images past their EOL -class PruneAMIs: - """Prune AMIs from AWS - """ - - command_name = "prune-amis" - - @staticmethod - def add_args(parser): - LEVEL_HELP = textwrap.dedent("""\ - revision - keep only the latest revision per release - release - keep only the latest release per version - version - keep only the versions that aren't end-of-life - """) - - parser.add_argument( - "level", choices=["revision", "release", "version"], - help=LEVEL_HELP) - # TODO: add --region and --use-broker - parser.add_argument("profile", help="profile to prune") - parser.add_argument( - "build", nargs="?", help="build(s) within profile to prune") - parser.add_argument( - '--no-pretend', action='store_true', - help='actually prune images' - ) - - @staticmethod - def delete_image(ec2, image): - ec2.deregister_image(ImageId=image["ImageId"]) - - for blockdev in image["BlockDeviceMappings"]: - if "Ebs" not in blockdev: - continue - - ec2.delete_snapshot(SnapshotId=blockdev["Ebs"]["SnapshotId"]) - - def run(self, args, root, log): - now = datetime.utcnow() - release_yaml = os.path.join(root, "releases", f"{args.profile}.yaml") - - with open(release_yaml, "r") as data: - before = yaml.safe_load(data) - - known = defaultdict(list) - prune = defaultdict(list) - after = defaultdict(lambda: defaultdict(dict)) - - # for all builds in the profile... - for build_name, releases in before.items(): - # this is not the build that was specified - if args.build is not None and args.build != build_name: - log.info("< skipping %s/%s", args.profile, build_name) - # ensure its release data remains intact - after[build_name] = before[build_name] - continue - else: - log.info("> PRUNING %s/%s for %s", - args.profile, build_name, args.level) - - criteria = {} - - # scan releases for pruning criteria - for release, amis in releases.items(): - for ami_name, info in amis.items(): - version = info["version"] - built = info["build_time"] - - eol = info.get("end_of_life") - if eol: - eol = datetime.fromisoformat(info["end_of_life"]) - - for region, ami_id in info["artifacts"].items(): - known[region].append(ami_id) - - if args.level == "revision": - # find build timestamp of most recent revision, per release - if release not in criteria or built > criteria[release]: - criteria[release] = built - elif args.level == "release": - # find build timestamp of most recent revision, per version - if version not in criteria or built > criteria[version]: - criteria[version] = built - elif args.level == "version": - # find latest EOL date, per version - if ( - version not in criteria or - (not criteria[version]) or - (eol and eol > criteria[version]) - ): - criteria[version] = eol - - # rescan again to determine what doesn't make the cut - for release, amis in releases.items(): - for ami_name, info in amis.items(): - version = info["version"] - - eol = info.get("end_of_life") - if eol: - eol = datetime.fromisoformat(info["end_of_life"]) - - if args.level == "revision": - if info["build_time"] < criteria[release]: - for region, ami_id in info["artifacts"].items(): - prune[region].append(ami_id) - elif args.level == "release": - if info["build_time"] < criteria[version]: - for region, ami_id in info["artifacts"].items(): - prune[region].append(ami_id) - elif args.level == "version": - if criteria[version] and ( - (version != "edge" and criteria[version] < now) or - (version == "edge" and ((not eol) or (eol < now))) - ): - for region, ami_id in info["artifacts"].items(): - prune[region].append(ami_id) - else: - after[build_name][release][ami_name] = info - - for session in IdentityBrokerClient().iter_regions(): - region = session.region_name - - log.info("* scanning: %s ...", region) - - ec2 = session.client("ec2") - for image in ec2.describe_images(Owners=["self"])["Images"]: - image_name, image_id = image["Name"], image["ImageId"] - - if region in prune and image["ImageId"] in prune[region]: - if args.no_pretend is True: - log.error("REMOVING: %s = %s", image_id, image_name) - self.delete_image(image) - else: - log.error("TO_PRUNE: %s = %s", image_id, image_name) - elif region in known and image["ImageId"] in known[region]: - log.info("KEEPING: %s = %s", image_id, image_name) - else: - log.warning("UNKNOWN: %s = %s", image_id, image_name) - - # TODO: need parity with args first - #if args.no_pretend is True: - # UpdateReleases.run(args, root, log) - - class ConfigBuilder: now = datetime.utcnow() @@ -844,80 +513,180 @@ class ConfigBuilder: json.dump(cfg, out, indent=4, separators=(",", ": ")) -class ResolveProfiles: - """Build Packer JSON variable files from HOCON build profiles +class BuildAMIs: + """Build all AMIs for profile, or specific builds within a profile """ - - command_name = "resolve-profiles" + command_name = "amis" @staticmethod def add_args(parser): - parser.add_argument( - "profile", help="name of profile to build", nargs="*") + # NOTE: --use-broker and --region are not mutually exclusive here! + parser.add_argument("--use-broker", action="store_true", + help="use identity broker to obtain region credentials") + parser.add_argument("--region", "-r", default="us-west-2", + help="region to use for build") + parser.add_argument("profile", metavar="PROFILE", + help="name of profile to build") + parser.add_argument("builds", metavar="BUILD", nargs="*", + help="name of build within a profile (multiple OK)") - def resolve_profiles(self, profiles, root): + @staticmethod + def get_artifact_id(root, profile, build): + manifest_json = os.path.join( + root, "build", "profile", profile, build, + "manifest.json") + with open(manifest_json, "r") as data: + manifest = json.load(data) + return manifest['builds'][0]['artifact_id'].split(':')[1] + + def make_amis(self, args, root, log): + os.chdir(os.path.join(root, "build")) + + builds = args.builds or os.listdir( + os.path.join("profile", args.profile)) + + artifacts = [] + + for build in builds: + log.info("\n*** Building %s/%s ***\n\n", args.profile, build) + + build_dir = os.path.join("profile", args.profile, build) + if not os.path.exists(build_dir): + log.info("Build dir '%s' does not exist", build_dir) + break + + env = None + if args.use_broker: + creds = IdentityBrokerClient().get_credentials(args.region) + env = { + "PATH": os.environ.get("PATH"), + "AWS_ACCESS_KEY_ID": creds["access_key"], + "AWS_SECRET_ACCESS_KEY": creds["secret_key"], + "AWS_SESSION_TOKEN": creds["session_token"], + "AWS_DEFAULT_REGION": args.region, + } + + out = io.StringIO() + + res = subprocess.Popen([ + os.environ.get("PACKER", "packer"), + "build", + f"-var-file={build_dir}/vars.json", + "packer.json" + ], stdout=subprocess.PIPE, encoding="utf-8", env=env) + + while res.poll() is None: + text = res.stdout.readline() + out.write(text) + print(text, end="") # input is already colorized + + if res.returncode == 0: + artifacts.append(self.get_artifact_id(root, args.profile, build)) + else: + if "is used by an existing AMI" in out.getvalue(): + continue + else: + sys.exit(res.returncode) + + return artifacts + + def run(self, args, root, log): + log.info("Converting packer.conf to JSON...") + source = os.path.join(root, "packer.conf") + dest = os.path.join(root, "build", "packer.json") + pyhocon.converter.HOCONConverter.convert_from_file( + source, dest, "json", 2, False) + + log.info("Resolving profile...") builder = ConfigBuilder( os.path.join(root, "profiles"), os.path.join(root, "build", "profile")) + builder.build_profile(args.profile) - if profiles: - for profile in profiles: - builder.build_profile(profile) - else: - builder.build_all() + log.info("Running packer...") + amis = self.make_amis(args, root, log) + log.info("\n=== DONE ===\n\nNew: " + ' '.join(amis) + "\n") - def run(self, args, root, log): - self.resolve_profiles(args.profile, root) + +# These are general-purpose methods + +# iterate over EC2 region clients, whether we're using the broker or not +def iter_regions(use_broker, regions): + if use_broker: + for region in IdentityBrokerClient().iter_regions(): + yield region.client('ec2') + else: + for region in regions: + yield boto3.session.Session(region_name=region).client('ec2') + +def get_image(client, image_id): + images = client.describe_images(ImageIds=[image_id], Owners=["self"]) + perms = client.describe_image_attribute( + Attribute="launchPermission", ImageId=image_id) + + ami = AMI.from_aws_model(images["Images"][0], region_from_client(client)) + ami.aws_permissions = perms["LaunchPermissions"] + + return ami + +def get_images_with_tags(client, **tags): + images = [] + + res = client.describe_images(Owners=["self"], Filters=[ + {"Name": f"tag:{k}", "Values": [v]} for k, v in tags.items()]) + + for image in res["Images"]: + ami = AMI.from_aws_model(image, region_from_client(client)) + perms = client.describe_image_attribute( + Attribute="launchPermission", ImageId=ami.image_id) + ami.aws_permissions = perms["LaunchPermissions"] + images.append(ami) + + return images + +def get_image_with_tags(client, **tags): + images = get_images_with_tags(client, **tags) + if len(images) > 1: + raise Exception(f"Too many images for query {tags!r}") + elif len(images) == 0: + return None + else: + return images[0] + +def get_all_images(client): + return get_images_with_tags(client) class ReleaseAMIs: - """Copy AMIs to other regions and optionally make them public. + """Copy one or more AMIs to other regions and/or set AMI permissions. - Copies an AMI from a source region to destination regions. If the AMI - exists in some regions but not others it will copy only to the new regions. - This copy will add tags to the destination AMIs to link them to the source - AMI. + By default, source AMI permissions are applied to their copies, unless + --public, --private, or --allow-account options are specified. - By default does not make the AMIs public. Running the command a second time - with the --public flag will make the already copied AMIs public. If some - AMIs are public and others are not, will make them all public. - - This command will fill in missing regions and synchronized public settings - if it's re-run with the same AMI ID as new regions are added. + If the source AMI's permissions are different than the options provided, + its permissions will be updated to match. """ - command_name = "release" @staticmethod def add_args(parser): - parser.add_argument("--use-broker", action="store_true", - help="use identity broker to obtain per-region credentials") - parser.add_argument("--public", action="store_true", - help="make all copied images public, even previously copied ones") parser.add_argument("--source-region", default="us-west-2", - help="source region hosting ami to copy") - parser.add_argument("--region", "-r", action="append", - help="destination regions for copy, may be specified multiple " - "times") - parser.add_argument("--allow-accounts", action="append", - help="add permissions for other accounts to non-public images, " - "may be specified multiple times") - parser.add_argument("--out-file", "-o", - help="output file for JSON AMI map, otherwise stdout") - parser.add_argument("ami", help="ami id to copy") -# TODO: for efficiency, the main release loop will need some work -# parser.add_argument("amis", nargs="+", help="ami(s) to copy") - - @staticmethod - def check_args(args): - if not args.use_broker and not args.region: - return ["Use broker or region must be specified"] - - if args.use_broker and args.region: - return ["Broker and region flags are mutually exclusive."] - - if args.out_file and os.path.exists(args.out_file): - return ["Output file already exists"] + metavar="REGION", help="region of source AMI(s)") + rgroup = parser.add_mutually_exclusive_group(required=True) + rgroup.add_argument("--use-broker", action="store_true", + help="identity broker provides destination regions and credentials") + rgroup.add_argument("--region", "-r", action="append", dest="regions", + metavar="REGION", help="destination region (multiple OK)") + pgroup = parser.add_mutually_exclusive_group() + pgroup.add_argument("--public", action="store_true", default=None, + help="make source and copied AMIs public") + pgroup.add_argument("--private", dest="public", action="store_false", + help="make source and copied AMIs private") + pgroup.add_argument("--allow-account", dest="allow_accounts", + action="append", metavar="ID", help="make source and copied AMIs " + "accessible by AWS account id (multiple OK)") + parser.add_argument("amis", metavar="AMI", nargs="+", + help="AMI id(s) to copy") def get_source_region_client(self, use_broker, source_region): if use_broker: @@ -927,52 +696,8 @@ class ReleaseAMIs: return boto3.session.Session(region_name=source_region).client( "ec2") - def iter_regions(self, use_broker, regions): - if use_broker: - for region in IdentityBrokerClient().iter_regions(): - yield region.client("ec2") - return - - for region in regions: - yield boto3.session.Session(region_name=region).client("ec2") - - def get_image(self, client, image_id): - images = client.describe_images(ImageIds=[image_id], Owners=["self"]) - perms = client.describe_image_attribute( - Attribute="launchPermission", ImageId=image_id) - - ami = AMI.from_aws_model( - images["Images"][0], region_from_client(client)) - ami.aws_permissions = perms["LaunchPermissions"] - - return ami - - def get_image_with_tags(self, client, **tags): - images = self.get_images_with_tags(client, **tags) - if len(images) > 1: - raise Exception(f"Too many images for query {tags!r}") - elif len(images) == 0: - return None - else: - return images[0] - - def get_images_with_tags(self, client, **tags): - images = [] - - res = client.describe_images(Owners=["self"], Filters=[ - {"Name": f"tag:{k}", "Values": [v]} for k, v in tags.items()]) - - for image in res["Images"]: - ami = AMI.from_aws_model(image, region_from_client(client)) - perms = client.describe_image_attribute( - Attribute="launchPermission", ImageId=ami.image_id) - ami.aws_permissions = perms["LaunchPermissions"] - images.append(ami) - - return images - def copy_image(self, from_client, to_client, image_id): - source = self.get_image(from_client, image_id) + source = get_image(from_client, image_id) res = to_client.copy_image( Name=source.name, Description=source.description, @@ -986,213 +711,510 @@ class ReleaseAMIs: to_client.create_tags(Resources=[res["ImageId"]], Tags=tags) - return self.get_image(to_client, res["ImageId"]) + return get_image(to_client, res["ImageId"]) - def has_incorrect_perms(self, ami, accounts, public): - if accounts and set(ami.allowed_users) != set(accounts): + def has_incorrect_perms(self, image, perms): + if (set(image.allowed_groups) != set(perms['groups']) + or set(image.allowed_users) != set(perms['users'])): return True - if public and not ami.public: - return True - - def update_image_permissions(self, client, ami): + def update_image_permissions(self, client, image): + client.reset_image_attribute( + Attribute="launchPermission", ImageId=image.image_id) client.modify_image_attribute( - Attribute="launchPermission", ImageId=ami.image_id, - LaunchPermission={"Add": ami.aws_permissions}) + Attribute="launchPermission", ImageId=image.image_id, + LaunchPermission={"Add": image.aws_permissions}) def run(self, args, root, log): - released = {} + source_perms = {} pending_copy = [] pending_perms = [] + source_region = args.source_region + log.info(f"Source region {source_region}") source_client = self.get_source_region_client( - args.use_broker, args.source_region) + args.use_broker, source_region) -# TODO: iterate over amis from the command line + # resolve source ami perms, queue for fixing if necessary + for ami in args.amis: + image = get_image(source_client, ami) - # check source ami perms, queue for fixing if necessary - source_ami = self.get_image(source_client, args.ami) - if self.has_incorrect_perms( - source_ami, args.allow_accounts, args.public): - log.info(f"Incorrect permissions for ami {args.ami} in region " - f"{source_ami.region}") - pending_perms.append((source_client, source_ami.image_id)) + if args.public is True: + source_perms[ami] = { 'groups': ['all'], 'users': [] } + elif args.public is False: + source_perms[ami] = { 'groups': [], 'users': [] } + elif args.allow_accounts: + source_perms[ami] = { 'groups': [], 'users': args.allow_accounts } + else: + log.warning(f"Will apply {source_region} {ami} permissions to its copies") + source_perms[ami] = { + 'groups': image.allowed_groups, + 'users': image.allowed_users + } - # Copy image to regions where it is missing, catalog images that need + if self.has_incorrect_perms(image, source_perms[ami]): + log.warning(f"Will update source {source_region} {ami} permissions") + pending_perms.append((source_client, ami, source_perms[ami])) + + # Copy image to regions where it's missing, queue images that need # permission fixes - for client in self.iter_regions(args.use_broker, args.region): + log.info('') + for client in iter_regions(args.use_broker, args.regions): region_name = region_from_client(client) # For logging - # Don't copy to source region - if region_name == region_from_client(source_client): + # Don't bother copying to source region + if region_name == args.source_region: continue - log.info(f"Considering region {region_name}") - image = self.get_image_with_tags(client, source_ami=args.ami) - if not image: - log.info(f"Copying ami {args.ami} from {args.source_region} " - f"to {region_name}") - ami = self.copy_image(source_client, client, args.ami) - pending_copy.append((client, ami.image_id)) - elif self.has_incorrect_perms( - image, args.allow_accounts, args.public): - log.info(f"Incorrect permissions for ami {args.ami} in region " - f"{region_name}") - pending_perms.append((client, image.image_id)) + log.info(f"Destination region {region_name}...") + for ami in args.amis: + src_log = f"* source {ami}" + image = get_image_with_tags(client, + source_ami=ami, source_region=args.source_region) + if not image: + log.info(f"{src_log} - copying to {region_name}") + ami_copy = self.copy_image(source_client, client, ami) + pending_copy.append( + (client, ami_copy.image_id, source_perms[ami])) + elif self.has_incorrect_perms(image, source_perms[ami]): + log.info(f"{src_log} - will update {image.image_id} perms") + pending_perms.append( + (client, image.image_id, source_perms[ami])) + else: + log.info(f"{src_log} - verified {image.image_id}") + log.info('') + + if pending_copy: + # seems to take at least 3m + pending_copy.append(('sleep', 180, '')) # Wait for images to copy while pending_copy: - client, id = pending_copy.pop(0) # emulate a FIFO queue - region_name = region_from_client(client) # For logging - image = self.get_image(client, id) - if image.state != AMIState.AVAILABLE: - log.info(f"Waiting for image copy for {id} to complete " - f"in {region_name}") - pending_copy.append((client, id)) - else: - pending_perms.append((client, id)) - released[region_name] = id + client, id, perms = pending_copy.pop(0) # emulate a FIFO queue + if client == 'sleep': + if not pending_copy: + continue + log.info(f"Sleeping {id}s...") + time.sleep(id) + # recheck every 30s + pending_copy.append(('sleep', 30, '')) + continue - time.sleep(30) + region_name = region_from_client(client) # For logging + image = get_image(client, id) + if image.state != AMIState.AVAILABLE: + log.info(f"- copying: {id} ({region_name})") + pending_copy.append((client, id, perms)) + else: + done_log = f"+ completed: {id} ({region_name})" + if self.has_incorrect_perms(image, perms): + log.info(f"{done_log} - will update perms") + pending_perms.append((client, id, perms)) + else: + log.info(f"{done_log} - verified perms") # Update all permissions - for client, id in pending_perms: + for client, id, perms in pending_perms: region_name = region_from_client(client) # For logging - log.info(f"Updating permissions on ami {id} in " - f"{region_name}") - image = self.get_image(client, id) - - if args.public: - image.allowed_groups = ["all"] - elif args.allow_accounts: - image.allowed_users = args.allow_accounts - + log.info(f"% updating perms: {id} ({region_name})") + image = get_image(client, id) + image.allowed_groups = perms['groups'] + image.allowed_users = perms['users'] self.update_image_permissions(client, image) - if args.out_file: - with open(args.out_file, "w") as fp: - json.dump(released, fp, indent=4) + if pending_perms: + log.info('') + + log.info('Release Completed') + + +class Releases: + + RELEASE_FIELDS = [ + 'description', 'profile', 'profile_build', 'version', 'release', + 'arch', 'revision', 'creation_date', 'end_of_life' + ] + + def __init__(self, profile=None, use_broker=None, regions=None): + self.profile = profile + self.tags = { 'profile': profile } + self.use_broker = use_broker + self.regions = regions + self.clients = {} + self.reset_images() + self.reset_releases() + + def reset_images(self): + self.images = defaultdict(list) + + def reset_releases(self): + self.releases = dictfactory() + + # TODO: separate Clients class? + def iter_clients(self): + if not self.clients: + for client in iter_regions(self.use_broker, self.regions): + region = region_from_client(client) + self.clients[region] = client + yield (region, client) else: - json.dump(released, sys.stdout, indent=4) + for region, client in self.clients.items(): + yield (region, client) -class UpdateReleases: - """Update releases YAML with info about currently existing profile AMIs + # when we're just interested in the profile's images + def load_profile_images(self, log=None): + for region, client in self.iter_clients(): + if log: log.info(f"Loading '{self.profile}' profile images from {region}...") + self.images[region] = get_images_with_tags(client, **self.tags) + + # not belonging to any profile + def load_unknown_images(self, log=None): + for region, client in self.iter_clients(): + if log: log.info(f"Loading unknown images from {region}...") + for image in get_all_images(client): + if 'profile' not in image.tags: + self.images[region].append(image) + + # build profile releases object based on loaded self.images + def build_releases(self, log=None): + for region, amis in self.images.items(): + if log: log.info(f"{region}") + for ami in amis: + if ami.profile != self.profile: + continue + + if log: log.info(f" * {ami.image_id} {ami.name}") + release = ami.release + build = ami.profile_build + name = ami.name + id = ami.image_id + build_time = int(dateutil.parser.parse(ami.creation_date).strftime('%s')) + release_obj = self.releases[release][build][name] + + for field in self.RELEASE_FIELDS: + if field not in release_obj: + release_obj[field] = getattr(ami, field) + + # ensure earliest build_time is used + if ('build_time' not in release_obj or + build_time < release_obj['build_time']): + release_obj['build_time'] = build_time + release_obj['creation_date'] = ami.creation_date + + release_obj['artifacts'][region] = id + + +class ReleasesYAML: + """Update releases/.yaml with profile's currently existing AMIs """ - - command_name = "update-releases" + command_name = "release-yaml" @staticmethod def add_args(parser): - parser.add_argument("--use-broker", action="store_true", - help="use identity broker to obtain per-region credentials") - parser.add_argument("--region", "-r", action="append", - help="regions for check, may be specified multiple times") - parser.add_argument("profile", help="name of profile to refresh") + rgroup = parser.add_mutually_exclusive_group(required=True) + rgroup.add_argument("--use-broker", action="store_true", + help="identity broker provides destination regions and credentials") + rgroup.add_argument("--region", "-r", action="append", dest="regions", + metavar="REGION", help="destination region (multiple OK)") + parser.add_argument("profile", metavar="PROFILE", help="profile name") + + def run(self, args, root, log): + release_dir = os.path.join(root, 'releases') + if not os.path.exists(release_dir): + os.makedirs(release_dir) + release_yaml = os.path.join(release_dir, f"{args.profile}.yaml") + + r = Releases( + profile = args.profile, + use_broker = args.use_broker, + regions = args.regions) + r.load_profile_images(log) + r.build_releases() + + log.info(f"Writing new {release_yaml}") + with open(release_yaml, 'w') as data: + yaml.dump(undictfactory(r.releases), data, sort_keys=False) + + +class ReleasesReadme: + """Build releases/README_.md from releases/.yaml + """ + command_name = "release-readme" + + SECTION_TPL = textwrap.dedent(""" + ### Alpine Linux {release} ({date}) +
click to show/hide

+ + {rows} + +

+ """) + + AMI_TPL = ( + " [{id}](https://{r}.console.aws.amazon.com/ec2/home" + "#Images:visibility=public-images;imageId={id}) " + "([launch](https://{r}.console.aws.amazon.com/ec2/home" + "#launchAmi={id})) |" + ) @staticmethod - def check_args(args): - if not args.use_broker and not args.region: - return ['Use broker or region must be specified'] + def add_args(parser): + parser.add_argument("profile", metavar="PROFILE", help="profile name") - if args.use_broker and args.region: - return ['Broker and region flags are mutually exclusive'] + @staticmethod + def extract_ver(x): + return StrictVersion("0.0" if x["release"] == "edge" else x["release"]) + + def resolve_sections(self, release_data, log): + sects = dictfactory() + for release, builds in sorted(release_data.items(), reverse=True): + version = '.'.join(release.split('.')[0:2]) + if version in sects: + continue + for build, revisions in builds.items(): + ver = sects[version] + ver['release'] = release + name, info = sorted( + revisions.items(), + key=lambda x: x[1]['build_time'], + reverse=True)[0] + if name in ver['builds']: + log.warning( + f"Duplicate AMI '{name}' in builds " + f"'{info['profile_build']} and " + f"'{ver['builds'][name]['build']}") + ver['builds'][name] = { + 'build': info['profile_build'], + 'built': int(info['build_time']), + 'amis': info['artifacts'] + } + self.sections = sorted( + undictfactory(sects).values(), + key=self.extract_ver, + reverse=True) + + def get_ami_markdown(self): + ami_list = "## AMIs\n" + + for section in self.sections: + built = 0 + regions = [] + rows = ["| Region |", "| ------ |"] + + for name, info in sorted(section['builds'].items()): + rows[0] += f" {name} |" + rows[1] += " --- |" + regions = set(regions) | set(info['amis'].keys()) + built = max(built, info['built']) + + for region in sorted(regions): + row = f"| {region} |" + for name, info in sorted(section['builds'].items()): + amis = info['amis'] + if region in amis: + row += self.AMI_TPL.format(r=region, id=amis[region]) + else: + row += ' |' + rows.append(row) + + ami_list += self.SECTION_TPL.format( + release=section['release'].capitalize(), + date=datetime.utcfromtimestamp(built).date(), + rows="\n".join(rows)) + + return ami_list def run(self, args, root, log): profile = args.profile - tags = { 'profile': args.profile } - release_dir = os.path.join(root, "releases") - if not os.path.exists(release_dir): - os.makedirs(release_dir) - release_yaml = os.path.join(release_dir, f"{profile}.yaml") + profile_file = os.path.join(release_dir, f"{profile}.yaml") + with open(profile_file, "r") as data: + self.resolve_sections(yaml.safe_load(data), log) - # TODO: break this off into its own piece for reuse for pruning too - releases = {} - for client in ReleaseAMIs().iter_regions(args.use_broker, args.region): - region_name = region_from_client(client) # For logging - log.info(f"Getting {profile} AMIs from {region_name}...") - amis = ReleaseAMIs().get_images_with_tags(client, **tags) + ami_markdown = self.get_ami_markdown() - for ami in amis: - build = ami.profile_build - release = ami.release - name = ami.name - ami_id = ami.image_id + readme = "" + readme_md = os.path.join(release_dir, f"README_{profile}.md") + action = "Updated" + if os.path.exists(readme_md): + with open(readme_md, "r") as file: + readme = file.read() + else: + action = "Created" - log.info(f" * {ami_id} {name}") + re_images = re.compile(r"## AMIs.*\Z", flags=re.DOTALL) + if re_images.search(readme): + readme = re_images.sub(ami_markdown, readme) + else: + log.warning("appending") + readme += "\n" + ami_markdown - if build not in releases: - releases[build] = {} + with open(readme_md, "w") as file: + file.write(readme) - if release not in releases[build]: - releases[build][release] = {} - - if name not in releases[build][release]: - releases[build][release][name] = { - 'description': ami.description, - 'profile': profile, - 'profile_build': build, - 'version': ami.version, - 'release': ami.release, - 'arch': ami.arch, - 'revision': ami.revision, - 'end_of_life': ami.end_of_life, - 'build_time': dateutil.parser.parse(ami.creation_date).strftime('%s'), - # TODO? source_ami, source_region - 'artifacts': {} - } - - releases[build][release][name]['artifacts'][region_name] = ami_id - - log.info(f"Writing new {release_yaml}") - with open(release_yaml, "w") as data: - yaml.dump(releases, data, sort_keys=False) + log.info(f"{action} {readme_md}") -class ConvertPackerJSON: - """Convert packer.conf to packer.json +class PruneAMIs: + """Prune Released AMIs """ - - command_name = "convert-packer-config" + command_name = "prune" @staticmethod def add_args(parser): - pass + LEVEL_HELP = textwrap.dedent("""\ + 'revision' - prune old AMI revisions (x.y.z-r#); + 'release' - prune old AMI releases (x.y.#); + 'end-of-life' - prune end-of-life AMI versions (#.#); + 'UNKNOWN' - prune unknown AMIs (no profile tag) + """) - def run(self, args, root, log): - source = os.path.join(root, "packer.conf") - dest = os.path.join(root, "build", "packer.json") - - pyhocon.converter.HOCONConverter.convert_from_file( - source, dest, "json", 2, False) - - -class FullBuild: - """Make all of the AMIs for a profile - """ - - command_name = "amis" - - @staticmethod - def add_args(parser): - parser.add_argument("--region", "-r", default="us-west-2", - help="region to use for build") - parser.add_argument("--use-broker", action="store_true", + parser.add_argument("level", metavar='LEVEL', + choices=["revision", "release", "end-of-life", "UNKNOWN"], + help=LEVEL_HELP) + rgroup = parser.add_mutually_exclusive_group(required=True) + rgroup.add_argument("--use-broker", action="store_true", help="use identity broker to obtain per-region credentials") - parser.add_argument("profile", help="name of profile to build") - parser.add_argument("builds", nargs="*", - help="name of builds within a profile to build") + rgroup.add_argument("--region", "-r", metavar='REGION', dest='regions', + action="append", help="regions to prune, may be specified multiple times") + parser.add_argument("profile", metavar='PROFILE', + help="profile to prune") + parser.add_argument("builds", metavar='BUILD', + nargs="*", help="build(s) within profile to prune") + agroup = parser.add_mutually_exclusive_group() + agroup.add_argument( + '--keep', metavar='NUM', type=int, default=0, + help='keep NUM most-recent additional otherwise-pruneable per LEVEL') + agroup.add_argument('--defer-eol', metavar='DAYS', type=int, default=0, + help='defer end-of-life pruning for additional days') + parser.add_argument( + '--no-pretend', action='store_true', help='actually prune images') + + @staticmethod + def check_args(args): + if args.level != 'end-of-life' and args.defer_eol != 0: + return ["--defer-eol may only be used with 'end-of-life' pruning."] + if args.keep < 0: + return ["Only non-negative integers are valid for --keep."] + + def __init__(self): + self.pruneable = dictfactory() + + def find_pruneable(self, r, args, log): + level = args.level + builds = args.builds + keep = args.keep + defer_eol = args.defer_eol + + now = datetime.utcnow() - timedelta(days=args.defer_eol) + + # build releases from profile images + r.load_profile_images(log) + r.build_releases() + + # scan for pruning criteria + criteria = dictfactory() + for release, rdata in r.releases.items(): + for build, bdata in rdata.items(): + if builds and build not in builds: + continue + for ami_name, info in bdata.items(): + version = info['version'] + built = info['build_time'] + eol = datetime.fromisoformat(info['end_of_life']) + # default: level == 'release' + basis = version + if level == 'revision': + basis = release + elif level == 'end-of-life': + # not enough in common with revision/release + if build not in criteria[version]: + criteria[version][build] = [now] + if eol < now and eol not in criteria[version][build]: + criteria[version][build].append(eol) + criteria[version][build].sort(reverse=True) + continue + # revsion/release have enough commonality + if build not in criteria[basis]: + criteria[basis][build] = [built] + elif built not in criteria[basis][build]: + criteria[basis][build].append(built) + criteria[basis][build].sort(reverse=True) + + # scan again to determine what doesn't make the cut + for release, rdata in r.releases.items(): + for build, bdata in rdata.items(): + if builds and build not in builds: + continue + for ami_name, info in bdata.items(): + version = info['version'] + built = info['build_time'] + eol = datetime.fromisoformat(info['end_of_life']) + # default: level == 'release' + basis = version + value = built + if level == 'revision': + basis = release + elif level == 'end-of-life': + value = eol + c = criteria[basis][build] + if keep < len(c) and value < c[keep]: + for region, ami in info['artifacts'].items(): + self.pruneable[region][ami] = { + 'name': ami_name, + } + + # populate AMI creation_date and snapshot_id from Release().images + for region, images in r.images.items(): + for image in images: + if image.image_id in self.pruneable[region]: + p = self.pruneable[region][image.image_id] + p['name'] = image.name + p['creation_date'] = dateutil.parser.parse( + image.creation_date).strftime('%Y-%m-%d') + p['snapshot_id'] = image.snapshot_id + + def all_unknown_pruneable(self, r, log): + r.load_unknown_images(log) + for region, images in r.images.items(): + for image in images: + self.pruneable[region][image.image_id] = { + 'name': image.name, + 'creation_date': dateutil.parser.parse( + image.creation_date).strftime('%Y-%m-%d'), + 'snapshot_id': image.snapshot_id + } def run(self, args, root, log): - log.info("Converting packer.conf to JSON...") - ConvertPackerJSON().run(args, root, log) + # instantiate Releases object + r = Releases( + profile=args.profile, + use_broker=args.use_broker, + regions=args.regions) - log.info("Resolving profiles...") - ResolveProfiles().resolve_profiles([args.profile], root) + if args.level == 'UNKNOWN': + self.all_unknown_pruneable(r, log) + else: + self.find_pruneable(r, args, log) - log.info("Running packer...") - MakeAMIs().run(args, root, log) + for region, amis in sorted(self.pruneable.items()): + r_str = f"{args.level} AMIs in {region}" + if not amis: + log.info(f"No pruneable {r_str}.") + continue + if args.no_pretend: + log.error(f"REMOVING {r_str}:") + else: + log.warning(f"Removable {r_str}:") + for ami, info in sorted(amis.items(), key=lambda x: x[1]['creation_date']): + a_str = f" * {ami} ({info['creation_date']}) {info['name']}" + if args.no_pretend: + log.warning(a_str) + r.clients[region].deregister_image(ImageId=ami) + r.clients[region].delete_snapshot(SnapshotId=info['snapshot_id']) + else: + log.info(a_str) def find_repo_root(): From 644ac6b2b71bcbe5a3803a559d37268d0e1ab710 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Thu, 14 Jan 2021 18:35:59 +0000 Subject: [PATCH 104/125] These are now official --- README.md | 4 ++-- releases/README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 90c514f..8070ab8 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Alpine Linux EC2 AMI Builder -**NOTE: This is not an official AWS or Alpine project. This is community built -and supported.** +These are the official Alpine AWS AMIs. For an index of images see the +[Alpine Website](https://alpinelinux.org/cloud/). ## Pre-Built AMIs diff --git a/releases/README.md b/releases/README.md index 0115786..f39a14b 100644 --- a/releases/README.md +++ b/releases/README.md @@ -1,7 +1,7 @@ # Alpine Linux EC2 AMIs -**These are not official AWS or Alpine images. They are community built and -supported.** +These are the official Alpine AWS AMIs. For an index of images see the +[Alpine Website](https://alpinelinux.org/cloud/). These AMIs should work with most EC2 features -- such as ENIs (Elastic Network Interfaces) and NVMe EBS (Elastic Block Storage) volumes. If you find any From 2bf6727f6759fecfa6c4b560a062ea3b2972ffa7 Mon Sep 17 00:00:00 2001 From: tomalok Date: Thu, 14 Jan 2021 23:53:40 -0800 Subject: [PATCH 105/125] Release Alpine 3.13.0 (#108) 3.13.0 release * add version 3.13 profile * 3.13 end-of-life is 2022-11-01 * note we're an official Alpine project now! * releases/alpine.yaml has been "--trim release"'d * updated releases/README.md scripts/builder.py * fix ReleaseReadme() to not die when release contains "_rc" * add --trim to releases-yaml * tweak some --help for release-yaml and prune scripts/setup-ami * explicitly lock AMI root account --- README.md | 12 +- profiles/alpine.conf | 22 +- profiles/version/3.13 | 15 + profiles/version/current | 2 +- releases/README.md | 100 ++-- releases/alpine.yaml | 1059 +++++--------------------------------- scripts/builder.py | 71 ++- scripts/setup-ami | 3 + 8 files changed, 273 insertions(+), 1011 deletions(-) create mode 100644 profiles/version/3.13 diff --git a/README.md b/README.md index 8070ab8..3ca129a 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ # Alpine Linux EC2 AMI Builder -These are the official Alpine AWS AMIs. For an index of images see the +These are the official Alpine AWS AMIs. For an index of images see the [Alpine Website](https://alpinelinux.org/cloud/). ## Pre-Built AMIs -***To get started with one of our pre-built minimalist AMIs, please refer to the -[README](releases/README.md) in the [releases](releases) subdirectory.*** +***To get started with a pre-built minimalist AMIs, visit +https://alpinelinux.org/cloud, or the [README](releases/README.md) in the +[releases](releases) subdirectory of this repo.*** Alternately, with the right filters, you can query the EC2 API to programmatically find our most recent AMIs. For example, using the `aws` command line tool... @@ -87,16 +88,13 @@ your profile's `releases/.yaml`. There are three different levels of pruning: * `revision` - keep only the latest revision for each release * `release` - keep only the latest release for each version -* `version` - remove any end-of-life versions +* `end-of-life` - remove any end-of-life versions To prune a profile (or optionally one build target of a profile)... ``` ./scripts/builder.py prune-amis [] ``` -Any AMIs in the account which are "unknown" (to the profile/build target, at -least) will be called out as such, but will not be pruned. - ### Updating the Release README This make target updates the [releases README](releases/README.md), primarily diff --git a/profiles/alpine.conf b/profiles/alpine.conf index 515eab1..16e031a 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -1,6 +1,7 @@ ### Profile for Building the Publically-Available Alpine Linux AMIs # vim: ts=2 et: +version-3_13 { include required("version/3.13") } version-3_12 { include required("version/3.12") } version-3_11 { include required("version/3.11") } version-3_10 { include required("version/3.10") } @@ -9,9 +10,12 @@ arch-x86_64 { include required("arch/x86_64") } arch-aarch64 { include required("arch/aarch64") } # profile vars -alpine { +community { ami_desc_suffix = " - https://github.com/mcrute/alpine-ec2-ami" } +official { + ami_desc_suffix = " - https://alpinelinux.org/cloud" +} fix_root_resize { # https://github.com/mcrute/tiny-ec2-bootstrap/pull/16 @@ -24,12 +28,14 @@ fix_root_resize { # Build definitions BUILDS { - # merge version, arch, profile; add { revision = "r1" } if needed - edge-x86_64 = ${version-edge} ${arch-x86_64} ${alpine} - v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${alpine} - v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${alpine} - v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${alpine} { revision = "r1" } + # merge version, arch, profile; add per-build { revision = "r1" } if needed + edge-x86_64 = ${version-edge} ${arch-x86_64} ${official} + v3_13-x86_64 = ${version-3_13} ${arch-x86_64} ${official} + v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${community} + v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${community} + v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${community} { revision = "r1" } - edge-aarch64 = ${version-edge} ${arch-aarch64} ${alpine} - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${alpine} ${fix_root_resize} + edge-aarch64 = ${version-edge} ${arch-aarch64} ${official} + v3_13-aarch64 = ${version-3_13} ${arch-aarch64} ${official} + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${community} ${fix_root_resize} } diff --git a/profiles/version/3.13 b/profiles/version/3.13 new file mode 100644 index 0000000..d39b248 --- /dev/null +++ b/profiles/version/3.13 @@ -0,0 +1,15 @@ +### version 3.13 vars +# vim: ts=2 et: + +# based on current +include required("../base/current") + +# add edge-specific tweaks... +version = "3.13" +release = "3.13.0" +end_of_life = "2022-11-01" + +repos { + "http://dl-cdn.alpinelinux.org/alpine/v3.13/main" = true + "http://dl-cdn.alpinelinux.org/alpine/v3.13/community" = true +} diff --git a/profiles/version/current b/profiles/version/current index fdcfcfd..3a4f41e 120000 --- a/profiles/version/current +++ b/profiles/version/current @@ -1 +1 @@ -3.12 \ No newline at end of file +3.13 \ No newline at end of file diff --git a/releases/README.md b/releases/README.md index f39a14b..11d157d 100644 --- a/releases/README.md +++ b/releases/README.md @@ -1,6 +1,6 @@ # Alpine Linux EC2 AMIs -These are the official Alpine AWS AMIs. For an index of images see the +These are the official Alpine AWS AMIs. For an index of images see the [Alpine Website](https://alpinelinux.org/cloud/). These AMIs should work with most EC2 features -- such as ENIs (Elastic Network @@ -34,8 +34,38 @@ The more popular [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is currently not supported on Alpine Linux. If `cloud-init` support is important to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). +***These AMIs are also available by visiting https://alpinelinux.org/cloud*** + ## AMIs +### Alpine Linux 3.13.0 (2021-01-15) +
click to show/hide

+ +| Region | alpine-ami-3.13.0-aarch64-r0 | alpine-ami-3.13.0-x86_64-r0 | +| ------ | --- | --- | +| af-south-1 | [ami-054c33247885ebc3d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054c33247885ebc3d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054c33247885ebc3d)) | [ami-06b4b4820282bd4c4](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b4b4820282bd4c4) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b4b4820282bd4c4)) | +| ap-east-1 | [ami-0e7fa2711ac2592e1](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e7fa2711ac2592e1) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e7fa2711ac2592e1)) | [ami-0d7ec3bccd07853b0](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d7ec3bccd07853b0) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d7ec3bccd07853b0)) | +| ap-northeast-1 | [ami-0abe1014344984843](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0abe1014344984843) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0abe1014344984843)) | [ami-0297111f80ad01c83](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0297111f80ad01c83) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0297111f80ad01c83)) | +| ap-northeast-2 | [ami-0daa039d88c3ca039](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0daa039d88c3ca039) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0daa039d88c3ca039)) | [ami-01a933965dcf06052](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01a933965dcf06052) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01a933965dcf06052)) | +| ap-south-1 | [ami-0f24df3e1a946e396](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f24df3e1a946e396) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f24df3e1a946e396)) | [ami-00362eefac99bd28d](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00362eefac99bd28d) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00362eefac99bd28d)) | +| ap-southeast-1 | [ami-03ec7671226fce7ac](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ec7671226fce7ac) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ec7671226fce7ac)) | [ami-0c8ee63c1901c2eb0](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c8ee63c1901c2eb0) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c8ee63c1901c2eb0)) | +| ap-southeast-2 | [ami-0886c6e086b4865f3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0886c6e086b4865f3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0886c6e086b4865f3)) | [ami-08ed66c1878f09560](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08ed66c1878f09560) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08ed66c1878f09560)) | +| ca-central-1 | [ami-01a61cfe59f803189](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01a61cfe59f803189) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01a61cfe59f803189)) | [ami-08177f9696f9ad4a6](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08177f9696f9ad4a6) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08177f9696f9ad4a6)) | +| eu-central-1 | [ami-01c207f63c8675daf](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c207f63c8675daf) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c207f63c8675daf)) | [ami-03a8a49ba86477171](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03a8a49ba86477171) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03a8a49ba86477171)) | +| eu-north-1 | [ami-0bf4c55e1940c81f6](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf4c55e1940c81f6) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf4c55e1940c81f6)) | [ami-0a58b79ae3d5dc225](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a58b79ae3d5dc225) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a58b79ae3d5dc225)) | +| eu-south-1 | [ami-037c5a438633e5589](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-037c5a438633e5589) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-037c5a438633e5589)) | [ami-0957b53ee158d78f7](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0957b53ee158d78f7) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0957b53ee158d78f7)) | +| eu-west-1 | [ami-00346dd824f03912d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00346dd824f03912d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00346dd824f03912d)) | [ami-0fc784eae453cde56](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc784eae453cde56) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc784eae453cde56)) | +| eu-west-2 | [ami-030c2f6bf9bd32aaa](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030c2f6bf9bd32aaa) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-030c2f6bf9bd32aaa)) | [ami-0f0f0da204290dc46](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f0f0da204290dc46) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f0f0da204290dc46)) | +| eu-west-3 | [ami-00e775ed7d5d97ab6](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e775ed7d5d97ab6) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00e775ed7d5d97ab6)) | [ami-0cba38171c14bfcc2](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cba38171c14bfcc2) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0cba38171c14bfcc2)) | +| me-south-1 | [ami-0118ef914ed3873ec](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0118ef914ed3873ec) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0118ef914ed3873ec)) | [ami-0fb7bc8a6dd850c6c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb7bc8a6dd850c6c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb7bc8a6dd850c6c)) | +| sa-east-1 | [ami-030aade343c7bffe6](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030aade343c7bffe6) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-030aade343c7bffe6)) | [ami-09a48625b514fdcd9](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a48625b514fdcd9) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a48625b514fdcd9)) | +| us-east-1 | [ami-059c905481a02fe87](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059c905481a02fe87) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c905481a02fe87)) | [ami-0f7b12c17a0b4bade](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7b12c17a0b4bade) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7b12c17a0b4bade)) | +| us-east-2 | [ami-05f1c6366468e331d](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f1c6366468e331d) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05f1c6366468e331d)) | [ami-0a288d17effc94a76](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a288d17effc94a76) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a288d17effc94a76)) | +| us-west-1 | [ami-0fe276a497cab0aa9](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe276a497cab0aa9) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe276a497cab0aa9)) | [ami-01c6cef27f05be7a5](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c6cef27f05be7a5) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c6cef27f05be7a5)) | +| us-west-2 | [ami-0cbd458f29aa897b3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cbd458f29aa897b3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cbd458f29aa897b3)) | [ami-0d0055a3bfbf5a966](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0055a3bfbf5a966) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0055a3bfbf5a966)) | + +

+ ### Alpine Linux 3.12.3 (2020-12-19)
click to show/hide

@@ -120,54 +150,30 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux 3.9.6 (2020-04-26) +### Alpine Linux Edge (2021-01-15)
click to show/hide

-| Region | alpine-ami-3.9.6-x86_64-r0 | -| ------ | --- | -| ap-northeast-1 | [ami-0133f3a571f684178](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0133f3a571f684178) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0133f3a571f684178)) | -| ap-northeast-2 | [ami-0f9ad7c51e14bdc3d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ad7c51e14bdc3d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ad7c51e14bdc3d)) | -| ap-south-1 | [ami-00af726ec2f4077a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00af726ec2f4077a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00af726ec2f4077a2)) | -| ap-southeast-1 | [ami-0d52e9d7f91ca051c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d52e9d7f91ca051c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d52e9d7f91ca051c)) | -| ap-southeast-2 | [ami-054360648343b66bc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054360648343b66bc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-054360648343b66bc)) | -| ca-central-1 | [ami-0583a99f342097b6c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0583a99f342097b6c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0583a99f342097b6c)) | -| eu-central-1 | [ami-051eec0106a08df6d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051eec0106a08df6d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051eec0106a08df6d)) | -| eu-north-1 | [ami-07a2b23059054aea3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a2b23059054aea3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a2b23059054aea3)) | -| eu-west-1 | [ami-0eb2b54ab4d09eb80](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb2b54ab4d09eb80) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb2b54ab4d09eb80)) | -| eu-west-2 | [ami-08c87b358b24d1df3](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c87b358b24d1df3) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08c87b358b24d1df3)) | -| eu-west-3 | [ami-00a425aa20737343e](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a425aa20737343e) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00a425aa20737343e)) | -| sa-east-1 | [ami-0ea679407da47b78a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ea679407da47b78a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea679407da47b78a)) | -| us-east-1 | [ami-004f0550310a2d7aa](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-004f0550310a2d7aa) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-004f0550310a2d7aa)) | -| us-east-2 | [ami-045a2cc3fe272caee](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045a2cc3fe272caee) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-045a2cc3fe272caee)) | -| us-west-1 | [ami-026a54e52daea1233](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026a54e52daea1233) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026a54e52daea1233)) | -| us-west-2 | [ami-0b933475d362cbfab](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b933475d362cbfab) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b933475d362cbfab)) | - -

- -### Alpine Linux Edge (2020-12-31) -
click to show/hide

- -| Region | alpine-ami-edge-aarch64-20201231045833 | alpine-ami-edge-x86_64-20201231045833 | +| Region | alpine-ami-edge-aarch64-20210115045210 | alpine-ami-edge-x86_64-20210115045210 | | ------ | --- | --- | -| af-south-1 | [ami-0b183c56bd131ed3a](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b183c56bd131ed3a) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b183c56bd131ed3a)) | [ami-011743658a67dd855](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011743658a67dd855) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011743658a67dd855)) | -| ap-east-1 | [ami-08b75758d2db7dfca](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b75758d2db7dfca) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b75758d2db7dfca)) | [ami-0d216cd3d020468f4](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d216cd3d020468f4) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d216cd3d020468f4)) | -| ap-northeast-1 | [ami-0e4e372058199d5ef](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e4e372058199d5ef) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e4e372058199d5ef)) | [ami-080ee407fba860248](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-080ee407fba860248) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-080ee407fba860248)) | -| ap-northeast-2 | [ami-0b1cb303b405d3097](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1cb303b405d3097) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1cb303b405d3097)) | [ami-0f9ab3123bd36ee7c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ab3123bd36ee7c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ab3123bd36ee7c)) | -| ap-south-1 | [ami-03dd8e847479cf769](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dd8e847479cf769) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dd8e847479cf769)) | [ami-0180ec8a9b842fb7b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0180ec8a9b842fb7b) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0180ec8a9b842fb7b)) | -| ap-southeast-1 | [ami-0f63ec4ee42f919af](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f63ec4ee42f919af) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f63ec4ee42f919af)) | [ami-068588a4eea7ad3a3](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068588a4eea7ad3a3) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068588a4eea7ad3a3)) | -| ap-southeast-2 | [ami-0cfb54d89d91b4588](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cfb54d89d91b4588) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cfb54d89d91b4588)) | [ami-0ae9daf7a58df4934](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ae9daf7a58df4934) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ae9daf7a58df4934)) | -| ca-central-1 | [ami-0028affab88bac113](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0028affab88bac113) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0028affab88bac113)) | [ami-07bcbb6f6af86f511](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bcbb6f6af86f511) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07bcbb6f6af86f511)) | -| eu-central-1 | [ami-0a3002a25422450ec](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3002a25422450ec) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3002a25422450ec)) | [ami-052c85ff0f5526102](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052c85ff0f5526102) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052c85ff0f5526102)) | -| eu-north-1 | [ami-0164bce0c7d9f1741](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0164bce0c7d9f1741) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0164bce0c7d9f1741)) | [ami-050c04068b77339c8](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-050c04068b77339c8) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-050c04068b77339c8)) | -| eu-south-1 | [ami-02fe886c007469453](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fe886c007469453) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fe886c007469453)) | [ami-0d0c75892f636d022](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0c75892f636d022) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0c75892f636d022)) | -| eu-west-1 | [ami-052c81600bc9265a2](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052c81600bc9265a2) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052c81600bc9265a2)) | [ami-05e2518be7f8858dd](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e2518be7f8858dd) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05e2518be7f8858dd)) | -| eu-west-2 | [ami-0dbd0469355fb628b](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dbd0469355fb628b) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0dbd0469355fb628b)) | [ami-0feefbd48a8e39699](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0feefbd48a8e39699) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0feefbd48a8e39699)) | -| eu-west-3 | [ami-0a8f99b7d240e427c](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8f99b7d240e427c) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8f99b7d240e427c)) | [ami-0423ae73dd6a792bf](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0423ae73dd6a792bf) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0423ae73dd6a792bf)) | -| me-south-1 | [ami-03e34a8c3f39d75a8](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e34a8c3f39d75a8) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03e34a8c3f39d75a8)) | [ami-04649d2d92b0365f7](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04649d2d92b0365f7) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04649d2d92b0365f7)) | -| sa-east-1 | [ami-0c049c43758d1c6ae](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c049c43758d1c6ae) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c049c43758d1c6ae)) | [ami-0a9fcc32957c9f42f](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a9fcc32957c9f42f) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a9fcc32957c9f42f)) | -| us-east-1 | [ami-0d4bf5cbd324d086a](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d4bf5cbd324d086a) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d4bf5cbd324d086a)) | [ami-047669701018a01ac](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-047669701018a01ac) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-047669701018a01ac)) | -| us-east-2 | [ami-07434f0295f2816c8](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07434f0295f2816c8) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07434f0295f2816c8)) | [ami-0f811ec590362fd5e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f811ec590362fd5e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f811ec590362fd5e)) | -| us-west-1 | [ami-0e2ddb3719b40d721](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2ddb3719b40d721) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2ddb3719b40d721)) | [ami-02a9a916ff04c9553](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a9a916ff04c9553) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02a9a916ff04c9553)) | -| us-west-2 | [ami-07ab85086738d655c](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ab85086738d655c) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07ab85086738d655c)) | [ami-003decaff69790d71](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-003decaff69790d71) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-003decaff69790d71)) | +| af-south-1 | [ami-0f8fb312016a1a357](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f8fb312016a1a357) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f8fb312016a1a357)) | [ami-088e84ce1b1f411be](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088e84ce1b1f411be) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-088e84ce1b1f411be)) | +| ap-east-1 | [ami-03ec11f3e7e2bf55f](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ec11f3e7e2bf55f) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ec11f3e7e2bf55f)) | [ami-0aa6df701213dd27d](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aa6df701213dd27d) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aa6df701213dd27d)) | +| ap-northeast-1 | [ami-0447adc048c4c3e14](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0447adc048c4c3e14) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0447adc048c4c3e14)) | [ami-0b279dbdd926b42b5](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b279dbdd926b42b5) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b279dbdd926b42b5)) | +| ap-northeast-2 | [ami-0611bb744aad58842](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0611bb744aad58842) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0611bb744aad58842)) | [ami-02dec744f61097ee9](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02dec744f61097ee9) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02dec744f61097ee9)) | +| ap-south-1 | [ami-06674e2639583de71](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06674e2639583de71) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06674e2639583de71)) | [ami-0497a4347255254b0](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0497a4347255254b0) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0497a4347255254b0)) | +| ap-southeast-1 | [ami-0c56255f7ce3c0d1a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c56255f7ce3c0d1a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c56255f7ce3c0d1a)) | [ami-0fa75324c26109981](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa75324c26109981) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa75324c26109981)) | +| ap-southeast-2 | [ami-02185fb296e9a225e](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02185fb296e9a225e) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02185fb296e9a225e)) | [ami-05e33de43c5e5cebd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e33de43c5e5cebd) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05e33de43c5e5cebd)) | +| ca-central-1 | [ami-045744471a57317f8](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045744471a57317f8) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-045744471a57317f8)) | [ami-0d97a3177809ea765](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d97a3177809ea765) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d97a3177809ea765)) | +| eu-central-1 | [ami-052b6d764d2d332ee](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052b6d764d2d332ee) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052b6d764d2d332ee)) | [ami-0b5920487b9821f76](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b5920487b9821f76) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b5920487b9821f76)) | +| eu-north-1 | [ami-092a831a6f4620ccf](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092a831a6f4620ccf) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092a831a6f4620ccf)) | [ami-035e585736b7de816](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035e585736b7de816) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035e585736b7de816)) | +| eu-south-1 | [ami-0eb47307947090baa](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb47307947090baa) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb47307947090baa)) | [ami-0a2bcd6981f75dc6e](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2bcd6981f75dc6e) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2bcd6981f75dc6e)) | +| eu-west-1 | [ami-0693b5d091c075179](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0693b5d091c075179) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0693b5d091c075179)) | [ami-0ff868d68ffce1c18](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ff868d68ffce1c18) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ff868d68ffce1c18)) | +| eu-west-2 | [ami-0e8f54b786204d875](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e8f54b786204d875) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e8f54b786204d875)) | [ami-0bb797cec5432486e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb797cec5432486e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb797cec5432486e)) | +| eu-west-3 | [ami-0c1ce7d53e27f3b38](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c1ce7d53e27f3b38) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0c1ce7d53e27f3b38)) | [ami-056ec883bb7b55fa6](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-056ec883bb7b55fa6) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-056ec883bb7b55fa6)) | +| me-south-1 | [ami-0f85def6c07158768](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f85def6c07158768) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f85def6c07158768)) | [ami-09196a0c25b2b5745](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09196a0c25b2b5745) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09196a0c25b2b5745)) | +| sa-east-1 | [ami-000c9c8abdea00a15](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-000c9c8abdea00a15) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-000c9c8abdea00a15)) | [ami-0a010a494fd6b4198](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a010a494fd6b4198) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a010a494fd6b4198)) | +| us-east-1 | [ami-0fa8aafbaab073172](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa8aafbaab073172) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa8aafbaab073172)) | [ami-0f6d30ffd4b5446ff](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6d30ffd4b5446ff) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6d30ffd4b5446ff)) | +| us-east-2 | [ami-0bb800d8bde3fbfd3](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb800d8bde3fbfd3) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb800d8bde3fbfd3)) | [ami-076cd7138c628dab2](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-076cd7138c628dab2) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-076cd7138c628dab2)) | +| us-west-1 | [ami-0951a311c73074592](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0951a311c73074592) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0951a311c73074592)) | [ami-072a48e68753aedb0](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-072a48e68753aedb0) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-072a48e68753aedb0)) | +| us-west-2 | [ami-0d0947ece674f16d0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0947ece674f16d0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0947ece674f16d0)) | [ami-0d96c10dc78128cb5](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d96c10dc78128cb5) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d96c10dc78128cb5)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 2a0f2f6..b8562fc 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,361 +1,3 @@ -edge: - edge-x86_64: - alpine-ami-edge-x86_64-20201231045833: - description: Alpine Linux edge x86_64 20201231045833 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20201231045833' - creation_date: '2020-12-31T05:01:00.000Z' - end_of_life: '2021-01-01T04:58:33' - build_time: 1609419660 - artifacts: - af-south-1: ami-011743658a67dd855 - eu-north-1: ami-050c04068b77339c8 - ap-south-1: ami-0180ec8a9b842fb7b - eu-west-3: ami-0423ae73dd6a792bf - eu-west-2: ami-0feefbd48a8e39699 - eu-south-1: ami-0d0c75892f636d022 - eu-west-1: ami-05e2518be7f8858dd - ap-northeast-2: ami-0f9ab3123bd36ee7c - me-south-1: ami-04649d2d92b0365f7 - ap-northeast-1: ami-080ee407fba860248 - sa-east-1: ami-0a9fcc32957c9f42f - ca-central-1: ami-07bcbb6f6af86f511 - ap-east-1: ami-0d216cd3d020468f4 - ap-southeast-1: ami-068588a4eea7ad3a3 - ap-southeast-2: ami-0ae9daf7a58df4934 - eu-central-1: ami-052c85ff0f5526102 - us-east-1: ami-047669701018a01ac - us-east-2: ami-0f811ec590362fd5e - us-west-1: ami-02a9a916ff04c9553 - us-west-2: ami-003decaff69790d71 - alpine-ami-edge-x86_64-20201219023017: - description: Alpine Linux edge x86_64 20201219023017 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20201219023017' - creation_date: '2020-12-19T02:41:55.000Z' - end_of_life: '2020-12-20T02:30:17' - build_time: 1608374515 - artifacts: - af-south-1: ami-022ac59bcd87cd5dc - eu-north-1: ami-0a0db680071981da9 - ap-south-1: ami-03d1da261501ebbdc - eu-west-3: ami-07d44564a98b9fad6 - eu-west-2: ami-006f06c7bf63c7cf9 - eu-south-1: ami-03eb2aa305b859ceb - eu-west-1: ami-0c6dc60db5f0a3398 - ap-northeast-2: ami-06d5011c4ae6a7166 - me-south-1: ami-00c3f62d4f482de1a - ap-northeast-1: ami-0d17941cd28072770 - sa-east-1: ami-0cf3e2b703ef1767e - ca-central-1: ami-0b5e13380e240d13c - ap-east-1: ami-0c146b06f89e12aa9 - ap-southeast-1: ami-0b4cbe54908f69a4d - ap-southeast-2: ami-09bc28136809b7dd0 - eu-central-1: ami-0dd96a983af0fa240 - us-east-1: ami-0472ae2f8f4bf32df - us-east-2: ami-0f1724b67cf38a4d3 - us-west-1: ami-09eb6f67937a05178 - us-west-2: ami-09d1611a460f7db7e - alpine-ami-edge-x86_64-20201229232619: - description: Alpine Linux edge x86_64 20201229232619 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20201229232619' - creation_date: '2020-12-29T23:29:13.000Z' - end_of_life: '2020-12-30T23:26:19' - build_time: 1609313353 - artifacts: - af-south-1: ami-06d08d91f91f63804 - eu-north-1: ami-00886727f059b0afe - ap-south-1: ami-0cb996c5d5d55aa32 - eu-west-3: ami-0a9ab81ddd9fdd793 - eu-west-2: ami-0da5d25c4237ce335 - eu-south-1: ami-0d054749ede29dad2 - eu-west-1: ami-034b257e9f49bccd3 - ap-northeast-2: ami-0ee08d2da0b365caf - me-south-1: ami-08b358b4f6cc096a5 - ap-northeast-1: ami-07fdc870b8939e163 - sa-east-1: ami-0f0a9a43ade16b9f6 - ca-central-1: ami-003a2a13710a487e0 - ap-east-1: ami-0f9ca91da6150b03a - ap-southeast-1: ami-016403a889f9108c9 - ap-southeast-2: ami-0c809f2c61684080d - eu-central-1: ami-05592a5b5a37344b5 - us-east-1: ami-0710a2b23bc39e67a - us-east-2: ami-069a7171fde662e9b - us-west-1: ami-076dc2e3957834509 - us-west-2: ami-0fd667e7abfe3b6d2 - alpine-ami-edge-x86_64-20201229214956: - description: Alpine Linux edge x86_64 20201229214956 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20201229214956' - creation_date: '2020-12-29T21:53:05.000Z' - end_of_life: '2020-12-30T21:49:56' - build_time: 1609307585 - artifacts: - af-south-1: ami-08dc0399ed9bd830f - eu-north-1: ami-02593586a624c644e - ap-south-1: ami-0485245862afd6a94 - eu-west-3: ami-08a2c7883f069fa11 - eu-west-2: ami-085e38f6a9097b10d - eu-south-1: ami-0031e41f580bd7bc6 - eu-west-1: ami-01d646d460450e5df - ap-northeast-2: ami-0cb9c48206930d2e1 - me-south-1: ami-085f853cc2b44d8a9 - ap-northeast-1: ami-007fdf68b6a1ea3d7 - sa-east-1: ami-0abf25b78b35ce41d - ca-central-1: ami-0d32f1c3b151a073b - ap-east-1: ami-00eba1e6d8c374fa3 - ap-southeast-1: ami-004c0b5ee0b352196 - ap-southeast-2: ami-0fe124200ff8062fd - eu-central-1: ami-0b9ee3bdd290af3c4 - us-east-1: ami-062feb589ae24631b - us-east-2: ami-07188d526cdddcda9 - us-west-1: ami-080688ba76a53e6f7 - us-west-2: ami-086cf146f39eb2693 - alpine-ami-edge-x86_64-20201229224611: - description: Alpine Linux edge x86_64 20201229224611 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20201229224611' - creation_date: '2020-12-29T22:48:52.000Z' - end_of_life: '2020-12-30T22:46:11' - build_time: 1609310932 - artifacts: - af-south-1: ami-0c0c9f458cd3302b7 - eu-north-1: ami-0de5739f5fc9d92b0 - ap-south-1: ami-07ff15b57d4238dec - eu-west-3: ami-0ee119647d35ac82e - eu-west-2: ami-077605ea3fb11b261 - eu-south-1: ami-0cbb4d2d2edeffedf - eu-west-1: ami-0b763b5fcd836a2c7 - ap-northeast-2: ami-05f53fe3ad2cf3558 - me-south-1: ami-079cc6ecfba9ad180 - ap-northeast-1: ami-0a475efe1d176f2ef - sa-east-1: ami-0ccfaae08a3064763 - ca-central-1: ami-0644084a7cdbd26fc - ap-east-1: ami-099b5dd0fcedb734d - ap-southeast-1: ami-027dfaccb2e7e74a5 - ap-southeast-2: ami-010fee6f93cdc98ef - eu-central-1: ami-0e03ed40c25ffa518 - us-east-1: ami-0d7e8605cde01ae43 - us-east-2: ami-0726364161f193345 - us-west-1: ami-0d2806a3f473e92d3 - us-west-2: ami-0062c351ab20e14cf - edge-aarch64: - alpine-ami-edge-aarch64-20201219023017: - description: Alpine Linux edge aarch64 20201219023017 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20201219023017' - creation_date: '2020-12-19T02:38:38.000Z' - end_of_life: '2020-12-20T02:30:17' - build_time: 1608374318 - artifacts: - af-south-1: ami-07a6dbca85456ca7d - eu-north-1: ami-0e99b8aafb11d906e - ap-south-1: ami-083d9e5de667bf303 - eu-west-3: ami-071c3f1a5e6149b8d - eu-west-2: ami-06a6c48ddf101be91 - eu-south-1: ami-0439753d6d0a62c8c - eu-west-1: ami-0fb7049a355e67dd0 - ap-northeast-2: ami-00c4b2ff9ba78029f - me-south-1: ami-0c104cc8c6b41dee0 - ap-northeast-1: ami-059d668e854ac0219 - sa-east-1: ami-005599fbab4c82cc9 - ca-central-1: ami-0727dd3c84677edaa - ap-east-1: ami-07f55a0f369e88cc4 - ap-southeast-1: ami-0ccbac70492a3aaaf - ap-southeast-2: ami-0ae21901800152085 - eu-central-1: ami-0d31dea4e6538c397 - us-east-1: ami-04e9e4c6e875ee40d - us-east-2: ami-06f27121f9aae420c - us-west-1: ami-0dbd39c2a43b4775c - us-west-2: ami-082390a369bbeec92 - alpine-ami-edge-aarch64-20201229230708: - description: Alpine Linux edge aarch64 20201229230708 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20201229230708' - creation_date: '2020-12-29T23:09:57.000Z' - end_of_life: '2020-12-30T23:07:08' - build_time: 1609312197 - artifacts: - af-south-1: ami-0a3bd3c9b36d7c6c7 - eu-north-1: ami-0bcce26e70065a5bc - ap-south-1: ami-087b62ebfa3c397c2 - eu-west-3: ami-0a1fbfa66ea6eecb5 - eu-west-2: ami-0595a6eca3bd3c78c - eu-south-1: ami-0163588672a0237ac - eu-west-1: ami-051a49d029615ee41 - ap-northeast-2: ami-0197cd016b53ae164 - me-south-1: ami-07f6eca663666a336 - ap-northeast-1: ami-0243bfa4774e3c140 - sa-east-1: ami-042078f38a1acc839 - ca-central-1: ami-0e37054697017f838 - ap-east-1: ami-0bbd759c49ca213cd - ap-southeast-1: ami-01390e61c6fc639fb - ap-southeast-2: ami-0a71db741f8439bdb - eu-central-1: ami-0a3f2fc4f69b52ef6 - us-east-1: ami-05f3be0c13cf0567e - us-east-2: ami-0ca827ab7ce9db92a - us-west-1: ami-01a1c6b3c2c1952d0 - us-west-2: ami-0abd8ada6afb9e527 - alpine-ami-edge-aarch64-20201231045833: - description: Alpine Linux edge aarch64 20201231045833 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20201231045833' - creation_date: '2020-12-31T05:04:00.000Z' - end_of_life: '2021-01-01T04:58:33' - build_time: 1609419840 - artifacts: - af-south-1: ami-0b183c56bd131ed3a - eu-north-1: ami-0164bce0c7d9f1741 - ap-south-1: ami-03dd8e847479cf769 - eu-west-3: ami-0a8f99b7d240e427c - eu-west-2: ami-0dbd0469355fb628b - eu-south-1: ami-02fe886c007469453 - eu-west-1: ami-052c81600bc9265a2 - ap-northeast-2: ami-0b1cb303b405d3097 - me-south-1: ami-03e34a8c3f39d75a8 - ap-northeast-1: ami-0e4e372058199d5ef - sa-east-1: ami-0c049c43758d1c6ae - ca-central-1: ami-0028affab88bac113 - ap-east-1: ami-08b75758d2db7dfca - ap-southeast-1: ami-0f63ec4ee42f919af - ap-southeast-2: ami-0cfb54d89d91b4588 - eu-central-1: ami-0a3002a25422450ec - us-east-1: ami-0d4bf5cbd324d086a - us-east-2: ami-07434f0295f2816c8 - us-west-1: ami-0e2ddb3719b40d721 - us-west-2: ami-07ab85086738d655c - alpine-ami-edge-aarch64-20201229214956: - description: Alpine Linux edge aarch64 20201229214956 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20201229214956' - creation_date: '2020-12-29T21:56:23.000Z' - end_of_life: '2020-12-30T21:49:56' - build_time: 1609307783 - artifacts: - af-south-1: ami-0c04fcc8f2372b696 - eu-north-1: ami-05a8bf63fc921394d - ap-south-1: ami-0f5ede5d876f0f06d - eu-west-3: ami-057f73f3491d66c21 - eu-west-2: ami-0408124ec9dfa3e42 - eu-south-1: ami-00ea83ffa212c5b83 - eu-west-1: ami-08e4b7b4d0254bfe2 - ap-northeast-2: ami-0ac6766dfdf0ecbd7 - me-south-1: ami-0cc2a40f9ac891f6c - ap-northeast-1: ami-029e0d778de8f78cd - sa-east-1: ami-0aa2d0ef1395143d7 - ca-central-1: ami-0b25ce7faaa294f50 - ap-east-1: ami-07b598f5bafaae0e7 - ap-southeast-1: ami-0e41f9097081fb82b - ap-southeast-2: ami-0a892f43c87a6bf46 - eu-central-1: ami-039e58598e4e69589 - us-east-1: ami-0c5fa29ef9fde7556 - us-east-2: ami-0f573107d2294271b - us-west-1: ami-059fba50c56721d6a - us-west-2: ami-01e0b20bb07854059 -3.12.2: - v3_12-aarch64: - alpine-ami-3.12.2-aarch64-r0: - description: Alpine Linux 3.12.2 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-aarch64 - version: '3.12' - release: 3.12.2 - arch: aarch64 - revision: r0 - creation_date: '2020-12-13T19:29:16.000Z' - end_of_life: '2022-05-01T00:00:00' - build_time: 1607916556 - artifacts: - af-south-1: ami-01bddee275c090a50 - eu-north-1: ami-07b793f6b41391228 - ap-south-1: ami-0759affb95b30e7fb - eu-west-3: ami-0e27cfc827138e618 - eu-west-2: ami-007b53f9896902dbb - eu-south-1: ami-093ee59d023f73f01 - eu-west-1: ami-0872a57824a7c8a0f - ap-northeast-2: ami-053378f981bc37c5a - me-south-1: ami-0d6b8517fe502f094 - ap-northeast-1: ami-0a5c2347daea31320 - sa-east-1: ami-0cb7785de4b330978 - ca-central-1: ami-0d144a02a790d54a3 - ap-east-1: ami-0f991dfb212ea3e30 - ap-southeast-1: ami-0a9dfde00c4fdbf44 - ap-southeast-2: ami-0432ec565b29d3f0e - eu-central-1: ami-0bde2f5e41915b4a2 - us-east-1: ami-0f20521153a6af3e7 - us-east-2: ami-064923dd78bf778a8 - us-west-1: ami-0f49257c4ee6311a5 - us-west-2: ami-0e308f03a3776ea1f - v3_12-x86_64: - alpine-ami-3.12.2-x86_64-r0: - description: Alpine Linux 3.12.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-x86_64 - version: '3.12' - release: 3.12.2 - arch: x86_64 - revision: r0 - creation_date: '2020-12-13T19:07:54.000Z' - end_of_life: '2022-05-01T00:00:00' - build_time: 1607915274 - artifacts: - af-south-1: ami-0a2c528c48b724eb1 - eu-north-1: ami-0f97b4e83b330a44b - ap-south-1: ami-0082a1edc963aa684 - eu-west-3: ami-0837b3fcb00163a7d - eu-west-2: ami-0a8578d7d4ebca125 - eu-south-1: ami-027ed683f42684d45 - eu-west-1: ami-00185f6c477e1099d - ap-northeast-2: ami-0c869c3c23407b0d5 - me-south-1: ami-0ff80f770d65d1cbf - ap-northeast-1: ami-0e4245b0cbe57cb99 - sa-east-1: ami-0d276bc117826a38a - ca-central-1: ami-090b8e0d13afd07c1 - ap-east-1: ami-0efde8684085c8a1e - ap-southeast-1: ami-0a40d2bc9bfc47553 - ap-southeast-2: ami-0e7c828c974171a77 - eu-central-1: ami-062cda84fa4f4abe0 - us-east-1: ami-042e99e8ac5b82667 - us-east-2: ami-0bf39a1d2a7d83170 - us-west-1: ami-089fe5bbb8ee72815 - us-west-2: ami-096f9b59745c9d447 3.12.3: v3_12-aarch64: alpine-ami-3.12.3-aarch64-r0: @@ -423,6 +65,73 @@ edge: us-east-2: ami-07012d290ef9c028e us-west-1: ami-0570d3bcb39152bb8 us-west-2: ami-009f13dc01dec6a56 +3.13.0: + v3_13-aarch64: + alpine-ami-3.13.0-aarch64-r0: + description: Alpine Linux 3.13.0 aarch64 r0 - https://alpinelinux.org/cloud + profile: alpine + profile_build: v3_13-aarch64 + version: '3.13' + release: 3.13.0 + arch: aarch64 + revision: r0 + creation_date: '2021-01-15T05:02:46.000Z' + end_of_life: '2022-11-01T00:00:00' + build_time: 1610715766 + artifacts: + af-south-1: ami-054c33247885ebc3d + eu-north-1: ami-0bf4c55e1940c81f6 + ap-south-1: ami-0f24df3e1a946e396 + eu-west-3: ami-00e775ed7d5d97ab6 + eu-west-2: ami-030c2f6bf9bd32aaa + eu-south-1: ami-037c5a438633e5589 + eu-west-1: ami-00346dd824f03912d + ap-northeast-2: ami-0daa039d88c3ca039 + me-south-1: ami-0118ef914ed3873ec + ap-northeast-1: ami-0abe1014344984843 + sa-east-1: ami-030aade343c7bffe6 + ca-central-1: ami-01a61cfe59f803189 + ap-east-1: ami-0e7fa2711ac2592e1 + ap-southeast-1: ami-03ec7671226fce7ac + ap-southeast-2: ami-0886c6e086b4865f3 + eu-central-1: ami-01c207f63c8675daf + us-east-1: ami-059c905481a02fe87 + us-east-2: ami-05f1c6366468e331d + us-west-1: ami-0fe276a497cab0aa9 + us-west-2: ami-0cbd458f29aa897b3 + v3_13-x86_64: + alpine-ami-3.13.0-x86_64-r0: + description: Alpine Linux 3.13.0 x86_64 r0 - https://alpinelinux.org/cloud + profile: alpine + profile_build: v3_13-x86_64 + version: '3.13' + release: 3.13.0 + arch: x86_64 + revision: r0 + creation_date: '2021-01-15T04:59:21.000Z' + end_of_life: '2022-11-01T00:00:00' + build_time: 1610715561 + artifacts: + af-south-1: ami-06b4b4820282bd4c4 + eu-north-1: ami-0a58b79ae3d5dc225 + ap-south-1: ami-00362eefac99bd28d + eu-west-3: ami-0cba38171c14bfcc2 + eu-west-2: ami-0f0f0da204290dc46 + eu-south-1: ami-0957b53ee158d78f7 + eu-west-1: ami-0fc784eae453cde56 + ap-northeast-2: ami-01a933965dcf06052 + me-south-1: ami-0fb7bc8a6dd850c6c + ap-northeast-1: ami-0297111f80ad01c83 + sa-east-1: ami-09a48625b514fdcd9 + ca-central-1: ami-08177f9696f9ad4a6 + ap-east-1: ami-0d7ec3bccd07853b0 + ap-southeast-1: ami-0c8ee63c1901c2eb0 + ap-southeast-2: ami-08ed66c1878f09560 + eu-central-1: ami-03a8a49ba86477171 + us-east-1: ami-0f7b12c17a0b4bade + us-east-2: ami-0a288d17effc94a76 + us-west-1: ami-01c6cef27f05be7a5 + us-west-2: ami-0d0055a3bfbf5a966 3.11.7: v3_11-x86_64: alpine-ami-3.11.7-x86_64-r0: @@ -457,105 +166,73 @@ edge: us-east-2: ami-089db2524f896109e us-west-1: ami-0a0564916b7d4a510 us-west-2: ami-0b9f7e5619a03a0ea -3.12.1: - v3_12-aarch64: - alpine-ami-3.12.1-aarch64-r1: - description: Alpine Linux 3.12.1 aarch64 r1 - https://github.com/mcrute/alpine-ec2-ami +edge: + edge-x86_64: + alpine-ami-edge-x86_64-20210115045210: + description: Alpine Linux edge x86_64 20210115045210 - https://alpinelinux.org/cloud profile: alpine - profile_build: v3_12-aarch64 - version: '3.12' - release: 3.12.1 - arch: aarch64 - revision: r1 - creation_date: '2020-11-22T03:11:36.000Z' - end_of_life: '2022-05-01T00:00:00' - build_time: 1606043496 - artifacts: - af-south-1: ami-06588f43a51375252 - eu-north-1: ami-0cfce5134bf4de486 - ap-south-1: ami-09cc298b01cf76d37 - eu-west-3: ami-04bcba80b692607e5 - eu-west-2: ami-0eef6caa5a9e5eae2 - eu-south-1: ami-064f77232ae1a8989 - eu-west-1: ami-0a00b40aa74c41ff0 - ap-northeast-2: ami-0c64bd75240f41074 - me-south-1: ami-061d84db040baef02 - ap-northeast-1: ami-03cf3e1e77a6c38d1 - sa-east-1: ami-0f326c5e4038adfe2 - ca-central-1: ami-0a7b6973c4d3f0575 - ap-east-1: ami-0d30cefbf384f56a1 - ap-southeast-1: ami-0b387e2e6db73709a - ap-southeast-2: ami-0cc6d6821deb170a9 - eu-central-1: ami-0a39edefd01a2291f - us-east-1: ami-0e2ef8e13935fcead - us-east-2: ami-018f0f4eda3104612 - us-west-1: ami-053fb4aa43b090ad7 - us-west-2: ami-0d2a4208becd28b2a - alpine-ami-3.12.1-aarch64-r0: - description: Alpine Linux 3.12.1 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-aarch64 - version: '3.12' - release: 3.12.1 - arch: aarch64 - revision: r0 - creation_date: '2020-11-04T22:49:01.000Z' - end_of_life: '2022-05-01T00:00:00' - build_time: 1604558941 - artifacts: - af-south-1: ami-09fcd0ee80e2c6ced - eu-north-1: ami-0b1aad32939a91c82 - ap-south-1: ami-089af5c9b460578db - eu-west-3: ami-057906bbbabb67f73 - eu-west-2: ami-0adc0c0202d9c8daa - eu-south-1: ami-057a6cfb896f50fb2 - eu-west-1: ami-081896434373f8ca9 - ap-northeast-2: ami-071c8f6b35e2c6955 - me-south-1: ami-099c448c758de35fa - ap-northeast-1: ami-0269f3543c56a45c8 - sa-east-1: ami-0b7d42fbb0f169c3d - ca-central-1: ami-09afe18ad5033a8ce - ap-east-1: ami-0f951fbb40233338b - ap-southeast-1: ami-0c67eaa9d318acd5e - ap-southeast-2: ami-0bf9b7222f35ef0d4 - eu-central-1: ami-07807351a96484447 - us-east-1: ami-0a31ae1e8fc6de17e - us-east-2: ami-07deadfa79bb4613a - us-west-1: ami-0daaa29d5c8b1ecaf - us-west-2: ami-0d6579e59926d4377 - v3_12-x86_64: - alpine-ami-3.12.1-x86_64-r0: - description: Alpine Linux 3.12.1 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-x86_64 - version: '3.12' - release: 3.12.1 + profile_build: edge-x86_64 + version: edge + release: edge arch: x86_64 - revision: r0 - creation_date: '2020-11-04T22:43:40.000Z' - end_of_life: '2022-05-01T00:00:00' - build_time: 1604558620 + revision: '20210115045210' + creation_date: '2021-01-15T04:56:24.000Z' + end_of_life: '2021-01-16T04:52:10' + build_time: 1610715384 artifacts: - af-south-1: ami-0fa34e940c7164179 - eu-north-1: ami-043101bc60cae6466 - ap-south-1: ami-0d953dbbf990c3d4f - eu-west-3: ami-027f6aa3fb3d68650 - eu-west-2: ami-02a0122150c17b830 - eu-south-1: ami-08d5116337ec06c75 - eu-west-1: ami-04e819555baad56b9 - ap-northeast-2: ami-08e79a74e23e75e36 - me-south-1: ami-07bb93ae709388c3c - ap-northeast-1: ami-010e9eeaa13a80178 - sa-east-1: ami-02e4e0517f1910221 - ca-central-1: ami-00a9048619f660a50 - ap-east-1: ami-059c371b8d2fd0989 - ap-southeast-1: ami-008bce1c8d323b322 - ap-southeast-2: ami-013de33f160267640 - eu-central-1: ami-03dbad79bee9c8ce1 - us-east-1: ami-0cc47d8e29142ecac - us-east-2: ami-07243c178e6ca055c - us-west-1: ami-0c9a9eac6d74fff97 - us-west-2: ami-03d82b210e0c36983 + af-south-1: ami-088e84ce1b1f411be + eu-north-1: ami-035e585736b7de816 + ap-south-1: ami-0497a4347255254b0 + eu-west-3: ami-056ec883bb7b55fa6 + eu-west-2: ami-0bb797cec5432486e + eu-south-1: ami-0a2bcd6981f75dc6e + eu-west-1: ami-0ff868d68ffce1c18 + ap-northeast-2: ami-02dec744f61097ee9 + me-south-1: ami-09196a0c25b2b5745 + ap-northeast-1: ami-0b279dbdd926b42b5 + sa-east-1: ami-0a010a494fd6b4198 + ca-central-1: ami-0d97a3177809ea765 + ap-east-1: ami-0aa6df701213dd27d + ap-southeast-1: ami-0fa75324c26109981 + ap-southeast-2: ami-05e33de43c5e5cebd + eu-central-1: ami-0b5920487b9821f76 + us-east-1: ami-0f6d30ffd4b5446ff + us-east-2: ami-076cd7138c628dab2 + us-west-1: ami-072a48e68753aedb0 + us-west-2: ami-0d96c10dc78128cb5 + edge-aarch64: + alpine-ami-edge-aarch64-20210115045210: + description: Alpine Linux edge aarch64 20210115045210 - https://alpinelinux.org/cloud + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20210115045210' + creation_date: '2021-01-15T04:54:12.000Z' + end_of_life: '2021-01-16T04:52:10' + build_time: 1610715252 + artifacts: + af-south-1: ami-0f8fb312016a1a357 + eu-north-1: ami-092a831a6f4620ccf + ap-south-1: ami-06674e2639583de71 + eu-west-3: ami-0c1ce7d53e27f3b38 + eu-west-2: ami-0e8f54b786204d875 + eu-south-1: ami-0eb47307947090baa + eu-west-1: ami-0693b5d091c075179 + ap-northeast-2: ami-0611bb744aad58842 + me-south-1: ami-0f85def6c07158768 + ap-northeast-1: ami-0447adc048c4c3e14 + sa-east-1: ami-000c9c8abdea00a15 + ca-central-1: ami-045744471a57317f8 + ap-east-1: ami-03ec11f3e7e2bf55f + ap-southeast-1: ami-0c56255f7ce3c0d1a + ap-southeast-2: ami-02185fb296e9a225e + eu-central-1: ami-052b6d764d2d332ee + us-east-1: ami-0fa8aafbaab073172 + us-east-2: ami-0bb800d8bde3fbfd3 + us-west-1: ami-0951a311c73074592 + us-west-2: ami-0d0947ece674f16d0 3.10.5: v3_10-x86_64: alpine-ami-3.10.5-x86_64-r1: @@ -590,477 +267,3 @@ edge: us-east-2: ami-0c15ef6ad3bdb364d us-west-1: ami-0f06f7abd4a2481fc us-west-2: ami-0605acecb09204ae6 - alpine-ami-3.10.5-x86_64-r0: - description: Alpine Linux 3.10.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.5 - arch: x86_64 - revision: r0 - creation_date: '2020-04-25T23:32:37.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1587886357 - artifacts: - eu-north-1: ami-041b6bdb27dbc8226 - ap-south-1: ami-0c8a22fa0ee90c07a - eu-west-3: ami-0bbb1a9d10ee0e6ee - eu-west-2: ami-08ca328d558bee247 - eu-west-1: ami-0451f26166639b1b9 - ap-northeast-2: ami-0595dc50c0f0e23f7 - ap-northeast-1: ami-043d40c880c7a176b - sa-east-1: ami-088bc83fe1497e710 - ca-central-1: ami-08c250f635a417222 - ap-southeast-1: ami-0244d1373053cfe5b - ap-southeast-2: ami-0cf284dc25e35862d - eu-central-1: ami-0a626b78c94340b6e - us-east-1: ami-0e635ea3ca126c707 - us-east-2: ami-0f5a09a7d1d0ae35f - us-west-1: ami-06c2aa86f3a72385e - us-west-2: ami-0b6f8a395fa8b5961 -3.10.4: - v3_10-x86_64: - alpine-ami-3.10.4-x86_64-r0: - description: Alpine Linux 3.10.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.4 - arch: x86_64 - revision: r0 - creation_date: '2020-02-05T02:52:39.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1580899959 - artifacts: - eu-north-1: ami-0011e13dbacb8fcb4 - ap-south-1: ami-00fac10f41dff96e4 - eu-west-3: ami-070b405f25870cfa4 - eu-west-2: ami-047029018b46688b5 - eu-west-1: ami-0d645d9aa9af199e7 - ap-northeast-2: ami-03a2be707d4d83cea - ap-northeast-1: ami-0dc770d65f50e9339 - sa-east-1: ami-01af983d84e7075aa - ca-central-1: ami-0a54918dadce6828a - ap-southeast-1: ami-0aadcaa1f71c42546 - ap-southeast-2: ami-0ba48065660ab830f - eu-central-1: ami-01de425983c4c1bfc - us-east-1: ami-014e31a6d6da30eb7 - us-east-2: ami-004421f607bf25444 - us-west-1: ami-0e07b975efa6cba65 - us-west-2: ami-07128e75c4dcc9c7c -3.10.3: - v3_10-x86_64: - alpine-ami-3.10.3-x86_64-r1: - description: Alpine Linux 3.10.3 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.3 - arch: x86_64 - revision: r1 - creation_date: '2019-10-26T20:21:08.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1572150068 - artifacts: - eu-north-1: ami-00207f3df9a9cb088 - ap-south-1: ami-0a8839c12787f0c46 - eu-west-3: ami-0ef9a828aded0a0de - eu-west-2: ami-02520e7e046db5d8f - eu-west-1: ami-01c1ec8fdefc61650 - ap-northeast-2: ami-0e749a03d064c1e47 - ap-northeast-1: ami-0760cd78e75cb77a4 - sa-east-1: ami-0ee958f7773223770 - ca-central-1: ami-016d172dee4ff4a22 - ap-southeast-1: ami-0f0e2be5d8c0110c1 - ap-southeast-2: ami-0ca4caea0ce1f4a8a - eu-central-1: ami-04e50c8006d4bc2bf - us-east-1: ami-063cb098a86c1c4cc - us-east-2: ami-0110d80369eb75f49 - us-west-1: ami-00b06ce695a617956 - us-west-2: ami-0d0b7768c8cd9a8c8 -3.9.4: - v3_9-x86_64: - alpine-ami-3.9.4-x86_64-r1: - description: Alpine Linux 3.9.4 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_9-x86_64 - version: '3.9' - release: 3.9.4 - arch: x86_64 - revision: r1 - creation_date: '2019-07-26T23:48:27.000Z' - end_of_life: '2021-01-01T00:00:00' - build_time: 1564213707 - artifacts: - eu-north-1: ami-01c04b1d21717da2d - ap-south-1: ami-091de53a3582f2779 - eu-west-3: ami-0ebda60768a596a7f - eu-west-2: ami-0bc07c10c240525e4 - eu-west-1: ami-0c9ac6e4570bad5c1 - ap-northeast-2: ami-004372232cf1a20ac - ap-northeast-1: ami-0d12649cf98b9c29b - sa-east-1: ami-0a2d4fb282401447a - ca-central-1: ami-011ad5e9b2fcfa1d5 - ap-southeast-1: ami-07f6f363322b884d5 - ap-southeast-2: ami-0eeff0d7c1943665c - eu-central-1: ami-0d4f6bb2a4f857256 - us-east-1: ami-0a8b8edcf88c2e496 - us-east-2: ami-030ce78952c4c097c - us-west-1: ami-0e27a7d83365f16be - us-west-2: ami-07f10e32e0621a4eb - alpine-ami-3.9.4-x86_64-r0: - description: Alpine Linux 3.9.4 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_9-x86_64 - version: '3.9' - release: 3.9.4 - arch: x86_64 - revision: r0 - creation_date: '2019-06-20T05:16:50.000Z' - end_of_life: '2021-01-01T00:00:00' - build_time: 1561036610 - artifacts: - eu-north-1: ami-09267b5c6d7722fdd - ap-south-1: ami-0cb67b835ca871537 - eu-west-3: ami-01dcaa2533a49748d - eu-west-2: ami-09b9943895590f23e - eu-west-1: ami-0587fd7b04af5d01d - ap-northeast-2: ami-004989011ec957b83 - ap-northeast-1: ami-03d9fcbacd2999688 - sa-east-1: ami-0645cb90aca8de136 - ca-central-1: ami-0a3cf4fc46141c449 - ap-southeast-1: ami-03f6391214dbfd225 - ap-southeast-2: ami-0074f16503a9ebe8c - eu-central-1: ami-007081891d730c5f1 - us-east-1: ami-0ac744c9e5e2dcbcf - us-east-2: ami-074a01fd0b7de0135 - us-west-1: ami-0a70d6f1ce22ddfb1 - us-west-2: ami-006aeb6d57c92f978 -3.11.0: - v3_11-x86_64: - alpine-ami-3.11.0-x86_64-r0: - description: Alpine Linux 3.11.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.0 - arch: x86_64 - revision: r0 - creation_date: '2019-12-20T03:36:53.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1576841813 - artifacts: - eu-north-1: ami-01dc7a794c0c8062b - ap-south-1: ami-0dba9ec182268ab0a - eu-west-3: ami-00d99d7627002d662 - eu-west-2: ami-04426be48498be7af - eu-west-1: ami-0d219c533643cb00f - ap-northeast-2: ami-06b08ab572a319365 - ap-northeast-1: ami-01dd2c66370a9c622 - sa-east-1: ami-05de427871abe1c40 - ca-central-1: ami-02bb57a6922018826 - ap-southeast-1: ami-0c210488756706fe7 - ap-southeast-2: ami-05e1972740cba6e7b - eu-central-1: ami-09a7075582e44cc4a - us-east-1: ami-00ee2daec698aab7c - us-east-2: ami-01d8b7e276ad609aa - us-west-1: ami-08d909997839b6030 - us-west-2: ami-07a62f65352c51750 -3.10.1: - v3_10-x86_64: - alpine-ami-3.10.1-x86_64-r0: - description: Alpine Linux 3.10.1 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.1 - arch: x86_64 - revision: r0 - creation_date: '2019-07-12T15:46:56.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1562975216 - artifacts: - eu-north-1: ami-020c6eab877f87e9c - ap-south-1: ami-0f704cf587a1bd591 - eu-west-3: ami-07098b9dc4e34adee - eu-west-2: ami-01fe12a7b5f0ae5e4 - eu-west-1: ami-08f5d4eaae3855536 - ap-northeast-2: ami-0fc9157e14e1701ea - ap-northeast-1: ami-039a6734ca3e107c2 - sa-east-1: ami-06b3a596069b29720 - ca-central-1: ami-073a7bdf1f93fdf07 - ap-southeast-1: ami-04ee093ad3986c1e2 - ap-southeast-2: ami-08b686d005668aa12 - eu-central-1: ami-02b0787907fb72c16 - us-east-1: ami-0cce76b5f0a9c52f3 - us-east-2: ami-0e0eea8fb3cea9bf6 - us-west-1: ami-0db3b834555de24aa - us-west-2: ami-01ddc73ca7c75f53d - alpine-ami-3.10.1-x86_64-r1: - description: Alpine Linux 3.10.1 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.1 - arch: x86_64 - revision: r1 - creation_date: '2019-07-26T23:39:00.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1564213140 - artifacts: - eu-north-1: ami-0859a31a742c902ed - ap-south-1: ami-09e1bd549945283a2 - eu-west-3: ami-06a5559ce996d5bac - eu-west-2: ami-06e36c52d4a7c245a - eu-west-1: ami-00fcd74ef57d7f27d - ap-northeast-2: ami-06637cd011ec49efa - ap-northeast-1: ami-0adeee26a46805278 - sa-east-1: ami-0087fd3ce3d62d34d - ca-central-1: ami-02fed61c453469d90 - ap-southeast-1: ami-081de8e0c4d9e28e5 - ap-southeast-2: ami-0e2c774fdc1d38ba1 - eu-central-1: ami-0659cf3939d5818e6 - us-east-1: ami-063929a9ea787ced6 - us-east-2: ami-0a5ef71ab2deee8fd - us-west-1: ami-04165aa967c5fb241 - us-west-2: ami-08147c2b1a80b44c4 -3.11.3: - v3_11-x86_64: - alpine-ami-3.11.3-x86_64-r0: - description: Alpine Linux 3.11.3 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.3 - arch: x86_64 - revision: r0 - creation_date: '2020-02-05T03:01:56.000Z' - end_of_life: '2021-11-01T00:00:00' - build_time: 1580900516 - artifacts: - eu-north-1: ami-025350371c14bbcf9 - ap-south-1: ami-01597af5b044c6534 - eu-west-3: ami-0a3aecc0fe5a748e0 - eu-west-2: ami-0fe16a039c49375e1 - eu-west-1: ami-0719f170fa096b7c6 - ap-northeast-2: ami-0446572a036203a7f - ap-northeast-1: ami-0a21fceb3a679c6a0 - sa-east-1: ami-0f28a75976a21bca7 - ca-central-1: ami-064cc1f1e4a3d17e7 - ap-southeast-1: ami-06add570453657288 - ap-southeast-2: ami-014d6b6e0544303db - eu-central-1: ami-06190102f27180777 - us-east-1: ami-0bd10e597480e8fdc - us-east-2: ami-0741188fc6d365c12 - us-west-1: ami-065633a2b189f7550 - us-west-2: ami-050dd0423825ae4cd -3.11.6: - v3_11-x86_64: - alpine-ami-3.11.6-x86_64-r0: - description: Alpine Linux 3.11.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.6 - arch: x86_64 - revision: r0 - creation_date: '2020-04-25T23:41:10.000Z' - end_of_life: '2021-11-01T00:00:00' - build_time: 1587886870 - artifacts: - eu-north-1: ami-03830331da71d3b6a - ap-south-1: ami-08437e8244154999a - eu-west-3: ami-043d77b850fc69cff - eu-west-2: ami-0dcb13d7ab5820ac0 - eu-west-1: ami-0a3bf003cc0e5cbaf - ap-northeast-2: ami-0fd25bd139c05812d - ap-northeast-1: ami-04dd34605aba7ce11 - sa-east-1: ami-0056de88b2ebc5071 - ca-central-1: ami-013d1db5df4ad7d4a - ap-southeast-1: ami-04a63840be47a0816 - ap-southeast-2: ami-07be0b72172a63df3 - eu-central-1: ami-03bc1e4d4bf636895 - us-east-1: ami-0da684cce2ab4aadb - us-east-2: ami-014d15ba809c1e48f - us-west-1: ami-05f659e5fe3528bbd - us-west-2: ami-0380e01590d421d3e -3.11.2: - v3_11-x86_64: - alpine-ami-3.11.2-x86_64-r0: - description: Alpine Linux 3.11.2 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.2 - arch: x86_64 - revision: r0 - creation_date: '2020-01-04T19:12:52.000Z' - end_of_life: '2021-11-01T00:00:00' - build_time: 1578193972 - artifacts: - eu-north-1: ami-03ce6e520f43392b9 - ap-south-1: ami-0b0f33d8cfb9e5051 - eu-west-3: ami-0b0726c29a8feff8a - eu-west-2: ami-02ac6b3300d9070b1 - eu-west-1: ami-07becf48e2f4057c8 - ap-northeast-2: ami-066b4452a247d5533 - ap-northeast-1: ami-0231a40676931971a - sa-east-1: ami-029a4c0dd953fdc64 - ca-central-1: ami-0e26eeafdc083c6e9 - ap-southeast-1: ami-0949989f302945c5a - ap-southeast-2: ami-08fb0d3aaf8945d02 - eu-central-1: ami-02fa942a71aadf188 - us-east-1: ami-06dcf76ec7ffac7cb - us-east-2: ami-018b2823c3aa8b78e - us-west-1: ami-04de5ae2ed495f580 - us-west-2: ami-0282e49ac0502691d -3.10.0: - v3_10-x86_64: - alpine-ami-3.10.0-x86_64-r0: - description: Alpine Linux 3.10.0 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.0 - arch: x86_64 - revision: r0 - creation_date: '2019-06-20T05:07:53.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1561036073 - artifacts: - eu-north-1: ami-069c11c7844825375 - ap-south-1: ami-06ab2e1b19df43403 - eu-west-3: ami-0385dc3d759aaa464 - eu-west-2: ami-0a5d209eea58688c2 - eu-west-1: ami-076b4d480f72a117f - ap-northeast-2: ami-0b2ab59439d69c87f - ap-northeast-1: ami-00d72ba9e4e50e6f0 - sa-east-1: ami-04ddd371cd342921d - ca-central-1: ami-035f9ddc53b8e3c94 - ap-southeast-1: ami-097e487f602370726 - ap-southeast-2: ami-0f2248216c030f2ea - eu-central-1: ami-0c2583ed13862fb17 - us-east-1: ami-0647412cf72f247d9 - us-east-2: ami-0fb394548acf15691 - us-west-1: ami-04d80966c446c3f58 - us-west-2: ami-0c71a8664131b42b3 -3.9.6: - v3_9-x86_64: - alpine-ami-3.9.6-x86_64-r0: - description: Alpine Linux 3.9.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_9-x86_64 - version: '3.9' - release: 3.9.6 - arch: x86_64 - revision: r0 - creation_date: '2020-04-25T23:50:15.000Z' - end_of_life: '2021-01-01T00:00:00' - build_time: 1587887415 - artifacts: - eu-north-1: ami-07a2b23059054aea3 - ap-south-1: ami-00af726ec2f4077a2 - eu-west-3: ami-00a425aa20737343e - eu-west-2: ami-08c87b358b24d1df3 - eu-west-1: ami-0eb2b54ab4d09eb80 - ap-northeast-2: ami-0f9ad7c51e14bdc3d - ap-northeast-1: ami-0133f3a571f684178 - sa-east-1: ami-0ea679407da47b78a - ca-central-1: ami-0583a99f342097b6c - ap-southeast-1: ami-0d52e9d7f91ca051c - ap-southeast-2: ami-054360648343b66bc - eu-central-1: ami-051eec0106a08df6d - us-east-1: ami-004f0550310a2d7aa - us-east-2: ami-045a2cc3fe272caee - us-west-1: ami-026a54e52daea1233 - us-west-2: ami-0b933475d362cbfab -3.10.2: - v3_10-x86_64: - alpine-ami-3.10.2-x86_64-r1: - description: Alpine Linux 3.10.2 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.2 - arch: x86_64 - revision: r1 - creation_date: '2019-08-26T02:15:44.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1566814544 - artifacts: - eu-north-1: ami-0ac4f026a4624309e - ap-south-1: ami-03c079c4f6a77bcd8 - eu-west-3: ami-0196d7c3d0c2e5230 - eu-west-2: ami-04c585868e7f9016e - eu-west-1: ami-073456a92b131bee5 - ap-northeast-2: ami-0eb3806a09c62e80a - ap-northeast-1: ami-0865b6aea9d3d4e9a - sa-east-1: ami-0437041273be4d2b3 - ca-central-1: ami-0aeee1c23a65f09e5 - ap-southeast-1: ami-03cbf9e5c42bd2de0 - ap-southeast-2: ami-040ee9c325bd773bb - eu-central-1: ami-01c4a5f25d39d8c1d - us-east-1: ami-0b13bd8ab9492449c - us-east-2: ami-0a87fa8a73b9b850c - us-west-1: ami-009961e3d2d7ccaa8 - us-west-2: ami-0a083cc95e2bbc4b0 -3.9.5: - v3_9-x86_64: - alpine-ami-3.9.5-x86_64-r0: - description: Alpine Linux 3.9.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_9-x86_64 - version: '3.9' - release: 3.9.5 - arch: x86_64 - revision: r0 - creation_date: '2020-02-05T03:11:35.000Z' - end_of_life: '2021-01-01T00:00:00' - build_time: 1580901095 - artifacts: - eu-north-1: ami-0dae27e872bbb58a3 - ap-south-1: ami-03aa6dfb6b5c5b24d - eu-west-3: ami-01d92abfc31832091 - eu-west-2: ami-0ca53eef190752d9b - eu-west-1: ami-032df31e3645eac89 - ap-northeast-2: ami-042ed34c048fd4dde - ap-northeast-1: ami-0f22ba5f542102103 - sa-east-1: ami-044b116c38c67bbe6 - ca-central-1: ami-07ced81b329157965 - ap-southeast-1: ami-09aa8a66b52872964 - ap-southeast-2: ami-0883e80a814ca1ead - eu-central-1: ami-0b1156425ee49460e - us-east-1: ami-01d51c30d2c611d0b - us-east-2: ami-023a120054be00f14 - us-west-1: ami-0b628545bb655d1e3 - us-west-2: ami-06dc8e37edaccd91d -3.11.5: - v3_11-x86_64: - alpine-ami-3.11.5-x86_64-r0: - description: Alpine Linux 3.11.5 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.5 - arch: x86_64 - revision: r0 - creation_date: '2020-04-03T02:27:09.000Z' - end_of_life: '2021-11-01T00:00:00' - build_time: 1585909629 - artifacts: - eu-north-1: ami-0f326f36494b66d68 - ap-south-1: ami-0df79a6a767372395 - eu-west-3: ami-05270703db64782c3 - eu-west-2: ami-06ec140a6fa5ff24c - eu-west-1: ami-0c1e8337e5112eb80 - ap-northeast-2: ami-071e19bba641e10c1 - ap-northeast-1: ami-02945e11777c5d74a - sa-east-1: ami-08e5a4dc318e84618 - ca-central-1: ami-0081665c09326cae2 - ap-southeast-1: ami-092bdb41e6d9f7060 - ap-southeast-2: ami-02a1c7112bbe60f00 - eu-central-1: ami-09d753422dab3888f - us-east-1: ami-02fa6ea44ed68cbd1 - us-east-2: ami-0325fc21b50ee19ba - us-west-1: ami-003d6e7746c7e938e - us-west-2: ami-0966c757f79c1a553 diff --git a/scripts/builder.py b/scripts/builder.py index 8eb1c70..1ff315f 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -70,6 +70,11 @@ def undictfactory(o): def region_from_client(client): return client._client_config.region_name +# version sorting +def sortable_version(x): + v = x.split('_rc')[0] + return StrictVersion("0.0" if v == "edge" else v) + class EC2Architecture(Enum): @@ -877,32 +882,51 @@ class Releases: self.images[region].append(image) # build profile releases object based on loaded self.images - def build_releases(self, log=None): + def build_releases(self, log=None, trim=None): + now = datetime.utcnow() + versions = dictfactory() + for region, amis in self.images.items(): if log: log.info(f"{region}") for ami in amis: - if ami.profile != self.profile: + eol = datetime.fromisoformat(ami.end_of_life) + # if we're trimming, we're not interested in EOL images + if trim and eol < now: continue - if log: log.info(f" * {ami.image_id} {ami.name}") + version = ami.version release = ami.release build = ami.profile_build name = ami.name id = ami.image_id build_time = int(dateutil.parser.parse(ami.creation_date).strftime('%s')) - release_obj = self.releases[release][build][name] + + if log: log.info(f" * {ami.image_id} {ami.name}") + version_obj = versions[version][release][build][name] for field in self.RELEASE_FIELDS: - if field not in release_obj: - release_obj[field] = getattr(ami, field) + if field not in version_obj: + version_obj[field] = getattr(ami, field) # ensure earliest build_time is used - if ('build_time' not in release_obj or - build_time < release_obj['build_time']): - release_obj['build_time'] = build_time - release_obj['creation_date'] = ami.creation_date + if ('build_time' not in version_obj or + build_time < version_obj['build_time']): + version_obj['build_time'] = build_time + version_obj['creation_date'] = ami.creation_date - release_obj['artifacts'][region] = id + version_obj['artifacts'][region] = id + + for version, releases in versions.items(): + for release, builds in sorted(releases.items(), reverse=True, + key=lambda x: sortable_version(x[0])): + for build, revisions in builds.items(): + for revision, info in sorted(revisions.items(), reverse=True, + key=lambda x: x[1]['build_time']): + self.releases[release][build][revision] = info + # if we are trimming, we want only the most recent revisions + if trim: break + # if we are trimming releases, we want only the most recent release + if trim == 'release': break class ReleasesYAML: @@ -912,11 +936,18 @@ class ReleasesYAML: @staticmethod def add_args(parser): + TRIM_HELP=""" + revision = keep last x.y.z-r# of non-EOL releases, + release = keep last x.y.# of non-EOL versions + """ + rgroup = parser.add_mutually_exclusive_group(required=True) rgroup.add_argument("--use-broker", action="store_true", help="identity broker provides destination regions and credentials") rgroup.add_argument("--region", "-r", action="append", dest="regions", metavar="REGION", help="destination region (multiple OK)") + parser.add_argument("--trim", "-t", + choices=['revision','release'], help=TRIM_HELP) parser.add_argument("profile", metavar="PROFILE", help="profile name") def run(self, args, root, log): @@ -930,7 +961,7 @@ class ReleasesYAML: use_broker = args.use_broker, regions = args.regions) r.load_profile_images(log) - r.build_releases() + r.build_releases(trim=args.trim) log.info(f"Writing new {release_yaml}") with open(release_yaml, 'w') as data: @@ -964,7 +995,7 @@ class ReleasesReadme: @staticmethod def extract_ver(x): - return StrictVersion("0.0" if x["release"] == "edge" else x["release"]) + return sortable_version(x['release']) def resolve_sections(self, release_data, log): sects = dictfactory() @@ -1063,14 +1094,14 @@ class PruneAMIs: @staticmethod def add_args(parser): - LEVEL_HELP = textwrap.dedent("""\ - 'revision' - prune old AMI revisions (x.y.z-r#); - 'release' - prune old AMI releases (x.y.#); - 'end-of-life' - prune end-of-life AMI versions (#.#); - 'UNKNOWN' - prune unknown AMIs (no profile tag) - """) + LEVEL_HELP = """ + revision = x.y.z-r#, + release = x.y.#, + end-of-life = EOL versions (#.#), + UNKNOWN = AMIs with no profile tag + """ - parser.add_argument("level", metavar='LEVEL', + parser.add_argument("level", choices=["revision", "release", "end-of-life", "UNKNOWN"], help=LEVEL_HELP) rgroup = parser.add_mutually_exclusive_group(required=True) diff --git a/scripts/setup-ami b/scripts/setup-ami index 9063021..ef5bfe1 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -304,6 +304,9 @@ create_alpine_user() { # best-practice. sed -i '/%wheel .* NOPASSWD: .*/s/^# //' "$TARGET/etc/sudoers" + # explicitly lock the root account + chroot "$TARGET" /usr/bin/passwd -l root + # There is no real standard ec2 username across AMIs, Amazon uses ec2-user # for their Amazon Linux AMIs but Ubuntu uses ubuntu, Fedora uses fedora, # etc... (see: https://alestic.com/2014/01/ec2-ssh-username/). So our user From 30550530fe3779922cb6a6bc0674293394516b68 Mon Sep 17 00:00:00 2001 From: tomalok Date: Fri, 29 Jan 2021 19:25:21 -0800 Subject: [PATCH 106/125] Alpine Linux 3.13.1 released (#111) --- profiles/version/3.13 | 2 +- releases/README.md | 88 +++++++-------- releases/alpine.yaml | 256 +++++++++++++++++++++--------------------- 3 files changed, 173 insertions(+), 173 deletions(-) diff --git a/profiles/version/3.13 b/profiles/version/3.13 index d39b248..a15bee3 100644 --- a/profiles/version/3.13 +++ b/profiles/version/3.13 @@ -6,7 +6,7 @@ include required("../base/current") # add edge-specific tweaks... version = "3.13" -release = "3.13.0" +release = "3.13.1" end_of_life = "2022-11-01" repos { diff --git a/releases/README.md b/releases/README.md index 11d157d..d70e6a9 100644 --- a/releases/README.md +++ b/releases/README.md @@ -38,31 +38,31 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.13.0 (2021-01-15) +### Alpine Linux 3.13.1 (2021-01-30)
click to show/hide

-| Region | alpine-ami-3.13.0-aarch64-r0 | alpine-ami-3.13.0-x86_64-r0 | +| Region | alpine-ami-3.13.1-aarch64-r0 | alpine-ami-3.13.1-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-054c33247885ebc3d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054c33247885ebc3d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054c33247885ebc3d)) | [ami-06b4b4820282bd4c4](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b4b4820282bd4c4) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b4b4820282bd4c4)) | -| ap-east-1 | [ami-0e7fa2711ac2592e1](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e7fa2711ac2592e1) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e7fa2711ac2592e1)) | [ami-0d7ec3bccd07853b0](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d7ec3bccd07853b0) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d7ec3bccd07853b0)) | -| ap-northeast-1 | [ami-0abe1014344984843](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0abe1014344984843) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0abe1014344984843)) | [ami-0297111f80ad01c83](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0297111f80ad01c83) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0297111f80ad01c83)) | -| ap-northeast-2 | [ami-0daa039d88c3ca039](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0daa039d88c3ca039) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0daa039d88c3ca039)) | [ami-01a933965dcf06052](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01a933965dcf06052) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01a933965dcf06052)) | -| ap-south-1 | [ami-0f24df3e1a946e396](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f24df3e1a946e396) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f24df3e1a946e396)) | [ami-00362eefac99bd28d](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00362eefac99bd28d) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00362eefac99bd28d)) | -| ap-southeast-1 | [ami-03ec7671226fce7ac](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ec7671226fce7ac) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ec7671226fce7ac)) | [ami-0c8ee63c1901c2eb0](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c8ee63c1901c2eb0) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c8ee63c1901c2eb0)) | -| ap-southeast-2 | [ami-0886c6e086b4865f3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0886c6e086b4865f3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0886c6e086b4865f3)) | [ami-08ed66c1878f09560](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08ed66c1878f09560) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08ed66c1878f09560)) | -| ca-central-1 | [ami-01a61cfe59f803189](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01a61cfe59f803189) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01a61cfe59f803189)) | [ami-08177f9696f9ad4a6](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08177f9696f9ad4a6) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08177f9696f9ad4a6)) | -| eu-central-1 | [ami-01c207f63c8675daf](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c207f63c8675daf) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c207f63c8675daf)) | [ami-03a8a49ba86477171](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03a8a49ba86477171) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03a8a49ba86477171)) | -| eu-north-1 | [ami-0bf4c55e1940c81f6](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf4c55e1940c81f6) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf4c55e1940c81f6)) | [ami-0a58b79ae3d5dc225](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a58b79ae3d5dc225) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a58b79ae3d5dc225)) | -| eu-south-1 | [ami-037c5a438633e5589](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-037c5a438633e5589) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-037c5a438633e5589)) | [ami-0957b53ee158d78f7](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0957b53ee158d78f7) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0957b53ee158d78f7)) | -| eu-west-1 | [ami-00346dd824f03912d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00346dd824f03912d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00346dd824f03912d)) | [ami-0fc784eae453cde56](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc784eae453cde56) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc784eae453cde56)) | -| eu-west-2 | [ami-030c2f6bf9bd32aaa](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030c2f6bf9bd32aaa) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-030c2f6bf9bd32aaa)) | [ami-0f0f0da204290dc46](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f0f0da204290dc46) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f0f0da204290dc46)) | -| eu-west-3 | [ami-00e775ed7d5d97ab6](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e775ed7d5d97ab6) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00e775ed7d5d97ab6)) | [ami-0cba38171c14bfcc2](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cba38171c14bfcc2) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0cba38171c14bfcc2)) | -| me-south-1 | [ami-0118ef914ed3873ec](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0118ef914ed3873ec) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0118ef914ed3873ec)) | [ami-0fb7bc8a6dd850c6c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb7bc8a6dd850c6c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb7bc8a6dd850c6c)) | -| sa-east-1 | [ami-030aade343c7bffe6](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030aade343c7bffe6) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-030aade343c7bffe6)) | [ami-09a48625b514fdcd9](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a48625b514fdcd9) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a48625b514fdcd9)) | -| us-east-1 | [ami-059c905481a02fe87](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059c905481a02fe87) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-059c905481a02fe87)) | [ami-0f7b12c17a0b4bade](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7b12c17a0b4bade) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7b12c17a0b4bade)) | -| us-east-2 | [ami-05f1c6366468e331d](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f1c6366468e331d) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05f1c6366468e331d)) | [ami-0a288d17effc94a76](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a288d17effc94a76) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a288d17effc94a76)) | -| us-west-1 | [ami-0fe276a497cab0aa9](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe276a497cab0aa9) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe276a497cab0aa9)) | [ami-01c6cef27f05be7a5](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c6cef27f05be7a5) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c6cef27f05be7a5)) | -| us-west-2 | [ami-0cbd458f29aa897b3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cbd458f29aa897b3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cbd458f29aa897b3)) | [ami-0d0055a3bfbf5a966](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0055a3bfbf5a966) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0055a3bfbf5a966)) | +| af-south-1 | [ami-01ab6a756d0408d33](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ab6a756d0408d33) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01ab6a756d0408d33)) | [ami-032b9b04f6ed1dc55](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-032b9b04f6ed1dc55) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-032b9b04f6ed1dc55)) | +| ap-east-1 | [ami-0e83973ccf9bfb82e](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e83973ccf9bfb82e) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e83973ccf9bfb82e)) | [ami-0eba760f357cf49cb](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eba760f357cf49cb) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eba760f357cf49cb)) | +| ap-northeast-1 | [ami-02042788e53a138a8](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02042788e53a138a8) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02042788e53a138a8)) | [ami-0c73a01e0a1e4dc5f](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c73a01e0a1e4dc5f) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c73a01e0a1e4dc5f)) | +| ap-northeast-2 | [ami-061152a5ffbdb1bba](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-061152a5ffbdb1bba) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-061152a5ffbdb1bba)) | [ami-0d7e9c9da66b0212c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d7e9c9da66b0212c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d7e9c9da66b0212c)) | +| ap-south-1 | [ami-079f494c27df9b22b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-079f494c27df9b22b) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-079f494c27df9b22b)) | [ami-02af8b12bd1a7f528](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02af8b12bd1a7f528) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02af8b12bd1a7f528)) | +| ap-southeast-1 | [ami-05f62fb6ee08c4514](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f62fb6ee08c4514) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f62fb6ee08c4514)) | [ami-049ce80d284d85785](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-049ce80d284d85785) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-049ce80d284d85785)) | +| ap-southeast-2 | [ami-087f8254a00a973ae](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-087f8254a00a973ae) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-087f8254a00a973ae)) | [ami-06bc7f180be7dbb5d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06bc7f180be7dbb5d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06bc7f180be7dbb5d)) | +| ca-central-1 | [ami-071535ea72bf74f9a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071535ea72bf74f9a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-071535ea72bf74f9a)) | [ami-0f14a433479baa552](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f14a433479baa552) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f14a433479baa552)) | +| eu-central-1 | [ami-0f18b001c15c5a435](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f18b001c15c5a435) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f18b001c15c5a435)) | [ami-0fca91b4d2142587c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fca91b4d2142587c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fca91b4d2142587c)) | +| eu-north-1 | [ami-0043b5129ae0461fc](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0043b5129ae0461fc) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0043b5129ae0461fc)) | [ami-08ce059d538f9f14c](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08ce059d538f9f14c) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08ce059d538f9f14c)) | +| eu-south-1 | [ami-0d6fe31535a21078f](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6fe31535a21078f) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6fe31535a21078f)) | [ami-0b892f78616f16676](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b892f78616f16676) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b892f78616f16676)) | +| eu-west-1 | [ami-09e7f2719e86dec49](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e7f2719e86dec49) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e7f2719e86dec49)) | [ami-067316662464af0b0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-067316662464af0b0) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-067316662464af0b0)) | +| eu-west-2 | [ami-0bd019b06c0a54848](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd019b06c0a54848) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd019b06c0a54848)) | [ami-0ed088a19fe4ce2bf](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed088a19fe4ce2bf) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed088a19fe4ce2bf)) | +| eu-west-3 | [ami-06dff6987a5ae2421](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06dff6987a5ae2421) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06dff6987a5ae2421)) | [ami-0707bfbaba3d516a7](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0707bfbaba3d516a7) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0707bfbaba3d516a7)) | +| me-south-1 | [ami-0cbc8b60bcdc562a3](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cbc8b60bcdc562a3) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cbc8b60bcdc562a3)) | [ami-08b0c93d76bf80c57](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b0c93d76bf80c57) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b0c93d76bf80c57)) | +| sa-east-1 | [ami-07710c710c595ae10](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07710c710c595ae10) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07710c710c595ae10)) | [ami-03dfdfee51c668577](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dfdfee51c668577) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dfdfee51c668577)) | +| us-east-1 | [ami-010d3cd2fdc72e8fb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010d3cd2fdc72e8fb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010d3cd2fdc72e8fb)) | [ami-01ee36d39b39d22fd](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ee36d39b39d22fd) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01ee36d39b39d22fd)) | +| us-east-2 | [ami-0e563c4df291290a5](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e563c4df291290a5) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e563c4df291290a5)) | [ami-0662e20e209a75749](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0662e20e209a75749) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0662e20e209a75749)) | +| us-west-1 | [ami-064e9f74440f6ebdd](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064e9f74440f6ebdd) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-064e9f74440f6ebdd)) | [ami-00916d9752b7757ed](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00916d9752b7757ed) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00916d9752b7757ed)) | +| us-west-2 | [ami-0d56a416ca044ea5f](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d56a416ca044ea5f) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d56a416ca044ea5f)) | [ami-088d85fced072a98b](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088d85fced072a98b) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-088d85fced072a98b)) |

@@ -150,30 +150,30 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux Edge (2021-01-15) +### Alpine Linux Edge (2021-01-30)
click to show/hide

-| Region | alpine-ami-edge-aarch64-20210115045210 | alpine-ami-edge-x86_64-20210115045210 | +| Region | alpine-ami-edge-aarch64-20210130024453 | alpine-ami-edge-x86_64-20210130024453 | | ------ | --- | --- | -| af-south-1 | [ami-0f8fb312016a1a357](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f8fb312016a1a357) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f8fb312016a1a357)) | [ami-088e84ce1b1f411be](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088e84ce1b1f411be) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-088e84ce1b1f411be)) | -| ap-east-1 | [ami-03ec11f3e7e2bf55f](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ec11f3e7e2bf55f) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ec11f3e7e2bf55f)) | [ami-0aa6df701213dd27d](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aa6df701213dd27d) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aa6df701213dd27d)) | -| ap-northeast-1 | [ami-0447adc048c4c3e14](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0447adc048c4c3e14) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0447adc048c4c3e14)) | [ami-0b279dbdd926b42b5](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b279dbdd926b42b5) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b279dbdd926b42b5)) | -| ap-northeast-2 | [ami-0611bb744aad58842](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0611bb744aad58842) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0611bb744aad58842)) | [ami-02dec744f61097ee9](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02dec744f61097ee9) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02dec744f61097ee9)) | -| ap-south-1 | [ami-06674e2639583de71](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06674e2639583de71) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06674e2639583de71)) | [ami-0497a4347255254b0](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0497a4347255254b0) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0497a4347255254b0)) | -| ap-southeast-1 | [ami-0c56255f7ce3c0d1a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c56255f7ce3c0d1a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c56255f7ce3c0d1a)) | [ami-0fa75324c26109981](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa75324c26109981) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa75324c26109981)) | -| ap-southeast-2 | [ami-02185fb296e9a225e](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02185fb296e9a225e) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02185fb296e9a225e)) | [ami-05e33de43c5e5cebd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e33de43c5e5cebd) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05e33de43c5e5cebd)) | -| ca-central-1 | [ami-045744471a57317f8](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045744471a57317f8) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-045744471a57317f8)) | [ami-0d97a3177809ea765](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d97a3177809ea765) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d97a3177809ea765)) | -| eu-central-1 | [ami-052b6d764d2d332ee](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052b6d764d2d332ee) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052b6d764d2d332ee)) | [ami-0b5920487b9821f76](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b5920487b9821f76) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b5920487b9821f76)) | -| eu-north-1 | [ami-092a831a6f4620ccf](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092a831a6f4620ccf) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092a831a6f4620ccf)) | [ami-035e585736b7de816](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035e585736b7de816) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035e585736b7de816)) | -| eu-south-1 | [ami-0eb47307947090baa](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb47307947090baa) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb47307947090baa)) | [ami-0a2bcd6981f75dc6e](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2bcd6981f75dc6e) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2bcd6981f75dc6e)) | -| eu-west-1 | [ami-0693b5d091c075179](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0693b5d091c075179) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0693b5d091c075179)) | [ami-0ff868d68ffce1c18](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ff868d68ffce1c18) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ff868d68ffce1c18)) | -| eu-west-2 | [ami-0e8f54b786204d875](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e8f54b786204d875) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e8f54b786204d875)) | [ami-0bb797cec5432486e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb797cec5432486e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb797cec5432486e)) | -| eu-west-3 | [ami-0c1ce7d53e27f3b38](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c1ce7d53e27f3b38) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0c1ce7d53e27f3b38)) | [ami-056ec883bb7b55fa6](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-056ec883bb7b55fa6) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-056ec883bb7b55fa6)) | -| me-south-1 | [ami-0f85def6c07158768](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f85def6c07158768) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f85def6c07158768)) | [ami-09196a0c25b2b5745](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09196a0c25b2b5745) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09196a0c25b2b5745)) | -| sa-east-1 | [ami-000c9c8abdea00a15](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-000c9c8abdea00a15) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-000c9c8abdea00a15)) | [ami-0a010a494fd6b4198](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a010a494fd6b4198) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a010a494fd6b4198)) | -| us-east-1 | [ami-0fa8aafbaab073172](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa8aafbaab073172) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa8aafbaab073172)) | [ami-0f6d30ffd4b5446ff](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6d30ffd4b5446ff) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6d30ffd4b5446ff)) | -| us-east-2 | [ami-0bb800d8bde3fbfd3](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb800d8bde3fbfd3) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb800d8bde3fbfd3)) | [ami-076cd7138c628dab2](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-076cd7138c628dab2) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-076cd7138c628dab2)) | -| us-west-1 | [ami-0951a311c73074592](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0951a311c73074592) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0951a311c73074592)) | [ami-072a48e68753aedb0](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-072a48e68753aedb0) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-072a48e68753aedb0)) | -| us-west-2 | [ami-0d0947ece674f16d0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0947ece674f16d0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0947ece674f16d0)) | [ami-0d96c10dc78128cb5](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d96c10dc78128cb5) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d96c10dc78128cb5)) | +| af-south-1 | [ami-04fad639514e6da51](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04fad639514e6da51) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04fad639514e6da51)) | [ami-09de13c92f7200a7f](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09de13c92f7200a7f) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09de13c92f7200a7f)) | +| ap-east-1 | [ami-05be38d40ef502de6](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05be38d40ef502de6) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05be38d40ef502de6)) | [ami-016097e28007acee3](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-016097e28007acee3) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-016097e28007acee3)) | +| ap-northeast-1 | [ami-0bac3967629de4168](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bac3967629de4168) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bac3967629de4168)) | [ami-015f46cf95ca6b1da](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-015f46cf95ca6b1da) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-015f46cf95ca6b1da)) | +| ap-northeast-2 | [ami-03ba91c7fb32d8804](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ba91c7fb32d8804) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03ba91c7fb32d8804)) | [ami-08320354558e203ae](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08320354558e203ae) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08320354558e203ae)) | +| ap-south-1 | [ami-02b55f202b8e9c5f7](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02b55f202b8e9c5f7) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02b55f202b8e9c5f7)) | [ami-0cb7c370310ffc651](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cb7c370310ffc651) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb7c370310ffc651)) | +| ap-southeast-1 | [ami-0a7a705569d9b8b5c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a7a705569d9b8b5c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a7a705569d9b8b5c)) | [ami-0ee88c7d13ebfd58c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ee88c7d13ebfd58c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ee88c7d13ebfd58c)) | +| ap-southeast-2 | [ami-03144ebbb2e4c7cb3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03144ebbb2e4c7cb3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03144ebbb2e4c7cb3)) | [ami-0be19d226a286582f](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be19d226a286582f) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0be19d226a286582f)) | +| ca-central-1 | [ami-0c08685b1c85399ce](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c08685b1c85399ce) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c08685b1c85399ce)) | [ami-0eba81d9864af20cd](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eba81d9864af20cd) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eba81d9864af20cd)) | +| eu-central-1 | [ami-0e27549ef7eaea513](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e27549ef7eaea513) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e27549ef7eaea513)) | [ami-08021475b657e1c1e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08021475b657e1c1e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08021475b657e1c1e)) | +| eu-north-1 | [ami-05e3240796760f008](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e3240796760f008) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05e3240796760f008)) | [ami-0bfa6a03f69403630](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bfa6a03f69403630) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bfa6a03f69403630)) | +| eu-south-1 | [ami-03e6dc03f9567dd11](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e6dc03f9567dd11) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03e6dc03f9567dd11)) | [ami-0d041ed00d2d6d213](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d041ed00d2d6d213) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d041ed00d2d6d213)) | +| eu-west-1 | [ami-08f3f27d77b700e4e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f3f27d77b700e4e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08f3f27d77b700e4e)) | [ami-04cd3e974fac6c7d5](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04cd3e974fac6c7d5) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04cd3e974fac6c7d5)) | +| eu-west-2 | [ami-09559ce56bcbf0f25](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09559ce56bcbf0f25) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09559ce56bcbf0f25)) | [ami-0607a0cdf2d4939d5](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0607a0cdf2d4939d5) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0607a0cdf2d4939d5)) | +| eu-west-3 | [ami-055ee22bfc47e5869](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-055ee22bfc47e5869) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-055ee22bfc47e5869)) | [ami-026f7776b6ed4c938](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026f7776b6ed4c938) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-026f7776b6ed4c938)) | +| me-south-1 | [ami-09cc1754ed64a79bd](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09cc1754ed64a79bd) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09cc1754ed64a79bd)) | [ami-07c0fa9e852bd102d](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07c0fa9e852bd102d) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07c0fa9e852bd102d)) | +| sa-east-1 | [ami-0b8c175acd6923715](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b8c175acd6923715) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b8c175acd6923715)) | [ami-0b9ee56f6aab3c9d3](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9ee56f6aab3c9d3) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9ee56f6aab3c9d3)) | +| us-east-1 | [ami-0a9670da24bd75f68](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a9670da24bd75f68) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a9670da24bd75f68)) | [ami-01fa766cb33fcd5bd](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01fa766cb33fcd5bd) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01fa766cb33fcd5bd)) | +| us-east-2 | [ami-0b56a893924afc540](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b56a893924afc540) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b56a893924afc540)) | [ami-0549f4ca0143f0fc2](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0549f4ca0143f0fc2) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0549f4ca0143f0fc2)) | +| us-west-1 | [ami-03f749f32f6351cce](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03f749f32f6351cce) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03f749f32f6351cce)) | [ami-0bdc14e06657839de](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bdc14e06657839de) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bdc14e06657839de)) | +| us-west-2 | [ami-02630ac0a340043f0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02630ac0a340043f0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02630ac0a340043f0)) | [ami-0d2cdf74a929d4005](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d2cdf74a929d4005) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d2cdf74a929d4005)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index b8562fc..5078ac8 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,3 +1,70 @@ +3.13.1: + v3_13-aarch64: + alpine-ami-3.13.1-aarch64-r0: + description: Alpine Linux 3.13.1 aarch64 r0 - https://alpinelinux.org/cloud + profile: alpine + profile_build: v3_13-aarch64 + version: '3.13' + release: 3.13.1 + arch: aarch64 + revision: r0 + creation_date: '2021-01-30T02:56:44.000Z' + end_of_life: '2022-11-01T00:00:00' + build_time: 1612004204 + artifacts: + af-south-1: ami-01ab6a756d0408d33 + eu-north-1: ami-0043b5129ae0461fc + ap-south-1: ami-079f494c27df9b22b + eu-west-3: ami-06dff6987a5ae2421 + eu-west-2: ami-0bd019b06c0a54848 + eu-south-1: ami-0d6fe31535a21078f + eu-west-1: ami-09e7f2719e86dec49 + ap-northeast-2: ami-061152a5ffbdb1bba + me-south-1: ami-0cbc8b60bcdc562a3 + ap-northeast-1: ami-02042788e53a138a8 + sa-east-1: ami-07710c710c595ae10 + ca-central-1: ami-071535ea72bf74f9a + ap-east-1: ami-0e83973ccf9bfb82e + ap-southeast-1: ami-05f62fb6ee08c4514 + ap-southeast-2: ami-087f8254a00a973ae + eu-central-1: ami-0f18b001c15c5a435 + us-east-1: ami-010d3cd2fdc72e8fb + us-east-2: ami-0e563c4df291290a5 + us-west-1: ami-064e9f74440f6ebdd + us-west-2: ami-0d56a416ca044ea5f + v3_13-x86_64: + alpine-ami-3.13.1-x86_64-r0: + description: Alpine Linux 3.13.1 x86_64 r0 - https://alpinelinux.org/cloud + profile: alpine + profile_build: v3_13-x86_64 + version: '3.13' + release: 3.13.1 + arch: x86_64 + revision: r0 + creation_date: '2021-01-30T02:53:53.000Z' + end_of_life: '2022-11-01T00:00:00' + build_time: 1612004033 + artifacts: + af-south-1: ami-032b9b04f6ed1dc55 + eu-north-1: ami-08ce059d538f9f14c + ap-south-1: ami-02af8b12bd1a7f528 + eu-west-3: ami-0707bfbaba3d516a7 + eu-west-2: ami-0ed088a19fe4ce2bf + eu-south-1: ami-0b892f78616f16676 + eu-west-1: ami-067316662464af0b0 + ap-northeast-2: ami-0d7e9c9da66b0212c + me-south-1: ami-08b0c93d76bf80c57 + ap-northeast-1: ami-0c73a01e0a1e4dc5f + sa-east-1: ami-03dfdfee51c668577 + ca-central-1: ami-0f14a433479baa552 + ap-east-1: ami-0eba760f357cf49cb + ap-southeast-1: ami-049ce80d284d85785 + ap-southeast-2: ami-06bc7f180be7dbb5d + eu-central-1: ami-0fca91b4d2142587c + us-east-1: ami-01ee36d39b39d22fd + us-east-2: ami-0662e20e209a75749 + us-west-1: ami-00916d9752b7757ed + us-west-2: ami-088d85fced072a98b 3.12.3: v3_12-aarch64: alpine-ami-3.12.3-aarch64-r0: @@ -65,73 +132,73 @@ us-east-2: ami-07012d290ef9c028e us-west-1: ami-0570d3bcb39152bb8 us-west-2: ami-009f13dc01dec6a56 -3.13.0: - v3_13-aarch64: - alpine-ami-3.13.0-aarch64-r0: - description: Alpine Linux 3.13.0 aarch64 r0 - https://alpinelinux.org/cloud +edge: + edge-aarch64: + alpine-ami-edge-aarch64-20210130024453: + description: Alpine Linux edge aarch64 20210130024453 - https://alpinelinux.org/cloud profile: alpine - profile_build: v3_13-aarch64 - version: '3.13' - release: 3.13.0 + profile_build: edge-aarch64 + version: edge + release: edge arch: aarch64 - revision: r0 - creation_date: '2021-01-15T05:02:46.000Z' - end_of_life: '2022-11-01T00:00:00' - build_time: 1610715766 + revision: '20210130024453' + creation_date: '2021-01-30T02:47:25.000Z' + end_of_life: '2021-01-31T02:44:53' + build_time: 1612003645 artifacts: - af-south-1: ami-054c33247885ebc3d - eu-north-1: ami-0bf4c55e1940c81f6 - ap-south-1: ami-0f24df3e1a946e396 - eu-west-3: ami-00e775ed7d5d97ab6 - eu-west-2: ami-030c2f6bf9bd32aaa - eu-south-1: ami-037c5a438633e5589 - eu-west-1: ami-00346dd824f03912d - ap-northeast-2: ami-0daa039d88c3ca039 - me-south-1: ami-0118ef914ed3873ec - ap-northeast-1: ami-0abe1014344984843 - sa-east-1: ami-030aade343c7bffe6 - ca-central-1: ami-01a61cfe59f803189 - ap-east-1: ami-0e7fa2711ac2592e1 - ap-southeast-1: ami-03ec7671226fce7ac - ap-southeast-2: ami-0886c6e086b4865f3 - eu-central-1: ami-01c207f63c8675daf - us-east-1: ami-059c905481a02fe87 - us-east-2: ami-05f1c6366468e331d - us-west-1: ami-0fe276a497cab0aa9 - us-west-2: ami-0cbd458f29aa897b3 - v3_13-x86_64: - alpine-ami-3.13.0-x86_64-r0: - description: Alpine Linux 3.13.0 x86_64 r0 - https://alpinelinux.org/cloud + af-south-1: ami-04fad639514e6da51 + eu-north-1: ami-05e3240796760f008 + ap-south-1: ami-02b55f202b8e9c5f7 + eu-west-3: ami-055ee22bfc47e5869 + eu-west-2: ami-09559ce56bcbf0f25 + eu-south-1: ami-03e6dc03f9567dd11 + eu-west-1: ami-08f3f27d77b700e4e + ap-northeast-2: ami-03ba91c7fb32d8804 + me-south-1: ami-09cc1754ed64a79bd + ap-northeast-1: ami-0bac3967629de4168 + sa-east-1: ami-0b8c175acd6923715 + ca-central-1: ami-0c08685b1c85399ce + ap-east-1: ami-05be38d40ef502de6 + ap-southeast-1: ami-0a7a705569d9b8b5c + ap-southeast-2: ami-03144ebbb2e4c7cb3 + eu-central-1: ami-0e27549ef7eaea513 + us-east-1: ami-0a9670da24bd75f68 + us-east-2: ami-0b56a893924afc540 + us-west-1: ami-03f749f32f6351cce + us-west-2: ami-02630ac0a340043f0 + edge-x86_64: + alpine-ami-edge-x86_64-20210130024453: + description: Alpine Linux edge x86_64 20210130024453 - https://alpinelinux.org/cloud profile: alpine - profile_build: v3_13-x86_64 - version: '3.13' - release: 3.13.0 + profile_build: edge-x86_64 + version: edge + release: edge arch: x86_64 - revision: r0 - creation_date: '2021-01-15T04:59:21.000Z' - end_of_life: '2022-11-01T00:00:00' - build_time: 1610715561 + revision: '20210130024453' + creation_date: '2021-01-30T02:49:52.000Z' + end_of_life: '2021-01-31T02:44:53' + build_time: 1612003792 artifacts: - af-south-1: ami-06b4b4820282bd4c4 - eu-north-1: ami-0a58b79ae3d5dc225 - ap-south-1: ami-00362eefac99bd28d - eu-west-3: ami-0cba38171c14bfcc2 - eu-west-2: ami-0f0f0da204290dc46 - eu-south-1: ami-0957b53ee158d78f7 - eu-west-1: ami-0fc784eae453cde56 - ap-northeast-2: ami-01a933965dcf06052 - me-south-1: ami-0fb7bc8a6dd850c6c - ap-northeast-1: ami-0297111f80ad01c83 - sa-east-1: ami-09a48625b514fdcd9 - ca-central-1: ami-08177f9696f9ad4a6 - ap-east-1: ami-0d7ec3bccd07853b0 - ap-southeast-1: ami-0c8ee63c1901c2eb0 - ap-southeast-2: ami-08ed66c1878f09560 - eu-central-1: ami-03a8a49ba86477171 - us-east-1: ami-0f7b12c17a0b4bade - us-east-2: ami-0a288d17effc94a76 - us-west-1: ami-01c6cef27f05be7a5 - us-west-2: ami-0d0055a3bfbf5a966 + af-south-1: ami-09de13c92f7200a7f + eu-north-1: ami-0bfa6a03f69403630 + ap-south-1: ami-0cb7c370310ffc651 + eu-west-3: ami-026f7776b6ed4c938 + eu-west-2: ami-0607a0cdf2d4939d5 + eu-south-1: ami-0d041ed00d2d6d213 + eu-west-1: ami-04cd3e974fac6c7d5 + ap-northeast-2: ami-08320354558e203ae + me-south-1: ami-07c0fa9e852bd102d + ap-northeast-1: ami-015f46cf95ca6b1da + sa-east-1: ami-0b9ee56f6aab3c9d3 + ca-central-1: ami-0eba81d9864af20cd + ap-east-1: ami-016097e28007acee3 + ap-southeast-1: ami-0ee88c7d13ebfd58c + ap-southeast-2: ami-0be19d226a286582f + eu-central-1: ami-08021475b657e1c1e + us-east-1: ami-01fa766cb33fcd5bd + us-east-2: ami-0549f4ca0143f0fc2 + us-west-1: ami-0bdc14e06657839de + us-west-2: ami-0d2cdf74a929d4005 3.11.7: v3_11-x86_64: alpine-ami-3.11.7-x86_64-r0: @@ -166,73 +233,6 @@ us-east-2: ami-089db2524f896109e us-west-1: ami-0a0564916b7d4a510 us-west-2: ami-0b9f7e5619a03a0ea -edge: - edge-x86_64: - alpine-ami-edge-x86_64-20210115045210: - description: Alpine Linux edge x86_64 20210115045210 - https://alpinelinux.org/cloud - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20210115045210' - creation_date: '2021-01-15T04:56:24.000Z' - end_of_life: '2021-01-16T04:52:10' - build_time: 1610715384 - artifacts: - af-south-1: ami-088e84ce1b1f411be - eu-north-1: ami-035e585736b7de816 - ap-south-1: ami-0497a4347255254b0 - eu-west-3: ami-056ec883bb7b55fa6 - eu-west-2: ami-0bb797cec5432486e - eu-south-1: ami-0a2bcd6981f75dc6e - eu-west-1: ami-0ff868d68ffce1c18 - ap-northeast-2: ami-02dec744f61097ee9 - me-south-1: ami-09196a0c25b2b5745 - ap-northeast-1: ami-0b279dbdd926b42b5 - sa-east-1: ami-0a010a494fd6b4198 - ca-central-1: ami-0d97a3177809ea765 - ap-east-1: ami-0aa6df701213dd27d - ap-southeast-1: ami-0fa75324c26109981 - ap-southeast-2: ami-05e33de43c5e5cebd - eu-central-1: ami-0b5920487b9821f76 - us-east-1: ami-0f6d30ffd4b5446ff - us-east-2: ami-076cd7138c628dab2 - us-west-1: ami-072a48e68753aedb0 - us-west-2: ami-0d96c10dc78128cb5 - edge-aarch64: - alpine-ami-edge-aarch64-20210115045210: - description: Alpine Linux edge aarch64 20210115045210 - https://alpinelinux.org/cloud - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20210115045210' - creation_date: '2021-01-15T04:54:12.000Z' - end_of_life: '2021-01-16T04:52:10' - build_time: 1610715252 - artifacts: - af-south-1: ami-0f8fb312016a1a357 - eu-north-1: ami-092a831a6f4620ccf - ap-south-1: ami-06674e2639583de71 - eu-west-3: ami-0c1ce7d53e27f3b38 - eu-west-2: ami-0e8f54b786204d875 - eu-south-1: ami-0eb47307947090baa - eu-west-1: ami-0693b5d091c075179 - ap-northeast-2: ami-0611bb744aad58842 - me-south-1: ami-0f85def6c07158768 - ap-northeast-1: ami-0447adc048c4c3e14 - sa-east-1: ami-000c9c8abdea00a15 - ca-central-1: ami-045744471a57317f8 - ap-east-1: ami-03ec11f3e7e2bf55f - ap-southeast-1: ami-0c56255f7ce3c0d1a - ap-southeast-2: ami-02185fb296e9a225e - eu-central-1: ami-052b6d764d2d332ee - us-east-1: ami-0fa8aafbaab073172 - us-east-2: ami-0bb800d8bde3fbfd3 - us-west-1: ami-0951a311c73074592 - us-west-2: ami-0d0947ece674f16d0 3.10.5: v3_10-x86_64: alpine-ami-3.10.5-x86_64-r1: From 88f3f1374e42088e573fb480f146fe3bc5a6b926 Mon Sep 17 00:00:00 2001 From: tomalok Date: Tue, 2 Feb 2021 20:13:33 -0800 Subject: [PATCH 107/125] Autodetect Current Revision of Alpine Version (#113) * continue to use provided 'release' value if specified * continue to use 'edge' for edge versions * deduce 'release' value from the version on the alpine-base APK in https://dl-cdn.alpinelinux.org/alpine/v/ * update test profile with 3.13 --- profiles/base/1 | 2 +- profiles/base/2 | 2 +- profiles/test.conf | 3 +++ profiles/version/3.10 | 1 - profiles/version/3.11 | 1 - profiles/version/3.12 | 1 - profiles/version/3.13 | 1 - profiles/version/3.9 | 1 - profiles/version/edge | 1 - scripts/builder.py | 47 ++++++++++++++++++++++++++++++++++--------- scripts/setup-ami | 2 +- 11 files changed, 43 insertions(+), 19 deletions(-) diff --git a/profiles/base/1 b/profiles/base/1 index 814a6e9..0ab69be 100644 --- a/profiles/base/1 +++ b/profiles/base/1 @@ -8,7 +8,7 @@ revision = "r0" # Versioning version = null -release = null +release = null # defaults to autodetect end_of_life = null # Architecture diff --git a/profiles/base/2 b/profiles/base/2 index 0ee84bc..7e39ebf 100644 --- a/profiles/base/2 +++ b/profiles/base/2 @@ -8,7 +8,7 @@ revision = "r0" # Versioning version = null -release = null +release = null # defaults to autodetect end_of_life = null # Architecture diff --git a/profiles/test.conf b/profiles/test.conf index 5c0c17a..e7c8e53 100644 --- a/profiles/test.conf +++ b/profiles/test.conf @@ -1,6 +1,7 @@ ### Profile for Testing Builds # vim: ts=2 et: +version-3_13 { include required("version/3.13") } version-3_12 { include required("version/3.12") } version-3_11 { include required("version/3.11") } version-3_10 { include required("version/3.10") } @@ -25,11 +26,13 @@ test { # Build definitions BUILDS { # merge version, arch, profile, and build vars + v3_13-x86_64 = ${version-3_13} ${arch-x86_64} ${test} v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${test} v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${test} { revision = "r1" } v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} { revision = "r2" } edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} + v3_13-aarch64 = ${version-3_13} ${arch-aarch64} ${test} v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${test} edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} } diff --git a/profiles/version/3.10 b/profiles/version/3.10 index 17a657f..fe5248c 100644 --- a/profiles/version/3.10 +++ b/profiles/version/3.10 @@ -6,7 +6,6 @@ include required("../base/1") # set version-specific vars version = "3.10" -release = "3.10.5" end_of_life = "2021-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.10/main" = true diff --git a/profiles/version/3.11 b/profiles/version/3.11 index cce3750..e1d3b02 100644 --- a/profiles/version/3.11 +++ b/profiles/version/3.11 @@ -6,7 +6,6 @@ include required("../base/1") # set version-specific vars version = "3.11" -release = "3.11.7" end_of_life = "2021-11-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" = true diff --git a/profiles/version/3.12 b/profiles/version/3.12 index c8d06f4..1b15751 100644 --- a/profiles/version/3.12 +++ b/profiles/version/3.12 @@ -6,7 +6,6 @@ include required("../base/1") # set version-specific vars version = "3.12" -release = "3.12.3" end_of_life = "2022-05-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.12/main" = true diff --git a/profiles/version/3.13 b/profiles/version/3.13 index a15bee3..8beb004 100644 --- a/profiles/version/3.13 +++ b/profiles/version/3.13 @@ -6,7 +6,6 @@ include required("../base/current") # add edge-specific tweaks... version = "3.13" -release = "3.13.1" end_of_life = "2022-11-01" repos { diff --git a/profiles/version/3.9 b/profiles/version/3.9 index f129b58..a908489 100644 --- a/profiles/version/3.9 +++ b/profiles/version/3.9 @@ -6,7 +6,6 @@ include required("../base/1") # set version-specific vars version = "3.9" -release = "3.9.6" end_of_life = "2021-01-01" repos { "http://dl-cdn.alpinelinux.org/alpine/v3.9/main" = true diff --git a/profiles/version/edge b/profiles/version/edge index 1bde7b5..7e5a3a8 100644 --- a/profiles/version/edge +++ b/profiles/version/edge @@ -6,7 +6,6 @@ include required("../base/current") # add edge-specific tweaks... version = "edge" -release = "edge" end_of_life = null # defaults to tomorrow revision = null # defaults to datetime diff --git a/scripts/builder.py b/scripts/builder.py index 1ff315f..f16885e 100755 --- a/scripts/builder.py +++ b/scripts/builder.py @@ -404,12 +404,38 @@ class ConfigBuilder: def force_iso_date(input): return datetime.fromisoformat(input).isoformat(timespec="seconds") + @classmethod + def resolve_release(cls, input, cfg): + if input: + # release is explicitly defined, run with it + return input + if cfg['version'] == 'edge': + return 'edge' + # hack to determine release value from version's alpine-base APK + pkgs_url = f"https://dl-cdn.alpinelinux.org/alpine/v{cfg['version']}/main/{cfg['arch']}/" + try: + res = urlopen(pkgs_url) + except urllib.error.HTTPError as ex: + print(f"Unable to urlopen {pkgs_url} - {ex}", file=sys.stderr) + exit(1) + + line = res.readline().decode('utf-8') + while line: + if line.startswith('
Date: Wed, 17 Feb 2021 08:49:13 -0800 Subject: [PATCH 108/125] Alpine 3.13.2 released (#115) --- releases/README.md | 88 ++++++++--------- releases/alpine.yaml | 222 +++++++++++++++++++++---------------------- 2 files changed, 155 insertions(+), 155 deletions(-) diff --git a/releases/README.md b/releases/README.md index d70e6a9..f586e05 100644 --- a/releases/README.md +++ b/releases/README.md @@ -38,31 +38,31 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.13.1 (2021-01-30) +### Alpine Linux 3.13.2 (2021-02-18)
click to show/hide

-| Region | alpine-ami-3.13.1-aarch64-r0 | alpine-ami-3.13.1-x86_64-r0 | +| Region | alpine-ami-3.13.2-aarch64-r0 | alpine-ami-3.13.2-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-01ab6a756d0408d33](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ab6a756d0408d33) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01ab6a756d0408d33)) | [ami-032b9b04f6ed1dc55](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-032b9b04f6ed1dc55) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-032b9b04f6ed1dc55)) | -| ap-east-1 | [ami-0e83973ccf9bfb82e](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e83973ccf9bfb82e) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e83973ccf9bfb82e)) | [ami-0eba760f357cf49cb](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eba760f357cf49cb) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eba760f357cf49cb)) | -| ap-northeast-1 | [ami-02042788e53a138a8](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02042788e53a138a8) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02042788e53a138a8)) | [ami-0c73a01e0a1e4dc5f](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c73a01e0a1e4dc5f) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c73a01e0a1e4dc5f)) | -| ap-northeast-2 | [ami-061152a5ffbdb1bba](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-061152a5ffbdb1bba) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-061152a5ffbdb1bba)) | [ami-0d7e9c9da66b0212c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d7e9c9da66b0212c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d7e9c9da66b0212c)) | -| ap-south-1 | [ami-079f494c27df9b22b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-079f494c27df9b22b) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-079f494c27df9b22b)) | [ami-02af8b12bd1a7f528](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02af8b12bd1a7f528) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02af8b12bd1a7f528)) | -| ap-southeast-1 | [ami-05f62fb6ee08c4514](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f62fb6ee08c4514) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f62fb6ee08c4514)) | [ami-049ce80d284d85785](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-049ce80d284d85785) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-049ce80d284d85785)) | -| ap-southeast-2 | [ami-087f8254a00a973ae](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-087f8254a00a973ae) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-087f8254a00a973ae)) | [ami-06bc7f180be7dbb5d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06bc7f180be7dbb5d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06bc7f180be7dbb5d)) | -| ca-central-1 | [ami-071535ea72bf74f9a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071535ea72bf74f9a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-071535ea72bf74f9a)) | [ami-0f14a433479baa552](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f14a433479baa552) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f14a433479baa552)) | -| eu-central-1 | [ami-0f18b001c15c5a435](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f18b001c15c5a435) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f18b001c15c5a435)) | [ami-0fca91b4d2142587c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fca91b4d2142587c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fca91b4d2142587c)) | -| eu-north-1 | [ami-0043b5129ae0461fc](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0043b5129ae0461fc) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0043b5129ae0461fc)) | [ami-08ce059d538f9f14c](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08ce059d538f9f14c) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08ce059d538f9f14c)) | -| eu-south-1 | [ami-0d6fe31535a21078f](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6fe31535a21078f) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6fe31535a21078f)) | [ami-0b892f78616f16676](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b892f78616f16676) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b892f78616f16676)) | -| eu-west-1 | [ami-09e7f2719e86dec49](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e7f2719e86dec49) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e7f2719e86dec49)) | [ami-067316662464af0b0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-067316662464af0b0) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-067316662464af0b0)) | -| eu-west-2 | [ami-0bd019b06c0a54848](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd019b06c0a54848) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd019b06c0a54848)) | [ami-0ed088a19fe4ce2bf](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed088a19fe4ce2bf) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed088a19fe4ce2bf)) | -| eu-west-3 | [ami-06dff6987a5ae2421](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06dff6987a5ae2421) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06dff6987a5ae2421)) | [ami-0707bfbaba3d516a7](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0707bfbaba3d516a7) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0707bfbaba3d516a7)) | -| me-south-1 | [ami-0cbc8b60bcdc562a3](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cbc8b60bcdc562a3) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cbc8b60bcdc562a3)) | [ami-08b0c93d76bf80c57](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b0c93d76bf80c57) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b0c93d76bf80c57)) | -| sa-east-1 | [ami-07710c710c595ae10](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07710c710c595ae10) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07710c710c595ae10)) | [ami-03dfdfee51c668577](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03dfdfee51c668577) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03dfdfee51c668577)) | -| us-east-1 | [ami-010d3cd2fdc72e8fb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010d3cd2fdc72e8fb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010d3cd2fdc72e8fb)) | [ami-01ee36d39b39d22fd](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ee36d39b39d22fd) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01ee36d39b39d22fd)) | -| us-east-2 | [ami-0e563c4df291290a5](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e563c4df291290a5) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e563c4df291290a5)) | [ami-0662e20e209a75749](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0662e20e209a75749) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0662e20e209a75749)) | -| us-west-1 | [ami-064e9f74440f6ebdd](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064e9f74440f6ebdd) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-064e9f74440f6ebdd)) | [ami-00916d9752b7757ed](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00916d9752b7757ed) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00916d9752b7757ed)) | -| us-west-2 | [ami-0d56a416ca044ea5f](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d56a416ca044ea5f) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d56a416ca044ea5f)) | [ami-088d85fced072a98b](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-088d85fced072a98b) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-088d85fced072a98b)) | +| af-south-1 | [ami-0e551cbe2cd59048f](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e551cbe2cd59048f) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e551cbe2cd59048f)) | [ami-05f79b71bd0b1d6d8](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f79b71bd0b1d6d8) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f79b71bd0b1d6d8)) | +| ap-east-1 | [ami-082e7d5e2fc436678](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082e7d5e2fc436678) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-082e7d5e2fc436678)) | [ami-0bc72c8f9d8294dc8](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc72c8f9d8294dc8) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc72c8f9d8294dc8)) | +| ap-northeast-1 | [ami-09934c5ddb108829e](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09934c5ddb108829e) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09934c5ddb108829e)) | [ami-07d0910049d6ebf7b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07d0910049d6ebf7b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07d0910049d6ebf7b)) | +| ap-northeast-2 | [ami-020e2e6b2d09e9c5c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020e2e6b2d09e9c5c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-020e2e6b2d09e9c5c)) | [ami-0386960cca2293f6d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0386960cca2293f6d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0386960cca2293f6d)) | +| ap-south-1 | [ami-0698a61a8ab035245](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0698a61a8ab035245) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0698a61a8ab035245)) | [ami-04905518aa5dada5e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04905518aa5dada5e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04905518aa5dada5e)) | +| ap-southeast-1 | [ami-063fee7df45bc16fa](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063fee7df45bc16fa) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063fee7df45bc16fa)) | [ami-0b607c10403e6f965](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b607c10403e6f965) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b607c10403e6f965)) | +| ap-southeast-2 | [ami-066954bba770356bd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-066954bba770356bd) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-066954bba770356bd)) | [ami-0c3289994e0ea9c9a](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3289994e0ea9c9a) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3289994e0ea9c9a)) | +| ca-central-1 | [ami-063c5ed7ac5a16a2b](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063c5ed7ac5a16a2b) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063c5ed7ac5a16a2b)) | [ami-054511fc8c34a48fe](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054511fc8c34a48fe) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054511fc8c34a48fe)) | +| eu-central-1 | [ami-0efaeb7bdcccea515](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0efaeb7bdcccea515) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0efaeb7bdcccea515)) | [ami-0059dbcc5690a4414](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0059dbcc5690a4414) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0059dbcc5690a4414)) | +| eu-north-1 | [ami-04ed22defaba10b17](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ed22defaba10b17) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ed22defaba10b17)) | [ami-0413219f87f6b6718](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0413219f87f6b6718) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0413219f87f6b6718)) | +| eu-south-1 | [ami-02720ae6a94d05ada](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02720ae6a94d05ada) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02720ae6a94d05ada)) | [ami-011c03dbdeca26100](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011c03dbdeca26100) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011c03dbdeca26100)) | +| eu-west-1 | [ami-075572c460fd74b8f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-075572c460fd74b8f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-075572c460fd74b8f)) | [ami-09108b00aee14cc99](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09108b00aee14cc99) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09108b00aee14cc99)) | +| eu-west-2 | [ami-009aacd94b84d0550](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009aacd94b84d0550) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009aacd94b84d0550)) | [ami-0bf95077dc2845331](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf95077dc2845331) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf95077dc2845331)) | +| eu-west-3 | [ami-0f6a71f646674b110](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6a71f646674b110) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6a71f646674b110)) | [ami-0476364b2343f3e48](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0476364b2343f3e48) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0476364b2343f3e48)) | +| me-south-1 | [ami-09e4d33ad7b0ea2ee](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e4d33ad7b0ea2ee) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e4d33ad7b0ea2ee)) | [ami-022eec099cb912f9e](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-022eec099cb912f9e) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-022eec099cb912f9e)) | +| sa-east-1 | [ami-02e41f7e1eab48966](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e41f7e1eab48966) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e41f7e1eab48966)) | [ami-0f4d65c1a1856293e](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f4d65c1a1856293e) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f4d65c1a1856293e)) | +| us-east-1 | [ami-0384a3570d44f88cb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0384a3570d44f88cb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0384a3570d44f88cb)) | [ami-020eb5393af978681](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020eb5393af978681) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-020eb5393af978681)) | +| us-east-2 | [ami-06208140d2cb00a11](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06208140d2cb00a11) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06208140d2cb00a11)) | [ami-00b879c5e1ee7f1cf](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00b879c5e1ee7f1cf) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00b879c5e1ee7f1cf)) | +| us-west-1 | [ami-06530b4b2d4634828](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06530b4b2d4634828) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06530b4b2d4634828)) | [ami-0071232822017ae5f](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0071232822017ae5f) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0071232822017ae5f)) | +| us-west-2 | [ami-053faf87b69687bb5](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053faf87b69687bb5) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-053faf87b69687bb5)) | [ami-066b14c0eeb28dfb2](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-066b14c0eeb28dfb2) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-066b14c0eeb28dfb2)) |

@@ -150,30 +150,30 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux Edge (2021-01-30) +### Alpine Linux Edge (2021-02-17)
click to show/hide

-| Region | alpine-ami-edge-aarch64-20210130024453 | alpine-ami-edge-x86_64-20210130024453 | +| Region | alpine-ami-edge-aarch64-20210217154938 | alpine-ami-edge-x86_64-20210217154938 | | ------ | --- | --- | -| af-south-1 | [ami-04fad639514e6da51](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04fad639514e6da51) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04fad639514e6da51)) | [ami-09de13c92f7200a7f](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09de13c92f7200a7f) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09de13c92f7200a7f)) | -| ap-east-1 | [ami-05be38d40ef502de6](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05be38d40ef502de6) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05be38d40ef502de6)) | [ami-016097e28007acee3](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-016097e28007acee3) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-016097e28007acee3)) | -| ap-northeast-1 | [ami-0bac3967629de4168](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bac3967629de4168) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bac3967629de4168)) | [ami-015f46cf95ca6b1da](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-015f46cf95ca6b1da) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-015f46cf95ca6b1da)) | -| ap-northeast-2 | [ami-03ba91c7fb32d8804](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ba91c7fb32d8804) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03ba91c7fb32d8804)) | [ami-08320354558e203ae](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08320354558e203ae) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08320354558e203ae)) | -| ap-south-1 | [ami-02b55f202b8e9c5f7](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02b55f202b8e9c5f7) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02b55f202b8e9c5f7)) | [ami-0cb7c370310ffc651](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cb7c370310ffc651) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cb7c370310ffc651)) | -| ap-southeast-1 | [ami-0a7a705569d9b8b5c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a7a705569d9b8b5c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a7a705569d9b8b5c)) | [ami-0ee88c7d13ebfd58c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ee88c7d13ebfd58c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ee88c7d13ebfd58c)) | -| ap-southeast-2 | [ami-03144ebbb2e4c7cb3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03144ebbb2e4c7cb3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03144ebbb2e4c7cb3)) | [ami-0be19d226a286582f](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be19d226a286582f) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0be19d226a286582f)) | -| ca-central-1 | [ami-0c08685b1c85399ce](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c08685b1c85399ce) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c08685b1c85399ce)) | [ami-0eba81d9864af20cd](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eba81d9864af20cd) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eba81d9864af20cd)) | -| eu-central-1 | [ami-0e27549ef7eaea513](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e27549ef7eaea513) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e27549ef7eaea513)) | [ami-08021475b657e1c1e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08021475b657e1c1e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08021475b657e1c1e)) | -| eu-north-1 | [ami-05e3240796760f008](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e3240796760f008) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05e3240796760f008)) | [ami-0bfa6a03f69403630](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bfa6a03f69403630) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bfa6a03f69403630)) | -| eu-south-1 | [ami-03e6dc03f9567dd11](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e6dc03f9567dd11) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03e6dc03f9567dd11)) | [ami-0d041ed00d2d6d213](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d041ed00d2d6d213) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d041ed00d2d6d213)) | -| eu-west-1 | [ami-08f3f27d77b700e4e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f3f27d77b700e4e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08f3f27d77b700e4e)) | [ami-04cd3e974fac6c7d5](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04cd3e974fac6c7d5) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04cd3e974fac6c7d5)) | -| eu-west-2 | [ami-09559ce56bcbf0f25](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09559ce56bcbf0f25) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09559ce56bcbf0f25)) | [ami-0607a0cdf2d4939d5](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0607a0cdf2d4939d5) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0607a0cdf2d4939d5)) | -| eu-west-3 | [ami-055ee22bfc47e5869](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-055ee22bfc47e5869) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-055ee22bfc47e5869)) | [ami-026f7776b6ed4c938](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026f7776b6ed4c938) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-026f7776b6ed4c938)) | -| me-south-1 | [ami-09cc1754ed64a79bd](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09cc1754ed64a79bd) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09cc1754ed64a79bd)) | [ami-07c0fa9e852bd102d](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07c0fa9e852bd102d) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07c0fa9e852bd102d)) | -| sa-east-1 | [ami-0b8c175acd6923715](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b8c175acd6923715) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b8c175acd6923715)) | [ami-0b9ee56f6aab3c9d3](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9ee56f6aab3c9d3) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9ee56f6aab3c9d3)) | -| us-east-1 | [ami-0a9670da24bd75f68](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a9670da24bd75f68) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a9670da24bd75f68)) | [ami-01fa766cb33fcd5bd](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01fa766cb33fcd5bd) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01fa766cb33fcd5bd)) | -| us-east-2 | [ami-0b56a893924afc540](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b56a893924afc540) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b56a893924afc540)) | [ami-0549f4ca0143f0fc2](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0549f4ca0143f0fc2) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0549f4ca0143f0fc2)) | -| us-west-1 | [ami-03f749f32f6351cce](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03f749f32f6351cce) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03f749f32f6351cce)) | [ami-0bdc14e06657839de](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bdc14e06657839de) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bdc14e06657839de)) | -| us-west-2 | [ami-02630ac0a340043f0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02630ac0a340043f0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02630ac0a340043f0)) | [ami-0d2cdf74a929d4005](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d2cdf74a929d4005) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d2cdf74a929d4005)) | +| af-south-1 | [ami-029cc30211ce9dd01](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029cc30211ce9dd01) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029cc30211ce9dd01)) | [ami-02a67e131e171e3e6](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a67e131e171e3e6) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02a67e131e171e3e6)) | +| ap-east-1 | [ami-084a49494cf0edf77](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-084a49494cf0edf77) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-084a49494cf0edf77)) | [ami-01c2d8b6eae86825f](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c2d8b6eae86825f) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c2d8b6eae86825f)) | +| ap-northeast-1 | [ami-0bb8804242350df38](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb8804242350df38) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb8804242350df38)) | [ami-0d77651167c64df43](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d77651167c64df43) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d77651167c64df43)) | +| ap-northeast-2 | [ami-013f0a85c0abc1b13](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013f0a85c0abc1b13) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013f0a85c0abc1b13)) | [ami-0296eb07bc6598b5c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0296eb07bc6598b5c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0296eb07bc6598b5c)) | +| ap-south-1 | [ami-0e90994ace5abb4a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e90994ace5abb4a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e90994ace5abb4a2)) | [ami-07e08e24fc8f2b1bc](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e08e24fc8f2b1bc) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07e08e24fc8f2b1bc)) | +| ap-southeast-1 | [ami-05ff88756d8585b1a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05ff88756d8585b1a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05ff88756d8585b1a)) | [ami-0bc86021a1dce5681](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc86021a1dce5681) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc86021a1dce5681)) | +| ap-southeast-2 | [ami-0314c3bc31e30b999](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0314c3bc31e30b999) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0314c3bc31e30b999)) | [ami-01a842c6f331e083c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01a842c6f331e083c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01a842c6f331e083c)) | +| ca-central-1 | [ami-021ca7735aea8ed00](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-021ca7735aea8ed00) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-021ca7735aea8ed00)) | [ami-05578e9971a65fd77](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05578e9971a65fd77) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05578e9971a65fd77)) | +| eu-central-1 | [ami-0bd83a4db94231125](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd83a4db94231125) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd83a4db94231125)) | [ami-0677a95807850dee3](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0677a95807850dee3) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0677a95807850dee3)) | +| eu-north-1 | [ami-0916068ec228db725](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0916068ec228db725) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0916068ec228db725)) | [ami-029824bb845163dc0](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029824bb845163dc0) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029824bb845163dc0)) | +| eu-south-1 | [ami-0d20fbdd49975b67b](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d20fbdd49975b67b) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d20fbdd49975b67b)) | [ami-0c7924033c1d44f88](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c7924033c1d44f88) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c7924033c1d44f88)) | +| eu-west-1 | [ami-0ceb2ee8a2668609f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ceb2ee8a2668609f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ceb2ee8a2668609f)) | [ami-0f2594aaefc3ff5e6](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2594aaefc3ff5e6) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2594aaefc3ff5e6)) | +| eu-west-2 | [ami-04a3a27e2e650e723](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04a3a27e2e650e723) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04a3a27e2e650e723)) | [ami-078201a628b41e7fe](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-078201a628b41e7fe) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-078201a628b41e7fe)) | +| eu-west-3 | [ami-02444c213c5dff98b](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02444c213c5dff98b) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-02444c213c5dff98b)) | [ami-0bd6c167b453c9349](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd6c167b453c9349) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd6c167b453c9349)) | +| me-south-1 | [ami-0259b266b8b53ea2b](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0259b266b8b53ea2b) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0259b266b8b53ea2b)) | [ami-0fc1a33a57c0372b8](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc1a33a57c0372b8) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc1a33a57c0372b8)) | +| sa-east-1 | [ami-0f1b127fc92be4e8e](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1b127fc92be4e8e) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1b127fc92be4e8e)) | [ami-023eee7a213cd2413](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023eee7a213cd2413) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023eee7a213cd2413)) | +| us-east-1 | [ami-05904f36c6a15b168](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05904f36c6a15b168) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05904f36c6a15b168)) | [ami-09e88488c82bf7d23](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e88488c82bf7d23) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e88488c82bf7d23)) | +| us-east-2 | [ami-0add6a0d1d779ed2b](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0add6a0d1d779ed2b) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0add6a0d1d779ed2b)) | [ami-0dca6c6c306575d1b](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dca6c6c306575d1b) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0dca6c6c306575d1b)) | +| us-west-1 | [ami-0064de4e0099af91f](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0064de4e0099af91f) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0064de4e0099af91f)) | [ami-0572f8a66e97a96d9](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0572f8a66e97a96d9) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0572f8a66e97a96d9)) | +| us-west-2 | [ami-01954f38d0fbb16d2](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01954f38d0fbb16d2) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01954f38d0fbb16d2)) | [ami-07bca6e961a1f68fb](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bca6e961a1f68fb) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07bca6e961a1f68fb)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 5078ac8..da52454 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,70 +1,70 @@ -3.13.1: - v3_13-aarch64: - alpine-ami-3.13.1-aarch64-r0: - description: Alpine Linux 3.13.1 aarch64 r0 - https://alpinelinux.org/cloud - profile: alpine - profile_build: v3_13-aarch64 - version: '3.13' - release: 3.13.1 - arch: aarch64 - revision: r0 - creation_date: '2021-01-30T02:56:44.000Z' - end_of_life: '2022-11-01T00:00:00' - build_time: 1612004204 - artifacts: - af-south-1: ami-01ab6a756d0408d33 - eu-north-1: ami-0043b5129ae0461fc - ap-south-1: ami-079f494c27df9b22b - eu-west-3: ami-06dff6987a5ae2421 - eu-west-2: ami-0bd019b06c0a54848 - eu-south-1: ami-0d6fe31535a21078f - eu-west-1: ami-09e7f2719e86dec49 - ap-northeast-2: ami-061152a5ffbdb1bba - me-south-1: ami-0cbc8b60bcdc562a3 - ap-northeast-1: ami-02042788e53a138a8 - sa-east-1: ami-07710c710c595ae10 - ca-central-1: ami-071535ea72bf74f9a - ap-east-1: ami-0e83973ccf9bfb82e - ap-southeast-1: ami-05f62fb6ee08c4514 - ap-southeast-2: ami-087f8254a00a973ae - eu-central-1: ami-0f18b001c15c5a435 - us-east-1: ami-010d3cd2fdc72e8fb - us-east-2: ami-0e563c4df291290a5 - us-west-1: ami-064e9f74440f6ebdd - us-west-2: ami-0d56a416ca044ea5f +3.13.2: v3_13-x86_64: - alpine-ami-3.13.1-x86_64-r0: - description: Alpine Linux 3.13.1 x86_64 r0 - https://alpinelinux.org/cloud + alpine-ami-3.13.2-x86_64-r0: + description: Alpine Linux 3.13.2 x86_64 r0 - https://alpinelinux.org/cloud profile: alpine profile_build: v3_13-x86_64 version: '3.13' - release: 3.13.1 + release: 3.13.2 arch: x86_64 revision: r0 - creation_date: '2021-01-30T02:53:53.000Z' + creation_date: '2021-02-17T15:57:42.000Z' end_of_life: '2022-11-01T00:00:00' - build_time: 1612004033 + build_time: 1613606262 artifacts: - af-south-1: ami-032b9b04f6ed1dc55 - eu-north-1: ami-08ce059d538f9f14c - ap-south-1: ami-02af8b12bd1a7f528 - eu-west-3: ami-0707bfbaba3d516a7 - eu-west-2: ami-0ed088a19fe4ce2bf - eu-south-1: ami-0b892f78616f16676 - eu-west-1: ami-067316662464af0b0 - ap-northeast-2: ami-0d7e9c9da66b0212c - me-south-1: ami-08b0c93d76bf80c57 - ap-northeast-1: ami-0c73a01e0a1e4dc5f - sa-east-1: ami-03dfdfee51c668577 - ca-central-1: ami-0f14a433479baa552 - ap-east-1: ami-0eba760f357cf49cb - ap-southeast-1: ami-049ce80d284d85785 - ap-southeast-2: ami-06bc7f180be7dbb5d - eu-central-1: ami-0fca91b4d2142587c - us-east-1: ami-01ee36d39b39d22fd - us-east-2: ami-0662e20e209a75749 - us-west-1: ami-00916d9752b7757ed - us-west-2: ami-088d85fced072a98b + af-south-1: ami-05f79b71bd0b1d6d8 + eu-north-1: ami-0413219f87f6b6718 + ap-south-1: ami-04905518aa5dada5e + eu-west-3: ami-0476364b2343f3e48 + eu-west-2: ami-0bf95077dc2845331 + eu-south-1: ami-011c03dbdeca26100 + eu-west-1: ami-09108b00aee14cc99 + ap-northeast-2: ami-0386960cca2293f6d + me-south-1: ami-022eec099cb912f9e + ap-northeast-1: ami-07d0910049d6ebf7b + sa-east-1: ami-0f4d65c1a1856293e + ca-central-1: ami-054511fc8c34a48fe + ap-east-1: ami-0bc72c8f9d8294dc8 + ap-southeast-1: ami-0b607c10403e6f965 + ap-southeast-2: ami-0c3289994e0ea9c9a + eu-central-1: ami-0059dbcc5690a4414 + us-east-1: ami-020eb5393af978681 + us-east-2: ami-00b879c5e1ee7f1cf + us-west-1: ami-0071232822017ae5f + us-west-2: ami-066b14c0eeb28dfb2 + v3_13-aarch64: + alpine-ami-3.13.2-aarch64-r0: + description: Alpine Linux 3.13.2 aarch64 r0 - https://alpinelinux.org/cloud + profile: alpine + profile_build: v3_13-aarch64 + version: '3.13' + release: 3.13.2 + arch: aarch64 + revision: r0 + creation_date: '2021-02-17T16:01:05.000Z' + end_of_life: '2022-11-01T00:00:00' + build_time: 1613606465 + artifacts: + af-south-1: ami-0e551cbe2cd59048f + eu-north-1: ami-04ed22defaba10b17 + ap-south-1: ami-0698a61a8ab035245 + eu-west-3: ami-0f6a71f646674b110 + eu-west-2: ami-009aacd94b84d0550 + eu-south-1: ami-02720ae6a94d05ada + eu-west-1: ami-075572c460fd74b8f + ap-northeast-2: ami-020e2e6b2d09e9c5c + me-south-1: ami-09e4d33ad7b0ea2ee + ap-northeast-1: ami-09934c5ddb108829e + sa-east-1: ami-02e41f7e1eab48966 + ca-central-1: ami-063c5ed7ac5a16a2b + ap-east-1: ami-082e7d5e2fc436678 + ap-southeast-1: ami-063fee7df45bc16fa + ap-southeast-2: ami-066954bba770356bd + eu-central-1: ami-0efaeb7bdcccea515 + us-east-1: ami-0384a3570d44f88cb + us-east-2: ami-06208140d2cb00a11 + us-west-1: ami-06530b4b2d4634828 + us-west-2: ami-053faf87b69687bb5 3.12.3: v3_12-aarch64: alpine-ami-3.12.3-aarch64-r0: @@ -134,71 +134,71 @@ us-west-2: ami-009f13dc01dec6a56 edge: edge-aarch64: - alpine-ami-edge-aarch64-20210130024453: - description: Alpine Linux edge aarch64 20210130024453 - https://alpinelinux.org/cloud + alpine-ami-edge-aarch64-20210217154938: + description: Alpine Linux edge aarch64 20210217154938 - https://alpinelinux.org/cloud profile: alpine profile_build: edge-aarch64 version: edge release: edge arch: aarch64 - revision: '20210130024453' - creation_date: '2021-01-30T02:47:25.000Z' - end_of_life: '2021-01-31T02:44:53' - build_time: 1612003645 + revision: '20210217154938' + creation_date: '2021-02-17T15:51:36.000Z' + end_of_life: '2021-02-18T15:49:38' + build_time: 1613605896 artifacts: - af-south-1: ami-04fad639514e6da51 - eu-north-1: ami-05e3240796760f008 - ap-south-1: ami-02b55f202b8e9c5f7 - eu-west-3: ami-055ee22bfc47e5869 - eu-west-2: ami-09559ce56bcbf0f25 - eu-south-1: ami-03e6dc03f9567dd11 - eu-west-1: ami-08f3f27d77b700e4e - ap-northeast-2: ami-03ba91c7fb32d8804 - me-south-1: ami-09cc1754ed64a79bd - ap-northeast-1: ami-0bac3967629de4168 - sa-east-1: ami-0b8c175acd6923715 - ca-central-1: ami-0c08685b1c85399ce - ap-east-1: ami-05be38d40ef502de6 - ap-southeast-1: ami-0a7a705569d9b8b5c - ap-southeast-2: ami-03144ebbb2e4c7cb3 - eu-central-1: ami-0e27549ef7eaea513 - us-east-1: ami-0a9670da24bd75f68 - us-east-2: ami-0b56a893924afc540 - us-west-1: ami-03f749f32f6351cce - us-west-2: ami-02630ac0a340043f0 + af-south-1: ami-029cc30211ce9dd01 + eu-north-1: ami-0916068ec228db725 + ap-south-1: ami-0e90994ace5abb4a2 + eu-west-3: ami-02444c213c5dff98b + eu-west-2: ami-04a3a27e2e650e723 + eu-south-1: ami-0d20fbdd49975b67b + eu-west-1: ami-0ceb2ee8a2668609f + ap-northeast-2: ami-013f0a85c0abc1b13 + me-south-1: ami-0259b266b8b53ea2b + ap-northeast-1: ami-0bb8804242350df38 + sa-east-1: ami-0f1b127fc92be4e8e + ca-central-1: ami-021ca7735aea8ed00 + ap-east-1: ami-084a49494cf0edf77 + ap-southeast-1: ami-05ff88756d8585b1a + ap-southeast-2: ami-0314c3bc31e30b999 + eu-central-1: ami-0bd83a4db94231125 + us-east-1: ami-05904f36c6a15b168 + us-east-2: ami-0add6a0d1d779ed2b + us-west-1: ami-0064de4e0099af91f + us-west-2: ami-01954f38d0fbb16d2 edge-x86_64: - alpine-ami-edge-x86_64-20210130024453: - description: Alpine Linux edge x86_64 20210130024453 - https://alpinelinux.org/cloud + alpine-ami-edge-x86_64-20210217154938: + description: Alpine Linux edge x86_64 20210217154938 - https://alpinelinux.org/cloud profile: alpine profile_build: edge-x86_64 version: edge release: edge arch: x86_64 - revision: '20210130024453' - creation_date: '2021-01-30T02:49:52.000Z' - end_of_life: '2021-01-31T02:44:53' - build_time: 1612003792 + revision: '20210217154938' + creation_date: '2021-02-17T15:54:40.000Z' + end_of_life: '2021-02-18T15:49:38' + build_time: 1613606080 artifacts: - af-south-1: ami-09de13c92f7200a7f - eu-north-1: ami-0bfa6a03f69403630 - ap-south-1: ami-0cb7c370310ffc651 - eu-west-3: ami-026f7776b6ed4c938 - eu-west-2: ami-0607a0cdf2d4939d5 - eu-south-1: ami-0d041ed00d2d6d213 - eu-west-1: ami-04cd3e974fac6c7d5 - ap-northeast-2: ami-08320354558e203ae - me-south-1: ami-07c0fa9e852bd102d - ap-northeast-1: ami-015f46cf95ca6b1da - sa-east-1: ami-0b9ee56f6aab3c9d3 - ca-central-1: ami-0eba81d9864af20cd - ap-east-1: ami-016097e28007acee3 - ap-southeast-1: ami-0ee88c7d13ebfd58c - ap-southeast-2: ami-0be19d226a286582f - eu-central-1: ami-08021475b657e1c1e - us-east-1: ami-01fa766cb33fcd5bd - us-east-2: ami-0549f4ca0143f0fc2 - us-west-1: ami-0bdc14e06657839de - us-west-2: ami-0d2cdf74a929d4005 + af-south-1: ami-02a67e131e171e3e6 + eu-north-1: ami-029824bb845163dc0 + ap-south-1: ami-07e08e24fc8f2b1bc + eu-west-3: ami-0bd6c167b453c9349 + eu-west-2: ami-078201a628b41e7fe + eu-south-1: ami-0c7924033c1d44f88 + eu-west-1: ami-0f2594aaefc3ff5e6 + ap-northeast-2: ami-0296eb07bc6598b5c + me-south-1: ami-0fc1a33a57c0372b8 + ap-northeast-1: ami-0d77651167c64df43 + sa-east-1: ami-023eee7a213cd2413 + ca-central-1: ami-05578e9971a65fd77 + ap-east-1: ami-01c2d8b6eae86825f + ap-southeast-1: ami-0bc86021a1dce5681 + ap-southeast-2: ami-01a842c6f331e083c + eu-central-1: ami-0677a95807850dee3 + us-east-1: ami-09e88488c82bf7d23 + us-east-2: ami-0dca6c6c306575d1b + us-west-1: ami-0572f8a66e97a96d9 + us-west-2: ami-07bca6e961a1f68fb 3.11.7: v3_11-x86_64: alpine-ami-3.11.7-x86_64-r0: From 19dc1beaa6471b4a99e064d941eed1fdd5f59bcf Mon Sep 17 00:00:00 2001 From: tomalok Date: Wed, 31 Mar 2021 18:53:54 -0700 Subject: [PATCH 109/125] New releases (3.13.4, 3.12.6, 3.11.10, 3.10.8) (#116) Addresses CVE-2021-28831 --- releases/README.md | 225 +++++++++++------------ releases/alpine.yaml | 420 ++++++++++++++++++++++--------------------- 2 files changed, 329 insertions(+), 316 deletions(-) diff --git a/releases/README.md b/releases/README.md index f586e05..a92cf65 100644 --- a/releases/README.md +++ b/releases/README.md @@ -38,142 +38,147 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.13.2 (2021-02-18) +### Alpine Linux 3.13.4 (2021-04-01)
click to show/hide

-| Region | alpine-ami-3.13.2-aarch64-r0 | alpine-ami-3.13.2-x86_64-r0 | +| Region | alpine-ami-3.13.4-aarch64-r0 | alpine-ami-3.13.4-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-0e551cbe2cd59048f](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e551cbe2cd59048f) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e551cbe2cd59048f)) | [ami-05f79b71bd0b1d6d8](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f79b71bd0b1d6d8) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f79b71bd0b1d6d8)) | -| ap-east-1 | [ami-082e7d5e2fc436678](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082e7d5e2fc436678) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-082e7d5e2fc436678)) | [ami-0bc72c8f9d8294dc8](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc72c8f9d8294dc8) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc72c8f9d8294dc8)) | -| ap-northeast-1 | [ami-09934c5ddb108829e](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09934c5ddb108829e) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09934c5ddb108829e)) | [ami-07d0910049d6ebf7b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07d0910049d6ebf7b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07d0910049d6ebf7b)) | -| ap-northeast-2 | [ami-020e2e6b2d09e9c5c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020e2e6b2d09e9c5c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-020e2e6b2d09e9c5c)) | [ami-0386960cca2293f6d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0386960cca2293f6d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0386960cca2293f6d)) | -| ap-south-1 | [ami-0698a61a8ab035245](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0698a61a8ab035245) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0698a61a8ab035245)) | [ami-04905518aa5dada5e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04905518aa5dada5e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04905518aa5dada5e)) | -| ap-southeast-1 | [ami-063fee7df45bc16fa](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063fee7df45bc16fa) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063fee7df45bc16fa)) | [ami-0b607c10403e6f965](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b607c10403e6f965) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b607c10403e6f965)) | -| ap-southeast-2 | [ami-066954bba770356bd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-066954bba770356bd) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-066954bba770356bd)) | [ami-0c3289994e0ea9c9a](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3289994e0ea9c9a) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3289994e0ea9c9a)) | -| ca-central-1 | [ami-063c5ed7ac5a16a2b](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-063c5ed7ac5a16a2b) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-063c5ed7ac5a16a2b)) | [ami-054511fc8c34a48fe](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-054511fc8c34a48fe) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-054511fc8c34a48fe)) | -| eu-central-1 | [ami-0efaeb7bdcccea515](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0efaeb7bdcccea515) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0efaeb7bdcccea515)) | [ami-0059dbcc5690a4414](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0059dbcc5690a4414) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0059dbcc5690a4414)) | -| eu-north-1 | [ami-04ed22defaba10b17](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ed22defaba10b17) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ed22defaba10b17)) | [ami-0413219f87f6b6718](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0413219f87f6b6718) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0413219f87f6b6718)) | -| eu-south-1 | [ami-02720ae6a94d05ada](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02720ae6a94d05ada) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02720ae6a94d05ada)) | [ami-011c03dbdeca26100](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011c03dbdeca26100) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011c03dbdeca26100)) | -| eu-west-1 | [ami-075572c460fd74b8f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-075572c460fd74b8f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-075572c460fd74b8f)) | [ami-09108b00aee14cc99](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09108b00aee14cc99) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09108b00aee14cc99)) | -| eu-west-2 | [ami-009aacd94b84d0550](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009aacd94b84d0550) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009aacd94b84d0550)) | [ami-0bf95077dc2845331](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf95077dc2845331) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf95077dc2845331)) | -| eu-west-3 | [ami-0f6a71f646674b110](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6a71f646674b110) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6a71f646674b110)) | [ami-0476364b2343f3e48](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0476364b2343f3e48) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0476364b2343f3e48)) | -| me-south-1 | [ami-09e4d33ad7b0ea2ee](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e4d33ad7b0ea2ee) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e4d33ad7b0ea2ee)) | [ami-022eec099cb912f9e](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-022eec099cb912f9e) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-022eec099cb912f9e)) | -| sa-east-1 | [ami-02e41f7e1eab48966](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e41f7e1eab48966) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e41f7e1eab48966)) | [ami-0f4d65c1a1856293e](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f4d65c1a1856293e) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f4d65c1a1856293e)) | -| us-east-1 | [ami-0384a3570d44f88cb](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0384a3570d44f88cb) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0384a3570d44f88cb)) | [ami-020eb5393af978681](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020eb5393af978681) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-020eb5393af978681)) | -| us-east-2 | [ami-06208140d2cb00a11](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06208140d2cb00a11) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06208140d2cb00a11)) | [ami-00b879c5e1ee7f1cf](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00b879c5e1ee7f1cf) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00b879c5e1ee7f1cf)) | -| us-west-1 | [ami-06530b4b2d4634828](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06530b4b2d4634828) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06530b4b2d4634828)) | [ami-0071232822017ae5f](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0071232822017ae5f) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0071232822017ae5f)) | -| us-west-2 | [ami-053faf87b69687bb5](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053faf87b69687bb5) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-053faf87b69687bb5)) | [ami-066b14c0eeb28dfb2](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-066b14c0eeb28dfb2) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-066b14c0eeb28dfb2)) | +| af-south-1 | [ami-0f509fde55c46bf59](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f509fde55c46bf59) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f509fde55c46bf59)) | [ami-04f2477fcded9065d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04f2477fcded9065d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04f2477fcded9065d)) | +| ap-east-1 | [ami-011730d89acc31fbb](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011730d89acc31fbb) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011730d89acc31fbb)) | [ami-0fb14ab2ee170ad89](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb14ab2ee170ad89) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb14ab2ee170ad89)) | +| ap-northeast-1 | [ami-08c8b3e75da3370b6](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c8b3e75da3370b6) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c8b3e75da3370b6)) | [ami-08de64935ea41e8df](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08de64935ea41e8df) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08de64935ea41e8df)) | +| ap-northeast-2 | [ami-075173307a0bc645d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-075173307a0bc645d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-075173307a0bc645d)) | [ami-07a0bb78ade906d73](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a0bb78ade906d73) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07a0bb78ade906d73)) | +| ap-northeast-3 | [ami-00e5abb5ba7a506ae](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e5abb5ba7a506ae) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00e5abb5ba7a506ae)) | [ami-03b8eb8780b5263a7](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03b8eb8780b5263a7) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-03b8eb8780b5263a7)) | +| ap-south-1 | [ami-0ab9eb18d466662dd](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ab9eb18d466662dd) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ab9eb18d466662dd)) | [ami-0785aac7b5687eb2b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0785aac7b5687eb2b) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0785aac7b5687eb2b)) | +| ap-southeast-1 | [ami-0de26e6d4c6164737](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0de26e6d4c6164737) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0de26e6d4c6164737)) | [ami-0dc12655f44f4bddd](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc12655f44f4bddd) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc12655f44f4bddd)) | +| ap-southeast-2 | [ami-07be724f9ff518cf2](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07be724f9ff518cf2) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07be724f9ff518cf2)) | [ami-09cd10aded1798a78](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09cd10aded1798a78) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09cd10aded1798a78)) | +| ca-central-1 | [ami-0f4195b0eb4b4b6ab](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f4195b0eb4b4b6ab) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f4195b0eb4b4b6ab)) | [ami-05bf415838736fabe](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05bf415838736fabe) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05bf415838736fabe)) | +| eu-central-1 | [ami-0e3c147576c6d305b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3c147576c6d305b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3c147576c6d305b)) | [ami-00b0f629424d9126c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00b0f629424d9126c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00b0f629424d9126c)) | +| eu-north-1 | [ami-0346deae3e4bf298b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0346deae3e4bf298b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0346deae3e4bf298b)) | [ami-0eb2663f6ef26343b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb2663f6ef26343b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb2663f6ef26343b)) | +| eu-south-1 | [ami-0e2ac541ddf379e83](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2ac541ddf379e83) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2ac541ddf379e83)) | [ami-08581e191cd8a8dd4](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08581e191cd8a8dd4) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08581e191cd8a8dd4)) | +| eu-west-1 | [ami-00f9e4bedb6bb8abc](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00f9e4bedb6bb8abc) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00f9e4bedb6bb8abc)) | [ami-077241f9ba4fb5b2f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-077241f9ba4fb5b2f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-077241f9ba4fb5b2f)) | +| eu-west-2 | [ami-0788e298788ad73b7](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0788e298788ad73b7) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0788e298788ad73b7)) | [ami-027c3ebdf0f7e2334](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027c3ebdf0f7e2334) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-027c3ebdf0f7e2334)) | +| eu-west-3 | [ami-0f78f27312019fe82](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f78f27312019fe82) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f78f27312019fe82)) | [ami-0183e005493fff43d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0183e005493fff43d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0183e005493fff43d)) | +| me-south-1 | [ami-0dd1b7971f44d31df](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dd1b7971f44d31df) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd1b7971f44d31df)) | [ami-0a461424f2cbd7703](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a461424f2cbd7703) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a461424f2cbd7703)) | +| sa-east-1 | [ami-0a1f50279b17fd87b](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a1f50279b17fd87b) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a1f50279b17fd87b)) | [ami-02dcad0d6eace1774](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02dcad0d6eace1774) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02dcad0d6eace1774)) | +| us-east-1 | [ami-027de81a1ce32c074](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027de81a1ce32c074) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-027de81a1ce32c074)) | [ami-01bced83ff9507b45](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01bced83ff9507b45) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01bced83ff9507b45)) | +| us-east-2 | [ami-0e2d79df04778c59c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2d79df04778c59c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2d79df04778c59c)) | [ami-06bd628a1c00663db](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06bd628a1c00663db) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06bd628a1c00663db)) | +| us-west-1 | [ami-070a5da5c26833c62](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-070a5da5c26833c62) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-070a5da5c26833c62)) | [ami-0c60d72a56731446c](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c60d72a56731446c) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c60d72a56731446c)) | +| us-west-2 | [ami-04b2b26abc19e8000](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b2b26abc19e8000) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04b2b26abc19e8000)) | [ami-097fcd1af8f5f8b1a](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097fcd1af8f5f8b1a) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-097fcd1af8f5f8b1a)) |

-### Alpine Linux 3.12.3 (2020-12-19) +### Alpine Linux 3.12.6 (2021-04-01)
click to show/hide

-| Region | alpine-ami-3.12.3-aarch64-r0 | alpine-ami-3.12.3-x86_64-r0 | +| Region | alpine-ami-3.12.6-aarch64-r0 | alpine-ami-3.12.6-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-025ddc2e2931d0bf2](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-025ddc2e2931d0bf2) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-025ddc2e2931d0bf2)) | [ami-06d5540221d65ca01](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d5540221d65ca01) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06d5540221d65ca01)) | -| ap-east-1 | [ami-023ba7dde5800c5b5](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023ba7dde5800c5b5) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023ba7dde5800c5b5)) | [ami-02c576f223356bf34](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02c576f223356bf34) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02c576f223356bf34)) | -| ap-northeast-1 | [ami-010debbee0fe7fbcb](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-010debbee0fe7fbcb) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-010debbee0fe7fbcb)) | [ami-0250e4a691729357a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0250e4a691729357a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0250e4a691729357a)) | -| ap-northeast-2 | [ami-09702b3f22e8616c8](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09702b3f22e8616c8) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09702b3f22e8616c8)) | [ami-0cfb5eabfb58d5f72](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cfb5eabfb58d5f72) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cfb5eabfb58d5f72)) | -| ap-south-1 | [ami-00de8b114b35175e6](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00de8b114b35175e6) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00de8b114b35175e6)) | [ami-023fe0b4c4dc73f8c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023fe0b4c4dc73f8c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023fe0b4c4dc73f8c)) | -| ap-southeast-1 | [ami-0e3ff62bec8a2f949](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3ff62bec8a2f949) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3ff62bec8a2f949)) | [ami-0f06993534aec820f](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f06993534aec820f) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f06993534aec820f)) | -| ap-southeast-2 | [ami-077f7467876246e89](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-077f7467876246e89) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-077f7467876246e89)) | [ami-0f66203a3a619f732](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f66203a3a619f732) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f66203a3a619f732)) | -| ca-central-1 | [ami-0a1a8875a6a460565](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a1a8875a6a460565) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a1a8875a6a460565)) | [ami-0a5084eac39a18d31](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5084eac39a18d31) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5084eac39a18d31)) | -| eu-central-1 | [ami-00e9dcc013b89ec7b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e9dcc013b89ec7b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00e9dcc013b89ec7b)) | [ami-06a298dc479cf2a73](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a298dc479cf2a73) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a298dc479cf2a73)) | -| eu-north-1 | [ami-0e3ad874b66b72f5b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3ad874b66b72f5b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3ad874b66b72f5b)) | [ami-051fcf0312ac02b05](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051fcf0312ac02b05) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051fcf0312ac02b05)) | -| eu-south-1 | [ami-084274896601da8f5](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-084274896601da8f5) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-084274896601da8f5)) | [ami-06b311d896c16a3a2](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b311d896c16a3a2) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b311d896c16a3a2)) | -| eu-west-1 | [ami-055f823d50dc901c0](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-055f823d50dc901c0) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-055f823d50dc901c0)) | [ami-0846229ad28aefe20](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0846229ad28aefe20) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0846229ad28aefe20)) | -| eu-west-2 | [ami-08b76009eb990b44a](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b76009eb990b44a) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08b76009eb990b44a)) | [ami-01282190055d34e3e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01282190055d34e3e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01282190055d34e3e)) | -| eu-west-3 | [ami-0d3cfa58b050f7090](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d3cfa58b050f7090) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d3cfa58b050f7090)) | [ami-0fa68ac5365833d75](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa68ac5365833d75) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa68ac5365833d75)) | -| me-south-1 | [ami-05a9eaed7e7f67c95](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05a9eaed7e7f67c95) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05a9eaed7e7f67c95)) | [ami-0bee0f3b523892c11](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bee0f3b523892c11) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bee0f3b523892c11)) | -| sa-east-1 | [ami-00890e1d93b0d2750](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00890e1d93b0d2750) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00890e1d93b0d2750)) | [ami-0af3d5295dfa78f9a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0af3d5295dfa78f9a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0af3d5295dfa78f9a)) | -| us-east-1 | [ami-044f158b810baa6d4](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-044f158b810baa6d4) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-044f158b810baa6d4)) | [ami-098a996634a88542f](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098a996634a88542f) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098a996634a88542f)) | -| us-east-2 | [ami-0973e3c7bc90a4801](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0973e3c7bc90a4801) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0973e3c7bc90a4801)) | [ami-07012d290ef9c028e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07012d290ef9c028e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07012d290ef9c028e)) | -| us-west-1 | [ami-01834462564dfb367](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01834462564dfb367) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01834462564dfb367)) | [ami-0570d3bcb39152bb8](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0570d3bcb39152bb8) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0570d3bcb39152bb8)) | -| us-west-2 | [ami-0bedcc0226437e2e0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bedcc0226437e2e0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bedcc0226437e2e0)) | [ami-009f13dc01dec6a56](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009f13dc01dec6a56) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009f13dc01dec6a56)) | +| af-south-1 | [ami-03ab04691eb81305c](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ab04691eb81305c) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ab04691eb81305c)) | [ami-097362ad2c7e85ff9](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097362ad2c7e85ff9) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097362ad2c7e85ff9)) | +| ap-east-1 | [ami-0459f125559cf7a43](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0459f125559cf7a43) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0459f125559cf7a43)) | [ami-0b2f408adba9eeb77](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b2f408adba9eeb77) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b2f408adba9eeb77)) | +| ap-northeast-1 | [ami-000eac2e53f67665f](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-000eac2e53f67665f) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-000eac2e53f67665f)) | [ami-04ad869c5351c4192](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ad869c5351c4192) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ad869c5351c4192)) | +| ap-northeast-2 | [ami-06c34515664686178](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c34515664686178) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06c34515664686178)) | [ami-0a32b105087e18bee](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a32b105087e18bee) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a32b105087e18bee)) | +| ap-northeast-3 | [ami-0ead6fb75ae44a638](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ead6fb75ae44a638) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ead6fb75ae44a638)) | [ami-097cd1087a7bdba68](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097cd1087a7bdba68) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-097cd1087a7bdba68)) | +| ap-south-1 | [ami-0e2ded5942d9f058a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2ded5942d9f058a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2ded5942d9f058a)) | [ami-02f7fad0ef8a7a256](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02f7fad0ef8a7a256) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02f7fad0ef8a7a256)) | +| ap-southeast-1 | [ami-020626262951dbc65](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020626262951dbc65) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-020626262951dbc65)) | [ami-08c39f595d52dca8e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c39f595d52dca8e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c39f595d52dca8e)) | +| ap-southeast-2 | [ami-03564a4226e171ad3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03564a4226e171ad3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03564a4226e171ad3)) | [ami-01048f21bc59439dc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01048f21bc59439dc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01048f21bc59439dc)) | +| ca-central-1 | [ami-0ca25a25dab4f1217](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca25a25dab4f1217) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca25a25dab4f1217)) | [ami-00291d1e8ccb722b8](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00291d1e8ccb722b8) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00291d1e8ccb722b8)) | +| eu-central-1 | [ami-04b3f9222e48b0ec9](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b3f9222e48b0ec9) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04b3f9222e48b0ec9)) | [ami-0e6fd319034a18b22](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e6fd319034a18b22) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e6fd319034a18b22)) | +| eu-north-1 | [ami-0b2dad251f2256360](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b2dad251f2256360) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b2dad251f2256360)) | [ami-0d28e9d23c6c597d1](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d28e9d23c6c597d1) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d28e9d23c6c597d1)) | +| eu-south-1 | [ami-011a9aa0df80eb270](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011a9aa0df80eb270) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011a9aa0df80eb270)) | [ami-0bb3b5d002f0778d9](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb3b5d002f0778d9) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb3b5d002f0778d9)) | +| eu-west-1 | [ami-01b95ab1ae982646d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01b95ab1ae982646d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01b95ab1ae982646d)) | [ami-071c81995fc2994aa](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071c81995fc2994aa) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-071c81995fc2994aa)) | +| eu-west-2 | [ami-0f004bda3e137c9d7](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f004bda3e137c9d7) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f004bda3e137c9d7)) | [ami-07e3e0856ba7ce738](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e3e0856ba7ce738) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07e3e0856ba7ce738)) | +| eu-west-3 | [ami-0458bb347b0db93f4](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0458bb347b0db93f4) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0458bb347b0db93f4)) | [ami-0d64e022b8cae50a0](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d64e022b8cae50a0) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d64e022b8cae50a0)) | +| me-south-1 | [ami-0b0c91c634b292491](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b0c91c634b292491) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b0c91c634b292491)) | [ami-009145fed3bc9e080](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009145fed3bc9e080) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-009145fed3bc9e080)) | +| sa-east-1 | [ami-0b4c8e7e7544fb79a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b4c8e7e7544fb79a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b4c8e7e7544fb79a)) | [ami-031a78cf394ec960a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-031a78cf394ec960a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-031a78cf394ec960a)) | +| us-east-1 | [ami-0aeecf1728e214ec9](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aeecf1728e214ec9) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aeecf1728e214ec9)) | [ami-008cce027b7fe1960](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008cce027b7fe1960) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008cce027b7fe1960)) | +| us-east-2 | [ami-08642448ee0a4d1af](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08642448ee0a4d1af) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08642448ee0a4d1af)) | [ami-0e07027f974ce204e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e07027f974ce204e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e07027f974ce204e)) | +| us-west-1 | [ami-0eb6b5f081ed1945b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb6b5f081ed1945b) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb6b5f081ed1945b)) | [ami-051b7cdbd85c7975a](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051b7cdbd85c7975a) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051b7cdbd85c7975a)) | +| us-west-2 | [ami-072e1925b88f8da79](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-072e1925b88f8da79) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-072e1925b88f8da79)) | [ami-0f8c356c8a0f2eca3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f8c356c8a0f2eca3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f8c356c8a0f2eca3)) |

-### Alpine Linux 3.11.7 (2020-12-19) +### Alpine Linux 3.11.10 (2021-04-01)
click to show/hide

-| Region | alpine-ami-3.11.7-x86_64-r0 | +| Region | alpine-ami-3.11.10-x86_64-r0 | | ------ | --- | -| af-south-1 | [ami-05cf48a10f6002168](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05cf48a10f6002168) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05cf48a10f6002168)) | -| ap-east-1 | [ami-096def05737bb9fa5](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-096def05737bb9fa5) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-096def05737bb9fa5)) | -| ap-northeast-1 | [ami-0dc80e3c7e0aedb4e](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc80e3c7e0aedb4e) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc80e3c7e0aedb4e)) | -| ap-northeast-2 | [ami-09346dc8fc008c9f3](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09346dc8fc008c9f3) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09346dc8fc008c9f3)) | -| ap-south-1 | [ami-050c579c7459a48c2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-050c579c7459a48c2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-050c579c7459a48c2)) | -| ap-southeast-1 | [ami-02d1e1bf59cca56f6](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02d1e1bf59cca56f6) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02d1e1bf59cca56f6)) | -| ap-southeast-2 | [ami-055e9bb961d28d69d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-055e9bb961d28d69d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-055e9bb961d28d69d)) | -| ca-central-1 | [ami-0af7eccbeacce0f05](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0af7eccbeacce0f05) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0af7eccbeacce0f05)) | -| eu-central-1 | [ami-05794ddba50a9a744](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05794ddba50a9a744) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05794ddba50a9a744)) | -| eu-north-1 | [ami-05b0683850b38c6d5](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05b0683850b38c6d5) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05b0683850b38c6d5)) | -| eu-south-1 | [ami-0642f11c989872666](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0642f11c989872666) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0642f11c989872666)) | -| eu-west-1 | [ami-0956524d21583a27a](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0956524d21583a27a) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0956524d21583a27a)) | -| eu-west-2 | [ami-07e738b263969a042](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e738b263969a042) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07e738b263969a042)) | -| eu-west-3 | [ami-07e0f0262ff7b7da9](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e0f0262ff7b7da9) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07e0f0262ff7b7da9)) | -| me-south-1 | [ami-0d033bc51aa9fc3c6](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d033bc51aa9fc3c6) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d033bc51aa9fc3c6)) | -| sa-east-1 | [ami-07ec4797792079c72](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ec4797792079c72) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07ec4797792079c72)) | -| us-east-1 | [ami-0f5a58345290f20fe](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f5a58345290f20fe) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f5a58345290f20fe)) | -| us-east-2 | [ami-089db2524f896109e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-089db2524f896109e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-089db2524f896109e)) | -| us-west-1 | [ami-0a0564916b7d4a510](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a0564916b7d4a510) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a0564916b7d4a510)) | -| us-west-2 | [ami-0b9f7e5619a03a0ea](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9f7e5619a03a0ea) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9f7e5619a03a0ea)) | +| af-south-1 | [ami-0f455287d3363c280](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f455287d3363c280) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f455287d3363c280)) | +| ap-east-1 | [ami-05c57e4acc07ca17d](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05c57e4acc07ca17d) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05c57e4acc07ca17d)) | +| ap-northeast-1 | [ami-0135a2fb264dc025f](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0135a2fb264dc025f) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0135a2fb264dc025f)) | +| ap-northeast-2 | [ami-0f30889add25c693c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f30889add25c693c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f30889add25c693c)) | +| ap-northeast-3 | [ami-05619a033f40cfdad](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05619a033f40cfdad) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-05619a033f40cfdad)) | +| ap-south-1 | [ami-0c72880b69669e221](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c72880b69669e221) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c72880b69669e221)) | +| ap-southeast-1 | [ami-0dc48e976e352b94c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc48e976e352b94c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc48e976e352b94c)) | +| ap-southeast-2 | [ami-009dbd5eb5a1a48bd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009dbd5eb5a1a48bd) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009dbd5eb5a1a48bd)) | +| ca-central-1 | [ami-0e7703fad0adb50ee](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e7703fad0adb50ee) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e7703fad0adb50ee)) | +| eu-central-1 | [ami-0d23d076184aa3240](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d23d076184aa3240) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d23d076184aa3240)) | +| eu-north-1 | [ami-00536bc82f302aa74](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00536bc82f302aa74) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00536bc82f302aa74)) | +| eu-south-1 | [ami-0b25b40c71a98aff7](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b25b40c71a98aff7) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b25b40c71a98aff7)) | +| eu-west-1 | [ami-0767e873233f4a692](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0767e873233f4a692) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0767e873233f4a692)) | +| eu-west-2 | [ami-05209d9d9ca843ee1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05209d9d9ca843ee1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05209d9d9ca843ee1)) | +| eu-west-3 | [ami-03fc4edb2da1cbd80](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03fc4edb2da1cbd80) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-03fc4edb2da1cbd80)) | +| me-south-1 | [ami-0c3dfefea8c5092ff](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3dfefea8c5092ff) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3dfefea8c5092ff)) | +| sa-east-1 | [ami-098daca13232992eb](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098daca13232992eb) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098daca13232992eb)) | +| us-east-1 | [ami-0cbc426f32ebf1c17](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cbc426f32ebf1c17) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cbc426f32ebf1c17)) | +| us-east-2 | [ami-066fa082d6f8f68d9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-066fa082d6f8f68d9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-066fa082d6f8f68d9)) | +| us-west-1 | [ami-01bb787574b93a55f](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01bb787574b93a55f) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01bb787574b93a55f)) | +| us-west-2 | [ami-0f2536f30d54fd059](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2536f30d54fd059) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2536f30d54fd059)) |

-### Alpine Linux 3.10.5 (2020-12-19) +### Alpine Linux 3.10.8 (2021-04-01)
click to show/hide

-| Region | alpine-ami-3.10.5-x86_64-r1 | +| Region | alpine-ami-3.10.8-x86_64-r1 | | ------ | --- | -| af-south-1 | [ami-0f04d696b9bb2a043](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f04d696b9bb2a043) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f04d696b9bb2a043)) | -| ap-east-1 | [ami-0392cbf555ce3a146](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0392cbf555ce3a146) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0392cbf555ce3a146)) | -| ap-northeast-1 | [ami-095d84c90b5d8aeee](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095d84c90b5d8aeee) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-095d84c90b5d8aeee)) | -| ap-northeast-2 | [ami-0f6d55079fee59400](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6d55079fee59400) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6d55079fee59400)) | -| ap-south-1 | [ami-07e6e99350bef94dd](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e6e99350bef94dd) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07e6e99350bef94dd)) | -| ap-southeast-1 | [ami-0f784485a4589cf66](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f784485a4589cf66) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f784485a4589cf66)) | -| ap-southeast-2 | [ami-0886f3fffb96b61ba](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0886f3fffb96b61ba) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0886f3fffb96b61ba)) | -| ca-central-1 | [ami-078f16db0a269ea93](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-078f16db0a269ea93) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-078f16db0a269ea93)) | -| eu-central-1 | [ami-0380ce28ef629d90d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0380ce28ef629d90d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0380ce28ef629d90d)) | -| eu-north-1 | [ami-00b16b9ae0a30f956](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00b16b9ae0a30f956) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00b16b9ae0a30f956)) | -| eu-south-1 | [ami-0d6b6ed478eac773c](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6b6ed478eac773c) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6b6ed478eac773c)) | -| eu-west-1 | [ami-04b775d6fe1735210](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b775d6fe1735210) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04b775d6fe1735210)) | -| eu-west-2 | [ami-014e97d83f67eaa97](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014e97d83f67eaa97) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014e97d83f67eaa97)) | -| eu-west-3 | [ami-0288c23df586bd137](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0288c23df586bd137) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0288c23df586bd137)) | -| me-south-1 | [ami-0f2301c3be4340833](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2301c3be4340833) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2301c3be4340833)) | -| sa-east-1 | [ami-0a431dbfae17074be](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a431dbfae17074be) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a431dbfae17074be)) | -| us-east-1 | [ami-0ad73f561b0d903fa](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ad73f561b0d903fa) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ad73f561b0d903fa)) | -| us-east-2 | [ami-0c15ef6ad3bdb364d](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c15ef6ad3bdb364d) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c15ef6ad3bdb364d)) | -| us-west-1 | [ami-0f06f7abd4a2481fc](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f06f7abd4a2481fc) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f06f7abd4a2481fc)) | -| us-west-2 | [ami-0605acecb09204ae6](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0605acecb09204ae6) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0605acecb09204ae6)) | +| af-south-1 | [ami-0cf5ed4be275a558d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cf5ed4be275a558d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cf5ed4be275a558d)) | +| ap-east-1 | [ami-02512ded82c9eca96](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02512ded82c9eca96) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02512ded82c9eca96)) | +| ap-northeast-1 | [ami-0125460459071fb10](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0125460459071fb10) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0125460459071fb10)) | +| ap-northeast-2 | [ami-058779415511d94f0](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-058779415511d94f0) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-058779415511d94f0)) | +| ap-northeast-3 | [ami-00c44bcc711232e73](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00c44bcc711232e73) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00c44bcc711232e73)) | +| ap-south-1 | [ami-07e305a2d0b134931](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e305a2d0b134931) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07e305a2d0b134931)) | +| ap-southeast-1 | [ami-00079cd9ea17b4c72](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00079cd9ea17b4c72) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00079cd9ea17b4c72)) | +| ap-southeast-2 | [ami-099ad79c187dcc549](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-099ad79c187dcc549) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-099ad79c187dcc549)) | +| ca-central-1 | [ami-0769a0c2f6ee575a1](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0769a0c2f6ee575a1) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0769a0c2f6ee575a1)) | +| eu-central-1 | [ami-0b4e62b901a4566e8](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b4e62b901a4566e8) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b4e62b901a4566e8)) | +| eu-north-1 | [ami-046ebc1da4942e1bf](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-046ebc1da4942e1bf) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-046ebc1da4942e1bf)) | +| eu-south-1 | [ami-0be727df9f5bf35a8](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be727df9f5bf35a8) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0be727df9f5bf35a8)) | +| eu-west-1 | [ami-035ff69af1417f8fa](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035ff69af1417f8fa) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035ff69af1417f8fa)) | +| eu-west-2 | [ami-03e58d06de2faab8f](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e58d06de2faab8f) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03e58d06de2faab8f)) | +| eu-west-3 | [ami-0dc4565e30c0f3f17](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc4565e30c0f3f17) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc4565e30c0f3f17)) | +| me-south-1 | [ami-0e694ff1c29750ea1](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e694ff1c29750ea1) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e694ff1c29750ea1)) | +| sa-east-1 | [ami-0a5a8093e8bc9f884](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5a8093e8bc9f884) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5a8093e8bc9f884)) | +| us-east-1 | [ami-070260dfb46190d05](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-070260dfb46190d05) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-070260dfb46190d05)) | +| us-east-2 | [ami-0ab4f038f7af003f1](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ab4f038f7af003f1) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ab4f038f7af003f1)) | +| us-west-1 | [ami-0ce060ae8c7118384](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ce060ae8c7118384) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ce060ae8c7118384)) | +| us-west-2 | [ami-0517c144657e44ae5](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0517c144657e44ae5) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0517c144657e44ae5)) |

-### Alpine Linux Edge (2021-02-17) +### Alpine Linux Edge (2021-04-01)
click to show/hide

-| Region | alpine-ami-edge-aarch64-20210217154938 | alpine-ami-edge-x86_64-20210217154938 | +| Region | alpine-ami-edge-aarch64-20210401010236 | alpine-ami-edge-x86_64-20210401010236 | | ------ | --- | --- | -| af-south-1 | [ami-029cc30211ce9dd01](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029cc30211ce9dd01) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029cc30211ce9dd01)) | [ami-02a67e131e171e3e6](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a67e131e171e3e6) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02a67e131e171e3e6)) | -| ap-east-1 | [ami-084a49494cf0edf77](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-084a49494cf0edf77) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-084a49494cf0edf77)) | [ami-01c2d8b6eae86825f](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c2d8b6eae86825f) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c2d8b6eae86825f)) | -| ap-northeast-1 | [ami-0bb8804242350df38](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb8804242350df38) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb8804242350df38)) | [ami-0d77651167c64df43](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d77651167c64df43) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d77651167c64df43)) | -| ap-northeast-2 | [ami-013f0a85c0abc1b13](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013f0a85c0abc1b13) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-013f0a85c0abc1b13)) | [ami-0296eb07bc6598b5c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0296eb07bc6598b5c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0296eb07bc6598b5c)) | -| ap-south-1 | [ami-0e90994ace5abb4a2](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e90994ace5abb4a2) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e90994ace5abb4a2)) | [ami-07e08e24fc8f2b1bc](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e08e24fc8f2b1bc) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07e08e24fc8f2b1bc)) | -| ap-southeast-1 | [ami-05ff88756d8585b1a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05ff88756d8585b1a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05ff88756d8585b1a)) | [ami-0bc86021a1dce5681](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc86021a1dce5681) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc86021a1dce5681)) | -| ap-southeast-2 | [ami-0314c3bc31e30b999](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0314c3bc31e30b999) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0314c3bc31e30b999)) | [ami-01a842c6f331e083c](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01a842c6f331e083c) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01a842c6f331e083c)) | -| ca-central-1 | [ami-021ca7735aea8ed00](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-021ca7735aea8ed00) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-021ca7735aea8ed00)) | [ami-05578e9971a65fd77](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05578e9971a65fd77) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05578e9971a65fd77)) | -| eu-central-1 | [ami-0bd83a4db94231125](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd83a4db94231125) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd83a4db94231125)) | [ami-0677a95807850dee3](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0677a95807850dee3) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0677a95807850dee3)) | -| eu-north-1 | [ami-0916068ec228db725](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0916068ec228db725) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0916068ec228db725)) | [ami-029824bb845163dc0](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029824bb845163dc0) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029824bb845163dc0)) | -| eu-south-1 | [ami-0d20fbdd49975b67b](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d20fbdd49975b67b) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d20fbdd49975b67b)) | [ami-0c7924033c1d44f88](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c7924033c1d44f88) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c7924033c1d44f88)) | -| eu-west-1 | [ami-0ceb2ee8a2668609f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ceb2ee8a2668609f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ceb2ee8a2668609f)) | [ami-0f2594aaefc3ff5e6](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2594aaefc3ff5e6) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2594aaefc3ff5e6)) | -| eu-west-2 | [ami-04a3a27e2e650e723](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04a3a27e2e650e723) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04a3a27e2e650e723)) | [ami-078201a628b41e7fe](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-078201a628b41e7fe) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-078201a628b41e7fe)) | -| eu-west-3 | [ami-02444c213c5dff98b](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02444c213c5dff98b) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-02444c213c5dff98b)) | [ami-0bd6c167b453c9349](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd6c167b453c9349) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd6c167b453c9349)) | -| me-south-1 | [ami-0259b266b8b53ea2b](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0259b266b8b53ea2b) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0259b266b8b53ea2b)) | [ami-0fc1a33a57c0372b8](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc1a33a57c0372b8) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc1a33a57c0372b8)) | -| sa-east-1 | [ami-0f1b127fc92be4e8e](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1b127fc92be4e8e) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1b127fc92be4e8e)) | [ami-023eee7a213cd2413](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-023eee7a213cd2413) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-023eee7a213cd2413)) | -| us-east-1 | [ami-05904f36c6a15b168](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05904f36c6a15b168) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05904f36c6a15b168)) | [ami-09e88488c82bf7d23](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e88488c82bf7d23) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e88488c82bf7d23)) | -| us-east-2 | [ami-0add6a0d1d779ed2b](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0add6a0d1d779ed2b) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0add6a0d1d779ed2b)) | [ami-0dca6c6c306575d1b](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dca6c6c306575d1b) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0dca6c6c306575d1b)) | -| us-west-1 | [ami-0064de4e0099af91f](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0064de4e0099af91f) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0064de4e0099af91f)) | [ami-0572f8a66e97a96d9](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0572f8a66e97a96d9) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0572f8a66e97a96d9)) | -| us-west-2 | [ami-01954f38d0fbb16d2](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01954f38d0fbb16d2) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01954f38d0fbb16d2)) | [ami-07bca6e961a1f68fb](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07bca6e961a1f68fb) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07bca6e961a1f68fb)) | +| af-south-1 | [ami-05775bf9e15e1b80c](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05775bf9e15e1b80c) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05775bf9e15e1b80c)) | [ami-0fef3d982fe2c872c](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fef3d982fe2c872c) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fef3d982fe2c872c)) | +| ap-east-1 | [ami-01211cc239a7f3861](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01211cc239a7f3861) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01211cc239a7f3861)) | [ami-0f9ca7392e6f6fe7d](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ca7392e6f6fe7d) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ca7392e6f6fe7d)) | +| ap-northeast-1 | [ami-0737b8c4efc011a3d](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0737b8c4efc011a3d) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0737b8c4efc011a3d)) | [ami-05fbcfbced49a6e0b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05fbcfbced49a6e0b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05fbcfbced49a6e0b)) | +| ap-northeast-2 | [ami-095e3b834c806cf1d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095e3b834c806cf1d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-095e3b834c806cf1d)) | [ami-0a8898ce0e2e2b31b](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8898ce0e2e2b31b) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8898ce0e2e2b31b)) | +| ap-northeast-3 | [ami-0e7aad764a423efd2](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e7aad764a423efd2) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0e7aad764a423efd2)) | [ami-059e6dd6793244ff5](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059e6dd6793244ff5) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-059e6dd6793244ff5)) | +| ap-south-1 | [ami-0283191e64ece4447](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0283191e64ece4447) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0283191e64ece4447)) | [ami-029e8071a88daa3b1](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029e8071a88daa3b1) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029e8071a88daa3b1)) | +| ap-southeast-1 | [ami-06a7419700029a038](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a7419700029a038) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a7419700029a038)) | [ami-0a2dd6af213734721](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2dd6af213734721) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2dd6af213734721)) | +| ap-southeast-2 | [ami-082e3241518ebbfb7](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082e3241518ebbfb7) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-082e3241518ebbfb7)) | [ami-0534dbddac7c4d2a1](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0534dbddac7c4d2a1) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0534dbddac7c4d2a1)) | +| ca-central-1 | [ami-0f6aad07ddb07c6bc](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6aad07ddb07c6bc) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6aad07ddb07c6bc)) | [ami-009a342b1277a88b4](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009a342b1277a88b4) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-009a342b1277a88b4)) | +| eu-central-1 | [ami-0c36e3d2c640ca9b4](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c36e3d2c640ca9b4) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c36e3d2c640ca9b4)) | [ami-0812a3c27ec877e88](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0812a3c27ec877e88) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0812a3c27ec877e88)) | +| eu-north-1 | [ami-0619448905d49e078](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0619448905d49e078) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0619448905d49e078)) | [ami-05b29589254d0f181](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05b29589254d0f181) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05b29589254d0f181)) | +| eu-south-1 | [ami-042c697468bb5865f](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042c697468bb5865f) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042c697468bb5865f)) | [ami-02e142594610c4040](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e142594610c4040) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e142594610c4040)) | +| eu-west-1 | [ami-07d89f52e68a74075](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07d89f52e68a74075) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07d89f52e68a74075)) | [ami-0b371a4eba153e0e1](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b371a4eba153e0e1) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b371a4eba153e0e1)) | +| eu-west-2 | [ami-04651aa44e52dcfc1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04651aa44e52dcfc1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04651aa44e52dcfc1)) | [ami-0b485e7f67d4a3b4b](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b485e7f67d4a3b4b) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b485e7f67d4a3b4b)) | +| eu-west-3 | [ami-05898933fea1dcd6a](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05898933fea1dcd6a) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-05898933fea1dcd6a)) | [ami-0bf9142202d34bb53](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf9142202d34bb53) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf9142202d34bb53)) | +| me-south-1 | [ami-0e574208a5bdf99d5](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e574208a5bdf99d5) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e574208a5bdf99d5)) | [ami-0b82b23d9718cbb27](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b82b23d9718cbb27) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b82b23d9718cbb27)) | +| sa-east-1 | [ami-0d80a1330a8423a6e](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d80a1330a8423a6e) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d80a1330a8423a6e)) | [ami-05f2a4b326562cf29](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f2a4b326562cf29) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f2a4b326562cf29)) | +| us-east-1 | [ami-02d2d65fc8e58ad5b](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02d2d65fc8e58ad5b) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02d2d65fc8e58ad5b)) | [ami-053dffd39d28cecbd](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053dffd39d28cecbd) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-053dffd39d28cecbd)) | +| us-east-2 | [ami-0f76047ff48c81a66](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f76047ff48c81a66) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f76047ff48c81a66)) | [ami-0d8b7d7c7506251b4](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d8b7d7c7506251b4) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d8b7d7c7506251b4)) | +| us-west-1 | [ami-0b908fe67477a4811](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b908fe67477a4811) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b908fe67477a4811)) | [ami-086651d2da2c2acbe](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-086651d2da2c2acbe) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-086651d2da2c2acbe)) | +| us-west-2 | [ami-09c1a5fcb4ec1acd3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09c1a5fcb4ec1acd3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09c1a5fcb4ec1acd3)) | [ami-0b88bd977ec096a3e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b88bd977ec096a3e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b88bd977ec096a3e)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index da52454..072a2b0 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,269 +1,277 @@ -3.13.2: +3.13.4: v3_13-x86_64: - alpine-ami-3.13.2-x86_64-r0: - description: Alpine Linux 3.13.2 x86_64 r0 - https://alpinelinux.org/cloud + alpine-ami-3.13.4-x86_64-r0: + description: Alpine Linux 3.13.4 x86_64 r0 - https://alpinelinux.org/cloud profile: alpine profile_build: v3_13-x86_64 version: '3.13' - release: 3.13.2 + release: 3.13.4 arch: x86_64 revision: r0 - creation_date: '2021-02-17T15:57:42.000Z' + creation_date: '2021-04-01T01:16:18.000Z' end_of_life: '2022-11-01T00:00:00' - build_time: 1613606262 + build_time: 1617268578 artifacts: - af-south-1: ami-05f79b71bd0b1d6d8 - eu-north-1: ami-0413219f87f6b6718 - ap-south-1: ami-04905518aa5dada5e - eu-west-3: ami-0476364b2343f3e48 - eu-west-2: ami-0bf95077dc2845331 - eu-south-1: ami-011c03dbdeca26100 - eu-west-1: ami-09108b00aee14cc99 - ap-northeast-2: ami-0386960cca2293f6d - me-south-1: ami-022eec099cb912f9e - ap-northeast-1: ami-07d0910049d6ebf7b - sa-east-1: ami-0f4d65c1a1856293e - ca-central-1: ami-054511fc8c34a48fe - ap-east-1: ami-0bc72c8f9d8294dc8 - ap-southeast-1: ami-0b607c10403e6f965 - ap-southeast-2: ami-0c3289994e0ea9c9a - eu-central-1: ami-0059dbcc5690a4414 - us-east-1: ami-020eb5393af978681 - us-east-2: ami-00b879c5e1ee7f1cf - us-west-1: ami-0071232822017ae5f - us-west-2: ami-066b14c0eeb28dfb2 + af-south-1: ami-04f2477fcded9065d + eu-north-1: ami-0eb2663f6ef26343b + ap-south-1: ami-0785aac7b5687eb2b + eu-west-3: ami-0183e005493fff43d + eu-west-2: ami-027c3ebdf0f7e2334 + eu-south-1: ami-08581e191cd8a8dd4 + eu-west-1: ami-077241f9ba4fb5b2f + ap-northeast-3: ami-03b8eb8780b5263a7 + ap-northeast-2: ami-07a0bb78ade906d73 + me-south-1: ami-0a461424f2cbd7703 + ap-northeast-1: ami-08de64935ea41e8df + sa-east-1: ami-02dcad0d6eace1774 + ca-central-1: ami-05bf415838736fabe + ap-east-1: ami-0fb14ab2ee170ad89 + ap-southeast-1: ami-0dc12655f44f4bddd + ap-southeast-2: ami-09cd10aded1798a78 + eu-central-1: ami-00b0f629424d9126c + us-east-1: ami-01bced83ff9507b45 + us-east-2: ami-06bd628a1c00663db + us-west-1: ami-0c60d72a56731446c + us-west-2: ami-097fcd1af8f5f8b1a v3_13-aarch64: - alpine-ami-3.13.2-aarch64-r0: - description: Alpine Linux 3.13.2 aarch64 r0 - https://alpinelinux.org/cloud + alpine-ami-3.13.4-aarch64-r0: + description: Alpine Linux 3.13.4 aarch64 r0 - https://alpinelinux.org/cloud profile: alpine profile_build: v3_13-aarch64 version: '3.13' - release: 3.13.2 + release: 3.13.4 arch: aarch64 revision: r0 - creation_date: '2021-02-17T16:01:05.000Z' + creation_date: '2021-04-01T01:19:51.000Z' end_of_life: '2022-11-01T00:00:00' - build_time: 1613606465 + build_time: 1617268791 artifacts: - af-south-1: ami-0e551cbe2cd59048f - eu-north-1: ami-04ed22defaba10b17 - ap-south-1: ami-0698a61a8ab035245 - eu-west-3: ami-0f6a71f646674b110 - eu-west-2: ami-009aacd94b84d0550 - eu-south-1: ami-02720ae6a94d05ada - eu-west-1: ami-075572c460fd74b8f - ap-northeast-2: ami-020e2e6b2d09e9c5c - me-south-1: ami-09e4d33ad7b0ea2ee - ap-northeast-1: ami-09934c5ddb108829e - sa-east-1: ami-02e41f7e1eab48966 - ca-central-1: ami-063c5ed7ac5a16a2b - ap-east-1: ami-082e7d5e2fc436678 - ap-southeast-1: ami-063fee7df45bc16fa - ap-southeast-2: ami-066954bba770356bd - eu-central-1: ami-0efaeb7bdcccea515 - us-east-1: ami-0384a3570d44f88cb - us-east-2: ami-06208140d2cb00a11 - us-west-1: ami-06530b4b2d4634828 - us-west-2: ami-053faf87b69687bb5 -3.12.3: + af-south-1: ami-0f509fde55c46bf59 + eu-north-1: ami-0346deae3e4bf298b + ap-south-1: ami-0ab9eb18d466662dd + eu-west-3: ami-0f78f27312019fe82 + eu-west-2: ami-0788e298788ad73b7 + eu-south-1: ami-0e2ac541ddf379e83 + eu-west-1: ami-00f9e4bedb6bb8abc + ap-northeast-3: ami-00e5abb5ba7a506ae + ap-northeast-2: ami-075173307a0bc645d + me-south-1: ami-0dd1b7971f44d31df + ap-northeast-1: ami-08c8b3e75da3370b6 + sa-east-1: ami-0a1f50279b17fd87b + ca-central-1: ami-0f4195b0eb4b4b6ab + ap-east-1: ami-011730d89acc31fbb + ap-southeast-1: ami-0de26e6d4c6164737 + ap-southeast-2: ami-07be724f9ff518cf2 + eu-central-1: ami-0e3c147576c6d305b + us-east-1: ami-027de81a1ce32c074 + us-east-2: ami-0e2d79df04778c59c + us-west-1: ami-070a5da5c26833c62 + us-west-2: ami-04b2b26abc19e8000 +3.12.6: v3_12-aarch64: - alpine-ami-3.12.3-aarch64-r0: - description: Alpine Linux 3.12.3 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.12.6-aarch64-r0: + description: Alpine Linux 3.12.6 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_12-aarch64 version: '3.12' - release: 3.12.3 + release: 3.12.6 arch: aarch64 revision: r0 - creation_date: '2020-12-19T02:44:37.000Z' + creation_date: '2021-04-01T01:22:44.000Z' end_of_life: '2022-05-01T00:00:00' - build_time: 1608374677 + build_time: 1617268964 artifacts: - af-south-1: ami-025ddc2e2931d0bf2 - eu-north-1: ami-0e3ad874b66b72f5b - ap-south-1: ami-00de8b114b35175e6 - eu-west-3: ami-0d3cfa58b050f7090 - eu-west-2: ami-08b76009eb990b44a - eu-south-1: ami-084274896601da8f5 - eu-west-1: ami-055f823d50dc901c0 - ap-northeast-2: ami-09702b3f22e8616c8 - me-south-1: ami-05a9eaed7e7f67c95 - ap-northeast-1: ami-010debbee0fe7fbcb - sa-east-1: ami-00890e1d93b0d2750 - ca-central-1: ami-0a1a8875a6a460565 - ap-east-1: ami-023ba7dde5800c5b5 - ap-southeast-1: ami-0e3ff62bec8a2f949 - ap-southeast-2: ami-077f7467876246e89 - eu-central-1: ami-00e9dcc013b89ec7b - us-east-1: ami-044f158b810baa6d4 - us-east-2: ami-0973e3c7bc90a4801 - us-west-1: ami-01834462564dfb367 - us-west-2: ami-0bedcc0226437e2e0 + af-south-1: ami-03ab04691eb81305c + eu-north-1: ami-0b2dad251f2256360 + ap-south-1: ami-0e2ded5942d9f058a + eu-west-3: ami-0458bb347b0db93f4 + eu-west-2: ami-0f004bda3e137c9d7 + eu-south-1: ami-011a9aa0df80eb270 + eu-west-1: ami-01b95ab1ae982646d + ap-northeast-3: ami-0ead6fb75ae44a638 + ap-northeast-2: ami-06c34515664686178 + me-south-1: ami-0b0c91c634b292491 + ap-northeast-1: ami-000eac2e53f67665f + sa-east-1: ami-0b4c8e7e7544fb79a + ca-central-1: ami-0ca25a25dab4f1217 + ap-east-1: ami-0459f125559cf7a43 + ap-southeast-1: ami-020626262951dbc65 + ap-southeast-2: ami-03564a4226e171ad3 + eu-central-1: ami-04b3f9222e48b0ec9 + us-east-1: ami-0aeecf1728e214ec9 + us-east-2: ami-08642448ee0a4d1af + us-west-1: ami-0eb6b5f081ed1945b + us-west-2: ami-072e1925b88f8da79 v3_12-x86_64: - alpine-ami-3.12.3-x86_64-r0: - description: Alpine Linux 3.12.3 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.12.6-x86_64-r0: + description: Alpine Linux 3.12.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_12-x86_64 version: '3.12' - release: 3.12.3 + release: 3.12.6 arch: x86_64 revision: r0 - creation_date: '2020-12-19T02:33:21.000Z' + creation_date: '2021-04-01T01:05:10.000Z' end_of_life: '2022-05-01T00:00:00' - build_time: 1608374001 + build_time: 1617267910 artifacts: - af-south-1: ami-06d5540221d65ca01 - eu-north-1: ami-051fcf0312ac02b05 - ap-south-1: ami-023fe0b4c4dc73f8c - eu-west-3: ami-0fa68ac5365833d75 - eu-west-2: ami-01282190055d34e3e - eu-south-1: ami-06b311d896c16a3a2 - eu-west-1: ami-0846229ad28aefe20 - ap-northeast-2: ami-0cfb5eabfb58d5f72 - me-south-1: ami-0bee0f3b523892c11 - ap-northeast-1: ami-0250e4a691729357a - sa-east-1: ami-0af3d5295dfa78f9a - ca-central-1: ami-0a5084eac39a18d31 - ap-east-1: ami-02c576f223356bf34 - ap-southeast-1: ami-0f06993534aec820f - ap-southeast-2: ami-0f66203a3a619f732 - eu-central-1: ami-06a298dc479cf2a73 - us-east-1: ami-098a996634a88542f - us-east-2: ami-07012d290ef9c028e - us-west-1: ami-0570d3bcb39152bb8 - us-west-2: ami-009f13dc01dec6a56 + af-south-1: ami-097362ad2c7e85ff9 + eu-north-1: ami-0d28e9d23c6c597d1 + ap-south-1: ami-02f7fad0ef8a7a256 + eu-west-3: ami-0d64e022b8cae50a0 + eu-west-2: ami-07e3e0856ba7ce738 + eu-south-1: ami-0bb3b5d002f0778d9 + eu-west-1: ami-071c81995fc2994aa + ap-northeast-3: ami-097cd1087a7bdba68 + ap-northeast-2: ami-0a32b105087e18bee + me-south-1: ami-009145fed3bc9e080 + ap-northeast-1: ami-04ad869c5351c4192 + sa-east-1: ami-031a78cf394ec960a + ca-central-1: ami-00291d1e8ccb722b8 + ap-east-1: ami-0b2f408adba9eeb77 + ap-southeast-1: ami-08c39f595d52dca8e + ap-southeast-2: ami-01048f21bc59439dc + eu-central-1: ami-0e6fd319034a18b22 + us-east-1: ami-008cce027b7fe1960 + us-east-2: ami-0e07027f974ce204e + us-west-1: ami-051b7cdbd85c7975a + us-west-2: ami-0f8c356c8a0f2eca3 edge: edge-aarch64: - alpine-ami-edge-aarch64-20210217154938: - description: Alpine Linux edge aarch64 20210217154938 - https://alpinelinux.org/cloud + alpine-ami-edge-aarch64-20210401010236: + description: Alpine Linux edge aarch64 20210401010236 - https://alpinelinux.org/cloud profile: alpine profile_build: edge-aarch64 version: edge release: edge arch: aarch64 - revision: '20210217154938' - creation_date: '2021-02-17T15:51:36.000Z' - end_of_life: '2021-02-18T15:49:38' - build_time: 1613605896 + revision: '20210401010236' + creation_date: '2021-04-01T01:11:23.000Z' + end_of_life: '2021-04-02T01:02:36' + build_time: 1617268283 artifacts: - af-south-1: ami-029cc30211ce9dd01 - eu-north-1: ami-0916068ec228db725 - ap-south-1: ami-0e90994ace5abb4a2 - eu-west-3: ami-02444c213c5dff98b - eu-west-2: ami-04a3a27e2e650e723 - eu-south-1: ami-0d20fbdd49975b67b - eu-west-1: ami-0ceb2ee8a2668609f - ap-northeast-2: ami-013f0a85c0abc1b13 - me-south-1: ami-0259b266b8b53ea2b - ap-northeast-1: ami-0bb8804242350df38 - sa-east-1: ami-0f1b127fc92be4e8e - ca-central-1: ami-021ca7735aea8ed00 - ap-east-1: ami-084a49494cf0edf77 - ap-southeast-1: ami-05ff88756d8585b1a - ap-southeast-2: ami-0314c3bc31e30b999 - eu-central-1: ami-0bd83a4db94231125 - us-east-1: ami-05904f36c6a15b168 - us-east-2: ami-0add6a0d1d779ed2b - us-west-1: ami-0064de4e0099af91f - us-west-2: ami-01954f38d0fbb16d2 + af-south-1: ami-05775bf9e15e1b80c + eu-north-1: ami-0619448905d49e078 + ap-south-1: ami-0283191e64ece4447 + eu-west-3: ami-05898933fea1dcd6a + eu-west-2: ami-04651aa44e52dcfc1 + eu-south-1: ami-042c697468bb5865f + eu-west-1: ami-07d89f52e68a74075 + ap-northeast-3: ami-0e7aad764a423efd2 + ap-northeast-2: ami-095e3b834c806cf1d + me-south-1: ami-0e574208a5bdf99d5 + ap-northeast-1: ami-0737b8c4efc011a3d + sa-east-1: ami-0d80a1330a8423a6e + ca-central-1: ami-0f6aad07ddb07c6bc + ap-east-1: ami-01211cc239a7f3861 + ap-southeast-1: ami-06a7419700029a038 + ap-southeast-2: ami-082e3241518ebbfb7 + eu-central-1: ami-0c36e3d2c640ca9b4 + us-east-1: ami-02d2d65fc8e58ad5b + us-east-2: ami-0f76047ff48c81a66 + us-west-1: ami-0b908fe67477a4811 + us-west-2: ami-09c1a5fcb4ec1acd3 edge-x86_64: - alpine-ami-edge-x86_64-20210217154938: - description: Alpine Linux edge x86_64 20210217154938 - https://alpinelinux.org/cloud + alpine-ami-edge-x86_64-20210401010236: + description: Alpine Linux edge x86_64 20210401010236 - https://alpinelinux.org/cloud profile: alpine profile_build: edge-x86_64 version: edge release: edge arch: x86_64 - revision: '20210217154938' - creation_date: '2021-02-17T15:54:40.000Z' - end_of_life: '2021-02-18T15:49:38' - build_time: 1613606080 + revision: '20210401010236' + creation_date: '2021-04-01T01:13:59.000Z' + end_of_life: '2021-04-02T01:02:36' + build_time: 1617268439 artifacts: - af-south-1: ami-02a67e131e171e3e6 - eu-north-1: ami-029824bb845163dc0 - ap-south-1: ami-07e08e24fc8f2b1bc - eu-west-3: ami-0bd6c167b453c9349 - eu-west-2: ami-078201a628b41e7fe - eu-south-1: ami-0c7924033c1d44f88 - eu-west-1: ami-0f2594aaefc3ff5e6 - ap-northeast-2: ami-0296eb07bc6598b5c - me-south-1: ami-0fc1a33a57c0372b8 - ap-northeast-1: ami-0d77651167c64df43 - sa-east-1: ami-023eee7a213cd2413 - ca-central-1: ami-05578e9971a65fd77 - ap-east-1: ami-01c2d8b6eae86825f - ap-southeast-1: ami-0bc86021a1dce5681 - ap-southeast-2: ami-01a842c6f331e083c - eu-central-1: ami-0677a95807850dee3 - us-east-1: ami-09e88488c82bf7d23 - us-east-2: ami-0dca6c6c306575d1b - us-west-1: ami-0572f8a66e97a96d9 - us-west-2: ami-07bca6e961a1f68fb -3.11.7: + af-south-1: ami-0fef3d982fe2c872c + eu-north-1: ami-05b29589254d0f181 + ap-south-1: ami-029e8071a88daa3b1 + eu-west-3: ami-0bf9142202d34bb53 + eu-west-2: ami-0b485e7f67d4a3b4b + eu-south-1: ami-02e142594610c4040 + eu-west-1: ami-0b371a4eba153e0e1 + ap-northeast-3: ami-059e6dd6793244ff5 + ap-northeast-2: ami-0a8898ce0e2e2b31b + me-south-1: ami-0b82b23d9718cbb27 + ap-northeast-1: ami-05fbcfbced49a6e0b + sa-east-1: ami-05f2a4b326562cf29 + ca-central-1: ami-009a342b1277a88b4 + ap-east-1: ami-0f9ca7392e6f6fe7d + ap-southeast-1: ami-0a2dd6af213734721 + ap-southeast-2: ami-0534dbddac7c4d2a1 + eu-central-1: ami-0812a3c27ec877e88 + us-east-1: ami-053dffd39d28cecbd + us-east-2: ami-0d8b7d7c7506251b4 + us-west-1: ami-086651d2da2c2acbe + us-west-2: ami-0b88bd977ec096a3e +3.11.10: v3_11-x86_64: - alpine-ami-3.11.7-x86_64-r0: - description: Alpine Linux 3.11.7 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.11.10-x86_64-r0: + description: Alpine Linux 3.11.10 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_11-x86_64 version: '3.11' - release: 3.11.7 + release: 3.11.10 arch: x86_64 revision: r0 - creation_date: '2020-12-19T02:48:10.000Z' + creation_date: '2021-04-01T01:25:13.000Z' end_of_life: '2021-11-01T00:00:00' - build_time: 1608374890 + build_time: 1617269113 artifacts: - af-south-1: ami-05cf48a10f6002168 - eu-north-1: ami-05b0683850b38c6d5 - ap-south-1: ami-050c579c7459a48c2 - eu-west-3: ami-07e0f0262ff7b7da9 - eu-west-2: ami-07e738b263969a042 - eu-south-1: ami-0642f11c989872666 - eu-west-1: ami-0956524d21583a27a - ap-northeast-2: ami-09346dc8fc008c9f3 - me-south-1: ami-0d033bc51aa9fc3c6 - ap-northeast-1: ami-0dc80e3c7e0aedb4e - sa-east-1: ami-07ec4797792079c72 - ca-central-1: ami-0af7eccbeacce0f05 - ap-east-1: ami-096def05737bb9fa5 - ap-southeast-1: ami-02d1e1bf59cca56f6 - ap-southeast-2: ami-055e9bb961d28d69d - eu-central-1: ami-05794ddba50a9a744 - us-east-1: ami-0f5a58345290f20fe - us-east-2: ami-089db2524f896109e - us-west-1: ami-0a0564916b7d4a510 - us-west-2: ami-0b9f7e5619a03a0ea -3.10.5: + af-south-1: ami-0f455287d3363c280 + eu-north-1: ami-00536bc82f302aa74 + ap-south-1: ami-0c72880b69669e221 + eu-west-3: ami-03fc4edb2da1cbd80 + eu-west-2: ami-05209d9d9ca843ee1 + eu-south-1: ami-0b25b40c71a98aff7 + eu-west-1: ami-0767e873233f4a692 + ap-northeast-3: ami-05619a033f40cfdad + ap-northeast-2: ami-0f30889add25c693c + me-south-1: ami-0c3dfefea8c5092ff + ap-northeast-1: ami-0135a2fb264dc025f + sa-east-1: ami-098daca13232992eb + ca-central-1: ami-0e7703fad0adb50ee + ap-east-1: ami-05c57e4acc07ca17d + ap-southeast-1: ami-0dc48e976e352b94c + ap-southeast-2: ami-009dbd5eb5a1a48bd + eu-central-1: ami-0d23d076184aa3240 + us-east-1: ami-0cbc426f32ebf1c17 + us-east-2: ami-066fa082d6f8f68d9 + us-west-1: ami-01bb787574b93a55f + us-west-2: ami-0f2536f30d54fd059 +3.10.8: v3_10-x86_64: - alpine-ami-3.10.5-x86_64-r1: - description: Alpine Linux 3.10.5 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.10.8-x86_64-r1: + description: Alpine Linux 3.10.8 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_10-x86_64 version: '3.10' - release: 3.10.5 + release: 3.10.8 arch: x86_64 revision: r1 - creation_date: '2020-12-19T02:36:06.000Z' + creation_date: '2021-04-01T01:08:00.000Z' end_of_life: '2021-05-01T00:00:00' - build_time: 1608374166 + build_time: 1617268080 artifacts: - af-south-1: ami-0f04d696b9bb2a043 - eu-north-1: ami-00b16b9ae0a30f956 - ap-south-1: ami-07e6e99350bef94dd - eu-west-3: ami-0288c23df586bd137 - eu-west-2: ami-014e97d83f67eaa97 - eu-south-1: ami-0d6b6ed478eac773c - eu-west-1: ami-04b775d6fe1735210 - ap-northeast-2: ami-0f6d55079fee59400 - me-south-1: ami-0f2301c3be4340833 - ap-northeast-1: ami-095d84c90b5d8aeee - sa-east-1: ami-0a431dbfae17074be - ca-central-1: ami-078f16db0a269ea93 - ap-east-1: ami-0392cbf555ce3a146 - ap-southeast-1: ami-0f784485a4589cf66 - ap-southeast-2: ami-0886f3fffb96b61ba - eu-central-1: ami-0380ce28ef629d90d - us-east-1: ami-0ad73f561b0d903fa - us-east-2: ami-0c15ef6ad3bdb364d - us-west-1: ami-0f06f7abd4a2481fc - us-west-2: ami-0605acecb09204ae6 + af-south-1: ami-0cf5ed4be275a558d + eu-north-1: ami-046ebc1da4942e1bf + ap-south-1: ami-07e305a2d0b134931 + eu-west-3: ami-0dc4565e30c0f3f17 + eu-west-2: ami-03e58d06de2faab8f + eu-south-1: ami-0be727df9f5bf35a8 + eu-west-1: ami-035ff69af1417f8fa + ap-northeast-3: ami-00c44bcc711232e73 + ap-northeast-2: ami-058779415511d94f0 + me-south-1: ami-0e694ff1c29750ea1 + ap-northeast-1: ami-0125460459071fb10 + sa-east-1: ami-0a5a8093e8bc9f884 + ca-central-1: ami-0769a0c2f6ee575a1 + ap-east-1: ami-02512ded82c9eca96 + ap-southeast-1: ami-00079cd9ea17b4c72 + ap-southeast-2: ami-099ad79c187dcc549 + eu-central-1: ami-0b4e62b901a4566e8 + us-east-1: ami-070260dfb46190d05 + us-east-2: ami-0ab4f038f7af003f1 + us-west-1: ami-0ce060ae8c7118384 + us-west-2: ami-0517c144657e44ae5 From 3b7fd1308366b204a0cbd1f4fbf774b2c514f244 Mon Sep 17 00:00:00 2001 From: tomalok Date: Wed, 14 Apr 2021 18:48:02 -0700 Subject: [PATCH 110/125] new Alpine releases (#117) --- releases/README.md | 230 +++++++++++----------- releases/alpine.yaml | 460 +++++++++++++++++++++---------------------- 2 files changed, 345 insertions(+), 345 deletions(-) diff --git a/releases/README.md b/releases/README.md index a92cf65..bb92369 100644 --- a/releases/README.md +++ b/releases/README.md @@ -38,147 +38,147 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.13.4 (2021-04-01) +### Alpine Linux 3.13.5 (2021-04-15)
click to show/hide

-| Region | alpine-ami-3.13.4-aarch64-r0 | alpine-ami-3.13.4-x86_64-r0 | +| Region | alpine-ami-3.13.5-aarch64-r0 | alpine-ami-3.13.5-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-0f509fde55c46bf59](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f509fde55c46bf59) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f509fde55c46bf59)) | [ami-04f2477fcded9065d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04f2477fcded9065d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04f2477fcded9065d)) | -| ap-east-1 | [ami-011730d89acc31fbb](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011730d89acc31fbb) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011730d89acc31fbb)) | [ami-0fb14ab2ee170ad89](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb14ab2ee170ad89) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb14ab2ee170ad89)) | -| ap-northeast-1 | [ami-08c8b3e75da3370b6](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c8b3e75da3370b6) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c8b3e75da3370b6)) | [ami-08de64935ea41e8df](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08de64935ea41e8df) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08de64935ea41e8df)) | -| ap-northeast-2 | [ami-075173307a0bc645d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-075173307a0bc645d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-075173307a0bc645d)) | [ami-07a0bb78ade906d73](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a0bb78ade906d73) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07a0bb78ade906d73)) | -| ap-northeast-3 | [ami-00e5abb5ba7a506ae](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00e5abb5ba7a506ae) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00e5abb5ba7a506ae)) | [ami-03b8eb8780b5263a7](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03b8eb8780b5263a7) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-03b8eb8780b5263a7)) | -| ap-south-1 | [ami-0ab9eb18d466662dd](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ab9eb18d466662dd) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ab9eb18d466662dd)) | [ami-0785aac7b5687eb2b](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0785aac7b5687eb2b) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0785aac7b5687eb2b)) | -| ap-southeast-1 | [ami-0de26e6d4c6164737](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0de26e6d4c6164737) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0de26e6d4c6164737)) | [ami-0dc12655f44f4bddd](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc12655f44f4bddd) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc12655f44f4bddd)) | -| ap-southeast-2 | [ami-07be724f9ff518cf2](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07be724f9ff518cf2) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07be724f9ff518cf2)) | [ami-09cd10aded1798a78](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09cd10aded1798a78) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09cd10aded1798a78)) | -| ca-central-1 | [ami-0f4195b0eb4b4b6ab](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f4195b0eb4b4b6ab) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f4195b0eb4b4b6ab)) | [ami-05bf415838736fabe](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05bf415838736fabe) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05bf415838736fabe)) | -| eu-central-1 | [ami-0e3c147576c6d305b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3c147576c6d305b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3c147576c6d305b)) | [ami-00b0f629424d9126c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00b0f629424d9126c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00b0f629424d9126c)) | -| eu-north-1 | [ami-0346deae3e4bf298b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0346deae3e4bf298b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0346deae3e4bf298b)) | [ami-0eb2663f6ef26343b](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb2663f6ef26343b) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb2663f6ef26343b)) | -| eu-south-1 | [ami-0e2ac541ddf379e83](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2ac541ddf379e83) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2ac541ddf379e83)) | [ami-08581e191cd8a8dd4](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08581e191cd8a8dd4) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08581e191cd8a8dd4)) | -| eu-west-1 | [ami-00f9e4bedb6bb8abc](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00f9e4bedb6bb8abc) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00f9e4bedb6bb8abc)) | [ami-077241f9ba4fb5b2f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-077241f9ba4fb5b2f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-077241f9ba4fb5b2f)) | -| eu-west-2 | [ami-0788e298788ad73b7](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0788e298788ad73b7) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0788e298788ad73b7)) | [ami-027c3ebdf0f7e2334](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027c3ebdf0f7e2334) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-027c3ebdf0f7e2334)) | -| eu-west-3 | [ami-0f78f27312019fe82](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f78f27312019fe82) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f78f27312019fe82)) | [ami-0183e005493fff43d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0183e005493fff43d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0183e005493fff43d)) | -| me-south-1 | [ami-0dd1b7971f44d31df](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dd1b7971f44d31df) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dd1b7971f44d31df)) | [ami-0a461424f2cbd7703](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a461424f2cbd7703) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a461424f2cbd7703)) | -| sa-east-1 | [ami-0a1f50279b17fd87b](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a1f50279b17fd87b) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a1f50279b17fd87b)) | [ami-02dcad0d6eace1774](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02dcad0d6eace1774) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02dcad0d6eace1774)) | -| us-east-1 | [ami-027de81a1ce32c074](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-027de81a1ce32c074) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-027de81a1ce32c074)) | [ami-01bced83ff9507b45](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01bced83ff9507b45) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01bced83ff9507b45)) | -| us-east-2 | [ami-0e2d79df04778c59c](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2d79df04778c59c) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2d79df04778c59c)) | [ami-06bd628a1c00663db](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06bd628a1c00663db) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06bd628a1c00663db)) | -| us-west-1 | [ami-070a5da5c26833c62](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-070a5da5c26833c62) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-070a5da5c26833c62)) | [ami-0c60d72a56731446c](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c60d72a56731446c) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c60d72a56731446c)) | -| us-west-2 | [ami-04b2b26abc19e8000](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b2b26abc19e8000) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04b2b26abc19e8000)) | [ami-097fcd1af8f5f8b1a](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097fcd1af8f5f8b1a) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-097fcd1af8f5f8b1a)) | +| af-south-1 | [ami-030d3dc1fe244dd57](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030d3dc1fe244dd57) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-030d3dc1fe244dd57)) | [ami-0441b82fd3fb48433](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0441b82fd3fb48433) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0441b82fd3fb48433)) | +| ap-east-1 | [ami-06a456f57c8505d62](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a456f57c8505d62) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a456f57c8505d62)) | [ami-0e2d8dfaf125a7631](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2d8dfaf125a7631) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2d8dfaf125a7631)) | +| ap-northeast-1 | [ami-0c59fa324a698444e](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c59fa324a698444e) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c59fa324a698444e)) | [ami-02fb62943caac3c71](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fb62943caac3c71) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fb62943caac3c71)) | +| ap-northeast-2 | [ami-01ca3b67a65eb6919](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ca3b67a65eb6919) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01ca3b67a65eb6919)) | [ami-038fc3b2d886b83ce](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-038fc3b2d886b83ce) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-038fc3b2d886b83ce)) | +| ap-northeast-3 | [ami-067123573f7c9d51a](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-067123573f7c9d51a) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-067123573f7c9d51a)) | [ami-0678e9272dbb276a1](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0678e9272dbb276a1) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0678e9272dbb276a1)) | +| ap-south-1 | [ami-0162c60e22df30210](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0162c60e22df30210) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0162c60e22df30210)) | [ami-0c0073e10ee3a5b66](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c0073e10ee3a5b66) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c0073e10ee3a5b66)) | +| ap-southeast-1 | [ami-0dcbd800f660da8f7](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dcbd800f660da8f7) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dcbd800f660da8f7)) | [ami-07c71c29e8cfef967](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07c71c29e8cfef967) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07c71c29e8cfef967)) | +| ap-southeast-2 | [ami-04710a38d0268afa2](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04710a38d0268afa2) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04710a38d0268afa2)) | [ami-039c2e2595e9da7fc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039c2e2595e9da7fc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-039c2e2595e9da7fc)) | +| ca-central-1 | [ami-0371786a6b356af22](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0371786a6b356af22) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0371786a6b356af22)) | [ami-0a464816128999904](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a464816128999904) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a464816128999904)) | +| eu-central-1 | [ami-0be980c74d002c93d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be980c74d002c93d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0be980c74d002c93d)) | [ami-0d6ad9b3597da40c4](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6ad9b3597da40c4) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6ad9b3597da40c4)) | +| eu-north-1 | [ami-0b356504ff165dd60](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b356504ff165dd60) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b356504ff165dd60)) | [ami-03cb5b21303291be4](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cb5b21303291be4) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03cb5b21303291be4)) | +| eu-south-1 | [ami-04f8023beeed567c5](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04f8023beeed567c5) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04f8023beeed567c5)) | [ami-02bd65e399a33d2c0](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02bd65e399a33d2c0) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02bd65e399a33d2c0)) | +| eu-west-1 | [ami-0d0b74b7120bb9716](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0b74b7120bb9716) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0b74b7120bb9716)) | [ami-097ec49079a5d612f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097ec49079a5d612f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097ec49079a5d612f)) | +| eu-west-2 | [ami-0aa557fc3c91bf915](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aa557fc3c91bf915) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0aa557fc3c91bf915)) | [ami-0360a9a8fec665753](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0360a9a8fec665753) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0360a9a8fec665753)) | +| eu-west-3 | [ami-0318f83b86ad7ac88](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0318f83b86ad7ac88) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0318f83b86ad7ac88)) | [ami-0adda5d20f341ae82](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adda5d20f341ae82) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0adda5d20f341ae82)) | +| me-south-1 | [ami-02acb0b55419c47a9](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02acb0b55419c47a9) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02acb0b55419c47a9)) | [ami-0cd56b96bf4e83dcf](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cd56b96bf4e83dcf) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cd56b96bf4e83dcf)) | +| sa-east-1 | [ami-03cdc3d22923fdf90](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cdc3d22923fdf90) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03cdc3d22923fdf90)) | [ami-08370ac3635a06147](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08370ac3635a06147) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08370ac3635a06147)) | +| us-east-1 | [ami-0056ccb36f3fb6235](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0056ccb36f3fb6235) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0056ccb36f3fb6235)) | [ami-068216a0f0800db09](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068216a0f0800db09) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068216a0f0800db09)) | +| us-east-2 | [ami-074945fa4d4a6f94e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-074945fa4d4a6f94e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-074945fa4d4a6f94e)) | [ami-06c24203121c5baa9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c24203121c5baa9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06c24203121c5baa9)) | +| us-west-1 | [ami-0c472aada49c5ce17](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c472aada49c5ce17) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c472aada49c5ce17)) | [ami-03815baf7396cc308](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03815baf7396cc308) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03815baf7396cc308)) | +| us-west-2 | [ami-02b50aee474e34b6d](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02b50aee474e34b6d) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02b50aee474e34b6d)) | [ami-0ccbd58d6e42a3f64](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ccbd58d6e42a3f64) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ccbd58d6e42a3f64)) |

-### Alpine Linux 3.12.6 (2021-04-01) +### Alpine Linux 3.12.7 (2021-04-15)
click to show/hide

-| Region | alpine-ami-3.12.6-aarch64-r0 | alpine-ami-3.12.6-x86_64-r0 | +| Region | alpine-ami-3.12.7-aarch64-r0 | alpine-ami-3.12.7-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-03ab04691eb81305c](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ab04691eb81305c) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ab04691eb81305c)) | [ami-097362ad2c7e85ff9](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097362ad2c7e85ff9) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097362ad2c7e85ff9)) | -| ap-east-1 | [ami-0459f125559cf7a43](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0459f125559cf7a43) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0459f125559cf7a43)) | [ami-0b2f408adba9eeb77](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b2f408adba9eeb77) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b2f408adba9eeb77)) | -| ap-northeast-1 | [ami-000eac2e53f67665f](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-000eac2e53f67665f) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-000eac2e53f67665f)) | [ami-04ad869c5351c4192](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04ad869c5351c4192) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04ad869c5351c4192)) | -| ap-northeast-2 | [ami-06c34515664686178](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c34515664686178) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06c34515664686178)) | [ami-0a32b105087e18bee](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a32b105087e18bee) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a32b105087e18bee)) | -| ap-northeast-3 | [ami-0ead6fb75ae44a638](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ead6fb75ae44a638) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ead6fb75ae44a638)) | [ami-097cd1087a7bdba68](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097cd1087a7bdba68) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-097cd1087a7bdba68)) | -| ap-south-1 | [ami-0e2ded5942d9f058a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2ded5942d9f058a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2ded5942d9f058a)) | [ami-02f7fad0ef8a7a256](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02f7fad0ef8a7a256) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02f7fad0ef8a7a256)) | -| ap-southeast-1 | [ami-020626262951dbc65](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-020626262951dbc65) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-020626262951dbc65)) | [ami-08c39f595d52dca8e](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c39f595d52dca8e) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c39f595d52dca8e)) | -| ap-southeast-2 | [ami-03564a4226e171ad3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03564a4226e171ad3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03564a4226e171ad3)) | [ami-01048f21bc59439dc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01048f21bc59439dc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01048f21bc59439dc)) | -| ca-central-1 | [ami-0ca25a25dab4f1217](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ca25a25dab4f1217) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ca25a25dab4f1217)) | [ami-00291d1e8ccb722b8](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00291d1e8ccb722b8) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00291d1e8ccb722b8)) | -| eu-central-1 | [ami-04b3f9222e48b0ec9](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b3f9222e48b0ec9) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04b3f9222e48b0ec9)) | [ami-0e6fd319034a18b22](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e6fd319034a18b22) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e6fd319034a18b22)) | -| eu-north-1 | [ami-0b2dad251f2256360](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b2dad251f2256360) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b2dad251f2256360)) | [ami-0d28e9d23c6c597d1](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d28e9d23c6c597d1) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d28e9d23c6c597d1)) | -| eu-south-1 | [ami-011a9aa0df80eb270](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011a9aa0df80eb270) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-011a9aa0df80eb270)) | [ami-0bb3b5d002f0778d9](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb3b5d002f0778d9) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb3b5d002f0778d9)) | -| eu-west-1 | [ami-01b95ab1ae982646d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01b95ab1ae982646d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01b95ab1ae982646d)) | [ami-071c81995fc2994aa](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071c81995fc2994aa) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-071c81995fc2994aa)) | -| eu-west-2 | [ami-0f004bda3e137c9d7](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f004bda3e137c9d7) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f004bda3e137c9d7)) | [ami-07e3e0856ba7ce738](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e3e0856ba7ce738) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07e3e0856ba7ce738)) | -| eu-west-3 | [ami-0458bb347b0db93f4](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0458bb347b0db93f4) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0458bb347b0db93f4)) | [ami-0d64e022b8cae50a0](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d64e022b8cae50a0) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d64e022b8cae50a0)) | -| me-south-1 | [ami-0b0c91c634b292491](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b0c91c634b292491) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b0c91c634b292491)) | [ami-009145fed3bc9e080](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009145fed3bc9e080) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-009145fed3bc9e080)) | -| sa-east-1 | [ami-0b4c8e7e7544fb79a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b4c8e7e7544fb79a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b4c8e7e7544fb79a)) | [ami-031a78cf394ec960a](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-031a78cf394ec960a) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-031a78cf394ec960a)) | -| us-east-1 | [ami-0aeecf1728e214ec9](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aeecf1728e214ec9) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aeecf1728e214ec9)) | [ami-008cce027b7fe1960](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008cce027b7fe1960) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008cce027b7fe1960)) | -| us-east-2 | [ami-08642448ee0a4d1af](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08642448ee0a4d1af) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08642448ee0a4d1af)) | [ami-0e07027f974ce204e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e07027f974ce204e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e07027f974ce204e)) | -| us-west-1 | [ami-0eb6b5f081ed1945b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eb6b5f081ed1945b) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0eb6b5f081ed1945b)) | [ami-051b7cdbd85c7975a](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051b7cdbd85c7975a) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051b7cdbd85c7975a)) | -| us-west-2 | [ami-072e1925b88f8da79](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-072e1925b88f8da79) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-072e1925b88f8da79)) | [ami-0f8c356c8a0f2eca3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f8c356c8a0f2eca3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f8c356c8a0f2eca3)) | +| af-south-1 | [ami-06a70fc94c1b79103](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a70fc94c1b79103) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a70fc94c1b79103)) | [ami-0ef71998139e39742](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef71998139e39742) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef71998139e39742)) | +| ap-east-1 | [ami-08543ebcf60f9408c](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08543ebcf60f9408c) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08543ebcf60f9408c)) | [ami-0628f9a686336d658](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0628f9a686336d658) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0628f9a686336d658)) | +| ap-northeast-1 | [ami-0de5d5c864ff290c9](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0de5d5c864ff290c9) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0de5d5c864ff290c9)) | [ami-0b34d9cbb63106e61](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b34d9cbb63106e61) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b34d9cbb63106e61)) | +| ap-northeast-2 | [ami-0c75288f31f0cb7b9](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c75288f31f0cb7b9) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c75288f31f0cb7b9)) | [ami-080b50f812df717ea](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-080b50f812df717ea) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-080b50f812df717ea)) | +| ap-northeast-3 | [ami-0914593958f896d39](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0914593958f896d39) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0914593958f896d39)) | [ami-01ddf8610921c1f5b](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ddf8610921c1f5b) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01ddf8610921c1f5b)) | +| ap-south-1 | [ami-064cb45377af025fd](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064cb45377af025fd) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-064cb45377af025fd)) | [ami-0f8f786ca89d0968c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f8f786ca89d0968c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f8f786ca89d0968c)) | +| ap-southeast-1 | [ami-0029ccf596b04ede9](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0029ccf596b04ede9) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0029ccf596b04ede9)) | [ami-079d7c6b97cac3237](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-079d7c6b97cac3237) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-079d7c6b97cac3237)) | +| ap-southeast-2 | [ami-03329a79c26b708ac](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03329a79c26b708ac) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03329a79c26b708ac)) | [ami-0d2e1217ececc880d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d2e1217ececc880d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d2e1217ececc880d)) | +| ca-central-1 | [ami-0db89bf48ad1abe72](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0db89bf48ad1abe72) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0db89bf48ad1abe72)) | [ami-094e7437e91419deb](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-094e7437e91419deb) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-094e7437e91419deb)) | +| eu-central-1 | [ami-032fc9bc108559f48](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-032fc9bc108559f48) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-032fc9bc108559f48)) | [ami-09eec438ca839ca58](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09eec438ca839ca58) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09eec438ca839ca58)) | +| eu-north-1 | [ami-05646b55b5ae08b43](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05646b55b5ae08b43) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05646b55b5ae08b43)) | [ami-09447e487e10b7655](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09447e487e10b7655) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09447e487e10b7655)) | +| eu-south-1 | [ami-094cd39ae22bd4939](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-094cd39ae22bd4939) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-094cd39ae22bd4939)) | [ami-04d393060a61a1eca](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d393060a61a1eca) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04d393060a61a1eca)) | +| eu-west-1 | [ami-085ac63da43317dd5](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-085ac63da43317dd5) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-085ac63da43317dd5)) | [ami-095c3d5967fd9c885](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095c3d5967fd9c885) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-095c3d5967fd9c885)) | +| eu-west-2 | [ami-0f7d892cc36618710](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7d892cc36618710) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7d892cc36618710)) | [ami-005a2f89daaf77547](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005a2f89daaf77547) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-005a2f89daaf77547)) | +| eu-west-3 | [ami-0936121449608b6c5](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0936121449608b6c5) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0936121449608b6c5)) | [ami-0700c55763af6a1bb](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0700c55763af6a1bb) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0700c55763af6a1bb)) | +| me-south-1 | [ami-0f7ec8223dabb5b0e](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7ec8223dabb5b0e) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7ec8223dabb5b0e)) | [ami-039b1ff0cfd4c9e1c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039b1ff0cfd4c9e1c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-039b1ff0cfd4c9e1c)) | +| sa-east-1 | [ami-0ac0c553d8d12be19](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ac0c553d8d12be19) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ac0c553d8d12be19)) | [ami-0d364d95ef0e3ed08](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d364d95ef0e3ed08) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d364d95ef0e3ed08)) | +| us-east-1 | [ami-0f2ae298a58efa981](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2ae298a58efa981) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2ae298a58efa981)) | [ami-08a8e1cd5cfe6fc40](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a8e1cd5cfe6fc40) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08a8e1cd5cfe6fc40)) | +| us-east-2 | [ami-0bafced8fbca21718](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bafced8fbca21718) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bafced8fbca21718)) | [ami-0f213093a04cde948](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f213093a04cde948) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f213093a04cde948)) | +| us-west-1 | [ami-0a241d0061f878274](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a241d0061f878274) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a241d0061f878274)) | [ami-0a5fc9a6a5351641e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5fc9a6a5351641e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5fc9a6a5351641e)) | +| us-west-2 | [ami-06c17e9baaa7fc2a8](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c17e9baaa7fc2a8) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06c17e9baaa7fc2a8)) | [ami-06b1887a7bc6eb122](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b1887a7bc6eb122) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06b1887a7bc6eb122)) |

-### Alpine Linux 3.11.10 (2021-04-01) +### Alpine Linux 3.11.11 (2021-04-15)
click to show/hide

-| Region | alpine-ami-3.11.10-x86_64-r0 | +| Region | alpine-ami-3.11.11-x86_64-r0 | | ------ | --- | -| af-south-1 | [ami-0f455287d3363c280](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f455287d3363c280) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f455287d3363c280)) | -| ap-east-1 | [ami-05c57e4acc07ca17d](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05c57e4acc07ca17d) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05c57e4acc07ca17d)) | -| ap-northeast-1 | [ami-0135a2fb264dc025f](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0135a2fb264dc025f) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0135a2fb264dc025f)) | -| ap-northeast-2 | [ami-0f30889add25c693c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f30889add25c693c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f30889add25c693c)) | -| ap-northeast-3 | [ami-05619a033f40cfdad](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05619a033f40cfdad) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-05619a033f40cfdad)) | -| ap-south-1 | [ami-0c72880b69669e221](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c72880b69669e221) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c72880b69669e221)) | -| ap-southeast-1 | [ami-0dc48e976e352b94c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc48e976e352b94c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc48e976e352b94c)) | -| ap-southeast-2 | [ami-009dbd5eb5a1a48bd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009dbd5eb5a1a48bd) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009dbd5eb5a1a48bd)) | -| ca-central-1 | [ami-0e7703fad0adb50ee](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e7703fad0adb50ee) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e7703fad0adb50ee)) | -| eu-central-1 | [ami-0d23d076184aa3240](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d23d076184aa3240) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d23d076184aa3240)) | -| eu-north-1 | [ami-00536bc82f302aa74](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00536bc82f302aa74) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00536bc82f302aa74)) | -| eu-south-1 | [ami-0b25b40c71a98aff7](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b25b40c71a98aff7) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b25b40c71a98aff7)) | -| eu-west-1 | [ami-0767e873233f4a692](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0767e873233f4a692) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0767e873233f4a692)) | -| eu-west-2 | [ami-05209d9d9ca843ee1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05209d9d9ca843ee1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05209d9d9ca843ee1)) | -| eu-west-3 | [ami-03fc4edb2da1cbd80](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03fc4edb2da1cbd80) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-03fc4edb2da1cbd80)) | -| me-south-1 | [ami-0c3dfefea8c5092ff](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3dfefea8c5092ff) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3dfefea8c5092ff)) | -| sa-east-1 | [ami-098daca13232992eb](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-098daca13232992eb) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-098daca13232992eb)) | -| us-east-1 | [ami-0cbc426f32ebf1c17](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cbc426f32ebf1c17) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cbc426f32ebf1c17)) | -| us-east-2 | [ami-066fa082d6f8f68d9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-066fa082d6f8f68d9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-066fa082d6f8f68d9)) | -| us-west-1 | [ami-01bb787574b93a55f](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01bb787574b93a55f) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01bb787574b93a55f)) | -| us-west-2 | [ami-0f2536f30d54fd059](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2536f30d54fd059) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2536f30d54fd059)) | +| af-south-1 | [ami-0a5bccfa2bc184bb1](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5bccfa2bc184bb1) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5bccfa2bc184bb1)) | +| ap-east-1 | [ami-057fe5fb6dbaeaabe](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057fe5fb6dbaeaabe) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-057fe5fb6dbaeaabe)) | +| ap-northeast-1 | [ami-0ce72c30606d58e2a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ce72c30606d58e2a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ce72c30606d58e2a)) | +| ap-northeast-2 | [ami-075d81ae6bd805c9a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-075d81ae6bd805c9a) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-075d81ae6bd805c9a)) | +| ap-northeast-3 | [ami-048b8b812a37a6e9d](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-048b8b812a37a6e9d) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-048b8b812a37a6e9d)) | +| ap-south-1 | [ami-0a09ced4a0968561a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a09ced4a0968561a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a09ced4a0968561a)) | +| ap-southeast-1 | [ami-0c3268d224a7be79f](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3268d224a7be79f) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3268d224a7be79f)) | +| ap-southeast-2 | [ami-0fe81386105b2c320](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe81386105b2c320) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe81386105b2c320)) | +| ca-central-1 | [ami-02351d48ae19b5153](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02351d48ae19b5153) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02351d48ae19b5153)) | +| eu-central-1 | [ami-082d5ae92b013cf0c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082d5ae92b013cf0c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-082d5ae92b013cf0c)) | +| eu-north-1 | [ami-0a67df0ddb737bca0](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a67df0ddb737bca0) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a67df0ddb737bca0)) | +| eu-south-1 | [ami-0b9e1df4e1ea3f09a](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9e1df4e1ea3f09a) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9e1df4e1ea3f09a)) | +| eu-west-1 | [ami-06318efc075e9c192](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06318efc075e9c192) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06318efc075e9c192)) | +| eu-west-2 | [ami-0a68f325601d8968f](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a68f325601d8968f) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a68f325601d8968f)) | +| eu-west-3 | [ami-06d6b6f3eb35b4988](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d6b6f3eb35b4988) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06d6b6f3eb35b4988)) | +| me-south-1 | [ami-0fee76fd32b0acb09](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fee76fd32b0acb09) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fee76fd32b0acb09)) | +| sa-east-1 | [ami-0e3921332d634a1bc](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3921332d634a1bc) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3921332d634a1bc)) | +| us-east-1 | [ami-09a785c1dd12aa464](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a785c1dd12aa464) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a785c1dd12aa464)) | +| us-east-2 | [ami-0f27d5f504d774c42](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f27d5f504d774c42) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f27d5f504d774c42)) | +| us-west-1 | [ami-0e1759b0e8c3b8fde](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e1759b0e8c3b8fde) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e1759b0e8c3b8fde)) | +| us-west-2 | [ami-038d4cc13841ec79f](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-038d4cc13841ec79f) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-038d4cc13841ec79f)) |

-### Alpine Linux 3.10.8 (2021-04-01) +### Alpine Linux 3.10.9 (2021-04-15)
click to show/hide

-| Region | alpine-ami-3.10.8-x86_64-r1 | +| Region | alpine-ami-3.10.9-x86_64-r1 | | ------ | --- | -| af-south-1 | [ami-0cf5ed4be275a558d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cf5ed4be275a558d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cf5ed4be275a558d)) | -| ap-east-1 | [ami-02512ded82c9eca96](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02512ded82c9eca96) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02512ded82c9eca96)) | -| ap-northeast-1 | [ami-0125460459071fb10](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0125460459071fb10) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0125460459071fb10)) | -| ap-northeast-2 | [ami-058779415511d94f0](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-058779415511d94f0) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-058779415511d94f0)) | -| ap-northeast-3 | [ami-00c44bcc711232e73](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00c44bcc711232e73) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-00c44bcc711232e73)) | -| ap-south-1 | [ami-07e305a2d0b134931](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07e305a2d0b134931) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07e305a2d0b134931)) | -| ap-southeast-1 | [ami-00079cd9ea17b4c72](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00079cd9ea17b4c72) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00079cd9ea17b4c72)) | -| ap-southeast-2 | [ami-099ad79c187dcc549](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-099ad79c187dcc549) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-099ad79c187dcc549)) | -| ca-central-1 | [ami-0769a0c2f6ee575a1](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0769a0c2f6ee575a1) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0769a0c2f6ee575a1)) | -| eu-central-1 | [ami-0b4e62b901a4566e8](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b4e62b901a4566e8) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b4e62b901a4566e8)) | -| eu-north-1 | [ami-046ebc1da4942e1bf](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-046ebc1da4942e1bf) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-046ebc1da4942e1bf)) | -| eu-south-1 | [ami-0be727df9f5bf35a8](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be727df9f5bf35a8) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0be727df9f5bf35a8)) | -| eu-west-1 | [ami-035ff69af1417f8fa](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035ff69af1417f8fa) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035ff69af1417f8fa)) | -| eu-west-2 | [ami-03e58d06de2faab8f](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e58d06de2faab8f) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03e58d06de2faab8f)) | -| eu-west-3 | [ami-0dc4565e30c0f3f17](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dc4565e30c0f3f17) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0dc4565e30c0f3f17)) | -| me-south-1 | [ami-0e694ff1c29750ea1](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e694ff1c29750ea1) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e694ff1c29750ea1)) | -| sa-east-1 | [ami-0a5a8093e8bc9f884](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5a8093e8bc9f884) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5a8093e8bc9f884)) | -| us-east-1 | [ami-070260dfb46190d05](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-070260dfb46190d05) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-070260dfb46190d05)) | -| us-east-2 | [ami-0ab4f038f7af003f1](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ab4f038f7af003f1) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ab4f038f7af003f1)) | -| us-west-1 | [ami-0ce060ae8c7118384](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ce060ae8c7118384) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ce060ae8c7118384)) | -| us-west-2 | [ami-0517c144657e44ae5](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0517c144657e44ae5) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0517c144657e44ae5)) | +| af-south-1 | [ami-05a0f52ef9b362d15](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05a0f52ef9b362d15) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05a0f52ef9b362d15)) | +| ap-east-1 | [ami-0b3f9948309f675f4](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b3f9948309f675f4) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b3f9948309f675f4)) | +| ap-northeast-1 | [ami-0fea317d2df3cce69](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fea317d2df3cce69) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fea317d2df3cce69)) | +| ap-northeast-2 | [ami-0d0575f67befe4c8f](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0575f67befe4c8f) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0575f67befe4c8f)) | +| ap-northeast-3 | [ami-011d0cf2c117c1e56](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011d0cf2c117c1e56) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-011d0cf2c117c1e56)) | +| ap-south-1 | [ami-0fc4c8a903643a419](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc4c8a903643a419) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc4c8a903643a419)) | +| ap-southeast-1 | [ami-034b1643c7a1f6ad3](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034b1643c7a1f6ad3) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034b1643c7a1f6ad3)) | +| ap-southeast-2 | [ami-0a7b4fc41269a89dc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a7b4fc41269a89dc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a7b4fc41269a89dc)) | +| ca-central-1 | [ami-019f7a425e4f03324](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-019f7a425e4f03324) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-019f7a425e4f03324)) | +| eu-central-1 | [ami-093bd61857bedc054](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-093bd61857bedc054) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-093bd61857bedc054)) | +| eu-north-1 | [ami-0bfb77538faaff8cd](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bfb77538faaff8cd) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bfb77538faaff8cd)) | +| eu-south-1 | [ami-0b8733c89a66b970e](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b8733c89a66b970e) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b8733c89a66b970e)) | +| eu-west-1 | [ami-0e82733ed8463266f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e82733ed8463266f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e82733ed8463266f)) | +| eu-west-2 | [ami-051ecb0c23f497417](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051ecb0c23f497417) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-051ecb0c23f497417)) | +| eu-west-3 | [ami-0626be1c660c6a49d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0626be1c660c6a49d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0626be1c660c6a49d)) | +| me-south-1 | [ami-08c67a11120a80177](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c67a11120a80177) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c67a11120a80177)) | +| sa-east-1 | [ami-0cc2b92d5645ca1e8](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc2b92d5645ca1e8) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc2b92d5645ca1e8)) | +| us-east-1 | [ami-0b1bd4876203c2b8c](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1bd4876203c2b8c) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1bd4876203c2b8c)) | +| us-east-2 | [ami-00123a738deb3a8e4](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00123a738deb3a8e4) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00123a738deb3a8e4)) | +| us-west-1 | [ami-0734555c891e8da78](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0734555c891e8da78) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0734555c891e8da78)) | +| us-west-2 | [ami-0cea541629d472655](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cea541629d472655) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cea541629d472655)) |

-### Alpine Linux Edge (2021-04-01) +### Alpine Linux Edge (2021-04-15)
click to show/hide

-| Region | alpine-ami-edge-aarch64-20210401010236 | alpine-ami-edge-x86_64-20210401010236 | +| Region | alpine-ami-edge-aarch64-20210415004934 | alpine-ami-edge-x86_64-20210415004934 | | ------ | --- | --- | -| af-south-1 | [ami-05775bf9e15e1b80c](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05775bf9e15e1b80c) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05775bf9e15e1b80c)) | [ami-0fef3d982fe2c872c](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fef3d982fe2c872c) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fef3d982fe2c872c)) | -| ap-east-1 | [ami-01211cc239a7f3861](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01211cc239a7f3861) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01211cc239a7f3861)) | [ami-0f9ca7392e6f6fe7d](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9ca7392e6f6fe7d) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9ca7392e6f6fe7d)) | -| ap-northeast-1 | [ami-0737b8c4efc011a3d](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0737b8c4efc011a3d) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0737b8c4efc011a3d)) | [ami-05fbcfbced49a6e0b](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05fbcfbced49a6e0b) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05fbcfbced49a6e0b)) | -| ap-northeast-2 | [ami-095e3b834c806cf1d](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095e3b834c806cf1d) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-095e3b834c806cf1d)) | [ami-0a8898ce0e2e2b31b](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8898ce0e2e2b31b) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8898ce0e2e2b31b)) | -| ap-northeast-3 | [ami-0e7aad764a423efd2](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e7aad764a423efd2) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0e7aad764a423efd2)) | [ami-059e6dd6793244ff5](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-059e6dd6793244ff5) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-059e6dd6793244ff5)) | -| ap-south-1 | [ami-0283191e64ece4447](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0283191e64ece4447) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0283191e64ece4447)) | [ami-029e8071a88daa3b1](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-029e8071a88daa3b1) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-029e8071a88daa3b1)) | -| ap-southeast-1 | [ami-06a7419700029a038](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a7419700029a038) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a7419700029a038)) | [ami-0a2dd6af213734721](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a2dd6af213734721) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a2dd6af213734721)) | -| ap-southeast-2 | [ami-082e3241518ebbfb7](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082e3241518ebbfb7) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-082e3241518ebbfb7)) | [ami-0534dbddac7c4d2a1](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0534dbddac7c4d2a1) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0534dbddac7c4d2a1)) | -| ca-central-1 | [ami-0f6aad07ddb07c6bc](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6aad07ddb07c6bc) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6aad07ddb07c6bc)) | [ami-009a342b1277a88b4](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009a342b1277a88b4) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-009a342b1277a88b4)) | -| eu-central-1 | [ami-0c36e3d2c640ca9b4](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c36e3d2c640ca9b4) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c36e3d2c640ca9b4)) | [ami-0812a3c27ec877e88](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0812a3c27ec877e88) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0812a3c27ec877e88)) | -| eu-north-1 | [ami-0619448905d49e078](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0619448905d49e078) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0619448905d49e078)) | [ami-05b29589254d0f181](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05b29589254d0f181) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05b29589254d0f181)) | -| eu-south-1 | [ami-042c697468bb5865f](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042c697468bb5865f) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042c697468bb5865f)) | [ami-02e142594610c4040](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02e142594610c4040) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02e142594610c4040)) | -| eu-west-1 | [ami-07d89f52e68a74075](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07d89f52e68a74075) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07d89f52e68a74075)) | [ami-0b371a4eba153e0e1](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b371a4eba153e0e1) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b371a4eba153e0e1)) | -| eu-west-2 | [ami-04651aa44e52dcfc1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04651aa44e52dcfc1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04651aa44e52dcfc1)) | [ami-0b485e7f67d4a3b4b](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b485e7f67d4a3b4b) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b485e7f67d4a3b4b)) | -| eu-west-3 | [ami-05898933fea1dcd6a](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05898933fea1dcd6a) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-05898933fea1dcd6a)) | [ami-0bf9142202d34bb53](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf9142202d34bb53) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf9142202d34bb53)) | -| me-south-1 | [ami-0e574208a5bdf99d5](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e574208a5bdf99d5) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e574208a5bdf99d5)) | [ami-0b82b23d9718cbb27](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b82b23d9718cbb27) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b82b23d9718cbb27)) | -| sa-east-1 | [ami-0d80a1330a8423a6e](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d80a1330a8423a6e) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d80a1330a8423a6e)) | [ami-05f2a4b326562cf29](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f2a4b326562cf29) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f2a4b326562cf29)) | -| us-east-1 | [ami-02d2d65fc8e58ad5b](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02d2d65fc8e58ad5b) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02d2d65fc8e58ad5b)) | [ami-053dffd39d28cecbd](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-053dffd39d28cecbd) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-053dffd39d28cecbd)) | -| us-east-2 | [ami-0f76047ff48c81a66](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f76047ff48c81a66) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f76047ff48c81a66)) | [ami-0d8b7d7c7506251b4](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d8b7d7c7506251b4) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d8b7d7c7506251b4)) | -| us-west-1 | [ami-0b908fe67477a4811](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b908fe67477a4811) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b908fe67477a4811)) | [ami-086651d2da2c2acbe](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-086651d2da2c2acbe) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-086651d2da2c2acbe)) | -| us-west-2 | [ami-09c1a5fcb4ec1acd3](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09c1a5fcb4ec1acd3) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09c1a5fcb4ec1acd3)) | [ami-0b88bd977ec096a3e](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b88bd977ec096a3e) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b88bd977ec096a3e)) | +| af-south-1 | [ami-05323d7ccfeef338d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05323d7ccfeef338d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05323d7ccfeef338d)) | [ami-0b2a5bd82f5c19450](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b2a5bd82f5c19450) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b2a5bd82f5c19450)) | +| ap-east-1 | [ami-0a205de4599a46b73](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a205de4599a46b73) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a205de4599a46b73)) | [ami-0b4af1fbe3d316c7c](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b4af1fbe3d316c7c) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b4af1fbe3d316c7c)) | +| ap-northeast-1 | [ami-0bed76a1c41508f7a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bed76a1c41508f7a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bed76a1c41508f7a)) | [ami-0a7db21efc6e29878](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a7db21efc6e29878) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a7db21efc6e29878)) | +| ap-northeast-2 | [ami-0459895d7d22cd6d2](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0459895d7d22cd6d2) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0459895d7d22cd6d2)) | [ami-05818d04f9ca5ae0c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05818d04f9ca5ae0c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05818d04f9ca5ae0c)) | +| ap-northeast-3 | [ami-0f6abafa7355f5498](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6abafa7355f5498) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6abafa7355f5498)) | [ami-092966b779e986ea9](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092966b779e986ea9) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-092966b779e986ea9)) | +| ap-south-1 | [ami-0a424f47b2e6e98f1](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a424f47b2e6e98f1) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a424f47b2e6e98f1)) | [ami-0f1c17fbeca6684f0](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1c17fbeca6684f0) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1c17fbeca6684f0)) | +| ap-southeast-1 | [ami-0ddd8b5bf6ce262a7](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ddd8b5bf6ce262a7) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ddd8b5bf6ce262a7)) | [ami-0fe9948c390424705](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe9948c390424705) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe9948c390424705)) | +| ap-southeast-2 | [ami-06d87bbcb96a8f826](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d87bbcb96a8f826) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06d87bbcb96a8f826)) | [ami-0862d60e3aad763fd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0862d60e3aad763fd) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0862d60e3aad763fd)) | +| ca-central-1 | [ami-01e7f633089983fb3](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01e7f633089983fb3) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01e7f633089983fb3)) | [ami-0bc9abfc42e208ab3](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc9abfc42e208ab3) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc9abfc42e208ab3)) | +| eu-central-1 | [ami-0b026a13578b0881c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b026a13578b0881c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b026a13578b0881c)) | [ami-09b8a9cd743ea4aeb](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09b8a9cd743ea4aeb) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09b8a9cd743ea4aeb)) | +| eu-north-1 | [ami-0625ddde0e3703657](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0625ddde0e3703657) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0625ddde0e3703657)) | [ami-0827247eeafc299c7](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0827247eeafc299c7) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0827247eeafc299c7)) | +| eu-south-1 | [ami-0fa6bc7832c89cc88](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa6bc7832c89cc88) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa6bc7832c89cc88)) | [ami-007cd9a3750268568](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007cd9a3750268568) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-007cd9a3750268568)) | +| eu-west-1 | [ami-0db2720148e1ee7c9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0db2720148e1ee7c9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0db2720148e1ee7c9)) | [ami-02f5d396ef0d0cd4e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02f5d396ef0d0cd4e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02f5d396ef0d0cd4e)) | +| eu-west-2 | [ami-0e28797e7ca6aa52e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e28797e7ca6aa52e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e28797e7ca6aa52e)) | [ami-0a3846ca0a16d70cc](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3846ca0a16d70cc) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3846ca0a16d70cc)) | +| eu-west-3 | [ami-04b6003dc6d833b93](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b6003dc6d833b93) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-04b6003dc6d833b93)) | [ami-001c0eab9d67f6718](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-001c0eab9d67f6718) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-001c0eab9d67f6718)) | +| me-south-1 | [ami-0d40a784a21287887](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d40a784a21287887) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d40a784a21287887)) | [ami-035a951e8bcea8167](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035a951e8bcea8167) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035a951e8bcea8167)) | +| sa-east-1 | [ami-0d21274dd1ffbf9b3](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d21274dd1ffbf9b3) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d21274dd1ffbf9b3)) | [ami-06ecc174e406c8af1](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06ecc174e406c8af1) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06ecc174e406c8af1)) | +| us-east-1 | [ami-0ce76b18bd6aedcf4](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ce76b18bd6aedcf4) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ce76b18bd6aedcf4)) | [ami-0296efb204b82eb67](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0296efb204b82eb67) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0296efb204b82eb67)) | +| us-east-2 | [ami-0e3a658b7337d7c80](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3a658b7337d7c80) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3a658b7337d7c80)) | [ami-0c21f3fdbb360887e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c21f3fdbb360887e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c21f3fdbb360887e)) | +| us-west-1 | [ami-0136fdf84a68f211b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0136fdf84a68f211b) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0136fdf84a68f211b)) | [ami-0244d7eadf1f89420](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0244d7eadf1f89420) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0244d7eadf1f89420)) | +| us-west-2 | [ami-051019494417c7234](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051019494417c7234) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-051019494417c7234)) | [ami-0589edf1630de358f](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0589edf1630de358f) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0589edf1630de358f)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index 072a2b0..f0e5abb 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,277 +1,277 @@ -3.13.4: - v3_13-x86_64: - alpine-ami-3.13.4-x86_64-r0: - description: Alpine Linux 3.13.4 x86_64 r0 - https://alpinelinux.org/cloud - profile: alpine - profile_build: v3_13-x86_64 - version: '3.13' - release: 3.13.4 - arch: x86_64 - revision: r0 - creation_date: '2021-04-01T01:16:18.000Z' - end_of_life: '2022-11-01T00:00:00' - build_time: 1617268578 - artifacts: - af-south-1: ami-04f2477fcded9065d - eu-north-1: ami-0eb2663f6ef26343b - ap-south-1: ami-0785aac7b5687eb2b - eu-west-3: ami-0183e005493fff43d - eu-west-2: ami-027c3ebdf0f7e2334 - eu-south-1: ami-08581e191cd8a8dd4 - eu-west-1: ami-077241f9ba4fb5b2f - ap-northeast-3: ami-03b8eb8780b5263a7 - ap-northeast-2: ami-07a0bb78ade906d73 - me-south-1: ami-0a461424f2cbd7703 - ap-northeast-1: ami-08de64935ea41e8df - sa-east-1: ami-02dcad0d6eace1774 - ca-central-1: ami-05bf415838736fabe - ap-east-1: ami-0fb14ab2ee170ad89 - ap-southeast-1: ami-0dc12655f44f4bddd - ap-southeast-2: ami-09cd10aded1798a78 - eu-central-1: ami-00b0f629424d9126c - us-east-1: ami-01bced83ff9507b45 - us-east-2: ami-06bd628a1c00663db - us-west-1: ami-0c60d72a56731446c - us-west-2: ami-097fcd1af8f5f8b1a +3.13.5: v3_13-aarch64: - alpine-ami-3.13.4-aarch64-r0: - description: Alpine Linux 3.13.4 aarch64 r0 - https://alpinelinux.org/cloud + alpine-ami-3.13.5-aarch64-r0: + description: Alpine Linux 3.13.5 aarch64 r0 - https://alpinelinux.org/cloud profile: alpine profile_build: v3_13-aarch64 version: '3.13' - release: 3.13.4 + release: 3.13.5 arch: aarch64 revision: r0 - creation_date: '2021-04-01T01:19:51.000Z' + creation_date: '2021-04-15T01:06:35.000Z' end_of_life: '2022-11-01T00:00:00' - build_time: 1617268791 + build_time: 1618477595 artifacts: - af-south-1: ami-0f509fde55c46bf59 - eu-north-1: ami-0346deae3e4bf298b - ap-south-1: ami-0ab9eb18d466662dd - eu-west-3: ami-0f78f27312019fe82 - eu-west-2: ami-0788e298788ad73b7 - eu-south-1: ami-0e2ac541ddf379e83 - eu-west-1: ami-00f9e4bedb6bb8abc - ap-northeast-3: ami-00e5abb5ba7a506ae - ap-northeast-2: ami-075173307a0bc645d - me-south-1: ami-0dd1b7971f44d31df - ap-northeast-1: ami-08c8b3e75da3370b6 - sa-east-1: ami-0a1f50279b17fd87b - ca-central-1: ami-0f4195b0eb4b4b6ab - ap-east-1: ami-011730d89acc31fbb - ap-southeast-1: ami-0de26e6d4c6164737 - ap-southeast-2: ami-07be724f9ff518cf2 - eu-central-1: ami-0e3c147576c6d305b - us-east-1: ami-027de81a1ce32c074 - us-east-2: ami-0e2d79df04778c59c - us-west-1: ami-070a5da5c26833c62 - us-west-2: ami-04b2b26abc19e8000 -3.12.6: + af-south-1: ami-030d3dc1fe244dd57 + eu-north-1: ami-0b356504ff165dd60 + ap-south-1: ami-0162c60e22df30210 + eu-west-3: ami-0318f83b86ad7ac88 + eu-west-2: ami-0aa557fc3c91bf915 + eu-south-1: ami-04f8023beeed567c5 + eu-west-1: ami-0d0b74b7120bb9716 + ap-northeast-3: ami-067123573f7c9d51a + ap-northeast-2: ami-01ca3b67a65eb6919 + me-south-1: ami-02acb0b55419c47a9 + ap-northeast-1: ami-0c59fa324a698444e + sa-east-1: ami-03cdc3d22923fdf90 + ca-central-1: ami-0371786a6b356af22 + ap-east-1: ami-06a456f57c8505d62 + ap-southeast-1: ami-0dcbd800f660da8f7 + ap-southeast-2: ami-04710a38d0268afa2 + eu-central-1: ami-0be980c74d002c93d + us-east-1: ami-0056ccb36f3fb6235 + us-east-2: ami-074945fa4d4a6f94e + us-west-1: ami-0c472aada49c5ce17 + us-west-2: ami-02b50aee474e34b6d + v3_13-x86_64: + alpine-ami-3.13.5-x86_64-r0: + description: Alpine Linux 3.13.5 x86_64 r0 - https://alpinelinux.org/cloud + profile: alpine + profile_build: v3_13-x86_64 + version: '3.13' + release: 3.13.5 + arch: x86_64 + revision: r0 + creation_date: '2021-04-15T01:03:30.000Z' + end_of_life: '2022-11-01T00:00:00' + build_time: 1618477410 + artifacts: + af-south-1: ami-0441b82fd3fb48433 + eu-north-1: ami-03cb5b21303291be4 + ap-south-1: ami-0c0073e10ee3a5b66 + eu-west-3: ami-0adda5d20f341ae82 + eu-west-2: ami-0360a9a8fec665753 + eu-south-1: ami-02bd65e399a33d2c0 + eu-west-1: ami-097ec49079a5d612f + ap-northeast-3: ami-0678e9272dbb276a1 + ap-northeast-2: ami-038fc3b2d886b83ce + me-south-1: ami-0cd56b96bf4e83dcf + ap-northeast-1: ami-02fb62943caac3c71 + sa-east-1: ami-08370ac3635a06147 + ca-central-1: ami-0a464816128999904 + ap-east-1: ami-0e2d8dfaf125a7631 + ap-southeast-1: ami-07c71c29e8cfef967 + ap-southeast-2: ami-039c2e2595e9da7fc + eu-central-1: ami-0d6ad9b3597da40c4 + us-east-1: ami-068216a0f0800db09 + us-east-2: ami-06c24203121c5baa9 + us-west-1: ami-03815baf7396cc308 + us-west-2: ami-0ccbd58d6e42a3f64 +3.12.7: v3_12-aarch64: - alpine-ami-3.12.6-aarch64-r0: - description: Alpine Linux 3.12.6 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.12.7-aarch64-r0: + description: Alpine Linux 3.12.7 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_12-aarch64 version: '3.12' - release: 3.12.6 + release: 3.12.7 arch: aarch64 revision: r0 - creation_date: '2021-04-01T01:22:44.000Z' + creation_date: '2021-04-15T01:09:54.000Z' end_of_life: '2022-05-01T00:00:00' - build_time: 1617268964 + build_time: 1618477794 artifacts: - af-south-1: ami-03ab04691eb81305c - eu-north-1: ami-0b2dad251f2256360 - ap-south-1: ami-0e2ded5942d9f058a - eu-west-3: ami-0458bb347b0db93f4 - eu-west-2: ami-0f004bda3e137c9d7 - eu-south-1: ami-011a9aa0df80eb270 - eu-west-1: ami-01b95ab1ae982646d - ap-northeast-3: ami-0ead6fb75ae44a638 - ap-northeast-2: ami-06c34515664686178 - me-south-1: ami-0b0c91c634b292491 - ap-northeast-1: ami-000eac2e53f67665f - sa-east-1: ami-0b4c8e7e7544fb79a - ca-central-1: ami-0ca25a25dab4f1217 - ap-east-1: ami-0459f125559cf7a43 - ap-southeast-1: ami-020626262951dbc65 - ap-southeast-2: ami-03564a4226e171ad3 - eu-central-1: ami-04b3f9222e48b0ec9 - us-east-1: ami-0aeecf1728e214ec9 - us-east-2: ami-08642448ee0a4d1af - us-west-1: ami-0eb6b5f081ed1945b - us-west-2: ami-072e1925b88f8da79 + af-south-1: ami-06a70fc94c1b79103 + eu-north-1: ami-05646b55b5ae08b43 + ap-south-1: ami-064cb45377af025fd + eu-west-3: ami-0936121449608b6c5 + eu-west-2: ami-0f7d892cc36618710 + eu-south-1: ami-094cd39ae22bd4939 + eu-west-1: ami-085ac63da43317dd5 + ap-northeast-3: ami-0914593958f896d39 + ap-northeast-2: ami-0c75288f31f0cb7b9 + me-south-1: ami-0f7ec8223dabb5b0e + ap-northeast-1: ami-0de5d5c864ff290c9 + sa-east-1: ami-0ac0c553d8d12be19 + ca-central-1: ami-0db89bf48ad1abe72 + ap-east-1: ami-08543ebcf60f9408c + ap-southeast-1: ami-0029ccf596b04ede9 + ap-southeast-2: ami-03329a79c26b708ac + eu-central-1: ami-032fc9bc108559f48 + us-east-1: ami-0f2ae298a58efa981 + us-east-2: ami-0bafced8fbca21718 + us-west-1: ami-0a241d0061f878274 + us-west-2: ami-06c17e9baaa7fc2a8 v3_12-x86_64: - alpine-ami-3.12.6-x86_64-r0: - description: Alpine Linux 3.12.6 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.12.7-x86_64-r0: + description: Alpine Linux 3.12.7 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_12-x86_64 version: '3.12' - release: 3.12.6 + release: 3.12.7 arch: x86_64 revision: r0 - creation_date: '2021-04-01T01:05:10.000Z' + creation_date: '2021-04-15T00:51:54.000Z' end_of_life: '2022-05-01T00:00:00' - build_time: 1617267910 + build_time: 1618476714 artifacts: - af-south-1: ami-097362ad2c7e85ff9 - eu-north-1: ami-0d28e9d23c6c597d1 - ap-south-1: ami-02f7fad0ef8a7a256 - eu-west-3: ami-0d64e022b8cae50a0 - eu-west-2: ami-07e3e0856ba7ce738 - eu-south-1: ami-0bb3b5d002f0778d9 - eu-west-1: ami-071c81995fc2994aa - ap-northeast-3: ami-097cd1087a7bdba68 - ap-northeast-2: ami-0a32b105087e18bee - me-south-1: ami-009145fed3bc9e080 - ap-northeast-1: ami-04ad869c5351c4192 - sa-east-1: ami-031a78cf394ec960a - ca-central-1: ami-00291d1e8ccb722b8 - ap-east-1: ami-0b2f408adba9eeb77 - ap-southeast-1: ami-08c39f595d52dca8e - ap-southeast-2: ami-01048f21bc59439dc - eu-central-1: ami-0e6fd319034a18b22 - us-east-1: ami-008cce027b7fe1960 - us-east-2: ami-0e07027f974ce204e - us-west-1: ami-051b7cdbd85c7975a - us-west-2: ami-0f8c356c8a0f2eca3 + af-south-1: ami-0ef71998139e39742 + eu-north-1: ami-09447e487e10b7655 + ap-south-1: ami-0f8f786ca89d0968c + eu-west-3: ami-0700c55763af6a1bb + eu-west-2: ami-005a2f89daaf77547 + eu-south-1: ami-04d393060a61a1eca + eu-west-1: ami-095c3d5967fd9c885 + ap-northeast-3: ami-01ddf8610921c1f5b + ap-northeast-2: ami-080b50f812df717ea + me-south-1: ami-039b1ff0cfd4c9e1c + ap-northeast-1: ami-0b34d9cbb63106e61 + sa-east-1: ami-0d364d95ef0e3ed08 + ca-central-1: ami-094e7437e91419deb + ap-east-1: ami-0628f9a686336d658 + ap-southeast-1: ami-079d7c6b97cac3237 + ap-southeast-2: ami-0d2e1217ececc880d + eu-central-1: ami-09eec438ca839ca58 + us-east-1: ami-08a8e1cd5cfe6fc40 + us-east-2: ami-0f213093a04cde948 + us-west-1: ami-0a5fc9a6a5351641e + us-west-2: ami-06b1887a7bc6eb122 edge: edge-aarch64: - alpine-ami-edge-aarch64-20210401010236: - description: Alpine Linux edge aarch64 20210401010236 - https://alpinelinux.org/cloud + alpine-ami-edge-aarch64-20210415004934: + description: Alpine Linux edge aarch64 20210415004934 - https://alpinelinux.org/cloud profile: alpine profile_build: edge-aarch64 version: edge release: edge arch: aarch64 - revision: '20210401010236' - creation_date: '2021-04-01T01:11:23.000Z' - end_of_life: '2021-04-02T01:02:36' - build_time: 1617268283 + revision: '20210415004934' + creation_date: '2021-04-15T00:58:05.000Z' + end_of_life: '2021-04-16T00:49:34' + build_time: 1618477085 artifacts: - af-south-1: ami-05775bf9e15e1b80c - eu-north-1: ami-0619448905d49e078 - ap-south-1: ami-0283191e64ece4447 - eu-west-3: ami-05898933fea1dcd6a - eu-west-2: ami-04651aa44e52dcfc1 - eu-south-1: ami-042c697468bb5865f - eu-west-1: ami-07d89f52e68a74075 - ap-northeast-3: ami-0e7aad764a423efd2 - ap-northeast-2: ami-095e3b834c806cf1d - me-south-1: ami-0e574208a5bdf99d5 - ap-northeast-1: ami-0737b8c4efc011a3d - sa-east-1: ami-0d80a1330a8423a6e - ca-central-1: ami-0f6aad07ddb07c6bc - ap-east-1: ami-01211cc239a7f3861 - ap-southeast-1: ami-06a7419700029a038 - ap-southeast-2: ami-082e3241518ebbfb7 - eu-central-1: ami-0c36e3d2c640ca9b4 - us-east-1: ami-02d2d65fc8e58ad5b - us-east-2: ami-0f76047ff48c81a66 - us-west-1: ami-0b908fe67477a4811 - us-west-2: ami-09c1a5fcb4ec1acd3 + af-south-1: ami-05323d7ccfeef338d + eu-north-1: ami-0625ddde0e3703657 + ap-south-1: ami-0a424f47b2e6e98f1 + eu-west-3: ami-04b6003dc6d833b93 + eu-west-2: ami-0e28797e7ca6aa52e + eu-south-1: ami-0fa6bc7832c89cc88 + eu-west-1: ami-0db2720148e1ee7c9 + ap-northeast-3: ami-0f6abafa7355f5498 + ap-northeast-2: ami-0459895d7d22cd6d2 + me-south-1: ami-0d40a784a21287887 + ap-northeast-1: ami-0bed76a1c41508f7a + sa-east-1: ami-0d21274dd1ffbf9b3 + ca-central-1: ami-01e7f633089983fb3 + ap-east-1: ami-0a205de4599a46b73 + ap-southeast-1: ami-0ddd8b5bf6ce262a7 + ap-southeast-2: ami-06d87bbcb96a8f826 + eu-central-1: ami-0b026a13578b0881c + us-east-1: ami-0ce76b18bd6aedcf4 + us-east-2: ami-0e3a658b7337d7c80 + us-west-1: ami-0136fdf84a68f211b + us-west-2: ami-051019494417c7234 edge-x86_64: - alpine-ami-edge-x86_64-20210401010236: - description: Alpine Linux edge x86_64 20210401010236 - https://alpinelinux.org/cloud + alpine-ami-edge-x86_64-20210415004934: + description: Alpine Linux edge x86_64 20210415004934 - https://alpinelinux.org/cloud profile: alpine profile_build: edge-x86_64 version: edge release: edge arch: x86_64 - revision: '20210401010236' - creation_date: '2021-04-01T01:13:59.000Z' - end_of_life: '2021-04-02T01:02:36' - build_time: 1617268439 + revision: '20210415004934' + creation_date: '2021-04-15T01:01:26.000Z' + end_of_life: '2021-04-16T00:49:34' + build_time: 1618477286 artifacts: - af-south-1: ami-0fef3d982fe2c872c - eu-north-1: ami-05b29589254d0f181 - ap-south-1: ami-029e8071a88daa3b1 - eu-west-3: ami-0bf9142202d34bb53 - eu-west-2: ami-0b485e7f67d4a3b4b - eu-south-1: ami-02e142594610c4040 - eu-west-1: ami-0b371a4eba153e0e1 - ap-northeast-3: ami-059e6dd6793244ff5 - ap-northeast-2: ami-0a8898ce0e2e2b31b - me-south-1: ami-0b82b23d9718cbb27 - ap-northeast-1: ami-05fbcfbced49a6e0b - sa-east-1: ami-05f2a4b326562cf29 - ca-central-1: ami-009a342b1277a88b4 - ap-east-1: ami-0f9ca7392e6f6fe7d - ap-southeast-1: ami-0a2dd6af213734721 - ap-southeast-2: ami-0534dbddac7c4d2a1 - eu-central-1: ami-0812a3c27ec877e88 - us-east-1: ami-053dffd39d28cecbd - us-east-2: ami-0d8b7d7c7506251b4 - us-west-1: ami-086651d2da2c2acbe - us-west-2: ami-0b88bd977ec096a3e -3.11.10: - v3_11-x86_64: - alpine-ami-3.11.10-x86_64-r0: - description: Alpine Linux 3.11.10 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.10 - arch: x86_64 - revision: r0 - creation_date: '2021-04-01T01:25:13.000Z' - end_of_life: '2021-11-01T00:00:00' - build_time: 1617269113 - artifacts: - af-south-1: ami-0f455287d3363c280 - eu-north-1: ami-00536bc82f302aa74 - ap-south-1: ami-0c72880b69669e221 - eu-west-3: ami-03fc4edb2da1cbd80 - eu-west-2: ami-05209d9d9ca843ee1 - eu-south-1: ami-0b25b40c71a98aff7 - eu-west-1: ami-0767e873233f4a692 - ap-northeast-3: ami-05619a033f40cfdad - ap-northeast-2: ami-0f30889add25c693c - me-south-1: ami-0c3dfefea8c5092ff - ap-northeast-1: ami-0135a2fb264dc025f - sa-east-1: ami-098daca13232992eb - ca-central-1: ami-0e7703fad0adb50ee - ap-east-1: ami-05c57e4acc07ca17d - ap-southeast-1: ami-0dc48e976e352b94c - ap-southeast-2: ami-009dbd5eb5a1a48bd - eu-central-1: ami-0d23d076184aa3240 - us-east-1: ami-0cbc426f32ebf1c17 - us-east-2: ami-066fa082d6f8f68d9 - us-west-1: ami-01bb787574b93a55f - us-west-2: ami-0f2536f30d54fd059 -3.10.8: + af-south-1: ami-0b2a5bd82f5c19450 + eu-north-1: ami-0827247eeafc299c7 + ap-south-1: ami-0f1c17fbeca6684f0 + eu-west-3: ami-001c0eab9d67f6718 + eu-west-2: ami-0a3846ca0a16d70cc + eu-south-1: ami-007cd9a3750268568 + eu-west-1: ami-02f5d396ef0d0cd4e + ap-northeast-3: ami-092966b779e986ea9 + ap-northeast-2: ami-05818d04f9ca5ae0c + me-south-1: ami-035a951e8bcea8167 + ap-northeast-1: ami-0a7db21efc6e29878 + sa-east-1: ami-06ecc174e406c8af1 + ca-central-1: ami-0bc9abfc42e208ab3 + ap-east-1: ami-0b4af1fbe3d316c7c + ap-southeast-1: ami-0fe9948c390424705 + ap-southeast-2: ami-0862d60e3aad763fd + eu-central-1: ami-09b8a9cd743ea4aeb + us-east-1: ami-0296efb204b82eb67 + us-east-2: ami-0c21f3fdbb360887e + us-west-1: ami-0244d7eadf1f89420 + us-west-2: ami-0589edf1630de358f +3.10.9: v3_10-x86_64: - alpine-ami-3.10.8-x86_64-r1: - description: Alpine Linux 3.10.8 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.10.9-x86_64-r1: + description: Alpine Linux 3.10.9 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_10-x86_64 version: '3.10' - release: 3.10.8 + release: 3.10.9 arch: x86_64 revision: r1 - creation_date: '2021-04-01T01:08:00.000Z' + creation_date: '2021-04-15T00:54:40.000Z' end_of_life: '2021-05-01T00:00:00' - build_time: 1617268080 + build_time: 1618476880 artifacts: - af-south-1: ami-0cf5ed4be275a558d - eu-north-1: ami-046ebc1da4942e1bf - ap-south-1: ami-07e305a2d0b134931 - eu-west-3: ami-0dc4565e30c0f3f17 - eu-west-2: ami-03e58d06de2faab8f - eu-south-1: ami-0be727df9f5bf35a8 - eu-west-1: ami-035ff69af1417f8fa - ap-northeast-3: ami-00c44bcc711232e73 - ap-northeast-2: ami-058779415511d94f0 - me-south-1: ami-0e694ff1c29750ea1 - ap-northeast-1: ami-0125460459071fb10 - sa-east-1: ami-0a5a8093e8bc9f884 - ca-central-1: ami-0769a0c2f6ee575a1 - ap-east-1: ami-02512ded82c9eca96 - ap-southeast-1: ami-00079cd9ea17b4c72 - ap-southeast-2: ami-099ad79c187dcc549 - eu-central-1: ami-0b4e62b901a4566e8 - us-east-1: ami-070260dfb46190d05 - us-east-2: ami-0ab4f038f7af003f1 - us-west-1: ami-0ce060ae8c7118384 - us-west-2: ami-0517c144657e44ae5 + af-south-1: ami-05a0f52ef9b362d15 + eu-north-1: ami-0bfb77538faaff8cd + ap-south-1: ami-0fc4c8a903643a419 + eu-west-3: ami-0626be1c660c6a49d + eu-west-2: ami-051ecb0c23f497417 + eu-south-1: ami-0b8733c89a66b970e + eu-west-1: ami-0e82733ed8463266f + ap-northeast-3: ami-011d0cf2c117c1e56 + ap-northeast-2: ami-0d0575f67befe4c8f + me-south-1: ami-08c67a11120a80177 + ap-northeast-1: ami-0fea317d2df3cce69 + sa-east-1: ami-0cc2b92d5645ca1e8 + ca-central-1: ami-019f7a425e4f03324 + ap-east-1: ami-0b3f9948309f675f4 + ap-southeast-1: ami-034b1643c7a1f6ad3 + ap-southeast-2: ami-0a7b4fc41269a89dc + eu-central-1: ami-093bd61857bedc054 + us-east-1: ami-0b1bd4876203c2b8c + us-east-2: ami-00123a738deb3a8e4 + us-west-1: ami-0734555c891e8da78 + us-west-2: ami-0cea541629d472655 +3.11.11: + v3_11-x86_64: + alpine-ami-3.11.11-x86_64-r0: + description: Alpine Linux 3.11.11 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami + profile: alpine + profile_build: v3_11-x86_64 + version: '3.11' + release: 3.11.11 + arch: x86_64 + revision: r0 + creation_date: '2021-04-15T01:12:43.000Z' + end_of_life: '2021-11-01T00:00:00' + build_time: 1618477963 + artifacts: + af-south-1: ami-0a5bccfa2bc184bb1 + eu-north-1: ami-0a67df0ddb737bca0 + ap-south-1: ami-0a09ced4a0968561a + eu-west-3: ami-06d6b6f3eb35b4988 + eu-west-2: ami-0a68f325601d8968f + eu-south-1: ami-0b9e1df4e1ea3f09a + eu-west-1: ami-06318efc075e9c192 + ap-northeast-3: ami-048b8b812a37a6e9d + ap-northeast-2: ami-075d81ae6bd805c9a + me-south-1: ami-0fee76fd32b0acb09 + ap-northeast-1: ami-0ce72c30606d58e2a + sa-east-1: ami-0e3921332d634a1bc + ca-central-1: ami-02351d48ae19b5153 + ap-east-1: ami-057fe5fb6dbaeaabe + ap-southeast-1: ami-0c3268d224a7be79f + ap-southeast-2: ami-0fe81386105b2c320 + eu-central-1: ami-082d5ae92b013cf0c + us-east-1: ami-09a785c1dd12aa464 + us-east-2: ami-0f27d5f504d774c42 + us-west-1: ami-0e1759b0e8c3b8fde + us-west-2: ami-038d4cc13841ec79f From b578a39eb7054b93993488f10cfdc41d324540f7 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sun, 2 May 2021 05:09:18 +0000 Subject: [PATCH 111/125] Remove backport hack for tiny-ec2-bootstrap --- profiles/alpine.conf | 11 +---------- scripts/tiny-ec2-backport.sh | 24 ------------------------ 2 files changed, 1 insertion(+), 34 deletions(-) delete mode 100755 scripts/tiny-ec2-backport.sh diff --git a/profiles/alpine.conf b/profiles/alpine.conf index 16e031a..23d66ed 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -17,15 +17,6 @@ official { ami_desc_suffix = " - https://alpinelinux.org/cloud" } -fix_root_resize { - # https://github.com/mcrute/tiny-ec2-bootstrap/pull/16 - pkgs { - sfdisk = true - util-linux = true - } - setup_script = scripts/tiny-ec2-backport.sh -} - # Build definitions BUILDS { # merge version, arch, profile; add per-build { revision = "r1" } if needed @@ -37,5 +28,5 @@ BUILDS { edge-aarch64 = ${version-edge} ${arch-aarch64} ${official} v3_13-aarch64 = ${version-3_13} ${arch-aarch64} ${official} - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${community} ${fix_root_resize} + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${community} } diff --git a/scripts/tiny-ec2-backport.sh b/scripts/tiny-ec2-backport.sh deleted file mode 100755 index 1aae591..0000000 --- a/scripts/tiny-ec2-backport.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -set -ex - -# Backports tiny-ec2-bootstrap 1.4.1 to Alpine 3.12 and earlier. This fixes -# resizing the root partition on aarch64 AMIs, and is NOT NECESSARY FOR x86_64. -# -# The build profile should also include the following dependencies... -# -# pkgs { -# sfdisk = true -# util-linux = true -# } -# - -TINY_EC2_BOOTSTRAP_VERSION=1.4.1 -TINY_EC2_BOOTSTRAP_URL="$(printf \ - https://raw.githubusercontent.com/mcrute/tiny-ec2-bootstrap/release-%s/tiny-ec2-bootstrap \ - "${TINY_EC2_BOOTSTRAP_VERSION}" -)" - -wget "$TINY_EC2_BOOTSTRAP_URL" -chmod +x tiny-ec2-bootstrap -cp -a tiny-ec2-bootstrap "$TARGET"/etc/init.d From b8ac181435cb63b12437b0691a99101c463a8a71 Mon Sep 17 00:00:00 2001 From: tomalok Date: Tue, 15 Jun 2021 12:34:38 -0700 Subject: [PATCH 112/125] Update for Version 3.14 (#122) Update for Version 3.14 * remove 3.10 build * fix aarch64 AMI's /etc/default/grub (resolves #121) * bump revision for aarch64 3.13 & 3.12 (to rebuild with fix) * fix comment on 3.13 * fix comment on 3.14 * new 3.14.0 AMIs released --- profiles/alpine.conf | 9 +- profiles/version/3.13 | 3 +- profiles/version/3.14 | 13 + releases/README.md | 196 +++++----- releases/alpine.yaml | 346 ++++++++++-------- scripts/setup-ami | 1 + .../setup-ami.d/etc/{grub => grub.template} | 0 7 files changed, 308 insertions(+), 260 deletions(-) create mode 100644 profiles/version/3.14 rename scripts/setup-ami.d/etc/{grub => grub.template} (100%) diff --git a/profiles/alpine.conf b/profiles/alpine.conf index 23d66ed..62b44dd 100644 --- a/profiles/alpine.conf +++ b/profiles/alpine.conf @@ -1,10 +1,10 @@ ### Profile for Building the Publically-Available Alpine Linux AMIs # vim: ts=2 et: +version-3_14 { include required("version/3.14") } version-3_13 { include required("version/3.13") } version-3_12 { include required("version/3.12") } version-3_11 { include required("version/3.11") } -version-3_10 { include required("version/3.10") } version-edge { include required("version/edge") } arch-x86_64 { include required("arch/x86_64") } arch-aarch64 { include required("arch/aarch64") } @@ -21,12 +21,13 @@ official { BUILDS { # merge version, arch, profile; add per-build { revision = "r1" } if needed edge-x86_64 = ${version-edge} ${arch-x86_64} ${official} + v3_14-x86_64 = ${version-3_14} ${arch-x86_64} ${official} v3_13-x86_64 = ${version-3_13} ${arch-x86_64} ${official} v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${community} v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${community} - v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${community} { revision = "r1" } edge-aarch64 = ${version-edge} ${arch-aarch64} ${official} - v3_13-aarch64 = ${version-3_13} ${arch-aarch64} ${official} - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${community} + v3_14-aarch64 = ${version-3_14} ${arch-aarch64} ${official} + v3_13-aarch64 = ${version-3_13} ${arch-aarch64} ${official} { revision = "r1" } + v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${community} { revision = "r1" } } diff --git a/profiles/version/3.13 b/profiles/version/3.13 index 8beb004..233a9ae 100644 --- a/profiles/version/3.13 +++ b/profiles/version/3.13 @@ -4,10 +4,9 @@ # based on current include required("../base/current") -# add edge-specific tweaks... +# set version-specific vars version = "3.13" end_of_life = "2022-11-01" - repos { "http://dl-cdn.alpinelinux.org/alpine/v3.13/main" = true "http://dl-cdn.alpinelinux.org/alpine/v3.13/community" = true diff --git a/profiles/version/3.14 b/profiles/version/3.14 new file mode 100644 index 0000000..52d3e53 --- /dev/null +++ b/profiles/version/3.14 @@ -0,0 +1,13 @@ +### version 3.14 vars +# vim: ts=2 et: + +# based on current +include required("../base/current") + +# set version-specific vars +version = "3.14" +end_of_life = "2023-05-01" +repos { + "http://dl-cdn.alpinelinux.org/alpine/v3.14/main" = true + "http://dl-cdn.alpinelinux.org/alpine/v3.14/community" = true +} diff --git a/releases/README.md b/releases/README.md index bb92369..182a21f 100644 --- a/releases/README.md +++ b/releases/README.md @@ -38,61 +38,90 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.13.5 (2021-04-15) +### Alpine Linux 3.14.0 (2021-06-15)
click to show/hide

-| Region | alpine-ami-3.13.5-aarch64-r0 | alpine-ami-3.13.5-x86_64-r0 | +| Region | alpine-ami-3.14.0-aarch64-r0 | alpine-ami-3.14.0-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-030d3dc1fe244dd57](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-030d3dc1fe244dd57) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-030d3dc1fe244dd57)) | [ami-0441b82fd3fb48433](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0441b82fd3fb48433) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0441b82fd3fb48433)) | -| ap-east-1 | [ami-06a456f57c8505d62](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a456f57c8505d62) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a456f57c8505d62)) | [ami-0e2d8dfaf125a7631](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2d8dfaf125a7631) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2d8dfaf125a7631)) | -| ap-northeast-1 | [ami-0c59fa324a698444e](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c59fa324a698444e) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c59fa324a698444e)) | [ami-02fb62943caac3c71](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fb62943caac3c71) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fb62943caac3c71)) | -| ap-northeast-2 | [ami-01ca3b67a65eb6919](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ca3b67a65eb6919) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01ca3b67a65eb6919)) | [ami-038fc3b2d886b83ce](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-038fc3b2d886b83ce) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-038fc3b2d886b83ce)) | -| ap-northeast-3 | [ami-067123573f7c9d51a](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-067123573f7c9d51a) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-067123573f7c9d51a)) | [ami-0678e9272dbb276a1](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0678e9272dbb276a1) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0678e9272dbb276a1)) | -| ap-south-1 | [ami-0162c60e22df30210](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0162c60e22df30210) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0162c60e22df30210)) | [ami-0c0073e10ee3a5b66](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c0073e10ee3a5b66) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c0073e10ee3a5b66)) | -| ap-southeast-1 | [ami-0dcbd800f660da8f7](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dcbd800f660da8f7) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dcbd800f660da8f7)) | [ami-07c71c29e8cfef967](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07c71c29e8cfef967) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07c71c29e8cfef967)) | -| ap-southeast-2 | [ami-04710a38d0268afa2](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04710a38d0268afa2) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04710a38d0268afa2)) | [ami-039c2e2595e9da7fc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039c2e2595e9da7fc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-039c2e2595e9da7fc)) | -| ca-central-1 | [ami-0371786a6b356af22](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0371786a6b356af22) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0371786a6b356af22)) | [ami-0a464816128999904](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a464816128999904) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a464816128999904)) | -| eu-central-1 | [ami-0be980c74d002c93d](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0be980c74d002c93d) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0be980c74d002c93d)) | [ami-0d6ad9b3597da40c4](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6ad9b3597da40c4) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6ad9b3597da40c4)) | -| eu-north-1 | [ami-0b356504ff165dd60](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b356504ff165dd60) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b356504ff165dd60)) | [ami-03cb5b21303291be4](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cb5b21303291be4) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03cb5b21303291be4)) | -| eu-south-1 | [ami-04f8023beeed567c5](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04f8023beeed567c5) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04f8023beeed567c5)) | [ami-02bd65e399a33d2c0](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02bd65e399a33d2c0) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02bd65e399a33d2c0)) | -| eu-west-1 | [ami-0d0b74b7120bb9716](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0b74b7120bb9716) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0b74b7120bb9716)) | [ami-097ec49079a5d612f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097ec49079a5d612f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097ec49079a5d612f)) | -| eu-west-2 | [ami-0aa557fc3c91bf915](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aa557fc3c91bf915) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0aa557fc3c91bf915)) | [ami-0360a9a8fec665753](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0360a9a8fec665753) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0360a9a8fec665753)) | -| eu-west-3 | [ami-0318f83b86ad7ac88](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0318f83b86ad7ac88) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0318f83b86ad7ac88)) | [ami-0adda5d20f341ae82](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adda5d20f341ae82) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0adda5d20f341ae82)) | -| me-south-1 | [ami-02acb0b55419c47a9](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02acb0b55419c47a9) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02acb0b55419c47a9)) | [ami-0cd56b96bf4e83dcf](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cd56b96bf4e83dcf) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cd56b96bf4e83dcf)) | -| sa-east-1 | [ami-03cdc3d22923fdf90](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cdc3d22923fdf90) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03cdc3d22923fdf90)) | [ami-08370ac3635a06147](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08370ac3635a06147) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08370ac3635a06147)) | -| us-east-1 | [ami-0056ccb36f3fb6235](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0056ccb36f3fb6235) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0056ccb36f3fb6235)) | [ami-068216a0f0800db09](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068216a0f0800db09) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068216a0f0800db09)) | -| us-east-2 | [ami-074945fa4d4a6f94e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-074945fa4d4a6f94e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-074945fa4d4a6f94e)) | [ami-06c24203121c5baa9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c24203121c5baa9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06c24203121c5baa9)) | -| us-west-1 | [ami-0c472aada49c5ce17](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c472aada49c5ce17) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c472aada49c5ce17)) | [ami-03815baf7396cc308](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03815baf7396cc308) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03815baf7396cc308)) | -| us-west-2 | [ami-02b50aee474e34b6d](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02b50aee474e34b6d) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-02b50aee474e34b6d)) | [ami-0ccbd58d6e42a3f64](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ccbd58d6e42a3f64) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ccbd58d6e42a3f64)) | +| af-south-1 | [ami-0db3c679fca544f58](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0db3c679fca544f58) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0db3c679fca544f58)) | [ami-0d1623a135e0c6857](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d1623a135e0c6857) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d1623a135e0c6857)) | +| ap-east-1 | [ami-045e0f869e0d4e7eb](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045e0f869e0d4e7eb) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-045e0f869e0d4e7eb)) | [ami-0c901564f52b27530](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c901564f52b27530) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c901564f52b27530)) | +| ap-northeast-1 | [ami-0e04a46b8c75cdb69](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e04a46b8c75cdb69) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e04a46b8c75cdb69)) | [ami-0c633b0e253124646](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c633b0e253124646) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c633b0e253124646)) | +| ap-northeast-2 | [ami-0a8a8a46504af4840](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8a8a46504af4840) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8a8a46504af4840)) | [ami-06ced752e444aea72](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06ced752e444aea72) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06ced752e444aea72)) | +| ap-northeast-3 | [ami-04d8717217749dfb9](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d8717217749dfb9) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-04d8717217749dfb9)) | [ami-0eff3a56ae878cfc1](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eff3a56ae878cfc1) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0eff3a56ae878cfc1)) | +| ap-south-1 | [ami-03f22d430b0ecedf6](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03f22d430b0ecedf6) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03f22d430b0ecedf6)) | [ami-08f1d5b5f1be7242c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f1d5b5f1be7242c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08f1d5b5f1be7242c)) | +| ap-southeast-1 | [ami-0f351387936e0e05a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f351387936e0e05a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f351387936e0e05a)) | [ami-0bad7cfddc438b54b](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bad7cfddc438b54b) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bad7cfddc438b54b)) | +| ap-southeast-2 | [ami-047f13e1babb460b7](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-047f13e1babb460b7) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-047f13e1babb460b7)) | [ami-08a917e12e1b7d368](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a917e12e1b7d368) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08a917e12e1b7d368)) | +| ca-central-1 | [ami-0f051749b672b581d](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f051749b672b581d) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f051749b672b581d)) | [ami-0479391a6ced47cb6](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0479391a6ced47cb6) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0479391a6ced47cb6)) | +| eu-central-1 | [ami-07a16998091ecefd8](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a16998091ecefd8) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a16998091ecefd8)) | [ami-01110d1bffbeb741c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01110d1bffbeb741c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01110d1bffbeb741c)) | +| eu-north-1 | [ami-09fd7a2b7dd46fb38](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09fd7a2b7dd46fb38) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09fd7a2b7dd46fb38)) | [ami-0c18e5587457b72d1](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c18e5587457b72d1) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c18e5587457b72d1)) | +| eu-south-1 | [ami-01fbf5d5f0a6df1b8](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01fbf5d5f0a6df1b8) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01fbf5d5f0a6df1b8)) | [ami-06b1f3f67146d435f](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b1f3f67146d435f) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b1f3f67146d435f)) | +| eu-west-1 | [ami-0833feeec783fd71f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0833feeec783fd71f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0833feeec783fd71f)) | [ami-07a6dc7b7f0ae6914](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a6dc7b7f0ae6914) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a6dc7b7f0ae6914)) | +| eu-west-2 | [ami-0d679cacb69534d79](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d679cacb69534d79) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d679cacb69534d79)) | [ami-048cb99b3d6cf4cf1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-048cb99b3d6cf4cf1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-048cb99b3d6cf4cf1)) | +| eu-west-3 | [ami-005bb2c00e60a5e85](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005bb2c00e60a5e85) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-005bb2c00e60a5e85)) | [ami-007e1bc731aa9cfe1](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007e1bc731aa9cfe1) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-007e1bc731aa9cfe1)) | +| me-south-1 | [ami-0bf071980915c6228](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf071980915c6228) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf071980915c6228)) | [ami-0179ebf14bd8cadb5](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0179ebf14bd8cadb5) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0179ebf14bd8cadb5)) | +| sa-east-1 | [ami-0d227012d5146cfd3](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d227012d5146cfd3) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d227012d5146cfd3)) | [ami-0e267a5fb0b8a8597](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e267a5fb0b8a8597) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e267a5fb0b8a8597)) | +| us-east-1 | [ami-03ccd30bbad1afc9e](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ccd30bbad1afc9e) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ccd30bbad1afc9e)) | [ami-0329bf0bb6e8b0838](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0329bf0bb6e8b0838) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0329bf0bb6e8b0838)) | +| us-east-2 | [ami-009ff2e47db660ebd](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009ff2e47db660ebd) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009ff2e47db660ebd)) | [ami-04fa7e50adecaa403](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04fa7e50adecaa403) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04fa7e50adecaa403)) | +| us-west-1 | [ami-0bc7ec6259eff689f](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc7ec6259eff689f) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc7ec6259eff689f)) | [ami-0d594859b900cd7d0](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d594859b900cd7d0) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d594859b900cd7d0)) | +| us-west-2 | [ami-0277fca2de285232a](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0277fca2de285232a) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0277fca2de285232a)) | [ami-0179fc8c4fdf51140](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0179fc8c4fdf51140) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0179fc8c4fdf51140)) |

-### Alpine Linux 3.12.7 (2021-04-15) +### Alpine Linux 3.13.5 (2021-06-15)
click to show/hide

-| Region | alpine-ami-3.12.7-aarch64-r0 | alpine-ami-3.12.7-x86_64-r0 | +| Region | alpine-ami-3.13.5-aarch64-r1 | alpine-ami-3.13.5-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-06a70fc94c1b79103](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a70fc94c1b79103) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06a70fc94c1b79103)) | [ami-0ef71998139e39742](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef71998139e39742) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef71998139e39742)) | -| ap-east-1 | [ami-08543ebcf60f9408c](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08543ebcf60f9408c) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08543ebcf60f9408c)) | [ami-0628f9a686336d658](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0628f9a686336d658) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0628f9a686336d658)) | -| ap-northeast-1 | [ami-0de5d5c864ff290c9](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0de5d5c864ff290c9) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0de5d5c864ff290c9)) | [ami-0b34d9cbb63106e61](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b34d9cbb63106e61) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b34d9cbb63106e61)) | -| ap-northeast-2 | [ami-0c75288f31f0cb7b9](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c75288f31f0cb7b9) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c75288f31f0cb7b9)) | [ami-080b50f812df717ea](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-080b50f812df717ea) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-080b50f812df717ea)) | -| ap-northeast-3 | [ami-0914593958f896d39](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0914593958f896d39) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0914593958f896d39)) | [ami-01ddf8610921c1f5b](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ddf8610921c1f5b) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01ddf8610921c1f5b)) | -| ap-south-1 | [ami-064cb45377af025fd](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-064cb45377af025fd) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-064cb45377af025fd)) | [ami-0f8f786ca89d0968c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f8f786ca89d0968c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f8f786ca89d0968c)) | -| ap-southeast-1 | [ami-0029ccf596b04ede9](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0029ccf596b04ede9) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0029ccf596b04ede9)) | [ami-079d7c6b97cac3237](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-079d7c6b97cac3237) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-079d7c6b97cac3237)) | -| ap-southeast-2 | [ami-03329a79c26b708ac](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03329a79c26b708ac) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03329a79c26b708ac)) | [ami-0d2e1217ececc880d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d2e1217ececc880d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d2e1217ececc880d)) | -| ca-central-1 | [ami-0db89bf48ad1abe72](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0db89bf48ad1abe72) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0db89bf48ad1abe72)) | [ami-094e7437e91419deb](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-094e7437e91419deb) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-094e7437e91419deb)) | -| eu-central-1 | [ami-032fc9bc108559f48](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-032fc9bc108559f48) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-032fc9bc108559f48)) | [ami-09eec438ca839ca58](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09eec438ca839ca58) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09eec438ca839ca58)) | -| eu-north-1 | [ami-05646b55b5ae08b43](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05646b55b5ae08b43) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05646b55b5ae08b43)) | [ami-09447e487e10b7655](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09447e487e10b7655) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09447e487e10b7655)) | -| eu-south-1 | [ami-094cd39ae22bd4939](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-094cd39ae22bd4939) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-094cd39ae22bd4939)) | [ami-04d393060a61a1eca](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d393060a61a1eca) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04d393060a61a1eca)) | -| eu-west-1 | [ami-085ac63da43317dd5](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-085ac63da43317dd5) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-085ac63da43317dd5)) | [ami-095c3d5967fd9c885](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095c3d5967fd9c885) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-095c3d5967fd9c885)) | -| eu-west-2 | [ami-0f7d892cc36618710](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7d892cc36618710) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7d892cc36618710)) | [ami-005a2f89daaf77547](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005a2f89daaf77547) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-005a2f89daaf77547)) | -| eu-west-3 | [ami-0936121449608b6c5](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0936121449608b6c5) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0936121449608b6c5)) | [ami-0700c55763af6a1bb](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0700c55763af6a1bb) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0700c55763af6a1bb)) | -| me-south-1 | [ami-0f7ec8223dabb5b0e](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f7ec8223dabb5b0e) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f7ec8223dabb5b0e)) | [ami-039b1ff0cfd4c9e1c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039b1ff0cfd4c9e1c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-039b1ff0cfd4c9e1c)) | -| sa-east-1 | [ami-0ac0c553d8d12be19](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ac0c553d8d12be19) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ac0c553d8d12be19)) | [ami-0d364d95ef0e3ed08](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d364d95ef0e3ed08) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d364d95ef0e3ed08)) | -| us-east-1 | [ami-0f2ae298a58efa981](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2ae298a58efa981) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2ae298a58efa981)) | [ami-08a8e1cd5cfe6fc40](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a8e1cd5cfe6fc40) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08a8e1cd5cfe6fc40)) | -| us-east-2 | [ami-0bafced8fbca21718](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bafced8fbca21718) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0bafced8fbca21718)) | [ami-0f213093a04cde948](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f213093a04cde948) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f213093a04cde948)) | -| us-west-1 | [ami-0a241d0061f878274](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a241d0061f878274) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a241d0061f878274)) | [ami-0a5fc9a6a5351641e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5fc9a6a5351641e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5fc9a6a5351641e)) | -| us-west-2 | [ami-06c17e9baaa7fc2a8](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c17e9baaa7fc2a8) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06c17e9baaa7fc2a8)) | [ami-06b1887a7bc6eb122](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b1887a7bc6eb122) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06b1887a7bc6eb122)) | +| af-south-1 | [ami-077c41d657f21a319](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-077c41d657f21a319) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-077c41d657f21a319)) | [ami-0441b82fd3fb48433](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0441b82fd3fb48433) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0441b82fd3fb48433)) | +| ap-east-1 | [ami-0650eebfb386ffb89](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0650eebfb386ffb89) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0650eebfb386ffb89)) | [ami-0e2d8dfaf125a7631](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2d8dfaf125a7631) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2d8dfaf125a7631)) | +| ap-northeast-1 | [ami-034682c4a51e88cf7](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034682c4a51e88cf7) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034682c4a51e88cf7)) | [ami-02fb62943caac3c71](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fb62943caac3c71) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fb62943caac3c71)) | +| ap-northeast-2 | [ami-070b973637320a52c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-070b973637320a52c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-070b973637320a52c)) | [ami-038fc3b2d886b83ce](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-038fc3b2d886b83ce) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-038fc3b2d886b83ce)) | +| ap-northeast-3 | [ami-0df1727e6d714cc2d](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0df1727e6d714cc2d) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0df1727e6d714cc2d)) | [ami-0678e9272dbb276a1](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0678e9272dbb276a1) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0678e9272dbb276a1)) | +| ap-south-1 | [ami-073046a717b1930dc](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073046a717b1930dc) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-073046a717b1930dc)) | [ami-0c0073e10ee3a5b66](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c0073e10ee3a5b66) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c0073e10ee3a5b66)) | +| ap-southeast-1 | [ami-03ac48af40b667111](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ac48af40b667111) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ac48af40b667111)) | [ami-07c71c29e8cfef967](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07c71c29e8cfef967) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07c71c29e8cfef967)) | +| ap-southeast-2 | [ami-04d61dc48ced711e3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d61dc48ced711e3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04d61dc48ced711e3)) | [ami-039c2e2595e9da7fc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039c2e2595e9da7fc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-039c2e2595e9da7fc)) | +| ca-central-1 | [ami-0f40fb960a6bac29a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f40fb960a6bac29a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f40fb960a6bac29a)) | [ami-0a464816128999904](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a464816128999904) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a464816128999904)) | +| eu-central-1 | [ami-0dcacb8c85ee2349e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dcacb8c85ee2349e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dcacb8c85ee2349e)) | [ami-0d6ad9b3597da40c4](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6ad9b3597da40c4) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6ad9b3597da40c4)) | +| eu-north-1 | [ami-0469d8b4b0f1b6493](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0469d8b4b0f1b6493) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0469d8b4b0f1b6493)) | [ami-03cb5b21303291be4](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cb5b21303291be4) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03cb5b21303291be4)) | +| eu-south-1 | [ami-0417a5f0b9249cb6e](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0417a5f0b9249cb6e) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0417a5f0b9249cb6e)) | [ami-02bd65e399a33d2c0](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02bd65e399a33d2c0) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02bd65e399a33d2c0)) | +| eu-west-1 | [ami-0ff5ce856793c0471](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ff5ce856793c0471) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ff5ce856793c0471)) | [ami-097ec49079a5d612f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097ec49079a5d612f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097ec49079a5d612f)) | +| eu-west-2 | [ami-07cd282c1d6887959](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07cd282c1d6887959) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07cd282c1d6887959)) | [ami-0360a9a8fec665753](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0360a9a8fec665753) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0360a9a8fec665753)) | +| eu-west-3 | [ami-0b5cffef9ef83241c](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b5cffef9ef83241c) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0b5cffef9ef83241c)) | [ami-0adda5d20f341ae82](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adda5d20f341ae82) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0adda5d20f341ae82)) | +| me-south-1 | [ami-00cd03fd11106a4cf](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00cd03fd11106a4cf) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00cd03fd11106a4cf)) | [ami-0cd56b96bf4e83dcf](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cd56b96bf4e83dcf) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cd56b96bf4e83dcf)) | +| sa-east-1 | [ami-0b92ae87d6e141bbb](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b92ae87d6e141bbb) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b92ae87d6e141bbb)) | [ami-08370ac3635a06147](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08370ac3635a06147) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08370ac3635a06147)) | +| us-east-1 | [ami-08500c947a8870478](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08500c947a8870478) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08500c947a8870478)) | [ami-068216a0f0800db09](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068216a0f0800db09) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068216a0f0800db09)) | +| us-east-2 | [ami-0acde1f635f6811c4](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0acde1f635f6811c4) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0acde1f635f6811c4)) | [ami-06c24203121c5baa9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c24203121c5baa9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06c24203121c5baa9)) | +| us-west-1 | [ami-09e1594112290a416](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e1594112290a416) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e1594112290a416)) | [ami-03815baf7396cc308](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03815baf7396cc308) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03815baf7396cc308)) | +| us-west-2 | [ami-034dc333a09683077](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034dc333a09683077) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-034dc333a09683077)) | [ami-0ccbd58d6e42a3f64](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ccbd58d6e42a3f64) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ccbd58d6e42a3f64)) | + +

+ +### Alpine Linux 3.12.7 (2021-06-15) +
click to show/hide

+ +| Region | alpine-ami-3.12.7-aarch64-r1 | alpine-ami-3.12.7-x86_64-r0 | +| ------ | --- | --- | +| af-south-1 | [ami-02a463c487f299306](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a463c487f299306) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02a463c487f299306)) | [ami-0ef71998139e39742](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef71998139e39742) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef71998139e39742)) | +| ap-east-1 | [ami-07ef9272fba7965e3](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ef9272fba7965e3) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07ef9272fba7965e3)) | [ami-0628f9a686336d658](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0628f9a686336d658) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0628f9a686336d658)) | +| ap-northeast-1 | [ami-035fb63f9b293417d](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035fb63f9b293417d) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035fb63f9b293417d)) | [ami-0b34d9cbb63106e61](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b34d9cbb63106e61) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b34d9cbb63106e61)) | +| ap-northeast-2 | [ami-07b5a03e1bb389253](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07b5a03e1bb389253) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07b5a03e1bb389253)) | [ami-080b50f812df717ea](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-080b50f812df717ea) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-080b50f812df717ea)) | +| ap-northeast-3 | [ami-0181e54576075b5cc](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0181e54576075b5cc) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0181e54576075b5cc)) | [ami-01ddf8610921c1f5b](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ddf8610921c1f5b) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01ddf8610921c1f5b)) | +| ap-south-1 | [ami-01044c4b5478c4d1d](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01044c4b5478c4d1d) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01044c4b5478c4d1d)) | [ami-0f8f786ca89d0968c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f8f786ca89d0968c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f8f786ca89d0968c)) | +| ap-southeast-1 | [ami-01b96ea14b3a15a77](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01b96ea14b3a15a77) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01b96ea14b3a15a77)) | [ami-079d7c6b97cac3237](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-079d7c6b97cac3237) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-079d7c6b97cac3237)) | +| ap-southeast-2 | [ami-06855d79571a6e4ac](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06855d79571a6e4ac) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06855d79571a6e4ac)) | [ami-0d2e1217ececc880d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d2e1217ececc880d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d2e1217ececc880d)) | +| ca-central-1 | [ami-042c2cb60c794554c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042c2cb60c794554c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042c2cb60c794554c)) | [ami-094e7437e91419deb](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-094e7437e91419deb) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-094e7437e91419deb)) | +| eu-central-1 | [ami-00eda68b21e026a70](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00eda68b21e026a70) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00eda68b21e026a70)) | [ami-09eec438ca839ca58](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09eec438ca839ca58) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09eec438ca839ca58)) | +| eu-north-1 | [ami-005856c2c0649fd53](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005856c2c0649fd53) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-005856c2c0649fd53)) | [ami-09447e487e10b7655](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09447e487e10b7655) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09447e487e10b7655)) | +| eu-south-1 | [ami-0a4b952da5d2e6d51](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a4b952da5d2e6d51) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a4b952da5d2e6d51)) | [ami-04d393060a61a1eca](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d393060a61a1eca) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04d393060a61a1eca)) | +| eu-west-1 | [ami-0463f3ec0e6f3ae1c](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0463f3ec0e6f3ae1c) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0463f3ec0e6f3ae1c)) | [ami-095c3d5967fd9c885](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095c3d5967fd9c885) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-095c3d5967fd9c885)) | +| eu-west-2 | [ami-0fb6524693687cca0](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb6524693687cca0) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb6524693687cca0)) | [ami-005a2f89daaf77547](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005a2f89daaf77547) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-005a2f89daaf77547)) | +| eu-west-3 | [ami-0d53043aa280e8b70](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d53043aa280e8b70) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d53043aa280e8b70)) | [ami-0700c55763af6a1bb](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0700c55763af6a1bb) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0700c55763af6a1bb)) | +| me-south-1 | [ami-0a1d69b39aea74ece](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a1d69b39aea74ece) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a1d69b39aea74ece)) | [ami-039b1ff0cfd4c9e1c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039b1ff0cfd4c9e1c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-039b1ff0cfd4c9e1c)) | +| sa-east-1 | [ami-0274fe1f8294b34fb](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0274fe1f8294b34fb) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0274fe1f8294b34fb)) | [ami-0d364d95ef0e3ed08](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d364d95ef0e3ed08) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d364d95ef0e3ed08)) | +| us-east-1 | [ami-0f2f4e0001bf5b275](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2f4e0001bf5b275) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2f4e0001bf5b275)) | [ami-08a8e1cd5cfe6fc40](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a8e1cd5cfe6fc40) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08a8e1cd5cfe6fc40)) | +| us-east-2 | [ami-01dd480af3ec8e7b5](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01dd480af3ec8e7b5) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01dd480af3ec8e7b5)) | [ami-0f213093a04cde948](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f213093a04cde948) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f213093a04cde948)) | +| us-west-1 | [ami-006f02a62ee4c57a0](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-006f02a62ee4c57a0) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-006f02a62ee4c57a0)) | [ami-0a5fc9a6a5351641e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5fc9a6a5351641e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5fc9a6a5351641e)) | +| us-west-2 | [ami-04485971d90cee562](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04485971d90cee562) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04485971d90cee562)) | [ami-06b1887a7bc6eb122](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b1887a7bc6eb122) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06b1887a7bc6eb122)) |

@@ -125,60 +154,31 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux 3.10.9 (2021-04-15) +### Alpine Linux Edge (2021-06-15)
click to show/hide

-| Region | alpine-ami-3.10.9-x86_64-r1 | -| ------ | --- | -| af-south-1 | [ami-05a0f52ef9b362d15](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05a0f52ef9b362d15) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05a0f52ef9b362d15)) | -| ap-east-1 | [ami-0b3f9948309f675f4](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b3f9948309f675f4) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b3f9948309f675f4)) | -| ap-northeast-1 | [ami-0fea317d2df3cce69](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fea317d2df3cce69) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fea317d2df3cce69)) | -| ap-northeast-2 | [ami-0d0575f67befe4c8f](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0575f67befe4c8f) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0575f67befe4c8f)) | -| ap-northeast-3 | [ami-011d0cf2c117c1e56](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-011d0cf2c117c1e56) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-011d0cf2c117c1e56)) | -| ap-south-1 | [ami-0fc4c8a903643a419](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fc4c8a903643a419) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fc4c8a903643a419)) | -| ap-southeast-1 | [ami-034b1643c7a1f6ad3](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034b1643c7a1f6ad3) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034b1643c7a1f6ad3)) | -| ap-southeast-2 | [ami-0a7b4fc41269a89dc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a7b4fc41269a89dc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a7b4fc41269a89dc)) | -| ca-central-1 | [ami-019f7a425e4f03324](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-019f7a425e4f03324) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-019f7a425e4f03324)) | -| eu-central-1 | [ami-093bd61857bedc054](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-093bd61857bedc054) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-093bd61857bedc054)) | -| eu-north-1 | [ami-0bfb77538faaff8cd](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bfb77538faaff8cd) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bfb77538faaff8cd)) | -| eu-south-1 | [ami-0b8733c89a66b970e](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b8733c89a66b970e) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b8733c89a66b970e)) | -| eu-west-1 | [ami-0e82733ed8463266f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e82733ed8463266f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e82733ed8463266f)) | -| eu-west-2 | [ami-051ecb0c23f497417](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051ecb0c23f497417) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-051ecb0c23f497417)) | -| eu-west-3 | [ami-0626be1c660c6a49d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0626be1c660c6a49d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0626be1c660c6a49d)) | -| me-south-1 | [ami-08c67a11120a80177](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08c67a11120a80177) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08c67a11120a80177)) | -| sa-east-1 | [ami-0cc2b92d5645ca1e8](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc2b92d5645ca1e8) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc2b92d5645ca1e8)) | -| us-east-1 | [ami-0b1bd4876203c2b8c](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b1bd4876203c2b8c) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b1bd4876203c2b8c)) | -| us-east-2 | [ami-00123a738deb3a8e4](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00123a738deb3a8e4) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-00123a738deb3a8e4)) | -| us-west-1 | [ami-0734555c891e8da78](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0734555c891e8da78) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0734555c891e8da78)) | -| us-west-2 | [ami-0cea541629d472655](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cea541629d472655) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cea541629d472655)) | - -

- -### Alpine Linux Edge (2021-04-15) -
click to show/hide

- -| Region | alpine-ami-edge-aarch64-20210415004934 | alpine-ami-edge-x86_64-20210415004934 | +| Region | alpine-ami-edge-aarch64-20210615145943 | alpine-ami-edge-x86_64-20210615145943 | | ------ | --- | --- | -| af-south-1 | [ami-05323d7ccfeef338d](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05323d7ccfeef338d) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05323d7ccfeef338d)) | [ami-0b2a5bd82f5c19450](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b2a5bd82f5c19450) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b2a5bd82f5c19450)) | -| ap-east-1 | [ami-0a205de4599a46b73](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a205de4599a46b73) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a205de4599a46b73)) | [ami-0b4af1fbe3d316c7c](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b4af1fbe3d316c7c) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b4af1fbe3d316c7c)) | -| ap-northeast-1 | [ami-0bed76a1c41508f7a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bed76a1c41508f7a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bed76a1c41508f7a)) | [ami-0a7db21efc6e29878](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a7db21efc6e29878) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a7db21efc6e29878)) | -| ap-northeast-2 | [ami-0459895d7d22cd6d2](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0459895d7d22cd6d2) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0459895d7d22cd6d2)) | [ami-05818d04f9ca5ae0c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05818d04f9ca5ae0c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05818d04f9ca5ae0c)) | -| ap-northeast-3 | [ami-0f6abafa7355f5498](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f6abafa7355f5498) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0f6abafa7355f5498)) | [ami-092966b779e986ea9](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092966b779e986ea9) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-092966b779e986ea9)) | -| ap-south-1 | [ami-0a424f47b2e6e98f1](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a424f47b2e6e98f1) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a424f47b2e6e98f1)) | [ami-0f1c17fbeca6684f0](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1c17fbeca6684f0) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1c17fbeca6684f0)) | -| ap-southeast-1 | [ami-0ddd8b5bf6ce262a7](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ddd8b5bf6ce262a7) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ddd8b5bf6ce262a7)) | [ami-0fe9948c390424705](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe9948c390424705) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe9948c390424705)) | -| ap-southeast-2 | [ami-06d87bbcb96a8f826](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d87bbcb96a8f826) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06d87bbcb96a8f826)) | [ami-0862d60e3aad763fd](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0862d60e3aad763fd) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0862d60e3aad763fd)) | -| ca-central-1 | [ami-01e7f633089983fb3](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01e7f633089983fb3) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01e7f633089983fb3)) | [ami-0bc9abfc42e208ab3](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc9abfc42e208ab3) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc9abfc42e208ab3)) | -| eu-central-1 | [ami-0b026a13578b0881c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b026a13578b0881c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b026a13578b0881c)) | [ami-09b8a9cd743ea4aeb](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09b8a9cd743ea4aeb) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09b8a9cd743ea4aeb)) | -| eu-north-1 | [ami-0625ddde0e3703657](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0625ddde0e3703657) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0625ddde0e3703657)) | [ami-0827247eeafc299c7](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0827247eeafc299c7) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0827247eeafc299c7)) | -| eu-south-1 | [ami-0fa6bc7832c89cc88](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fa6bc7832c89cc88) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fa6bc7832c89cc88)) | [ami-007cd9a3750268568](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007cd9a3750268568) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-007cd9a3750268568)) | -| eu-west-1 | [ami-0db2720148e1ee7c9](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0db2720148e1ee7c9) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0db2720148e1ee7c9)) | [ami-02f5d396ef0d0cd4e](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02f5d396ef0d0cd4e) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02f5d396ef0d0cd4e)) | -| eu-west-2 | [ami-0e28797e7ca6aa52e](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e28797e7ca6aa52e) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e28797e7ca6aa52e)) | [ami-0a3846ca0a16d70cc](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a3846ca0a16d70cc) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a3846ca0a16d70cc)) | -| eu-west-3 | [ami-04b6003dc6d833b93](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b6003dc6d833b93) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-04b6003dc6d833b93)) | [ami-001c0eab9d67f6718](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-001c0eab9d67f6718) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-001c0eab9d67f6718)) | -| me-south-1 | [ami-0d40a784a21287887](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d40a784a21287887) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d40a784a21287887)) | [ami-035a951e8bcea8167](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035a951e8bcea8167) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035a951e8bcea8167)) | -| sa-east-1 | [ami-0d21274dd1ffbf9b3](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d21274dd1ffbf9b3) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d21274dd1ffbf9b3)) | [ami-06ecc174e406c8af1](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06ecc174e406c8af1) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06ecc174e406c8af1)) | -| us-east-1 | [ami-0ce76b18bd6aedcf4](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ce76b18bd6aedcf4) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ce76b18bd6aedcf4)) | [ami-0296efb204b82eb67](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0296efb204b82eb67) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0296efb204b82eb67)) | -| us-east-2 | [ami-0e3a658b7337d7c80](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3a658b7337d7c80) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3a658b7337d7c80)) | [ami-0c21f3fdbb360887e](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c21f3fdbb360887e) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c21f3fdbb360887e)) | -| us-west-1 | [ami-0136fdf84a68f211b](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0136fdf84a68f211b) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0136fdf84a68f211b)) | [ami-0244d7eadf1f89420](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0244d7eadf1f89420) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0244d7eadf1f89420)) | -| us-west-2 | [ami-051019494417c7234](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051019494417c7234) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-051019494417c7234)) | [ami-0589edf1630de358f](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0589edf1630de358f) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0589edf1630de358f)) | +| af-south-1 | [ami-08fa83ca2b2904200](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08fa83ca2b2904200) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08fa83ca2b2904200)) | [ami-00a8c19558e1f927a](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a8c19558e1f927a) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a8c19558e1f927a)) | +| ap-east-1 | [ami-0875af5e5a0a2027b](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0875af5e5a0a2027b) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0875af5e5a0a2027b)) | [ami-087f66d9f27527f16](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-087f66d9f27527f16) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-087f66d9f27527f16)) | +| ap-northeast-1 | [ami-033ac633a243d13af](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-033ac633a243d13af) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-033ac633a243d13af)) | [ami-07f09134981eacf77](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f09134981eacf77) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f09134981eacf77)) | +| ap-northeast-2 | [ami-0cbc89b1db856e917](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cbc89b1db856e917) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cbc89b1db856e917)) | [ami-09c6db1fc45860f86](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09c6db1fc45860f86) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09c6db1fc45860f86)) | +| ap-northeast-3 | [ami-0963394fcaf7a5f87](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0963394fcaf7a5f87) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0963394fcaf7a5f87)) | [ami-07544363d4c51af60](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07544363d4c51af60) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07544363d4c51af60)) | +| ap-south-1 | [ami-0e5dfcb2530b55d71](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e5dfcb2530b55d71) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e5dfcb2530b55d71)) | [ami-07163c44a8aeb892e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07163c44a8aeb892e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07163c44a8aeb892e)) | +| ap-southeast-1 | [ami-08a3c249c9598a67c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a3c249c9598a67c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08a3c249c9598a67c)) | [ami-0b039665e3da40a29](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b039665e3da40a29) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b039665e3da40a29)) | +| ap-southeast-2 | [ami-05ba2c53356bdd549](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05ba2c53356bdd549) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05ba2c53356bdd549)) | [ami-071d2864a8b17acb9](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071d2864a8b17acb9) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-071d2864a8b17acb9)) | +| ca-central-1 | [ami-052a49b03ec690e3d](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052a49b03ec690e3d) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052a49b03ec690e3d)) | [ami-017631b1aa911a6b0](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-017631b1aa911a6b0) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-017631b1aa911a6b0)) | +| eu-central-1 | [ami-04b03eb151d38c0ee](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b03eb151d38c0ee) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04b03eb151d38c0ee)) | [ami-008e29e7aa44b9705](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008e29e7aa44b9705) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008e29e7aa44b9705)) | +| eu-north-1 | [ami-0a6d473d812586b6f](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a6d473d812586b6f) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a6d473d812586b6f)) | [ami-05703b93c6605a16a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05703b93c6605a16a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05703b93c6605a16a)) | +| eu-south-1 | [ami-0029f0d42355d4d1d](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0029f0d42355d4d1d) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0029f0d42355d4d1d)) | [ami-0006071afb62b5df4](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0006071afb62b5df4) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0006071afb62b5df4)) | +| eu-west-1 | [ami-051c2e7ad1efc7c72](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051c2e7ad1efc7c72) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051c2e7ad1efc7c72)) | [ami-026533ff4629dafbd](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026533ff4629dafbd) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026533ff4629dafbd)) | +| eu-west-2 | [ami-0f3746cf2119f5354](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f3746cf2119f5354) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f3746cf2119f5354)) | [ami-07fd89513b31071cc](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07fd89513b31071cc) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07fd89513b31071cc)) | +| eu-west-3 | [ami-0ea00ec4ebd028478](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ea00ec4ebd028478) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea00ec4ebd028478)) | [ami-0bf8a102f1e44689f](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf8a102f1e44689f) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf8a102f1e44689f)) | +| me-south-1 | [ami-01c26c09d79d0c482](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c26c09d79d0c482) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c26c09d79d0c482)) | [ami-0910eb18fd5ad9f37](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0910eb18fd5ad9f37) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0910eb18fd5ad9f37)) | +| sa-east-1 | [ami-00ad14be30d9dde6f](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ad14be30d9dde6f) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00ad14be30d9dde6f)) | [ami-0929c5c52fc9db114](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0929c5c52fc9db114) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0929c5c52fc9db114)) | +| us-east-1 | [ami-0372e0c5ad589021d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0372e0c5ad589021d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0372e0c5ad589021d)) | [ami-0f28d7ce314614e6e](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f28d7ce314614e6e) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f28d7ce314614e6e)) | +| us-east-2 | [ami-078d2aceaf82137b2](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-078d2aceaf82137b2) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-078d2aceaf82137b2)) | [ami-085d8b975e6afd4c7](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-085d8b975e6afd4c7) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-085d8b975e6afd4c7)) | +| us-west-1 | [ami-068d94cdc2084725d](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068d94cdc2084725d) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068d94cdc2084725d)) | [ami-07dbbb83bd2cc7506](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07dbbb83bd2cc7506) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07dbbb83bd2cc7506)) | +| us-west-2 | [ami-03d889a5cd41b4e55](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d889a5cd41b4e55) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d889a5cd41b4e55)) | [ami-0c728a956b6db3304](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c728a956b6db3304) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c728a956b6db3304)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index f0e5abb..d9bbe2f 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,38 +1,107 @@ +edge: + edge-x86_64: + alpine-ami-edge-x86_64-20210615145943: + description: Alpine Linux edge x86_64 20210615145943 - https://alpinelinux.org/cloud + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20210615145943' + creation_date: '2021-06-15T15:10:01.000Z' + end_of_life: '2021-06-16T14:59:43' + build_time: 1623798601 + artifacts: + af-south-1: ami-00a8c19558e1f927a + eu-north-1: ami-05703b93c6605a16a + ap-south-1: ami-07163c44a8aeb892e + eu-west-3: ami-0bf8a102f1e44689f + eu-west-2: ami-07fd89513b31071cc + eu-south-1: ami-0006071afb62b5df4 + eu-west-1: ami-026533ff4629dafbd + ap-northeast-3: ami-07544363d4c51af60 + ap-northeast-2: ami-09c6db1fc45860f86 + me-south-1: ami-0910eb18fd5ad9f37 + ap-northeast-1: ami-07f09134981eacf77 + sa-east-1: ami-0929c5c52fc9db114 + ca-central-1: ami-017631b1aa911a6b0 + ap-east-1: ami-087f66d9f27527f16 + ap-southeast-1: ami-0b039665e3da40a29 + ap-southeast-2: ami-071d2864a8b17acb9 + eu-central-1: ami-008e29e7aa44b9705 + us-east-1: ami-0f28d7ce314614e6e + us-east-2: ami-085d8b975e6afd4c7 + us-west-1: ami-07dbbb83bd2cc7506 + us-west-2: ami-0c728a956b6db3304 + edge-aarch64: + alpine-ami-edge-aarch64-20210615145943: + description: Alpine Linux edge aarch64 20210615145943 - https://alpinelinux.org/cloud + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20210615145943' + creation_date: '2021-06-15T15:04:45.000Z' + end_of_life: '2021-06-16T14:59:43' + build_time: 1623798285 + artifacts: + af-south-1: ami-08fa83ca2b2904200 + eu-north-1: ami-0a6d473d812586b6f + ap-south-1: ami-0e5dfcb2530b55d71 + eu-west-3: ami-0ea00ec4ebd028478 + eu-west-2: ami-0f3746cf2119f5354 + eu-south-1: ami-0029f0d42355d4d1d + eu-west-1: ami-051c2e7ad1efc7c72 + ap-northeast-3: ami-0963394fcaf7a5f87 + ap-northeast-2: ami-0cbc89b1db856e917 + me-south-1: ami-01c26c09d79d0c482 + ap-northeast-1: ami-033ac633a243d13af + sa-east-1: ami-00ad14be30d9dde6f + ca-central-1: ami-052a49b03ec690e3d + ap-east-1: ami-0875af5e5a0a2027b + ap-southeast-1: ami-08a3c249c9598a67c + ap-southeast-2: ami-05ba2c53356bdd549 + eu-central-1: ami-04b03eb151d38c0ee + us-east-1: ami-0372e0c5ad589021d + us-east-2: ami-078d2aceaf82137b2 + us-west-1: ami-068d94cdc2084725d + us-west-2: ami-03d889a5cd41b4e55 3.13.5: v3_13-aarch64: - alpine-ami-3.13.5-aarch64-r0: - description: Alpine Linux 3.13.5 aarch64 r0 - https://alpinelinux.org/cloud + alpine-ami-3.13.5-aarch64-r1: + description: Alpine Linux 3.13.5 aarch64 r1 - https://alpinelinux.org/cloud profile: alpine profile_build: v3_13-aarch64 version: '3.13' release: 3.13.5 arch: aarch64 - revision: r0 - creation_date: '2021-04-15T01:06:35.000Z' + revision: r1 + creation_date: '2021-06-15T15:13:26.000Z' end_of_life: '2022-11-01T00:00:00' - build_time: 1618477595 + build_time: 1623798806 artifacts: - af-south-1: ami-030d3dc1fe244dd57 - eu-north-1: ami-0b356504ff165dd60 - ap-south-1: ami-0162c60e22df30210 - eu-west-3: ami-0318f83b86ad7ac88 - eu-west-2: ami-0aa557fc3c91bf915 - eu-south-1: ami-04f8023beeed567c5 - eu-west-1: ami-0d0b74b7120bb9716 - ap-northeast-3: ami-067123573f7c9d51a - ap-northeast-2: ami-01ca3b67a65eb6919 - me-south-1: ami-02acb0b55419c47a9 - ap-northeast-1: ami-0c59fa324a698444e - sa-east-1: ami-03cdc3d22923fdf90 - ca-central-1: ami-0371786a6b356af22 - ap-east-1: ami-06a456f57c8505d62 - ap-southeast-1: ami-0dcbd800f660da8f7 - ap-southeast-2: ami-04710a38d0268afa2 - eu-central-1: ami-0be980c74d002c93d - us-east-1: ami-0056ccb36f3fb6235 - us-east-2: ami-074945fa4d4a6f94e - us-west-1: ami-0c472aada49c5ce17 - us-west-2: ami-02b50aee474e34b6d + af-south-1: ami-077c41d657f21a319 + eu-north-1: ami-0469d8b4b0f1b6493 + ap-south-1: ami-073046a717b1930dc + eu-west-3: ami-0b5cffef9ef83241c + eu-west-2: ami-07cd282c1d6887959 + eu-south-1: ami-0417a5f0b9249cb6e + eu-west-1: ami-0ff5ce856793c0471 + ap-northeast-3: ami-0df1727e6d714cc2d + ap-northeast-2: ami-070b973637320a52c + me-south-1: ami-00cd03fd11106a4cf + ap-northeast-1: ami-034682c4a51e88cf7 + sa-east-1: ami-0b92ae87d6e141bbb + ca-central-1: ami-0f40fb960a6bac29a + ap-east-1: ami-0650eebfb386ffb89 + ap-southeast-1: ami-03ac48af40b667111 + ap-southeast-2: ami-04d61dc48ced711e3 + eu-central-1: ami-0dcacb8c85ee2349e + us-east-1: ami-08500c947a8870478 + us-east-2: ami-0acde1f635f6811c4 + us-west-1: ami-09e1594112290a416 + us-west-2: ami-034dc333a09683077 v3_13-x86_64: alpine-ami-3.13.5-x86_64-r0: description: Alpine Linux 3.13.5 x86_64 r0 - https://alpinelinux.org/cloud @@ -69,39 +138,39 @@ us-west-2: ami-0ccbd58d6e42a3f64 3.12.7: v3_12-aarch64: - alpine-ami-3.12.7-aarch64-r0: - description: Alpine Linux 3.12.7 aarch64 r0 - https://github.com/mcrute/alpine-ec2-ami + alpine-ami-3.12.7-aarch64-r1: + description: Alpine Linux 3.12.7 aarch64 r1 - https://github.com/mcrute/alpine-ec2-ami profile: alpine profile_build: v3_12-aarch64 version: '3.12' release: 3.12.7 arch: aarch64 - revision: r0 - creation_date: '2021-04-15T01:09:54.000Z' + revision: r1 + creation_date: '2021-06-15T15:16:00.000Z' end_of_life: '2022-05-01T00:00:00' - build_time: 1618477794 + build_time: 1623798960 artifacts: - af-south-1: ami-06a70fc94c1b79103 - eu-north-1: ami-05646b55b5ae08b43 - ap-south-1: ami-064cb45377af025fd - eu-west-3: ami-0936121449608b6c5 - eu-west-2: ami-0f7d892cc36618710 - eu-south-1: ami-094cd39ae22bd4939 - eu-west-1: ami-085ac63da43317dd5 - ap-northeast-3: ami-0914593958f896d39 - ap-northeast-2: ami-0c75288f31f0cb7b9 - me-south-1: ami-0f7ec8223dabb5b0e - ap-northeast-1: ami-0de5d5c864ff290c9 - sa-east-1: ami-0ac0c553d8d12be19 - ca-central-1: ami-0db89bf48ad1abe72 - ap-east-1: ami-08543ebcf60f9408c - ap-southeast-1: ami-0029ccf596b04ede9 - ap-southeast-2: ami-03329a79c26b708ac - eu-central-1: ami-032fc9bc108559f48 - us-east-1: ami-0f2ae298a58efa981 - us-east-2: ami-0bafced8fbca21718 - us-west-1: ami-0a241d0061f878274 - us-west-2: ami-06c17e9baaa7fc2a8 + af-south-1: ami-02a463c487f299306 + eu-north-1: ami-005856c2c0649fd53 + ap-south-1: ami-01044c4b5478c4d1d + eu-west-3: ami-0d53043aa280e8b70 + eu-west-2: ami-0fb6524693687cca0 + eu-south-1: ami-0a4b952da5d2e6d51 + eu-west-1: ami-0463f3ec0e6f3ae1c + ap-northeast-3: ami-0181e54576075b5cc + ap-northeast-2: ami-07b5a03e1bb389253 + me-south-1: ami-0a1d69b39aea74ece + ap-northeast-1: ami-035fb63f9b293417d + sa-east-1: ami-0274fe1f8294b34fb + ca-central-1: ami-042c2cb60c794554c + ap-east-1: ami-07ef9272fba7965e3 + ap-southeast-1: ami-01b96ea14b3a15a77 + ap-southeast-2: ami-06855d79571a6e4ac + eu-central-1: ami-00eda68b21e026a70 + us-east-1: ami-0f2f4e0001bf5b275 + us-east-2: ami-01dd480af3ec8e7b5 + us-west-1: ami-006f02a62ee4c57a0 + us-west-2: ami-04485971d90cee562 v3_12-x86_64: alpine-ami-3.12.7-x86_64-r0: description: Alpine Linux 3.12.7 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami @@ -136,110 +205,6 @@ us-east-2: ami-0f213093a04cde948 us-west-1: ami-0a5fc9a6a5351641e us-west-2: ami-06b1887a7bc6eb122 -edge: - edge-aarch64: - alpine-ami-edge-aarch64-20210415004934: - description: Alpine Linux edge aarch64 20210415004934 - https://alpinelinux.org/cloud - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20210415004934' - creation_date: '2021-04-15T00:58:05.000Z' - end_of_life: '2021-04-16T00:49:34' - build_time: 1618477085 - artifacts: - af-south-1: ami-05323d7ccfeef338d - eu-north-1: ami-0625ddde0e3703657 - ap-south-1: ami-0a424f47b2e6e98f1 - eu-west-3: ami-04b6003dc6d833b93 - eu-west-2: ami-0e28797e7ca6aa52e - eu-south-1: ami-0fa6bc7832c89cc88 - eu-west-1: ami-0db2720148e1ee7c9 - ap-northeast-3: ami-0f6abafa7355f5498 - ap-northeast-2: ami-0459895d7d22cd6d2 - me-south-1: ami-0d40a784a21287887 - ap-northeast-1: ami-0bed76a1c41508f7a - sa-east-1: ami-0d21274dd1ffbf9b3 - ca-central-1: ami-01e7f633089983fb3 - ap-east-1: ami-0a205de4599a46b73 - ap-southeast-1: ami-0ddd8b5bf6ce262a7 - ap-southeast-2: ami-06d87bbcb96a8f826 - eu-central-1: ami-0b026a13578b0881c - us-east-1: ami-0ce76b18bd6aedcf4 - us-east-2: ami-0e3a658b7337d7c80 - us-west-1: ami-0136fdf84a68f211b - us-west-2: ami-051019494417c7234 - edge-x86_64: - alpine-ami-edge-x86_64-20210415004934: - description: Alpine Linux edge x86_64 20210415004934 - https://alpinelinux.org/cloud - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20210415004934' - creation_date: '2021-04-15T01:01:26.000Z' - end_of_life: '2021-04-16T00:49:34' - build_time: 1618477286 - artifacts: - af-south-1: ami-0b2a5bd82f5c19450 - eu-north-1: ami-0827247eeafc299c7 - ap-south-1: ami-0f1c17fbeca6684f0 - eu-west-3: ami-001c0eab9d67f6718 - eu-west-2: ami-0a3846ca0a16d70cc - eu-south-1: ami-007cd9a3750268568 - eu-west-1: ami-02f5d396ef0d0cd4e - ap-northeast-3: ami-092966b779e986ea9 - ap-northeast-2: ami-05818d04f9ca5ae0c - me-south-1: ami-035a951e8bcea8167 - ap-northeast-1: ami-0a7db21efc6e29878 - sa-east-1: ami-06ecc174e406c8af1 - ca-central-1: ami-0bc9abfc42e208ab3 - ap-east-1: ami-0b4af1fbe3d316c7c - ap-southeast-1: ami-0fe9948c390424705 - ap-southeast-2: ami-0862d60e3aad763fd - eu-central-1: ami-09b8a9cd743ea4aeb - us-east-1: ami-0296efb204b82eb67 - us-east-2: ami-0c21f3fdbb360887e - us-west-1: ami-0244d7eadf1f89420 - us-west-2: ami-0589edf1630de358f -3.10.9: - v3_10-x86_64: - alpine-ami-3.10.9-x86_64-r1: - description: Alpine Linux 3.10.9 x86_64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_10-x86_64 - version: '3.10' - release: 3.10.9 - arch: x86_64 - revision: r1 - creation_date: '2021-04-15T00:54:40.000Z' - end_of_life: '2021-05-01T00:00:00' - build_time: 1618476880 - artifacts: - af-south-1: ami-05a0f52ef9b362d15 - eu-north-1: ami-0bfb77538faaff8cd - ap-south-1: ami-0fc4c8a903643a419 - eu-west-3: ami-0626be1c660c6a49d - eu-west-2: ami-051ecb0c23f497417 - eu-south-1: ami-0b8733c89a66b970e - eu-west-1: ami-0e82733ed8463266f - ap-northeast-3: ami-011d0cf2c117c1e56 - ap-northeast-2: ami-0d0575f67befe4c8f - me-south-1: ami-08c67a11120a80177 - ap-northeast-1: ami-0fea317d2df3cce69 - sa-east-1: ami-0cc2b92d5645ca1e8 - ca-central-1: ami-019f7a425e4f03324 - ap-east-1: ami-0b3f9948309f675f4 - ap-southeast-1: ami-034b1643c7a1f6ad3 - ap-southeast-2: ami-0a7b4fc41269a89dc - eu-central-1: ami-093bd61857bedc054 - us-east-1: ami-0b1bd4876203c2b8c - us-east-2: ami-00123a738deb3a8e4 - us-west-1: ami-0734555c891e8da78 - us-west-2: ami-0cea541629d472655 3.11.11: v3_11-x86_64: alpine-ami-3.11.11-x86_64-r0: @@ -275,3 +240,72 @@ edge: us-east-2: ami-0f27d5f504d774c42 us-west-1: ami-0e1759b0e8c3b8fde us-west-2: ami-038d4cc13841ec79f +3.14.0: + v3_14-x86_64: + alpine-ami-3.14.0-x86_64-r0: + description: Alpine Linux 3.14.0 x86_64 r0 - https://alpinelinux.org/cloud + profile: alpine + profile_build: v3_14-x86_64 + version: '3.14' + release: 3.14.0 + arch: x86_64 + revision: r0 + creation_date: '2021-06-15T15:07:23.000Z' + end_of_life: '2023-05-01T00:00:00' + build_time: 1623798443 + artifacts: + af-south-1: ami-0d1623a135e0c6857 + eu-north-1: ami-0c18e5587457b72d1 + ap-south-1: ami-08f1d5b5f1be7242c + eu-west-3: ami-007e1bc731aa9cfe1 + eu-west-2: ami-048cb99b3d6cf4cf1 + eu-south-1: ami-06b1f3f67146d435f + eu-west-1: ami-07a6dc7b7f0ae6914 + ap-northeast-3: ami-0eff3a56ae878cfc1 + ap-northeast-2: ami-06ced752e444aea72 + me-south-1: ami-0179ebf14bd8cadb5 + ap-northeast-1: ami-0c633b0e253124646 + sa-east-1: ami-0e267a5fb0b8a8597 + ca-central-1: ami-0479391a6ced47cb6 + ap-east-1: ami-0c901564f52b27530 + ap-southeast-1: ami-0bad7cfddc438b54b + ap-southeast-2: ami-08a917e12e1b7d368 + eu-central-1: ami-01110d1bffbeb741c + us-east-1: ami-0329bf0bb6e8b0838 + us-east-2: ami-04fa7e50adecaa403 + us-west-1: ami-0d594859b900cd7d0 + us-west-2: ami-0179fc8c4fdf51140 + v3_14-aarch64: + alpine-ami-3.14.0-aarch64-r0: + description: Alpine Linux 3.14.0 aarch64 r0 - https://alpinelinux.org/cloud + profile: alpine + profile_build: v3_14-aarch64 + version: '3.14' + release: 3.14.0 + arch: aarch64 + revision: r0 + creation_date: '2021-06-15T15:02:20.000Z' + end_of_life: '2023-05-01T00:00:00' + build_time: 1623798140 + artifacts: + af-south-1: ami-0db3c679fca544f58 + eu-north-1: ami-09fd7a2b7dd46fb38 + ap-south-1: ami-03f22d430b0ecedf6 + eu-west-3: ami-005bb2c00e60a5e85 + eu-west-2: ami-0d679cacb69534d79 + eu-south-1: ami-01fbf5d5f0a6df1b8 + eu-west-1: ami-0833feeec783fd71f + ap-northeast-3: ami-04d8717217749dfb9 + ap-northeast-2: ami-0a8a8a46504af4840 + me-south-1: ami-0bf071980915c6228 + ap-northeast-1: ami-0e04a46b8c75cdb69 + sa-east-1: ami-0d227012d5146cfd3 + ca-central-1: ami-0f051749b672b581d + ap-east-1: ami-045e0f869e0d4e7eb + ap-southeast-1: ami-0f351387936e0e05a + ap-southeast-2: ami-047f13e1babb460b7 + eu-central-1: ami-07a16998091ecefd8 + us-east-1: ami-03ccd30bbad1afc9e + us-east-2: ami-009ff2e47db660ebd + us-west-1: ami-0bc7ec6259eff689f + us-west-2: ami-0277fca2de285232a diff --git a/scripts/setup-ami b/scripts/setup-ami index 6d9307a..47955fc 100755 --- a/scripts/setup-ami +++ b/scripts/setup-ami @@ -227,6 +227,7 @@ install_grub_efi() { install -D "$TARGET/boot/efi/EFI/alpine/grub$fwa.efi" "$TARGET/boot/efi/EFI/boot/boot$fwa.efi" # install default grub config + envsubst < "$SETUP/etc/grub.template" > "$SETUP/etc/grub" install -o root -g root -Dm644 -t "$TARGET/etc/default" \ "$SETUP/etc/grub" diff --git a/scripts/setup-ami.d/etc/grub b/scripts/setup-ami.d/etc/grub.template similarity index 100% rename from scripts/setup-ami.d/etc/grub rename to scripts/setup-ami.d/etc/grub.template From dd5b5ea415f9a33c5f9d7304fc196890f942e450 Mon Sep 17 00:00:00 2001 From: tomalok Date: Fri, 6 Aug 2021 22:25:08 -0700 Subject: [PATCH 113/125] released 3.14.1 (#124) --- releases/README.md | 92 ++++++++-------- releases/alpine.yaml | 244 +++++++++++++++++++++---------------------- 2 files changed, 168 insertions(+), 168 deletions(-) diff --git a/releases/README.md b/releases/README.md index 182a21f..28f676b 100644 --- a/releases/README.md +++ b/releases/README.md @@ -38,32 +38,32 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). ## AMIs -### Alpine Linux 3.14.0 (2021-06-15) +### Alpine Linux 3.14.1 (2021-08-07)
click to show/hide

-| Region | alpine-ami-3.14.0-aarch64-r0 | alpine-ami-3.14.0-x86_64-r0 | +| Region | alpine-ami-3.14.1-aarch64-r0 | alpine-ami-3.14.1-x86_64-r0 | | ------ | --- | --- | -| af-south-1 | [ami-0db3c679fca544f58](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0db3c679fca544f58) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0db3c679fca544f58)) | [ami-0d1623a135e0c6857](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d1623a135e0c6857) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d1623a135e0c6857)) | -| ap-east-1 | [ami-045e0f869e0d4e7eb](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-045e0f869e0d4e7eb) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-045e0f869e0d4e7eb)) | [ami-0c901564f52b27530](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c901564f52b27530) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c901564f52b27530)) | -| ap-northeast-1 | [ami-0e04a46b8c75cdb69](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e04a46b8c75cdb69) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e04a46b8c75cdb69)) | [ami-0c633b0e253124646](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c633b0e253124646) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c633b0e253124646)) | -| ap-northeast-2 | [ami-0a8a8a46504af4840](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a8a8a46504af4840) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a8a8a46504af4840)) | [ami-06ced752e444aea72](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06ced752e444aea72) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06ced752e444aea72)) | -| ap-northeast-3 | [ami-04d8717217749dfb9](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d8717217749dfb9) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-04d8717217749dfb9)) | [ami-0eff3a56ae878cfc1](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0eff3a56ae878cfc1) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0eff3a56ae878cfc1)) | -| ap-south-1 | [ami-03f22d430b0ecedf6](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03f22d430b0ecedf6) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03f22d430b0ecedf6)) | [ami-08f1d5b5f1be7242c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08f1d5b5f1be7242c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08f1d5b5f1be7242c)) | -| ap-southeast-1 | [ami-0f351387936e0e05a](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f351387936e0e05a) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f351387936e0e05a)) | [ami-0bad7cfddc438b54b](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bad7cfddc438b54b) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bad7cfddc438b54b)) | -| ap-southeast-2 | [ami-047f13e1babb460b7](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-047f13e1babb460b7) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-047f13e1babb460b7)) | [ami-08a917e12e1b7d368](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a917e12e1b7d368) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-08a917e12e1b7d368)) | -| ca-central-1 | [ami-0f051749b672b581d](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f051749b672b581d) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f051749b672b581d)) | [ami-0479391a6ced47cb6](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0479391a6ced47cb6) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0479391a6ced47cb6)) | -| eu-central-1 | [ami-07a16998091ecefd8](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a16998091ecefd8) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a16998091ecefd8)) | [ami-01110d1bffbeb741c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01110d1bffbeb741c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01110d1bffbeb741c)) | -| eu-north-1 | [ami-09fd7a2b7dd46fb38](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09fd7a2b7dd46fb38) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09fd7a2b7dd46fb38)) | [ami-0c18e5587457b72d1](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c18e5587457b72d1) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c18e5587457b72d1)) | -| eu-south-1 | [ami-01fbf5d5f0a6df1b8](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01fbf5d5f0a6df1b8) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01fbf5d5f0a6df1b8)) | [ami-06b1f3f67146d435f](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b1f3f67146d435f) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06b1f3f67146d435f)) | -| eu-west-1 | [ami-0833feeec783fd71f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0833feeec783fd71f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0833feeec783fd71f)) | [ami-07a6dc7b7f0ae6914](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07a6dc7b7f0ae6914) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07a6dc7b7f0ae6914)) | -| eu-west-2 | [ami-0d679cacb69534d79](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d679cacb69534d79) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d679cacb69534d79)) | [ami-048cb99b3d6cf4cf1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-048cb99b3d6cf4cf1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-048cb99b3d6cf4cf1)) | -| eu-west-3 | [ami-005bb2c00e60a5e85](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005bb2c00e60a5e85) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-005bb2c00e60a5e85)) | [ami-007e1bc731aa9cfe1](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-007e1bc731aa9cfe1) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-007e1bc731aa9cfe1)) | -| me-south-1 | [ami-0bf071980915c6228](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf071980915c6228) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf071980915c6228)) | [ami-0179ebf14bd8cadb5](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0179ebf14bd8cadb5) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0179ebf14bd8cadb5)) | -| sa-east-1 | [ami-0d227012d5146cfd3](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d227012d5146cfd3) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d227012d5146cfd3)) | [ami-0e267a5fb0b8a8597](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e267a5fb0b8a8597) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e267a5fb0b8a8597)) | -| us-east-1 | [ami-03ccd30bbad1afc9e](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ccd30bbad1afc9e) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ccd30bbad1afc9e)) | [ami-0329bf0bb6e8b0838](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0329bf0bb6e8b0838) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0329bf0bb6e8b0838)) | -| us-east-2 | [ami-009ff2e47db660ebd](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009ff2e47db660ebd) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-009ff2e47db660ebd)) | [ami-04fa7e50adecaa403](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04fa7e50adecaa403) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04fa7e50adecaa403)) | -| us-west-1 | [ami-0bc7ec6259eff689f](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bc7ec6259eff689f) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bc7ec6259eff689f)) | [ami-0d594859b900cd7d0](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d594859b900cd7d0) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d594859b900cd7d0)) | -| us-west-2 | [ami-0277fca2de285232a](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0277fca2de285232a) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0277fca2de285232a)) | [ami-0179fc8c4fdf51140](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0179fc8c4fdf51140) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0179fc8c4fdf51140)) | +| af-south-1 | [ami-0bcf48f55b9949a84](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bcf48f55b9949a84) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bcf48f55b9949a84)) | [ami-08aea7443b5d08f79](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08aea7443b5d08f79) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08aea7443b5d08f79)) | +| ap-east-1 | [ami-092aa3a38d204b2b5](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092aa3a38d204b2b5) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092aa3a38d204b2b5)) | [ami-0d4ba085b9c1557b8](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d4ba085b9c1557b8) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d4ba085b9c1557b8)) | +| ap-northeast-1 | [ami-0b559d40e76da2119](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b559d40e76da2119) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b559d40e76da2119)) | [ami-033c6bceffad8df75](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-033c6bceffad8df75) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-033c6bceffad8df75)) | +| ap-northeast-2 | [ami-07667213840caca26](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07667213840caca26) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07667213840caca26)) | [ami-0d7a7fdf22367713c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d7a7fdf22367713c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d7a7fdf22367713c)) | +| ap-northeast-3 | [ami-0956b7bafd7a6720d](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0956b7bafd7a6720d) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0956b7bafd7a6720d)) | [ami-08b52d5efd9abef56](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b52d5efd9abef56) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-08b52d5efd9abef56)) | +| ap-south-1 | [ami-07ed5174d6da65d84](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ed5174d6da65d84) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07ed5174d6da65d84)) | [ami-012f6469429d4ad42](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-012f6469429d4ad42) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-012f6469429d4ad42)) | +| ap-southeast-1 | [ami-0aa966cf6ca931b11](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aa966cf6ca931b11) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aa966cf6ca931b11)) | [ami-01a542451033fd940](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01a542451033fd940) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01a542451033fd940)) | +| ap-southeast-2 | [ami-069d767cedbd4d7a5](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-069d767cedbd4d7a5) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-069d767cedbd4d7a5)) | [ami-014e86c5062e164af](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014e86c5062e164af) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014e86c5062e164af)) | +| ca-central-1 | [ami-08bc6f39436e47c30](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08bc6f39436e47c30) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08bc6f39436e47c30)) | [ami-0bd936dc3de6b791d](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd936dc3de6b791d) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd936dc3de6b791d)) | +| eu-central-1 | [ami-06f364adb4a297706](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06f364adb4a297706) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06f364adb4a297706)) | [ami-0bb1a41a1c0eafc95](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb1a41a1c0eafc95) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb1a41a1c0eafc95)) | +| eu-north-1 | [ami-05f1271ab15bf4557](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f1271ab15bf4557) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f1271ab15bf4557)) | [ami-0e2b6818c61b0b113](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2b6818c61b0b113) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2b6818c61b0b113)) | +| eu-south-1 | [ami-06fb368b1c23356ca](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06fb368b1c23356ca) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06fb368b1c23356ca)) | [ami-0e69ca71abc28babe](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e69ca71abc28babe) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e69ca71abc28babe)) | +| eu-west-1 | [ami-0887b1a806a73417a](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0887b1a806a73417a) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0887b1a806a73417a)) | [ami-0274c314a1272d2fd](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0274c314a1272d2fd) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0274c314a1272d2fd)) | +| eu-west-2 | [ami-0d0ae9eb51f79e338](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0ae9eb51f79e338) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0ae9eb51f79e338)) | [ami-0e4e3a358f49875dc](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e4e3a358f49875dc) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e4e3a358f49875dc)) | +| eu-west-3 | [ami-08af7eab2ea99f7e5](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08af7eab2ea99f7e5) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-08af7eab2ea99f7e5)) | [ami-031817718bbaf781d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-031817718bbaf781d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-031817718bbaf781d)) | +| me-south-1 | [ami-02b98efa2cd0b2ab0](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02b98efa2cd0b2ab0) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02b98efa2cd0b2ab0)) | [ami-0a665daaaf042257a](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a665daaaf042257a) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a665daaaf042257a)) | +| sa-east-1 | [ami-07f46bbd5674b79a6](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f46bbd5674b79a6) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f46bbd5674b79a6)) | [ami-0101f8d6e37b57173](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0101f8d6e37b57173) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0101f8d6e37b57173)) | +| us-east-1 | [ami-03175ec34a7192e70](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03175ec34a7192e70) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03175ec34a7192e70)) | [ami-0f1919ed094505be3](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1919ed094505be3) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1919ed094505be3)) | +| us-east-2 | [ami-082d34382e0289102](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082d34382e0289102) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-082d34382e0289102)) | [ami-01f0c5ccdeab2a3d8](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01f0c5ccdeab2a3d8) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01f0c5ccdeab2a3d8)) | +| us-west-1 | [ami-0081057f803624455](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0081057f803624455) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0081057f803624455)) | [ami-0000605ad5571b4c0](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0000605ad5571b4c0) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0000605ad5571b4c0)) | +| us-west-2 | [ami-03e685d5fddaf46e7](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e685d5fddaf46e7) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03e685d5fddaf46e7)) | [ami-05e856cad09314ed0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e856cad09314ed0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05e856cad09314ed0)) |

@@ -154,31 +154,31 @@ to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues).

-### Alpine Linux Edge (2021-06-15) +### Alpine Linux Edge (2021-08-07)
click to show/hide

-| Region | alpine-ami-edge-aarch64-20210615145943 | alpine-ami-edge-x86_64-20210615145943 | +| Region | alpine-ami-edge-aarch64-20210807035653 | alpine-ami-edge-x86_64-20210807035653 | | ------ | --- | --- | -| af-south-1 | [ami-08fa83ca2b2904200](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08fa83ca2b2904200) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08fa83ca2b2904200)) | [ami-00a8c19558e1f927a](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00a8c19558e1f927a) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00a8c19558e1f927a)) | -| ap-east-1 | [ami-0875af5e5a0a2027b](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0875af5e5a0a2027b) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0875af5e5a0a2027b)) | [ami-087f66d9f27527f16](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-087f66d9f27527f16) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-087f66d9f27527f16)) | -| ap-northeast-1 | [ami-033ac633a243d13af](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-033ac633a243d13af) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-033ac633a243d13af)) | [ami-07f09134981eacf77](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f09134981eacf77) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f09134981eacf77)) | -| ap-northeast-2 | [ami-0cbc89b1db856e917](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cbc89b1db856e917) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0cbc89b1db856e917)) | [ami-09c6db1fc45860f86](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09c6db1fc45860f86) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-09c6db1fc45860f86)) | -| ap-northeast-3 | [ami-0963394fcaf7a5f87](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0963394fcaf7a5f87) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0963394fcaf7a5f87)) | [ami-07544363d4c51af60](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07544363d4c51af60) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-07544363d4c51af60)) | -| ap-south-1 | [ami-0e5dfcb2530b55d71](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e5dfcb2530b55d71) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e5dfcb2530b55d71)) | [ami-07163c44a8aeb892e](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07163c44a8aeb892e) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07163c44a8aeb892e)) | -| ap-southeast-1 | [ami-08a3c249c9598a67c](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a3c249c9598a67c) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08a3c249c9598a67c)) | [ami-0b039665e3da40a29](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b039665e3da40a29) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b039665e3da40a29)) | -| ap-southeast-2 | [ami-05ba2c53356bdd549](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05ba2c53356bdd549) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05ba2c53356bdd549)) | [ami-071d2864a8b17acb9](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-071d2864a8b17acb9) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-071d2864a8b17acb9)) | -| ca-central-1 | [ami-052a49b03ec690e3d](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-052a49b03ec690e3d) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-052a49b03ec690e3d)) | [ami-017631b1aa911a6b0](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-017631b1aa911a6b0) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-017631b1aa911a6b0)) | -| eu-central-1 | [ami-04b03eb151d38c0ee](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04b03eb151d38c0ee) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04b03eb151d38c0ee)) | [ami-008e29e7aa44b9705](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-008e29e7aa44b9705) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-008e29e7aa44b9705)) | -| eu-north-1 | [ami-0a6d473d812586b6f](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a6d473d812586b6f) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a6d473d812586b6f)) | [ami-05703b93c6605a16a](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05703b93c6605a16a) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05703b93c6605a16a)) | -| eu-south-1 | [ami-0029f0d42355d4d1d](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0029f0d42355d4d1d) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0029f0d42355d4d1d)) | [ami-0006071afb62b5df4](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0006071afb62b5df4) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0006071afb62b5df4)) | -| eu-west-1 | [ami-051c2e7ad1efc7c72](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-051c2e7ad1efc7c72) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-051c2e7ad1efc7c72)) | [ami-026533ff4629dafbd](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-026533ff4629dafbd) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-026533ff4629dafbd)) | -| eu-west-2 | [ami-0f3746cf2119f5354](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f3746cf2119f5354) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f3746cf2119f5354)) | [ami-07fd89513b31071cc](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07fd89513b31071cc) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07fd89513b31071cc)) | -| eu-west-3 | [ami-0ea00ec4ebd028478](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ea00ec4ebd028478) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0ea00ec4ebd028478)) | [ami-0bf8a102f1e44689f](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bf8a102f1e44689f) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0bf8a102f1e44689f)) | -| me-south-1 | [ami-01c26c09d79d0c482](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01c26c09d79d0c482) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01c26c09d79d0c482)) | [ami-0910eb18fd5ad9f37](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0910eb18fd5ad9f37) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0910eb18fd5ad9f37)) | -| sa-east-1 | [ami-00ad14be30d9dde6f](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00ad14be30d9dde6f) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00ad14be30d9dde6f)) | [ami-0929c5c52fc9db114](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0929c5c52fc9db114) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0929c5c52fc9db114)) | -| us-east-1 | [ami-0372e0c5ad589021d](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0372e0c5ad589021d) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0372e0c5ad589021d)) | [ami-0f28d7ce314614e6e](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f28d7ce314614e6e) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f28d7ce314614e6e)) | -| us-east-2 | [ami-078d2aceaf82137b2](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-078d2aceaf82137b2) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-078d2aceaf82137b2)) | [ami-085d8b975e6afd4c7](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-085d8b975e6afd4c7) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-085d8b975e6afd4c7)) | -| us-west-1 | [ami-068d94cdc2084725d](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068d94cdc2084725d) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068d94cdc2084725d)) | [ami-07dbbb83bd2cc7506](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07dbbb83bd2cc7506) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07dbbb83bd2cc7506)) | -| us-west-2 | [ami-03d889a5cd41b4e55](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03d889a5cd41b4e55) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03d889a5cd41b4e55)) | [ami-0c728a956b6db3304](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c728a956b6db3304) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0c728a956b6db3304)) | +| af-south-1 | [ami-0d119db2dbae0d1f2](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d119db2dbae0d1f2) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d119db2dbae0d1f2)) | [ami-043fabf28ec27dd48](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043fabf28ec27dd48) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043fabf28ec27dd48)) | +| ap-east-1 | [ami-06720fd442e84af52](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06720fd442e84af52) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06720fd442e84af52)) | [ami-0cc5ca3f207d56fe4](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc5ca3f207d56fe4) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc5ca3f207d56fe4)) | +| ap-northeast-1 | [ami-03bb3e6b43c7e5b3a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03bb3e6b43c7e5b3a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03bb3e6b43c7e5b3a)) | [ami-03c77a5b6ef2ce5cf](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03c77a5b6ef2ce5cf) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03c77a5b6ef2ce5cf)) | +| ap-northeast-2 | [ami-05f6a1444b2dba1be](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f6a1444b2dba1be) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05f6a1444b2dba1be)) | [ami-04efc6ef9b126d1b7](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04efc6ef9b126d1b7) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04efc6ef9b126d1b7)) | +| ap-northeast-3 | [ami-06553907a3296d356](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06553907a3296d356) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06553907a3296d356)) | [ami-09de309f09de8634d](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09de309f09de8634d) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-09de309f09de8634d)) | +| ap-south-1 | [ami-02276ceadfba3d8dc](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02276ceadfba3d8dc) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02276ceadfba3d8dc)) | [ami-04e3beb414e5c63a0](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e3beb414e5c63a0) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e3beb414e5c63a0)) | +| ap-southeast-1 | [ami-009e681f7123d7507](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009e681f7123d7507) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-009e681f7123d7507)) | [ami-091c8e0712eb73cfc](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091c8e0712eb73cfc) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-091c8e0712eb73cfc)) | +| ap-southeast-2 | [ami-0f609e1d8e752a7d5](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f609e1d8e752a7d5) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f609e1d8e752a7d5)) | [ami-0e0e696ef294e3c54](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e0e696ef294e3c54) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e0e696ef294e3c54)) | +| ca-central-1 | [ami-0e79a284afab67660](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e79a284afab67660) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e79a284afab67660)) | [ami-0ddc8f4f4adfb9432](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ddc8f4f4adfb9432) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ddc8f4f4adfb9432)) | +| eu-central-1 | [ami-00d213f492389362f](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00d213f492389362f) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00d213f492389362f)) | [ami-0b8f1eb4317be682b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b8f1eb4317be682b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b8f1eb4317be682b)) | +| eu-north-1 | [ami-09efda8acd6cd23a3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09efda8acd6cd23a3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09efda8acd6cd23a3)) | [ami-013ec2fcd6a337f5c](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013ec2fcd6a337f5c) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-013ec2fcd6a337f5c)) | +| eu-south-1 | [ami-08b0d59e27d5834cd](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b0d59e27d5834cd) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b0d59e27d5834cd)) | [ami-04d0311c3a559280e](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d0311c3a559280e) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04d0311c3a559280e)) | +| eu-west-1 | [ami-083fce6ab0babc52b](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-083fce6ab0babc52b) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-083fce6ab0babc52b)) | [ami-092803064e707b52d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092803064e707b52d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092803064e707b52d)) | +| eu-west-2 | [ami-0d5e165b15b45d294](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d5e165b15b45d294) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5e165b15b45d294)) | [ami-06a1e1353977132a1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a1e1353977132a1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06a1e1353977132a1)) | +| eu-west-3 | [ami-0b9e58d8fb5a5851d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9e58d8fb5a5851d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9e58d8fb5a5851d)) | [ami-0403f988d8f677db2](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0403f988d8f677db2) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0403f988d8f677db2)) | +| me-south-1 | [ami-0a6ce44e9cae12563](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a6ce44e9cae12563) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a6ce44e9cae12563)) | [ami-0759c23186662c037](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0759c23186662c037) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0759c23186662c037)) | +| sa-east-1 | [ami-0ed048bcd64ffdac7](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed048bcd64ffdac7) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed048bcd64ffdac7)) | [ami-03502f7175066565d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03502f7175066565d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03502f7175066565d)) | +| us-east-1 | [ami-0e71191f5db7e9a53](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e71191f5db7e9a53) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e71191f5db7e9a53)) | [ami-0320caad46860385f](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0320caad46860385f) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0320caad46860385f)) | +| us-east-2 | [ami-01ae9b5526a5530b9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ae9b5526a5530b9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01ae9b5526a5530b9)) | [ami-0b6d988e51817d6cb](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6d988e51817d6cb) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6d988e51817d6cb)) | +| us-west-1 | [ami-07236d99bffc73676](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07236d99bffc73676) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07236d99bffc73676)) | [ami-05516c86a2533df33](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05516c86a2533df33) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05516c86a2533df33)) | +| us-west-2 | [ami-0361c483837e42be5](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0361c483837e42be5) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0361c483837e42be5)) | [ami-0f9252184eaaf469b](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9252184eaaf469b) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9252184eaaf469b)) |

diff --git a/releases/alpine.yaml b/releases/alpine.yaml index d9bbe2f..d13acf5 100644 --- a/releases/alpine.yaml +++ b/releases/alpine.yaml @@ -1,72 +1,3 @@ -edge: - edge-x86_64: - alpine-ami-edge-x86_64-20210615145943: - description: Alpine Linux edge x86_64 20210615145943 - https://alpinelinux.org/cloud - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20210615145943' - creation_date: '2021-06-15T15:10:01.000Z' - end_of_life: '2021-06-16T14:59:43' - build_time: 1623798601 - artifacts: - af-south-1: ami-00a8c19558e1f927a - eu-north-1: ami-05703b93c6605a16a - ap-south-1: ami-07163c44a8aeb892e - eu-west-3: ami-0bf8a102f1e44689f - eu-west-2: ami-07fd89513b31071cc - eu-south-1: ami-0006071afb62b5df4 - eu-west-1: ami-026533ff4629dafbd - ap-northeast-3: ami-07544363d4c51af60 - ap-northeast-2: ami-09c6db1fc45860f86 - me-south-1: ami-0910eb18fd5ad9f37 - ap-northeast-1: ami-07f09134981eacf77 - sa-east-1: ami-0929c5c52fc9db114 - ca-central-1: ami-017631b1aa911a6b0 - ap-east-1: ami-087f66d9f27527f16 - ap-southeast-1: ami-0b039665e3da40a29 - ap-southeast-2: ami-071d2864a8b17acb9 - eu-central-1: ami-008e29e7aa44b9705 - us-east-1: ami-0f28d7ce314614e6e - us-east-2: ami-085d8b975e6afd4c7 - us-west-1: ami-07dbbb83bd2cc7506 - us-west-2: ami-0c728a956b6db3304 - edge-aarch64: - alpine-ami-edge-aarch64-20210615145943: - description: Alpine Linux edge aarch64 20210615145943 - https://alpinelinux.org/cloud - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20210615145943' - creation_date: '2021-06-15T15:04:45.000Z' - end_of_life: '2021-06-16T14:59:43' - build_time: 1623798285 - artifacts: - af-south-1: ami-08fa83ca2b2904200 - eu-north-1: ami-0a6d473d812586b6f - ap-south-1: ami-0e5dfcb2530b55d71 - eu-west-3: ami-0ea00ec4ebd028478 - eu-west-2: ami-0f3746cf2119f5354 - eu-south-1: ami-0029f0d42355d4d1d - eu-west-1: ami-051c2e7ad1efc7c72 - ap-northeast-3: ami-0963394fcaf7a5f87 - ap-northeast-2: ami-0cbc89b1db856e917 - me-south-1: ami-01c26c09d79d0c482 - ap-northeast-1: ami-033ac633a243d13af - sa-east-1: ami-00ad14be30d9dde6f - ca-central-1: ami-052a49b03ec690e3d - ap-east-1: ami-0875af5e5a0a2027b - ap-southeast-1: ami-08a3c249c9598a67c - ap-southeast-2: ami-05ba2c53356bdd549 - eu-central-1: ami-04b03eb151d38c0ee - us-east-1: ami-0372e0c5ad589021d - us-east-2: ami-078d2aceaf82137b2 - us-west-1: ami-068d94cdc2084725d - us-west-2: ami-03d889a5cd41b4e55 3.13.5: v3_13-aarch64: alpine-ami-3.13.5-aarch64-r1: @@ -205,6 +136,75 @@ edge: us-east-2: ami-0f213093a04cde948 us-west-1: ami-0a5fc9a6a5351641e us-west-2: ami-06b1887a7bc6eb122 +edge: + edge-x86_64: + alpine-ami-edge-x86_64-20210807035653: + description: Alpine Linux edge x86_64 20210807035653 - https://alpinelinux.org/cloud + profile: alpine + profile_build: edge-x86_64 + version: edge + release: edge + arch: x86_64 + revision: '20210807035653' + creation_date: '2021-08-07T04:07:41.000Z' + end_of_life: '2021-08-08T03:56:53' + build_time: 1628338061 + artifacts: + af-south-1: ami-043fabf28ec27dd48 + eu-north-1: ami-013ec2fcd6a337f5c + ap-south-1: ami-04e3beb414e5c63a0 + eu-west-3: ami-0403f988d8f677db2 + eu-west-2: ami-06a1e1353977132a1 + eu-south-1: ami-04d0311c3a559280e + eu-west-1: ami-092803064e707b52d + ap-northeast-3: ami-09de309f09de8634d + ap-northeast-2: ami-04efc6ef9b126d1b7 + me-south-1: ami-0759c23186662c037 + ap-northeast-1: ami-03c77a5b6ef2ce5cf + sa-east-1: ami-03502f7175066565d + ca-central-1: ami-0ddc8f4f4adfb9432 + ap-east-1: ami-0cc5ca3f207d56fe4 + ap-southeast-1: ami-091c8e0712eb73cfc + ap-southeast-2: ami-0e0e696ef294e3c54 + eu-central-1: ami-0b8f1eb4317be682b + us-east-1: ami-0320caad46860385f + us-east-2: ami-0b6d988e51817d6cb + us-west-1: ami-05516c86a2533df33 + us-west-2: ami-0f9252184eaaf469b + edge-aarch64: + alpine-ami-edge-aarch64-20210807035653: + description: Alpine Linux edge aarch64 20210807035653 - https://alpinelinux.org/cloud + profile: alpine + profile_build: edge-aarch64 + version: edge + release: edge + arch: aarch64 + revision: '20210807035653' + creation_date: '2021-08-07T04:02:09.000Z' + end_of_life: '2021-08-08T03:56:53' + build_time: 1628337729 + artifacts: + af-south-1: ami-0d119db2dbae0d1f2 + eu-north-1: ami-09efda8acd6cd23a3 + ap-south-1: ami-02276ceadfba3d8dc + eu-west-3: ami-0b9e58d8fb5a5851d + eu-west-2: ami-0d5e165b15b45d294 + eu-south-1: ami-08b0d59e27d5834cd + eu-west-1: ami-083fce6ab0babc52b + ap-northeast-3: ami-06553907a3296d356 + ap-northeast-2: ami-05f6a1444b2dba1be + me-south-1: ami-0a6ce44e9cae12563 + ap-northeast-1: ami-03bb3e6b43c7e5b3a + sa-east-1: ami-0ed048bcd64ffdac7 + ca-central-1: ami-0e79a284afab67660 + ap-east-1: ami-06720fd442e84af52 + ap-southeast-1: ami-009e681f7123d7507 + ap-southeast-2: ami-0f609e1d8e752a7d5 + eu-central-1: ami-00d213f492389362f + us-east-1: ami-0e71191f5db7e9a53 + us-east-2: ami-01ae9b5526a5530b9 + us-west-1: ami-07236d99bffc73676 + us-west-2: ami-0361c483837e42be5 3.11.11: v3_11-x86_64: alpine-ami-3.11.11-x86_64-r0: @@ -240,72 +240,72 @@ edge: us-east-2: ami-0f27d5f504d774c42 us-west-1: ami-0e1759b0e8c3b8fde us-west-2: ami-038d4cc13841ec79f -3.14.0: +3.14.1: v3_14-x86_64: - alpine-ami-3.14.0-x86_64-r0: - description: Alpine Linux 3.14.0 x86_64 r0 - https://alpinelinux.org/cloud + alpine-ami-3.14.1-x86_64-r0: + description: Alpine Linux 3.14.1 x86_64 r0 - https://alpinelinux.org/cloud profile: alpine profile_build: v3_14-x86_64 version: '3.14' - release: 3.14.0 + release: 3.14.1 arch: x86_64 revision: r0 - creation_date: '2021-06-15T15:07:23.000Z' + creation_date: '2021-08-07T04:04:47.000Z' end_of_life: '2023-05-01T00:00:00' - build_time: 1623798443 + build_time: 1628337887 artifacts: - af-south-1: ami-0d1623a135e0c6857 - eu-north-1: ami-0c18e5587457b72d1 - ap-south-1: ami-08f1d5b5f1be7242c - eu-west-3: ami-007e1bc731aa9cfe1 - eu-west-2: ami-048cb99b3d6cf4cf1 - eu-south-1: ami-06b1f3f67146d435f - eu-west-1: ami-07a6dc7b7f0ae6914 - ap-northeast-3: ami-0eff3a56ae878cfc1 - ap-northeast-2: ami-06ced752e444aea72 - me-south-1: ami-0179ebf14bd8cadb5 - ap-northeast-1: ami-0c633b0e253124646 - sa-east-1: ami-0e267a5fb0b8a8597 - ca-central-1: ami-0479391a6ced47cb6 - ap-east-1: ami-0c901564f52b27530 - ap-southeast-1: ami-0bad7cfddc438b54b - ap-southeast-2: ami-08a917e12e1b7d368 - eu-central-1: ami-01110d1bffbeb741c - us-east-1: ami-0329bf0bb6e8b0838 - us-east-2: ami-04fa7e50adecaa403 - us-west-1: ami-0d594859b900cd7d0 - us-west-2: ami-0179fc8c4fdf51140 + af-south-1: ami-08aea7443b5d08f79 + eu-north-1: ami-0e2b6818c61b0b113 + ap-south-1: ami-012f6469429d4ad42 + eu-west-3: ami-031817718bbaf781d + eu-west-2: ami-0e4e3a358f49875dc + eu-south-1: ami-0e69ca71abc28babe + eu-west-1: ami-0274c314a1272d2fd + ap-northeast-3: ami-08b52d5efd9abef56 + ap-northeast-2: ami-0d7a7fdf22367713c + me-south-1: ami-0a665daaaf042257a + ap-northeast-1: ami-033c6bceffad8df75 + sa-east-1: ami-0101f8d6e37b57173 + ca-central-1: ami-0bd936dc3de6b791d + ap-east-1: ami-0d4ba085b9c1557b8 + ap-southeast-1: ami-01a542451033fd940 + ap-southeast-2: ami-014e86c5062e164af + eu-central-1: ami-0bb1a41a1c0eafc95 + us-east-1: ami-0f1919ed094505be3 + us-east-2: ami-01f0c5ccdeab2a3d8 + us-west-1: ami-0000605ad5571b4c0 + us-west-2: ami-05e856cad09314ed0 v3_14-aarch64: - alpine-ami-3.14.0-aarch64-r0: - description: Alpine Linux 3.14.0 aarch64 r0 - https://alpinelinux.org/cloud + alpine-ami-3.14.1-aarch64-r0: + description: Alpine Linux 3.14.1 aarch64 r0 - https://alpinelinux.org/cloud profile: alpine profile_build: v3_14-aarch64 version: '3.14' - release: 3.14.0 + release: 3.14.1 arch: aarch64 revision: r0 - creation_date: '2021-06-15T15:02:20.000Z' + creation_date: '2021-08-07T03:59:14.000Z' end_of_life: '2023-05-01T00:00:00' - build_time: 1623798140 + build_time: 1628337554 artifacts: - af-south-1: ami-0db3c679fca544f58 - eu-north-1: ami-09fd7a2b7dd46fb38 - ap-south-1: ami-03f22d430b0ecedf6 - eu-west-3: ami-005bb2c00e60a5e85 - eu-west-2: ami-0d679cacb69534d79 - eu-south-1: ami-01fbf5d5f0a6df1b8 - eu-west-1: ami-0833feeec783fd71f - ap-northeast-3: ami-04d8717217749dfb9 - ap-northeast-2: ami-0a8a8a46504af4840 - me-south-1: ami-0bf071980915c6228 - ap-northeast-1: ami-0e04a46b8c75cdb69 - sa-east-1: ami-0d227012d5146cfd3 - ca-central-1: ami-0f051749b672b581d - ap-east-1: ami-045e0f869e0d4e7eb - ap-southeast-1: ami-0f351387936e0e05a - ap-southeast-2: ami-047f13e1babb460b7 - eu-central-1: ami-07a16998091ecefd8 - us-east-1: ami-03ccd30bbad1afc9e - us-east-2: ami-009ff2e47db660ebd - us-west-1: ami-0bc7ec6259eff689f - us-west-2: ami-0277fca2de285232a + af-south-1: ami-0bcf48f55b9949a84 + eu-north-1: ami-05f1271ab15bf4557 + ap-south-1: ami-07ed5174d6da65d84 + eu-west-3: ami-08af7eab2ea99f7e5 + eu-west-2: ami-0d0ae9eb51f79e338 + eu-south-1: ami-06fb368b1c23356ca + eu-west-1: ami-0887b1a806a73417a + ap-northeast-3: ami-0956b7bafd7a6720d + ap-northeast-2: ami-07667213840caca26 + me-south-1: ami-02b98efa2cd0b2ab0 + ap-northeast-1: ami-0b559d40e76da2119 + sa-east-1: ami-07f46bbd5674b79a6 + ca-central-1: ami-08bc6f39436e47c30 + ap-east-1: ami-092aa3a38d204b2b5 + ap-southeast-1: ami-0aa966cf6ca931b11 + ap-southeast-2: ami-069d767cedbd4d7a5 + eu-central-1: ami-06f364adb4a297706 + us-east-1: ami-03175ec34a7192e70 + us-east-2: ami-082d34382e0289102 + us-west-1: ami-0081057f803624455 + us-west-2: ami-03e685d5fddaf46e7 From e01e56bfa3537094cb6f5264d4b94506b6758e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jake=20Buchholz=20G=C3=B6kt=C3=BCrk?= Date: Sun, 7 Nov 2021 12:37:56 -0800 Subject: [PATCH 114/125] alpine-cloud-images, part one This is the first MR to replace !125, and contains everything except the new python stuff -- which is part two. --- .flake8 | 2 + .gitignore | 9 +- LICENSE.txt | 2 +- README.md | 287 ++-- README_BROKER.md | 175 --- alpine.pkr.hcl | 191 +++ configs/alpine.conf | 66 + configs/arch/aarch64.conf | 14 + configs/arch/x86_64.conf | 5 + configs/bootstrap/cloudinit.conf | 2 + configs/bootstrap/tiny.conf | 10 + configs/cloud/aws.conf | 40 + configs/cloud/oci.conf | 2 + configs/configs.conf | 1 + configs/firmware/bios.conf | 8 + configs/firmware/uefi.conf | 15 + configs/version/3.11.conf | 8 + configs/version/3.12.conf | 5 + configs/version/3.13.conf | 5 + configs/version/3.14.conf | 5 + configs/version/base/1.conf | 66 + configs/version/base/2.conf | 11 + configs/version/base/3.conf | 9 + configs/version/edge.conf | 11 + packer.conf | 114 -- profiles/README.md | 174 --- profiles/alpine.conf | 33 - profiles/arch/aarch64 | 1 - profiles/arch/aarch64-1 | 7 - profiles/arch/x86_64 | 1 - profiles/arch/x86_64-1 | 7 - profiles/base/1 | 103 -- profiles/base/2 | 111 -- profiles/base/current | 1 - profiles/test.conf | 38 - profiles/version/3.10 | 13 - profiles/version/3.11 | 13 - profiles/version/3.12 | 13 - profiles/version/3.13 | 13 - profiles/version/3.14 | 13 - profiles/version/3.9 | 13 - profiles/version/current | 1 - profiles/version/edge | 16 - releases/README.md | 184 --- releases/README_alpine.md | 1 - releases/alpine.yaml | 311 ---- scripts/builder.py | 1366 ----------------- scripts/cleanup | 42 + scripts/setup | 222 +++ scripts/setup-ami | 414 ----- scripts/setup-ami.d/eth-eni-setup | 16 - scripts/setup-ami.d/nvme-ebs-links | 46 - scripts/setup-tiny | 67 + .../assemble-interfaces | 0 .../eth-eni-hook | 0 .../eth-eni-hotplug | 0 scripts/setup-tiny.d/eth-eni-setup | 19 + .../etc => setup-tiny.d}/interfaces.d/DEFAULT | 0 .../etc => setup-tiny.d}/interfaces.d/eth0 | 0 .../etc => setup-tiny.d}/interfaces.d/lo | 0 .../etc => setup-tiny.d}/mdev-ec2.conf | 0 scripts/setup-tiny.d/nvme-ebs-links | 47 + scripts/{setup-ami.d/etc => setup.d}/fstab | 0 .../etc => setup.d}/fstab.grub-efi | 0 .../etc => setup.d}/grub.template | 6 +- scripts/test-setup_script.sh | 12 - 66 files changed, 1081 insertions(+), 3306 deletions(-) create mode 100644 .flake8 delete mode 100644 README_BROKER.md create mode 100644 alpine.pkr.hcl create mode 100644 configs/alpine.conf create mode 100644 configs/arch/aarch64.conf create mode 100644 configs/arch/x86_64.conf create mode 100644 configs/bootstrap/cloudinit.conf create mode 100644 configs/bootstrap/tiny.conf create mode 100644 configs/cloud/aws.conf create mode 100644 configs/cloud/oci.conf create mode 120000 configs/configs.conf create mode 100644 configs/firmware/bios.conf create mode 100644 configs/firmware/uefi.conf create mode 100644 configs/version/3.11.conf create mode 100644 configs/version/3.12.conf create mode 100644 configs/version/3.13.conf create mode 100644 configs/version/3.14.conf create mode 100644 configs/version/base/1.conf create mode 100644 configs/version/base/2.conf create mode 100644 configs/version/base/3.conf create mode 100644 configs/version/edge.conf delete mode 100644 packer.conf delete mode 100644 profiles/README.md delete mode 100644 profiles/alpine.conf delete mode 120000 profiles/arch/aarch64 delete mode 100644 profiles/arch/aarch64-1 delete mode 120000 profiles/arch/x86_64 delete mode 100644 profiles/arch/x86_64-1 delete mode 100644 profiles/base/1 delete mode 100644 profiles/base/2 delete mode 120000 profiles/base/current delete mode 100644 profiles/test.conf delete mode 100644 profiles/version/3.10 delete mode 100644 profiles/version/3.11 delete mode 100644 profiles/version/3.12 delete mode 100644 profiles/version/3.13 delete mode 100644 profiles/version/3.14 delete mode 100644 profiles/version/3.9 delete mode 120000 profiles/version/current delete mode 100644 profiles/version/edge delete mode 100644 releases/README.md delete mode 120000 releases/README_alpine.md delete mode 100644 releases/alpine.yaml delete mode 100755 scripts/builder.py create mode 100644 scripts/cleanup create mode 100755 scripts/setup delete mode 100755 scripts/setup-ami delete mode 100755 scripts/setup-ami.d/eth-eni-setup delete mode 100755 scripts/setup-ami.d/nvme-ebs-links create mode 100755 scripts/setup-tiny rename scripts/{setup-ami.d => setup-tiny.d}/assemble-interfaces (100%) rename scripts/{setup-ami.d => setup-tiny.d}/eth-eni-hook (100%) rename scripts/{setup-ami.d => setup-tiny.d}/eth-eni-hotplug (100%) create mode 100755 scripts/setup-tiny.d/eth-eni-setup rename scripts/{setup-ami.d/etc => setup-tiny.d}/interfaces.d/DEFAULT (100%) rename scripts/{setup-ami.d/etc => setup-tiny.d}/interfaces.d/eth0 (100%) rename scripts/{setup-ami.d/etc => setup-tiny.d}/interfaces.d/lo (100%) rename scripts/{setup-ami.d/etc => setup-tiny.d}/mdev-ec2.conf (100%) create mode 100755 scripts/setup-tiny.d/nvme-ebs-links rename scripts/{setup-ami.d/etc => setup.d}/fstab (100%) rename scripts/{setup-ami.d/etc => setup.d}/fstab.grub-efi (100%) rename scripts/{setup-ami.d/etc => setup.d}/grub.template (68%) delete mode 100755 scripts/test-setup_script.sh diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..c1ba363 --- /dev/null +++ b/.flake8 @@ -0,0 +1,2 @@ +[flake8] +ignore = E265,E266,E402,E501 \ No newline at end of file diff --git a/.gitignore b/.gitignore index ff26dbe..fd1027e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -**/*~ -**/*.bak -**/*.swp -/build/ +*~ +*.bak +*.swp +.vscode/ +/work/ diff --git a/LICENSE.txt b/LICENSE.txt index bb205ac..ab6f63d 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2017-2019 Michael Crute, Jake Buchholz +Copyright (c) 2017-2021 Jake Buchholz Göktürk, Michael Crute Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/README.md b/README.md index 3ca129a..a2ac172 100644 --- a/README.md +++ b/README.md @@ -1,117 +1,228 @@ -# Alpine Linux EC2 AMI Builder +## _**NOTE: This is a Work-in-Progress**_ -These are the official Alpine AWS AMIs. For an index of images see the -[Alpine Website](https://alpinelinux.org/cloud/). +_It is intended that this will eventually replace +https://gitlab.alpinelinux.org/alpine/cloud/alpine-ec2-ami +as the offical multi-cloud image builder for Alpine Linux._ -## Pre-Built AMIs +---- -***To get started with a pre-built minimalist AMIs, visit -https://alpinelinux.org/cloud, or the [README](releases/README.md) in the -[releases](releases) subdirectory of this repo.*** +# Alpine Linux Cloud Image Builder -Alternately, with the right filters, you can query the EC2 API to programmatically -find our most recent AMIs. For example, using the `aws` command line tool... -``` -aws ec2 describe-images \ - --output text \ - --filters \ - Name=owner-id,Values=538276064493 \ - Name=name,Values='alpine-ami-*' \ - Name=state,Values=available \ - Name=tag:profile_build,Values=v3_10-x86_64 \ - --query 'max_by(Images[], &CreationDate).ImageId' -``` -...will list the latest AMI id from our collection of 'v3_10-x86_64' builds. -Refer to the AWS CLI Command Reference for -[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) -for more details. +This repository contains the code and and configs for the build system used to +create official Alpine Linux images for various cloud providers, in various +configurations. This build system is flexible, enabling others to build their +own customized images. -## Custom AMIs +---- +## Pre-Built Offical Cloud Images -Using the scripts and configuration in this project, you can build your own -custom Alpine Linux AMIs. If you experience any problems building custom AMIs, -please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues) and -include as much detailed information as possible. +To get started with offical pre-built Alpine Linux cloud images, visit +https://alpinelinux.org/cloud. Currently, we build official images for the +following providers: +* AWS + +You should also be able to find the most recently published Alpine Linux +images via your cloud provider's web console, or programatically query their +API with a CLI tool or library. + +_(TODO: examples)_ + +---- +## Build System + +The build system consists of a number of components: + +* the primary `build` script and related cloud-specific helpers +* a directory of `configs/` defining the set of images to be built +* a Packer `alpine.pkr.hcl` orchestrating the images' local build, as well as + importing them to cloud providers and publishing them to desitnation regions +* a directory of `scripts/` which set up the images' contents during + provisioning ### Build Requirements +* [Python](https://python.org) (3.9.7 is known to work) +* [Packer](https://packer.io) (1.7.6 is known to work) +* [QEMU](https://www.qemu.org) (6.1.0 is known to work) +* cloud provider account(s) -* [Packer](https://packer.io) >= 1.4.1 -* [Python 3.x](https://python.org) (3.7 is known to work) -* an AWS account with an existing subnet in an AWS Virtual Private Cloud +### Cloud Credentials -### Profile Configuration +This build system relies on the cloud providers' Python API libraries to find +and use the necessary credentials -- via configuration in the user's home +directory (i.e. `~/.aws/...`, `~/.oci/...`, etc.) or with special environment +variables (i.e. `AWS_...`, `OCI_...`, etc.) -Target profile config files reside in the [profiles](profiles) subdirectory, -where you will also find the [config](profiles/alpine.conf) we use for our -pre-built AMIs. Refer to the [README](profiles/README.md) in that subdirectory -for more details and information about how AMI profile configs work. +It is expected that each cloud provider's user/role will have been set up with +sufficient permission in order to accomplish the operations necessary to query, +import, and publish images; _it is highly recommended that no permissions are +granted beyond what is absolutely necessary_. -### AWS Credentials +### The `build` Script -These scripts use the `boto3` library to interact with AWS, enabling you to -provide your AWS account credentials in a number of different ways. see the -offical `boto3` documentation's section on -[configuring credentials](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html#guide-credentials) -for more details. *Please note that these scripts do not implement the first -two methods on the list.* - -### Building AMIs - -To build all build targets in a target profile, simply... ``` -./scripts/builder.py amis +usage: build [-h] [--debug] [--clean] [--revise] {configs,local,import,publish} + [--custom DIR [DIR ...]] [--skip KEY [KEY ...]] [--only KEY [KEY ...]] + [--no-color] [--parallel N] [--vars FILE [FILE ...]] + +build steps: + configs resolve build configuration + local build local images + import import to cloud providers + publish set permissions and publish to cloud regions + +optional arguments: + -h, --help show this help message and exit + --debug enable debug output (False) + --clean start with a clean work environment (False) + --revise bump revisions if images already published (False) + --custom DIR [DIR ...] overlay custom directory in work environment + --skip KEY [KEY ...] skip variants with dimension key(s) + --only KEY [KEY ...] only variants with dimension key(s) + --no-color turn off Packer color output (False) + --parallel N build N images in parallel (1) + --vars FILE [FILE ...] supply Packer with additional -vars-file(s) ``` -You can also build specfic build targets within a profile: -``` -./scripts/builder.py amis ... -``` +A `work/` directory will be created for its Python virtual environment, any +necessary Python libraries will be `pip install`ed, and `build` will execute +itself to ensure that it's running in the work environment. -Before each build, new Alpine Linux *releases* are detected and the version's -core profile is updated. +This directory also contains `configs/` and `scripts/` subdirs (with custom +overlays), UEFI firmware for QEMU, Packer cache, the generated `configs.yaml` +and `actions.yaml` configs, and the `images/` tree for local image builds. -If there's already an AMI with the same name as the profile build's, that build -will be skipped and the process moves on to build the other profile's build -targets (if any). +Use `--clean` if you want to re-overlay, re-download, re-generate, or rebuild +anything in the `work/` directory. To redo the Python virtual environment, +simply remove the `work/` directory and its contents, and it will be recreated +the next time `build` is run. -After each successful build, `releases/.yaml` is updated with the -build's details, including (most importantly) the ids of the AMI artifacts that -were built. +### Build Steps -Additional information about using your custom AMIs can be found in the -[README](releases/README.md) in the [releases](releases) subdirectory. +When executing `build` you also provide the target step you wish to reach. For +example, if you only want to build local images, use `build local`. Any +predecessor steps which haven't been done will also be executed -- that is, +`build local` also implies `build configs` if that step hasn't completed yet. -### Pruning AMIs +The **configs** step determines the latest stable Alpine Linux release, and +ensures that the `configs/` and `scripts/` overlays, UEFI firmware, and +`configs.yaml` exist. This allows you to validate the generated build variant +configuration before attempting to build any images locally. -Every now and then, you may want to clean up old AMIs from your EC2 account and -your profile's `releases/.yaml`. There are three different levels of -pruning: -* `revision` - keep only the latest revision for each release -* `release` - keep only the latest release for each version -* `end-of-life` - remove any end-of-life versions +If `build` is moving on past **configs** to other steps, it will determine which +image variants to work on (based on `--skip` and `--only` values) and what +actions will be taken, based on existence of local/imported/published images, and +generate the `actions.yaml` file. Providing the `--revise` flag allows you to +rebuild local images that were previously built, reimport unpublished images to +cloud providers, and bump the "revision" value of previously published images -- +this is useful if published images require fixes but the Alpine release itself +isn't changing; published images are not removed (though they may be pruned once +their "end-of-life" date has passed). -To prune a profile (or optionally one build target of a profile)... -``` -./scripts/builder.py prune-amis [] -``` +At this point, `build` executes Packer, which is responsible for the remaining +**local**, **import**, and **publish** steps -- and also for parallelization, if +the `--parallel` argument is given. Because build hardware varies, it is also +possible to tune a number of QEMU timeouts and memory requirements by providing +an HCL2 Packer Vars file and specifying `--vars ` to override the +defaults in `alpine.pkr.hcl`. -### Updating the Release README +### Packer and `alpine.pkr.hcl` -This make target updates the [releases README](releases/README.md), primarily -for updating the list of our pre-built AMIs. This may-or-may-not be useful for -other target profiles. -``` -./scripts/builder.py gen-release-readme -``` +Packer loads and merges `actions.yaml` and `configs.yaml`, and iterates the +resulting object in order to determine what it should do with each image +variant configuration. -### Cleaning up the Build Environment +`alpine.pkr.hcl` defines two base `source` blocks -- `null` is used when an +image variant is already built locally and/or already imported to the +destination cloud provider; otherwise, the `qemu` source is used. -The build process is careful to place all temporary files in the `build` -subdirectory. Remove the temporary `build` subdirectory, which contains the -resolved profile and Packer configs, the Python virtual environment, and other -temporary build-related artifacts. +The `qemu` builder spins up a QEMU virtual machine with a blank virtual disk +attached, using the latest stable Alpine Linux Virtual ISO, brings up the VM's +network, enables the SSH daemon, and sets a random password for root. -## Caveats +If an image variant is to be **built locally**, the two dynamic provisioners copy +the required data for the setup scripts to the VM's `/tmp/` directory, and then +run those setup scripts. It's these scripts that are ultimately responsible for +installing and configuring the desired image on the attached virtual disk. +When the setup scripts are complete, the virtual machine is shut down, and the +resulting local disk image can be found at +`work/images///image.qcow2`. -* New Alpine Linux *versions* are currently not auto-detected and added as a - core version profile; this process is, at the moment, still a manual task. +The dynamic post-processor uses the `cloud_helper.py` script to **import** a +local image to the cloud provider, and/or **publish** an imported image to the +cloud provider's destination regions, based on what actions are applicable for +that image variant. When the **publish** step is reapplied to an +already-published image, the script ensures that images have been copied to all +destination regions (for example, if the cloud provider recently added a new +region), and that all launch permissions are set as expected. + +### The `cloud_helper.py` Script + +This script is only meant to be imported by `build` and called from Packer, and +provides a normalized cloud-agnostic way of doing common cloud operations -- +getting details about a variant's latest imported image, importing new local +image to the cloud, removing a previouly imported (but unpublished) image so it +can be replaced, or publishing an imported image to destination regions. + +---- +## Build Configuration + +The `build` script generates `work/configs.yaml` based on the contents of the +top-level config file, `work/configs/configs.conf`; normally this is a symlink to +`alpine.conf`, but can be overridden for custom builds. All configs are +declared in [HOCON](https://github.com/lightbend/config/blob/master/HOCON.md) +format, which allows importing from other files, simple variable interpolation, +and easy merging of objects. This flexibility helps keep configuration +[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). + +The top-level `build.conf` has three main blocks, `Default` (default/starting +values), `Dimensions` (with configs that apply in different circumstances), and +`Mandatory` (required/final values). The configuration for these blocks are +merged in this exact order. + +### Dimensions and Build Variants + +Build variants _(I was watching Loki™ at the time...)_ are the sets of +dimensional "features" and related configuration details produced from a +Cartesian product across each of the dimensional keys. Dimensional configs are +merged together in the order they appear in `build.conf`. + +If two dimensional keys are incompatible (for example, **version/3.11** did not +yet support **arch/aarch64**), an `EXCLUDE` directive indicates that such a +variant is non-viable, and will be skipped. + +Likewise, if one dimension's configuration depends on the value of a different +dimensional key, the `WHEN` directive will supply the conditional config +details when that other dimensional key is part of the variant. + +Currently the base set of dimensions (and dimension keys) are... + +**version** - current "release" value for each is autodetected, and always a + component of an image's name +* **edge** ("release" value is the current UTC date) +* all *non-EOL* Alpine Linux versions + + **arch** - machine architecture + * **x86_64** (aka "amd64") + * **aarch64** (aka "arm64") + +**firmware** - machine boot firmware +* **bios** (legacy BIOS) +* **uefi** + +**bootstrap** - image instantiation bootstrap is provided by... +* **tiny** (tiny-cloud-boostrap) +* **cloudinit** (cloud-init) + +**cloud** - cloud provider or platform +* **aws** - Amazone Web Services / EC2 +* **oci** - Oracle Cloud Infrastructure _(WiP)_ +* **gcp** - Google Cloud Platform _(WiP)_ +* **azure** - Microsoft Azure _(WiP)_ + +...each dimension may (or may not) contribute to the image name or description, +if the dimensional key's config contributes to the `name` or `description` +array values. + +### Customized Builds + +_(TODO)_ \ No newline at end of file diff --git a/README_BROKER.md b/README_BROKER.md deleted file mode 100644 index 13e1af3..0000000 --- a/README_BROKER.md +++ /dev/null @@ -1,175 +0,0 @@ -# AWS Identity Broker - -The identity broker is used to obtain short-lived and per-region credentials -for an account. Opt-in regions require the use of a long-lived credential (e.g. -IAM user), enabling global STS tokens, or an STS token sourced in that region. -The identity broker holds long-term credentials and uses them to acquire -short-term credentials in a given region. The broker also provides a list of -opt-in regions and should be used to enumerate regions. - -For human-interactive users the identity broker performs OAUTH against GitHub -to chain the user's GitHub identity to the tokens they are given from the -broker. The broker also provides the user an API key to use when interacting -with the broker programmatically. - -As of May 2020 the identity broker is not open sourced. If you want to provide -your own identity broker, the rest of this document specifies the URLs -endpoints and response formats to do so. - -# The API - -The identity broker API is a REST-ful service with an entry-point of -`/api/account`. All further navigation through the API follows links within the -hypertext. - -**Note:** Outside of the account entry-point, URI formats should be considered -implementation details of the broker API and should never be templated. Beyond -the account entry-point, nothing in this specification is normative with -respect to URI paths and locations. - -## Authentication - -All requests to the API must be authenticated with a broker-specific key. That -key is provided to the broker in the `X-API-Key` header. When the broker -determines that the key is either expired or invalid it must redirect the user -to `/logout` to indicate that the user is logged out and must log-in again. - -API keys are bearer tokens and thus must only be exchanged over HTTPS. - -## Status Codes - -`200 OK`: indicates that the request to the broker was successful. - -`302 Found`: indicates that the broker is providing a redirect. Users should -check the redirect, if it is to the location `/logout` the user should consider -themselves logged out and proceed to login. This condition should not be -followed. Otherwise the user should follow all redirects. - -`400 Bad Request`: indicates that some part of the request is invalid as -submitted. The hypertext MAY provide a description of this error and how to -remedy it. - -`429 Rate Limit Exceeded`: indicates that the broker has rate-limited the user. -A user should discontinue requests to the broker immediately and wait for at -least 30 seconds before continuing their requests. The rate limit parameters -are specific to the broker and not controlled by this spec. - -`500 Server Error`: indicates a server error condition that is not under the -user's control. - -## Account End-point - -The account end-point acts as a index of the rest of the API. It presents a -list of accounts to which the user has access as well as links to navigate -further into the API. The format of this document is: - -`short_name` (string): a url-safe name for the account, used as the primary -account identifier within the broker. - -`account_number` (integer): the AWS account number - -`name` (string): a user-friendly name for the account - -`console_redirect_url` (uri): a URI that, when followed, leads to a resource -that redirects the user to an authenticated console session. - -`get_console_url` (uri): a URI that, when followed, leads to a console URL -resource. - -`credentials_url` (uri): a URI that, when followed, leads to a region list -resource. - -`global_credential_url` (uri): a URI that, when followed, leads to a credential -resource which provides a credential usable by all non-opt-in regions. The -contents of this resource are a STS global credential which is not usable in -opt-in regions. - -``` -[ - { - "short_name": "primary-account", - "account_number": 123456789012, - "name": "Primary AWS Account", - "console_redirect_url": "https://broker/api/account/primary-account/console?redirect=1", - "get_console_url": "https://broker/api/account/primary-account/console", - "credentials_url": "https://broker/api/account/primary-account/credentials", - "global_credential_url": "https://broker/api/account/primary-account/credentials/global" - } -] -``` - -## Console URL Resource - -**Note:** This resource is not used by the build scripts. - -The console URL resource provides a URL to the AWS console. This resource is -designed for interactive use. - -When provided the query parameter `redirect` with a value of `1` this resource -will not generate a body and will instead redirect to the URL that would have -been returned for `console_url`. - -`console_url` (uri): a link to the AWS console with authentication credentials -embedded. - -``` -{ - "console_url": "https://signin.aws.amazon.com/federation?..." -} -``` - -## Credential Resource - -The credential resource provides a set of credentials that can be used to -configure AWS tools to access an account. - -`access_key` (string): the AWS access key ID - -`secret_key` (string): the AWS secret access key - -`session_token` (string): the AWS session token - -`expiration` (iso-formatted date): the date and time when the credential will -expire - -``` -{ - "access_key": "ASIA123ABC456DEF567G", - "secret_key": "r7KcIuGdPwoUG2YOLISX2XDrVts55IFGTGaY5Tqa", - "session_token": "7C7FyvzyneaS/eRCVDcjHOSTTIHQyvhGqW...", - "expiration": "2020-01-01T00:00:00Z" -} -``` - -## Region List Resource - -The region list resource provides a list of regions associated with the account -both opted-in and not. For opted-in regions the resource includes a link to a -credential resource for that region. - -`name` (string): AWS name for the region - -`enabled` (boolean): indicates if the region is enabled and opted-in for this -account. - -`credentials_url` (uri): a URI that, when followed, leads to a credential -resource containing a credential for access to that region. The credential -provided will be usable against the region-local STS endpoint for the specified -region. This also applies for classic regions, which typically use a global -endpoint and credential. The returned credential is scoped to the acquiring -region and may not be usable against the global endpoints or a different -regional endpoint. - -``` -[ - { - "name": "af-south-1", - "enabled": false - }, - { - "name": "us-west-2", - "enabled": true, - "credentials_url": "https://broker/api/account/primary-account/credentials/us-west-2" - } -] -``` diff --git a/alpine.pkr.hcl b/alpine.pkr.hcl new file mode 100644 index 0000000..3c93c5e --- /dev/null +++ b/alpine.pkr.hcl @@ -0,0 +1,191 @@ +# Enable script debug output, set via 'packer build -var DEBUG=1' +variable "DEBUG" { + default = 0 +} +variable "USE_BROKER" { + default = 0 +} + +# Tuneable based on perfomance of whatever Packer's running on, +# override with './build --vars ' +variable "qemu" { + default = { + boot_wait = { + aarch64 = "1m" + x86_64 = "1m" + } + cmd_wait = "5s" + ssh_timeout = "1m" + memory = 1024 # MiB + } +} + + +locals { + debug_arg = var.DEBUG == 0 ? "" : "--debug" + broker_arg = var.USE_BROKER == 0 ? "" : "--use-broker" + + # randomly generated password + password = uuidv4() + + # all build configs + all_configs = yamldecode(file("work/configs.yaml")) + + # load the build actions to be taken + actions = yamldecode(file("work/actions.yaml")) + + # resolve actionable build configs + configs = { for b, acfg in local.actions: + b => merge(local.all_configs[b], acfg) if length(acfg.actions) > 0 + } +} + +### Build Sources + +# Don't build +source null alpine { + communicator = "none" +} + +# Common to all QEMU builds +source qemu alpine { + # qemu machine + headless = true + memory = var.qemu.memory + net_device = "virtio-net" + disk_interface = "virtio" + + # build environment + boot_command = [ + "root", + "setup-interfaces", + "ifup eth0", + "setup-sshd -c openssh", + "echo PermitRootLogin yes >> /etc/ssh/sshd_config", + "service sshd restart", + "echo 'root:${local.password}' | chpasswd", + ] + ssh_username = "root" + ssh_password = local.password + ssh_timeout = var.qemu.ssh_timeout + shutdown_command = "poweroff" +} + +build { + name = "alpine" + + ## Builders + + # QEMU builder + dynamic "source" { + for_each = { for b, c in local.configs: + b => c if contains(c.actions, "build") && c.builder == "qemu" + } + iterator = B + labels = ["qemu.alpine"] # links us to the base source + + content { + name = B.key + + # qemu machine + qemu_binary = "qemu-system-${B.value.arch}" + qemuargs = B.value.qemu.args + machine_type = B.value.qemu.machine_type + firmware = B.value.qemu.firmware + + # build environment + iso_url = B.value.qemu.iso_url + iso_checksum = "file:${B.value.qemu.iso_url}.sha512" + boot_wait = var.qemu.boot_wait[B.value.arch] + + # results + output_directory = B.value.image.dir + disk_size = B.value.image.size + format = B.value.image.format + vm_name = B.value.image.file + } + } + + # Null builder (don't build, but we might import and/or publish) + dynamic "source" { + for_each = { for b, c in local.configs: + b => c if !contains(c.actions, "build") + } + iterator = B + labels = ["null.alpine"] + content { + name = B.key + } + } + + ## build provisioners + + # install setup files + dynamic "provisioner" { + for_each = { for b, c in local.configs: + b => c if contains(c.actions, "build") + } + iterator = B + labels = ["file"] + content { + only = [ "${B.value.builder}.${B.key}" ] # configs specific to one build + + sources = [ for d in B.value.script_dirs: "work/scripts/${d}" ] + destination = "/tmp/" + } + } + + # run setup scripts + dynamic "provisioner" { + for_each = { for b, c in local.configs: + b => c if contains(c.actions, "build") + } + iterator = B + labels = ["shell"] + content { + only = [ "${B.value.builder}.${B.key}" ] # configs specific to one build + + scripts = [ for s in B.value.scripts: "work/scripts/${s}" ] + use_env_var_file = true + environment_vars = [ + "DEBUG=${var.DEBUG}", + "ARCH=${B.value.arch}", + "BOOTSTRAP=${B.value.bootstrap}", + "BUILD_NAME=${B.value.name}", + "BUILD_REVISION=${B.value.revision}", + "CLOUD=${B.value.cloud}", + "END_OF_LIFE=${B.value.end_of_life}", + "FIRMWARE=${B.value.firmware}", + "IMAGE_LOGIN=${B.value.image.login}", + "INITFS_FEATURES=${B.value.initfs_features}", + "KERNEL_MODULES=${B.value.kernel_modules}", + "KERNEL_OPTIONS=${B.value.kernel_options}", + "PACKAGES_ADD=${B.value.packages.add}", + "PACKAGES_DEL=${B.value.packages.del}", + "PACKAGES_NOSCRIPTS=${B.value.packages.noscripts}", + "RELEASE=${B.value.release}", + "REPOS=${B.value.repos}", + "SERVICES_ENABLE=${B.value.services.enable}", + "SERVICES_DISABLE=${B.value.services.disable}", + "VERSION=${B.value.version}", + ] + } + } + + ## build post-processor + + # import and/or publish cloud images + dynamic "post-processor" { + for_each = { for b, c in local.configs: + b => c if contains(c.actions, "import") || contains(c.actions, "publish") + } + iterator = B + labels = ["shell-local"] + content { + only = [ "${B.value.builder}.${B.key}", "null.${B.key}" ] + inline = [ for action in ["import", "publish"]: + "./cloud_helper.py ${action} ${local.debug_arg} ${local.broker_arg} ${B.key}" if contains(B.value.actions, action) + ] + } + } +} diff --git a/configs/alpine.conf b/configs/alpine.conf new file mode 100644 index 0000000..9bde530 --- /dev/null +++ b/configs/alpine.conf @@ -0,0 +1,66 @@ +# vim: ts=2 et: + +# all build configs start with these +Default { + # image name/description components + name = [ alpine ] + description = [ "Alpine Linux {release}-r{revision}" ] + + # initial provisioning script and data directory + scripts = [ setup ] + script_dirs = [ setup.d ] + + # image settings + image.format = qcow2 + image.size = 1G + image.login = alpine +} + +# profile build matrix +Dimensions { + version { + "3.14" { include required("version/3.14.conf") } + "3.13" { include required("version/3.13.conf") } + "3.12" { include required("version/3.12.conf") } + "3.11" { include required("version/3.11.conf") } + edge { include required("version/edge.conf") } + } + arch { + x86_64 { include required("arch/x86_64.conf") } + aarch64 { include required("arch/aarch64.conf") } + } + firmware { + bios { include required("firmware/bios.conf") } + uefi { include required("firmware/uefi.conf") } + } + bootstrap { + tiny { include required("bootstrap/tiny.conf") } +# cloudinit { include required("bootstrap/cloudinit.conf") } + } + cloud { + aws { include required("cloud/aws.conf") } +# oci { include required("cloud/oci.conf") } +# gcp { include required("cloud/gcp.conf") } +# azure { include required("cloud/azure.conf") } + } +} + +# all build configs merge these at the very end +Mandatory { + description = [ - https://alpinelinux.org/cloud ] + + # final provisioning script + scripts = [ cleanup ] + + # override while developing/testing... + aws.publish { + access { + PUBLIC = false + } + regions { + ALL = false + us-west-2 = true # where i'm building + us-east-1 = true # test publishing + } + } +} diff --git a/configs/arch/aarch64.conf b/configs/arch/aarch64.conf new file mode 100644 index 0000000..41f1161 --- /dev/null +++ b/configs/arch/aarch64.conf @@ -0,0 +1,14 @@ +# vim: ts=2 et: +name = [aarch64] + +# aarch64 is UEFI only +EXCLUDE = [bios] + +qemu.machine_type = virt +qemu.args = [ + [-cpu, cortex-a57], + [-boot, d], + [-device, virtio-gpu-pci], + [-device, usb-ehci], + [-device, usb-kbd], +] diff --git a/configs/arch/x86_64.conf b/configs/arch/x86_64.conf new file mode 100644 index 0000000..4bf382a --- /dev/null +++ b/configs/arch/x86_64.conf @@ -0,0 +1,5 @@ +# vim: ts=2 et: +name = [x86_64] + +qemu.machine_type = null +qemu.args = null diff --git a/configs/bootstrap/cloudinit.conf b/configs/bootstrap/cloudinit.conf new file mode 100644 index 0000000..1285a29 --- /dev/null +++ b/configs/bootstrap/cloudinit.conf @@ -0,0 +1,2 @@ +# vim: ts=2 et: +name = [cloudinit] diff --git a/configs/bootstrap/tiny.conf b/configs/bootstrap/tiny.conf new file mode 100644 index 0000000..fa88cf4 --- /dev/null +++ b/configs/bootstrap/tiny.conf @@ -0,0 +1,10 @@ +# vim: ts=2 et: +name = [tiny] +WHEN { + aws { + packages.tiny-ec2-bootstrap = true + services.default.tiny-ec2-bootstrap = true + scripts = [ setup-tiny ] + script_dirs = [ setup-tiny.d ] + } +} diff --git a/configs/cloud/aws.conf b/configs/cloud/aws.conf new file mode 100644 index 0000000..d197a91 --- /dev/null +++ b/configs/cloud/aws.conf @@ -0,0 +1,40 @@ +# vim: ts=2 et: +builder = qemu + +aws { + s3_bucket = alpine-cloud-images + publish { + access { + PUBLIC = true + # alternately... + #PUBLIC = false + # and/or + # = true + # ... + } + regions { + ALL = true + # alternately... + # = true + # ... + } + } +} + +WHEN { + # Arch + aarch64 { + aws.arch = arm64 + } + x86_64 { + aws.arch = x86_64 + } + + # Firmware + bios { + aws.boot_mode = legacy-bios + } + uefi { + aws.boot_mode = uefi + } +} diff --git a/configs/cloud/oci.conf b/configs/cloud/oci.conf new file mode 100644 index 0000000..17a83c2 --- /dev/null +++ b/configs/cloud/oci.conf @@ -0,0 +1,2 @@ +# vim: ts=2 et: +builder = qemu \ No newline at end of file diff --git a/configs/configs.conf b/configs/configs.conf new file mode 120000 index 0000000..99f2529 --- /dev/null +++ b/configs/configs.conf @@ -0,0 +1 @@ +alpine.conf \ No newline at end of file diff --git a/configs/firmware/bios.conf b/configs/firmware/bios.conf new file mode 100644 index 0000000..ca37692 --- /dev/null +++ b/configs/firmware/bios.conf @@ -0,0 +1,8 @@ +# vim: ts=2 et: +name = [bios] + +packages { + syslinux = --no-scripts +} + +qemu.firmware = null \ No newline at end of file diff --git a/configs/firmware/uefi.conf b/configs/firmware/uefi.conf new file mode 100644 index 0000000..b37c25b --- /dev/null +++ b/configs/firmware/uefi.conf @@ -0,0 +1,15 @@ +# vim: ts=2 et: +name = [uefi] + +packages { + grub-efi = --no-scripts +} + +WHEN { + aarch64 { + qemu.firmware = work/firmware/uefi-aarch64.bin + } + x86_64 { + qemu.firmware = work/firmware/uefi-x86_64.bin + } +} \ No newline at end of file diff --git a/configs/version/3.11.conf b/configs/version/3.11.conf new file mode 100644 index 0000000..eb5359d --- /dev/null +++ b/configs/version/3.11.conf @@ -0,0 +1,8 @@ +# vim: ts=2 et: + +include required("base/1.conf") + +end_of_life = "2021-11-01" + +# Alpine 3.11 doesn't support aarch64 +EXCLUDE = [ aarch64 ] diff --git a/configs/version/3.12.conf b/configs/version/3.12.conf new file mode 100644 index 0000000..7c3d71d --- /dev/null +++ b/configs/version/3.12.conf @@ -0,0 +1,5 @@ +# vim: ts=2 et: + +include required("base/1.conf") + +end_of_life = "2022-05-01" \ No newline at end of file diff --git a/configs/version/3.13.conf b/configs/version/3.13.conf new file mode 100644 index 0000000..26d7cd6 --- /dev/null +++ b/configs/version/3.13.conf @@ -0,0 +1,5 @@ +# vim: ts=2 et: + +include required("base/2.conf") + +end_of_life = "2022-11-01" \ No newline at end of file diff --git a/configs/version/3.14.conf b/configs/version/3.14.conf new file mode 100644 index 0000000..98acad1 --- /dev/null +++ b/configs/version/3.14.conf @@ -0,0 +1,5 @@ +# vim: ts=2 et: + +include required("base/2.conf") + +end_of_life = "2023-05-01" \ No newline at end of file diff --git a/configs/version/base/1.conf b/configs/version/base/1.conf new file mode 100644 index 0000000..628fe85 --- /dev/null +++ b/configs/version/base/1.conf @@ -0,0 +1,66 @@ +# vim: ts=2 et: + +repos { + "https://dl-cdn.alpinelinux.org/alpine/v{version}/main" = true + "https://dl-cdn.alpinelinux.org/alpine/v{version}/community" = true + "https://dl-cdn.alpinelinux.org/alpine/v{version}/testing" = false +} + +packages { + alpine-base = true + linux-virt = true + alpine-mirrors = true + chrony = true + iproute2 = true + nvme-cli = true + openssh = true + sudo = true + tzdata = true +} + +services { + sysinit { + devfs = true + dmesg = true + hwdrivers = true + mdev = true + } + boot { + acpid = true + bootmisc = true + hostname = true + hwclock = true + modules = true + swap = true + sysctl = true + syslog = true + } + default { + chronyd = true + networking = true + sshd = true + } + shutdown { + killprocs = true + mount-ro = true + savecache = true + } +} + +kernel_modules { + sd-mod = true + usb-storage = true + ext4 = true + nvme = true + ena = true +} + +kernel_options { + "console=ttyS0,115200n8" = true + "nvme_core.io_timeout=4294967295" = true +} + +initfs_features { + nvme = true + ena = true +} diff --git a/configs/version/base/2.conf b/configs/version/base/2.conf new file mode 100644 index 0000000..644485b --- /dev/null +++ b/configs/version/base/2.conf @@ -0,0 +1,11 @@ +# vim: ts=2 et: + +include required("1.conf") + +packages { + # drop old alpine-mirrors + alpine-mirrors = null + # use iproute2-minimal instead of full iproute2 + iproute2 = null + iproute2-minimal = true +} diff --git a/configs/version/base/3.conf b/configs/version/base/3.conf new file mode 100644 index 0000000..3aba9b8 --- /dev/null +++ b/configs/version/base/3.conf @@ -0,0 +1,9 @@ +# vim: ts=2 et: + +include required("2.conf") + +packages { + # doas replaces sudo + sudo = null + doas = true +} diff --git a/configs/version/edge.conf b/configs/version/edge.conf new file mode 100644 index 0000000..4818ada --- /dev/null +++ b/configs/version/edge.conf @@ -0,0 +1,11 @@ +# vim: ts=2 et: + +include required("base/3.conf") + +# clear out inherited repos +repos = null +repos { + "https://dl-cdn.alpinelinux.org/alpine/edge/main" = true + "https://dl-cdn.alpinelinux.org/alpine/edge/community" = true + "https://dl-cdn.alpinelinux.org/alpine/edge/testing" = true +} diff --git a/packer.conf b/packer.conf deleted file mode 100644 index b7ab850..0000000 --- a/packer.conf +++ /dev/null @@ -1,114 +0,0 @@ -# This Packer config file is in HOCON, and is converted to JSON at build time. -# https://github.com/lightbend/config/blob/master/HOCON.md -# vim: ts=2 et: - -builders = [ - { - type = "amazon-ebssurrogate" - profile = "{{user `aws_profile`}}" - - ### Builder Instance Details - - region = "{{user `build_region`}}" - subnet_id = "{{user `build_subnet`}}" - instance_type = "{{user `build_instance_type`}}" - associate_public_ip_address = "{{user `build_public_ip`}}" - source_ami_filter { - # use the latest Amazon Linux AMI - owners = [ "{{user `build_ami_owner`}}" ] - most_recent = "{{user `build_ami_latest`}}" - filters { - virtualization-type = "hvm" - root-device-type = "ebs" - architecture = "{{user `build_arch`}}" - name = "{{user `build_ami_name`}}" - } - } - launch_block_device_mappings = [ - { - volume_type = "gp2" - device_name = "/dev/xvdf" - encrypted = "{{user `ami_encrypt`}}" - delete_on_termination = "true" - volume_size = "{{user `ami_volume_size`}}" - } - ] - shutdown_behavior = "terminate" - ssh_username = "{{user `build_user`}}" - - ### AMI Build Details - - ami_name = "{{user `ami_name`}}" - ami_description = "{{user `ami_desc`}}" - tags { - Name = "{{user `ami_name`}}" - profile = "{{user `profile`}}" - profile_build = "{{user `profile_build`}}" - version = "{{user `version`}}" - release = "{{user `release`}}" - arch = "{{user `arch`}}" - revision = "{{user `revision`}}" - end_of_life = "{{user `end_of_life`}}" - } - ami_virtualization_type = "hvm" - ami_architecture = "{{user `build_arch`}}" # need packer 1.4.1 - ami_root_device { - volume_type = "gp2" - source_device_name = "/dev/xvdf" - device_name = "/dev/xvda" - delete_on_termination = "true" - volume_size = "{{user `ami_volume_size`}}" - } - ena_support = "true" - sriov_support = "true" - ami_users = "{{user `aws_users`}}" - } -] - - -provisioners = [ - { - type = "file" - source = "./profile/{{user `profile`}}/{{user `profile_build`}}/setup-ami.d" - destination = "/tmp/setup-ami.d" - } - { - type = "shell" - script = "../scripts/setup-ami" - environment_vars = [ - "VERSION={{user `version`}}" - "RELEASE={{user `release`}}" - "REVISION={{user `revision`}}" - "ARCH={{user `arch`}}" - "BOOTLOADER={{user `bootloader`}}" - "REPOS={{user `repos`}}" - "PKGS={{user `pkgs`}}" - "SVCS={{user `svcs`}}" - "KERNEL_MODS={{user `kernel_modules`}}" - "KERNEL_OPTS={{user `kernel_options`}}" - "INITFS_FEATURES={{user `initfs_features`}}" - "EC2_USER={{user `ami_user`}}" - ] - use_env_var_file = "true" - execute_command = "sudo sh -c '. {{.EnvVarFile}} && {{.Path}}'" - } -] - - -post-processors = [ - { - type = "manifest" - output = "profile/{{user `profile`}}/{{user `profile_build`}}/manifest.json" - custom_data { - ami_name = "{{user `ami_name`}}" - ami_desc = "{{user `ami_desc`}}" - profile = "{{user `profile`}}" - profile_build = "{{user `profile_build`}}" - version = "{{user `version`}}" - release = "{{user `release`}}" - arch = "{{user `arch`}}" - revision = "{{user `revision`}}" - end_of_life = "{{user `end_of_life`}}" - } - } -] diff --git a/profiles/README.md b/profiles/README.md deleted file mode 100644 index 568b2fc..0000000 --- a/profiles/README.md +++ /dev/null @@ -1,174 +0,0 @@ -# Profiles - -Profiles are collections of related build definitions, which are used to -generate the `vars.json` files that [Packer](https://packer.io) consumes -when building AMIs. - -Profiles use [HOCON](https://github.com/lightbend/config/blob/master/HOCON.md) -(Human-Optimized Config Object Notation) which allows importing common configs -from other files, simple variable interpolation, and easy merging of objects. -This flexibility helps keep configuration for related build targets -[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). - -## Core Profiles - -Core profile configurations are found in the `base`, `version`, and `arch` -subdirectories. Core profiles do not have a `.conf` suffix because they're not -meant to be directly used like target profiles with the `builder.py` script. - -Base core profiles define all build vars with default values -- those left -empty or null are usually set in version, arch, or target profile configs. -Base profiles are included in version profiles, and do not need to be included -in target profiles. - -Version core profiles expand on the base profile they include, and set the -`version`, `release`, `end_of_life` (if known), and the associated Alpine Linux -`repos`. - -Arch core profiles further define architecture-specific variables, such as -which `apk-tools` and `alpine-keys` to use (and their SHA256 checksums). - -## Target Profiles - -Target profiles, defined in this directory, are the top-level configuration -used with `./scripts/builder.py`; they must have a `.conf` suffix. Several -configuration objects are defined and later merged within the `BUILDS` object, -ultimately defining each individual build. - -Simple profiles have an object that loads a "version" core profile and -another that loads an "arch" core profile. A more complicated version-arch -matrix profile would have an object for each version and arch. - -Additionally, there are one or more objects that define profile-specific -settings. - -The `BUILDS` object's elements merge core and profile configs (with optional -inline build settings) into named build definitions; these build names can be -used to specify a subset of a profile's builds, for example: -`./scripts/builder.py amis ...` - -**Please note that merge order matters!** The merge sequence is version --> -architecture --> profile --> build. - -## Customization - -If the AWS configuration you're using does not specify a default region, your -custom profile will need to specify `build_region`. If the build region does -not have a default VPC, you'll need to specify `build_subnet`. - -`version` and `release` are meant to match Alpine; however, `revision` is used -used to track changes to the profile, additions of new -[alpine-ec2-ami](https://github.com/mcrute/alpine-ec2-ami) features, -or other situations where the AMIs needs to be rebuilt. The "edge" core -version profile sets `revision` to null, which translates into the current -datetime. Otherwise, the default set in the base profile is `r0`. - -You will probably want to personalize the name and description of your AMI. -Set `ami_name_prefix` and `ami_name_suffix`; setting `ami_desc_suffix` and -`ami_desc_suffix` is optional. - -Set `build_instance_type` if you want/need to use a different instance type to -build the image; the default is `t3.nano`. - -If 1 GiB is not enough to install the packages in your base AMI, you can set -the `ami_volume_size` to the number of GiB you need. Note, however, that the -[tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) init script -will expand the root partition to use the instance's entire EBS root volume -during the first boot, so you shouldn't need to make space for anything other -than installed packages. - -Set `ami_encrypt` to "true" to create an encrypted AMI image. Launching images -from an encrypted AMI results in an encrypted EBS root volume. Please note -that if your AMI is encrypted, only the owning account will be able to use it. - -_*NOTE*: The following funcitonality that is currently not operational -- it -is pending completion and integration of a new release tool. In the meantime, -you will have to manually copy AMIs from the build region to other regions._ - -To copy newly built AMIs to regions other than the `build_region` region, set -`ami_regions`. This variable is a *hash*, which allows for finer control over -inherited values when merging configs. Region identifiers are the keys, a -value of `true` means the AMI should be copied to that region; `null` or -`false` indicate that it shouldn't be copied to that region. If you want to -ensure that the `ami_regions` hash does not inherit any values, set it to -`null` before configuring your regions. For example: -``` -ami_regions = null # don't inherit any previous values -ami_regions { - us-west-2 = true - eu-north-1 = true -} -``` - -By default, the AMIs built are accessible only by the owning account. To -make your AMIs publicly available, set the `ami_access` hash variable: -``` -ami_access { - all = true -} -``` - -Controlling what packages are installed and enabled in the AMI is the number -one reason for creating custom profile. The `repos`, `pkgs`, and `svcs` hash -variables serve precisely that purpose. With some exceptions (noted below), -they work the same as the `ami_regions` hash: `true` values enable, `false` -and `null` values disable, and inherited values can be cleared by first setting -the variable itself to `null`. - -With `repos`, the keys are double-quoted URLs to the `apk` repos that you want -set up; these are initially set in the "version" core profiles. In addition -to the `true`, `false`, and `null` values, you can also use a "repo alias" -string value, allowing you to pin packages to be sourced from that particular -repo. For example, with a profile based from a non-edge core profile, you may -want to be able to pull packages from the edge testing repo: -``` -repos { - "http://dl-cdn.alpinelinux.org/alpine/edge/testing" = "edge-testing" -} -``` - -The `pkgs` hash's default is set in the base core profile; its keys are -simply the Alpine package to install (or not install, if the value is `false` -or `null`). A `true` value installs the package from the default repos; if the -value is a repo alias string, the package will be pinned to explicitly install -from that repo. For example: -``` -pkgs { - # install docker-compose from edge-testing repo - docker-compose = "edge-testing" -} -``` - -To control when (or whether) a system service starts, use the `svcs` hash -variable. Its first-level keys are names of runlevels (`sysinit`, `boot`, -`default`, and `shutown`), and the second-level keys are the services, as they -appear in `/etc/init.d`. Like the other profile hash variables, setting -`false` or `null` disable the service in the runlevel, `true` will enable the -service. - -Further customization can be done by specifying your own setup script with the -`setup_script` profile variable. This will be copied to the build instance at -`/tmp/setup-ami.d/setup_script`, and executed by the `setup-ami` script just -before the final cleanup phase. - -If there are additional data or scripts that your setup script uses, use the -`setup_copy` hash variable -- the key is the destination path under the build -instance's `/tmp/setup-ami.d` directory, and the value is the local path to -the source file or directory. No data is automatically installed in the AMI, -and no additional scripts are executed -- you must explicitly install/execute -via the `setup_script` script. - -The AMI's default login user is `alpine`. If you want to specify a alternate -login, set it with the `ami_user` profile variable. This setting is saved in -`/etc/conf.d/tiny-ec2-bootstrap` as `EC2_USER` and -[tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) -will use that valie instead of `alpine`. - -## Limitations and Caveats - -* Hash variables that are reset to clear inherited values *must* be - re-defined as a hash, even if it is to remain empty: - ``` - hash_var = null # drops inherited values - hash_var {} # re-defines as an empty hash - ``` diff --git a/profiles/alpine.conf b/profiles/alpine.conf deleted file mode 100644 index 62b44dd..0000000 --- a/profiles/alpine.conf +++ /dev/null @@ -1,33 +0,0 @@ -### Profile for Building the Publically-Available Alpine Linux AMIs -# vim: ts=2 et: - -version-3_14 { include required("version/3.14") } -version-3_13 { include required("version/3.13") } -version-3_12 { include required("version/3.12") } -version-3_11 { include required("version/3.11") } -version-edge { include required("version/edge") } -arch-x86_64 { include required("arch/x86_64") } -arch-aarch64 { include required("arch/aarch64") } - -# profile vars -community { - ami_desc_suffix = " - https://github.com/mcrute/alpine-ec2-ami" -} -official { - ami_desc_suffix = " - https://alpinelinux.org/cloud" -} - -# Build definitions -BUILDS { - # merge version, arch, profile; add per-build { revision = "r1" } if needed - edge-x86_64 = ${version-edge} ${arch-x86_64} ${official} - v3_14-x86_64 = ${version-3_14} ${arch-x86_64} ${official} - v3_13-x86_64 = ${version-3_13} ${arch-x86_64} ${official} - v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${community} - v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${community} - - edge-aarch64 = ${version-edge} ${arch-aarch64} ${official} - v3_14-aarch64 = ${version-3_14} ${arch-aarch64} ${official} - v3_13-aarch64 = ${version-3_13} ${arch-aarch64} ${official} { revision = "r1" } - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${community} { revision = "r1" } -} diff --git a/profiles/arch/aarch64 b/profiles/arch/aarch64 deleted file mode 120000 index f1b77e5..0000000 --- a/profiles/arch/aarch64 +++ /dev/null @@ -1 +0,0 @@ -aarch64-1 \ No newline at end of file diff --git a/profiles/arch/aarch64-1 b/profiles/arch/aarch64-1 deleted file mode 100644 index 34eb665..0000000 --- a/profiles/arch/aarch64-1 +++ /dev/null @@ -1,7 +0,0 @@ -### aarch64 vars, revision 1 -# vim: ts=2 et: - -arch = "aarch64" -bootloader = "grub-efi" -build_arch = "arm64" -build_instance_type = "t4g.nano" diff --git a/profiles/arch/x86_64 b/profiles/arch/x86_64 deleted file mode 120000 index f3c4f51..0000000 --- a/profiles/arch/x86_64 +++ /dev/null @@ -1 +0,0 @@ -x86_64-1 \ No newline at end of file diff --git a/profiles/arch/x86_64-1 b/profiles/arch/x86_64-1 deleted file mode 100644 index 3deceff..0000000 --- a/profiles/arch/x86_64-1 +++ /dev/null @@ -1,7 +0,0 @@ -### x86_64 vars, revision 1 -# vim: ts=2 et: - -arch = "x86_64" -bootloader = "syslinux" -build_arch = "x86_64" -build_instance_type = "t3a.nano" diff --git a/profiles/base/1 b/profiles/base/1 deleted file mode 100644 index 0ab69be..0000000 --- a/profiles/base/1 +++ /dev/null @@ -1,103 +0,0 @@ -### base vars, revision 1 -# vim: ts=2 et: - -# Profile/Build -profile = null -profile_build = null -revision = "r0" - -# Versioning -version = null -release = null # defaults to autodetect -end_of_life = null - -# Architecture -arch = null -build_arch = null -build_instance_type = null - -# Builder-instance -build_region = "us-west-2" -build_subnet = null -build_public_ip = null -build_user = "ec2-user" -build_ami_name = "amzn2-ami-hvm-2.0.*-gp2" -build_ami_owner = "137112412989" -build_ami_latest = "true" - -# AMI build/deploy -aws_profile = null # AWS profile to build AMI -aws_accounts = null # comma-separated AWS accounts allowed to launch AMI -ami_name_prefix = "alpine-ami-" -ami_name_suffix = "" -ami_desc_prefix = "Alpine Linux " -ami_desc_suffix = "" -ami_volume_size = "1" -ami_encrypt = "false" -ami_user = "alpine" - -# NOTE: the following are python format strings, resolved in builder.py -ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" -ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" - -# AMI configuration -bootloader = null -repos {} -pkgs { - linux-virt = true - alpine-mirrors = true - chrony = true - iproute2 = true - nvme-cli = true - openssh = true - sudo = true - tiny-ec2-bootstrap = true - tzdata = true -} -svcs { - sysinit { - devfs = true - dmesg = true - hwdrivers = true - mdev = true - } - boot { - acpid = true - bootmisc = true - hostname = true - hwclock = true - modules = true - swap = true - sysctl = true - syslog = true - } - default { - chronyd = true - eth-eni-setup = true - networking = true - sshd = true - tiny-ec2-bootstrap = true - } - shutdown { - killprocs = true - mount-ro = true - savecache = true - } -} -kernel_modules { - sd-mod = true - usb-storage = true - ext4 = true - nvme = true - ena = true -} -kernel_options { - "console=ttyS0,115200n8" = true - "nvme_core.io_timeout=4294967295" = true -} -# NOTE: nvme and ena are critical for i3, a1, m6g, and anything in the 5 series -# forward. Without them these instances will not boot. -initfs_features { - nvme = true - ena = true -} diff --git a/profiles/base/2 b/profiles/base/2 deleted file mode 100644 index 7e39ebf..0000000 --- a/profiles/base/2 +++ /dev/null @@ -1,111 +0,0 @@ -### base vars, revision 2 -# vim: ts=2 et: - -# Profile/Build -profile = null -profile_build = null -revision = "r0" - -# Versioning -version = null -release = null # defaults to autodetect -end_of_life = null - -# Architecture -arch = null -build_arch = null -build_instance_type = null - -# Builder-instance -build_region = "us-west-2" -build_subnet = null -build_public_ip = null -build_user = "ec2-user" -build_ami_name = "amzn2-ami-hvm-2.0.*-gp2" -build_ami_owner = "137112412989" -build_ami_latest = "true" - -# AMI build/deploy -aws_profile = null # AWS profile to build AMI -aws_accounts = null # comma-separated AWS accounts allowed to launch AMI -ami_name_prefix = "alpine-ami-" -ami_name_suffix = "" -ami_desc_prefix = "Alpine Linux " -ami_desc_suffix = "" -ami_volume_size = "1" -ami_encrypt = "false" -ami_user = "alpine" - -# NOTE: the following are python format strings, resolved in builder.py -ami_name = "{var.ami_name_prefix}{var.release}-{var.arch}-{var.revision}{var.ami_name_suffix}" -ami_desc = "{var.ami_desc_prefix}{var.release} {var.arch} {var.revision}{var.ami_desc_suffix}" - -# AMI configuration -bootloader = null -repos {} -pkgs { - linux-virt = true - chrony = true - iproute2-minimal = true - nvme-cli = true - openssh = true - sudo = true - tiny-ec2-bootstrap = true - tzdata = true -} -svcs { - sysinit { - devfs = true - dmesg = true - hwdrivers = true - mdev = true - } - boot { - acpid = true - bootmisc = true - hostname = true - hwclock = true - modules = true - swap = true - sysctl = true - syslog = true - } - default { - chronyd = true - eth-eni-setup = true - networking = true - sshd = true - tiny-ec2-bootstrap = true - } - shutdown { - killprocs = true - mount-ro = true - savecache = true - } -} -kernel_modules { - sd-mod = true - usb-storage = true - ext4 = true - nvme = true - ena = true -} -kernel_options { - "console=ttyS0,115200n8" = true - "nvme_core.io_timeout=4294967295" = true -} -# NOTE: nvme and ena are critical for i3, a1, m6g, and anything in the 5 -# series forward. Without them these instances will not boot. -initfs_features { - nvme = true - ena = true -} - -# Local path to additional setup script, runs before setup-ami cleanup. -setup_script = null - -# Files/directories to copy to /tmp/setup-ami.d/ on build instance for -# setup-script to use. Map key is the copy target in the build instance -# /tmp/setup-ami.d/ directory, map value is local file/directory path. -# Nothing copied ends up in the AMI unless `setup_script` does it. -setup_copy = null diff --git a/profiles/base/current b/profiles/base/current deleted file mode 120000 index d8263ee..0000000 --- a/profiles/base/current +++ /dev/null @@ -1 +0,0 @@ -2 \ No newline at end of file diff --git a/profiles/test.conf b/profiles/test.conf deleted file mode 100644 index e7c8e53..0000000 --- a/profiles/test.conf +++ /dev/null @@ -1,38 +0,0 @@ -### Profile for Testing Builds -# vim: ts=2 et: - -version-3_13 { include required("version/3.13") } -version-3_12 { include required("version/3.12") } -version-3_11 { include required("version/3.11") } -version-3_10 { include required("version/3.10") } -version-edge { include required("version/edge") } - -arch-x86_64 { include required("arch/x86_64") } -arch-aarch64 { include required("arch/aarch64") } - -# specific to this profile's builds -test { - #bootloader = "EFI_STUB" # currently does not work - ami_name_prefix = "test-" - ami_desc_prefix = "Alpine Test " - ami_user = "test" - setup_script = scripts/test-setup_script.sh - setup_copy { - base = profiles/base - aarch64 = profiles/arch/aarch64 - } -} - -# Build definitions -BUILDS { - # merge version, arch, profile, and build vars - v3_13-x86_64 = ${version-3_13} ${arch-x86_64} ${test} - v3_12-x86_64 = ${version-3_12} ${arch-x86_64} ${test} - v3_11-x86_64 = ${version-3_11} ${arch-x86_64} ${test} { revision = "r1" } - v3_10-x86_64 = ${version-3_10} ${arch-x86_64} ${test} { revision = "r2" } - edge-x86_64 = ${version-edge} ${arch-x86_64} ${test} - - v3_13-aarch64 = ${version-3_13} ${arch-aarch64} ${test} - v3_12-aarch64 = ${version-3_12} ${arch-aarch64} ${test} - edge-aarch64 = ${version-edge} ${arch-aarch64} ${test} -} diff --git a/profiles/version/3.10 b/profiles/version/3.10 deleted file mode 100644 index fe5248c..0000000 --- a/profiles/version/3.10 +++ /dev/null @@ -1,13 +0,0 @@ -### version 3.10 vars -# vim: ts=2 et: - -# start with base vars -include required("../base/1") - -# set version-specific vars -version = "3.10" -end_of_life = "2021-05-01" -repos { - "http://dl-cdn.alpinelinux.org/alpine/v3.10/main" = true - "http://dl-cdn.alpinelinux.org/alpine/v3.10/community" = true -} diff --git a/profiles/version/3.11 b/profiles/version/3.11 deleted file mode 100644 index e1d3b02..0000000 --- a/profiles/version/3.11 +++ /dev/null @@ -1,13 +0,0 @@ -### version 3.11 vars -# vim: ts=2 et: - -# start with base vars -include required("../base/1") - -# set version-specific vars -version = "3.11" -end_of_life = "2021-11-01" -repos { - "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" = true - "http://dl-cdn.alpinelinux.org/alpine/v3.11/community" = true -} diff --git a/profiles/version/3.12 b/profiles/version/3.12 deleted file mode 100644 index 1b15751..0000000 --- a/profiles/version/3.12 +++ /dev/null @@ -1,13 +0,0 @@ -### version 3.12 vars -# vim: ts=2 et: - -# start with base vars -include required("../base/1") - -# set version-specific vars -version = "3.12" -end_of_life = "2022-05-01" -repos { - "http://dl-cdn.alpinelinux.org/alpine/v3.12/main" = true - "http://dl-cdn.alpinelinux.org/alpine/v3.12/community" = true -} diff --git a/profiles/version/3.13 b/profiles/version/3.13 deleted file mode 100644 index 233a9ae..0000000 --- a/profiles/version/3.13 +++ /dev/null @@ -1,13 +0,0 @@ -### version 3.13 vars -# vim: ts=2 et: - -# based on current -include required("../base/current") - -# set version-specific vars -version = "3.13" -end_of_life = "2022-11-01" -repos { - "http://dl-cdn.alpinelinux.org/alpine/v3.13/main" = true - "http://dl-cdn.alpinelinux.org/alpine/v3.13/community" = true -} diff --git a/profiles/version/3.14 b/profiles/version/3.14 deleted file mode 100644 index 52d3e53..0000000 --- a/profiles/version/3.14 +++ /dev/null @@ -1,13 +0,0 @@ -### version 3.14 vars -# vim: ts=2 et: - -# based on current -include required("../base/current") - -# set version-specific vars -version = "3.14" -end_of_life = "2023-05-01" -repos { - "http://dl-cdn.alpinelinux.org/alpine/v3.14/main" = true - "http://dl-cdn.alpinelinux.org/alpine/v3.14/community" = true -} diff --git a/profiles/version/3.9 b/profiles/version/3.9 deleted file mode 100644 index a908489..0000000 --- a/profiles/version/3.9 +++ /dev/null @@ -1,13 +0,0 @@ -### version 3.9 vars -# vim: ts=2 et: - -# start with base vars -include required("../base/1") - -# set version-specific vars -version = "3.9" -end_of_life = "2021-01-01" -repos { - "http://dl-cdn.alpinelinux.org/alpine/v3.9/main" = true - "http://dl-cdn.alpinelinux.org/alpine/v3.9/community" = true -} diff --git a/profiles/version/current b/profiles/version/current deleted file mode 120000 index 3a4f41e..0000000 --- a/profiles/version/current +++ /dev/null @@ -1 +0,0 @@ -3.13 \ No newline at end of file diff --git a/profiles/version/edge b/profiles/version/edge deleted file mode 100644 index 7e5a3a8..0000000 --- a/profiles/version/edge +++ /dev/null @@ -1,16 +0,0 @@ -### edge vars -# vim: ts=2 et: - -# based on current -include required("../base/current") - -# add edge-specific tweaks... -version = "edge" -end_of_life = null # defaults to tomorrow -revision = null # defaults to datetime - -repos { - "http://dl-cdn.alpinelinux.org/alpine/edge/main" = true - "http://dl-cdn.alpinelinux.org/alpine/edge/community" = true - "http://dl-cdn.alpinelinux.org/alpine/edge/testing" = true -} diff --git a/releases/README.md b/releases/README.md deleted file mode 100644 index 28f676b..0000000 --- a/releases/README.md +++ /dev/null @@ -1,184 +0,0 @@ -# Alpine Linux EC2 AMIs - -These are the official Alpine AWS AMIs. For an index of images see the -[Alpine Website](https://alpinelinux.org/cloud/). - -These AMIs should work with most EC2 features -- such as ENIs (Elastic Network -Interfaces) and NVMe EBS (Elastic Block Storage) volumes. If you find any -problems launching these AMIs on current generation instances, please open an -[issue](https://github.com/mcrute/alpine-ec2-ami/issues) and include as much -detailed information as possible. - -All AMIs built after 2020-09-15 include support for hot-pluggable ENIs, and will -sync all associated IPv6 and secondary IPv4 addresses during `udhcpc` post-bound -and post-renew events. - -Starting with Alpine release 3.12.1, IMDSv2 (Instance MetaData Service v2) is -fully supported, and `aarch64` AMIs are provided for EC2 ARM-based instances. - -During the *first boot* of instances created with these AMIs, the lightweight -[tiny-ec2-bootstrap](https://github.com/mcrute/tiny-ec2-bootstrap) init -script... -- sets the instance's hostname, -- installs the SSH authorized_keys for the AMI user (default 'alpine'), -- disables 'root' and AMI user (default 'alpine') passwords, -- expands the root partition to use all available EBS volume space, -- and executes a "user data" script (must be a shell script that starts with `#!`) - -If you launch these AMIs to build other images (via [Packer](https://packer.io), -etc.), don't forget to remove `/var/lib/cloud/.bootstrap-complete` -- otherwise -instances launched from those second-generation AMIs will not run -`tiny-ec2-bootstrap` on their first boot. - -The more popular [cloud-init](https://cloudinit.readthedocs.io/en/latest/) is -currently not supported on Alpine Linux. If `cloud-init` support is important -to you, please open an [issue](https://github.com/mcrute/alpine-ec2-ami/issues). - -***These AMIs are also available by visiting https://alpinelinux.org/cloud*** - -## AMIs - -### Alpine Linux 3.14.1 (2021-08-07) -
click to show/hide

- -| Region | alpine-ami-3.14.1-aarch64-r0 | alpine-ami-3.14.1-x86_64-r0 | -| ------ | --- | --- | -| af-south-1 | [ami-0bcf48f55b9949a84](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bcf48f55b9949a84) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bcf48f55b9949a84)) | [ami-08aea7443b5d08f79](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08aea7443b5d08f79) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08aea7443b5d08f79)) | -| ap-east-1 | [ami-092aa3a38d204b2b5](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092aa3a38d204b2b5) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092aa3a38d204b2b5)) | [ami-0d4ba085b9c1557b8](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d4ba085b9c1557b8) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d4ba085b9c1557b8)) | -| ap-northeast-1 | [ami-0b559d40e76da2119](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b559d40e76da2119) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b559d40e76da2119)) | [ami-033c6bceffad8df75](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-033c6bceffad8df75) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-033c6bceffad8df75)) | -| ap-northeast-2 | [ami-07667213840caca26](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07667213840caca26) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07667213840caca26)) | [ami-0d7a7fdf22367713c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d7a7fdf22367713c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d7a7fdf22367713c)) | -| ap-northeast-3 | [ami-0956b7bafd7a6720d](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0956b7bafd7a6720d) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0956b7bafd7a6720d)) | [ami-08b52d5efd9abef56](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b52d5efd9abef56) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-08b52d5efd9abef56)) | -| ap-south-1 | [ami-07ed5174d6da65d84](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ed5174d6da65d84) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07ed5174d6da65d84)) | [ami-012f6469429d4ad42](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-012f6469429d4ad42) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-012f6469429d4ad42)) | -| ap-southeast-1 | [ami-0aa966cf6ca931b11](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0aa966cf6ca931b11) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0aa966cf6ca931b11)) | [ami-01a542451033fd940](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01a542451033fd940) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01a542451033fd940)) | -| ap-southeast-2 | [ami-069d767cedbd4d7a5](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-069d767cedbd4d7a5) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-069d767cedbd4d7a5)) | [ami-014e86c5062e164af](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-014e86c5062e164af) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-014e86c5062e164af)) | -| ca-central-1 | [ami-08bc6f39436e47c30](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08bc6f39436e47c30) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08bc6f39436e47c30)) | [ami-0bd936dc3de6b791d](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bd936dc3de6b791d) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bd936dc3de6b791d)) | -| eu-central-1 | [ami-06f364adb4a297706](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06f364adb4a297706) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06f364adb4a297706)) | [ami-0bb1a41a1c0eafc95](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0bb1a41a1c0eafc95) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0bb1a41a1c0eafc95)) | -| eu-north-1 | [ami-05f1271ab15bf4557](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f1271ab15bf4557) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05f1271ab15bf4557)) | [ami-0e2b6818c61b0b113](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2b6818c61b0b113) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2b6818c61b0b113)) | -| eu-south-1 | [ami-06fb368b1c23356ca](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06fb368b1c23356ca) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06fb368b1c23356ca)) | [ami-0e69ca71abc28babe](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e69ca71abc28babe) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e69ca71abc28babe)) | -| eu-west-1 | [ami-0887b1a806a73417a](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0887b1a806a73417a) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0887b1a806a73417a)) | [ami-0274c314a1272d2fd](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0274c314a1272d2fd) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0274c314a1272d2fd)) | -| eu-west-2 | [ami-0d0ae9eb51f79e338](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d0ae9eb51f79e338) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d0ae9eb51f79e338)) | [ami-0e4e3a358f49875dc](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e4e3a358f49875dc) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e4e3a358f49875dc)) | -| eu-west-3 | [ami-08af7eab2ea99f7e5](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08af7eab2ea99f7e5) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-08af7eab2ea99f7e5)) | [ami-031817718bbaf781d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-031817718bbaf781d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-031817718bbaf781d)) | -| me-south-1 | [ami-02b98efa2cd0b2ab0](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02b98efa2cd0b2ab0) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02b98efa2cd0b2ab0)) | [ami-0a665daaaf042257a](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a665daaaf042257a) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a665daaaf042257a)) | -| sa-east-1 | [ami-07f46bbd5674b79a6](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07f46bbd5674b79a6) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07f46bbd5674b79a6)) | [ami-0101f8d6e37b57173](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0101f8d6e37b57173) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0101f8d6e37b57173)) | -| us-east-1 | [ami-03175ec34a7192e70](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03175ec34a7192e70) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03175ec34a7192e70)) | [ami-0f1919ed094505be3](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f1919ed094505be3) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f1919ed094505be3)) | -| us-east-2 | [ami-082d34382e0289102](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082d34382e0289102) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-082d34382e0289102)) | [ami-01f0c5ccdeab2a3d8](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01f0c5ccdeab2a3d8) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01f0c5ccdeab2a3d8)) | -| us-west-1 | [ami-0081057f803624455](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0081057f803624455) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0081057f803624455)) | [ami-0000605ad5571b4c0](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0000605ad5571b4c0) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0000605ad5571b4c0)) | -| us-west-2 | [ami-03e685d5fddaf46e7](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03e685d5fddaf46e7) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-03e685d5fddaf46e7)) | [ami-05e856cad09314ed0](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05e856cad09314ed0) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05e856cad09314ed0)) | - -

- -### Alpine Linux 3.13.5 (2021-06-15) -
click to show/hide

- -| Region | alpine-ami-3.13.5-aarch64-r1 | alpine-ami-3.13.5-x86_64-r0 | -| ------ | --- | --- | -| af-south-1 | [ami-077c41d657f21a319](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-077c41d657f21a319) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-077c41d657f21a319)) | [ami-0441b82fd3fb48433](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0441b82fd3fb48433) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0441b82fd3fb48433)) | -| ap-east-1 | [ami-0650eebfb386ffb89](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0650eebfb386ffb89) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0650eebfb386ffb89)) | [ami-0e2d8dfaf125a7631](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e2d8dfaf125a7631) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e2d8dfaf125a7631)) | -| ap-northeast-1 | [ami-034682c4a51e88cf7](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034682c4a51e88cf7) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-034682c4a51e88cf7)) | [ami-02fb62943caac3c71](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02fb62943caac3c71) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02fb62943caac3c71)) | -| ap-northeast-2 | [ami-070b973637320a52c](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-070b973637320a52c) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-070b973637320a52c)) | [ami-038fc3b2d886b83ce](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-038fc3b2d886b83ce) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-038fc3b2d886b83ce)) | -| ap-northeast-3 | [ami-0df1727e6d714cc2d](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0df1727e6d714cc2d) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0df1727e6d714cc2d)) | [ami-0678e9272dbb276a1](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0678e9272dbb276a1) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0678e9272dbb276a1)) | -| ap-south-1 | [ami-073046a717b1930dc](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-073046a717b1930dc) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-073046a717b1930dc)) | [ami-0c0073e10ee3a5b66](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c0073e10ee3a5b66) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c0073e10ee3a5b66)) | -| ap-southeast-1 | [ami-03ac48af40b667111](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03ac48af40b667111) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03ac48af40b667111)) | [ami-07c71c29e8cfef967](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07c71c29e8cfef967) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07c71c29e8cfef967)) | -| ap-southeast-2 | [ami-04d61dc48ced711e3](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d61dc48ced711e3) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04d61dc48ced711e3)) | [ami-039c2e2595e9da7fc](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039c2e2595e9da7fc) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-039c2e2595e9da7fc)) | -| ca-central-1 | [ami-0f40fb960a6bac29a](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f40fb960a6bac29a) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f40fb960a6bac29a)) | [ami-0a464816128999904](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a464816128999904) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a464816128999904)) | -| eu-central-1 | [ami-0dcacb8c85ee2349e](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0dcacb8c85ee2349e) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0dcacb8c85ee2349e)) | [ami-0d6ad9b3597da40c4](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d6ad9b3597da40c4) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d6ad9b3597da40c4)) | -| eu-north-1 | [ami-0469d8b4b0f1b6493](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0469d8b4b0f1b6493) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0469d8b4b0f1b6493)) | [ami-03cb5b21303291be4](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03cb5b21303291be4) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03cb5b21303291be4)) | -| eu-south-1 | [ami-0417a5f0b9249cb6e](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0417a5f0b9249cb6e) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0417a5f0b9249cb6e)) | [ami-02bd65e399a33d2c0](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02bd65e399a33d2c0) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02bd65e399a33d2c0)) | -| eu-west-1 | [ami-0ff5ce856793c0471](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ff5ce856793c0471) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ff5ce856793c0471)) | [ami-097ec49079a5d612f](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-097ec49079a5d612f) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-097ec49079a5d612f)) | -| eu-west-2 | [ami-07cd282c1d6887959](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07cd282c1d6887959) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07cd282c1d6887959)) | [ami-0360a9a8fec665753](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0360a9a8fec665753) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0360a9a8fec665753)) | -| eu-west-3 | [ami-0b5cffef9ef83241c](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b5cffef9ef83241c) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0b5cffef9ef83241c)) | [ami-0adda5d20f341ae82](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0adda5d20f341ae82) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0adda5d20f341ae82)) | -| me-south-1 | [ami-00cd03fd11106a4cf](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00cd03fd11106a4cf) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00cd03fd11106a4cf)) | [ami-0cd56b96bf4e83dcf](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cd56b96bf4e83dcf) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cd56b96bf4e83dcf)) | -| sa-east-1 | [ami-0b92ae87d6e141bbb](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b92ae87d6e141bbb) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b92ae87d6e141bbb)) | [ami-08370ac3635a06147](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08370ac3635a06147) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08370ac3635a06147)) | -| us-east-1 | [ami-08500c947a8870478](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08500c947a8870478) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08500c947a8870478)) | [ami-068216a0f0800db09](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-068216a0f0800db09) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-068216a0f0800db09)) | -| us-east-2 | [ami-0acde1f635f6811c4](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0acde1f635f6811c4) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0acde1f635f6811c4)) | [ami-06c24203121c5baa9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06c24203121c5baa9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06c24203121c5baa9)) | -| us-west-1 | [ami-09e1594112290a416](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09e1594112290a416) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09e1594112290a416)) | [ami-03815baf7396cc308](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03815baf7396cc308) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03815baf7396cc308)) | -| us-west-2 | [ami-034dc333a09683077](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-034dc333a09683077) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-034dc333a09683077)) | [ami-0ccbd58d6e42a3f64](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ccbd58d6e42a3f64) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0ccbd58d6e42a3f64)) | - -

- -### Alpine Linux 3.12.7 (2021-06-15) -
click to show/hide

- -| Region | alpine-ami-3.12.7-aarch64-r1 | alpine-ami-3.12.7-x86_64-r0 | -| ------ | --- | --- | -| af-south-1 | [ami-02a463c487f299306](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02a463c487f299306) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02a463c487f299306)) | [ami-0ef71998139e39742](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ef71998139e39742) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ef71998139e39742)) | -| ap-east-1 | [ami-07ef9272fba7965e3](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07ef9272fba7965e3) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07ef9272fba7965e3)) | [ami-0628f9a686336d658](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0628f9a686336d658) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0628f9a686336d658)) | -| ap-northeast-1 | [ami-035fb63f9b293417d](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-035fb63f9b293417d) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-035fb63f9b293417d)) | [ami-0b34d9cbb63106e61](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b34d9cbb63106e61) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b34d9cbb63106e61)) | -| ap-northeast-2 | [ami-07b5a03e1bb389253](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07b5a03e1bb389253) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-07b5a03e1bb389253)) | [ami-080b50f812df717ea](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-080b50f812df717ea) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-080b50f812df717ea)) | -| ap-northeast-3 | [ami-0181e54576075b5cc](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0181e54576075b5cc) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0181e54576075b5cc)) | [ami-01ddf8610921c1f5b](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ddf8610921c1f5b) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-01ddf8610921c1f5b)) | -| ap-south-1 | [ami-01044c4b5478c4d1d](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01044c4b5478c4d1d) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01044c4b5478c4d1d)) | [ami-0f8f786ca89d0968c](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f8f786ca89d0968c) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f8f786ca89d0968c)) | -| ap-southeast-1 | [ami-01b96ea14b3a15a77](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01b96ea14b3a15a77) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-01b96ea14b3a15a77)) | [ami-079d7c6b97cac3237](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-079d7c6b97cac3237) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-079d7c6b97cac3237)) | -| ap-southeast-2 | [ami-06855d79571a6e4ac](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06855d79571a6e4ac) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06855d79571a6e4ac)) | [ami-0d2e1217ececc880d](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d2e1217ececc880d) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d2e1217ececc880d)) | -| ca-central-1 | [ami-042c2cb60c794554c](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-042c2cb60c794554c) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-042c2cb60c794554c)) | [ami-094e7437e91419deb](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-094e7437e91419deb) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-094e7437e91419deb)) | -| eu-central-1 | [ami-00eda68b21e026a70](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00eda68b21e026a70) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00eda68b21e026a70)) | [ami-09eec438ca839ca58](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09eec438ca839ca58) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09eec438ca839ca58)) | -| eu-north-1 | [ami-005856c2c0649fd53](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005856c2c0649fd53) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-005856c2c0649fd53)) | [ami-09447e487e10b7655](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09447e487e10b7655) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09447e487e10b7655)) | -| eu-south-1 | [ami-0a4b952da5d2e6d51](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a4b952da5d2e6d51) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a4b952da5d2e6d51)) | [ami-04d393060a61a1eca](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d393060a61a1eca) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04d393060a61a1eca)) | -| eu-west-1 | [ami-0463f3ec0e6f3ae1c](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0463f3ec0e6f3ae1c) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0463f3ec0e6f3ae1c)) | [ami-095c3d5967fd9c885](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-095c3d5967fd9c885) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-095c3d5967fd9c885)) | -| eu-west-2 | [ami-0fb6524693687cca0](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fb6524693687cca0) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fb6524693687cca0)) | [ami-005a2f89daaf77547](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-005a2f89daaf77547) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-005a2f89daaf77547)) | -| eu-west-3 | [ami-0d53043aa280e8b70](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d53043aa280e8b70) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0d53043aa280e8b70)) | [ami-0700c55763af6a1bb](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0700c55763af6a1bb) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0700c55763af6a1bb)) | -| me-south-1 | [ami-0a1d69b39aea74ece](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a1d69b39aea74ece) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a1d69b39aea74ece)) | [ami-039b1ff0cfd4c9e1c](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-039b1ff0cfd4c9e1c) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-039b1ff0cfd4c9e1c)) | -| sa-east-1 | [ami-0274fe1f8294b34fb](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0274fe1f8294b34fb) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0274fe1f8294b34fb)) | [ami-0d364d95ef0e3ed08](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d364d95ef0e3ed08) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d364d95ef0e3ed08)) | -| us-east-1 | [ami-0f2f4e0001bf5b275](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f2f4e0001bf5b275) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0f2f4e0001bf5b275)) | [ami-08a8e1cd5cfe6fc40](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08a8e1cd5cfe6fc40) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08a8e1cd5cfe6fc40)) | -| us-east-2 | [ami-01dd480af3ec8e7b5](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01dd480af3ec8e7b5) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01dd480af3ec8e7b5)) | [ami-0f213093a04cde948](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f213093a04cde948) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f213093a04cde948)) | -| us-west-1 | [ami-006f02a62ee4c57a0](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-006f02a62ee4c57a0) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-006f02a62ee4c57a0)) | [ami-0a5fc9a6a5351641e](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5fc9a6a5351641e) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5fc9a6a5351641e)) | -| us-west-2 | [ami-04485971d90cee562](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04485971d90cee562) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04485971d90cee562)) | [ami-06b1887a7bc6eb122](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06b1887a7bc6eb122) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06b1887a7bc6eb122)) | - -

- -### Alpine Linux 3.11.11 (2021-04-15) -
click to show/hide

- -| Region | alpine-ami-3.11.11-x86_64-r0 | -| ------ | --- | -| af-south-1 | [ami-0a5bccfa2bc184bb1](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a5bccfa2bc184bb1) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a5bccfa2bc184bb1)) | -| ap-east-1 | [ami-057fe5fb6dbaeaabe](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-057fe5fb6dbaeaabe) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-057fe5fb6dbaeaabe)) | -| ap-northeast-1 | [ami-0ce72c30606d58e2a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ce72c30606d58e2a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ce72c30606d58e2a)) | -| ap-northeast-2 | [ami-075d81ae6bd805c9a](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-075d81ae6bd805c9a) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-075d81ae6bd805c9a)) | -| ap-northeast-3 | [ami-048b8b812a37a6e9d](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-048b8b812a37a6e9d) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-048b8b812a37a6e9d)) | -| ap-south-1 | [ami-0a09ced4a0968561a](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a09ced4a0968561a) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a09ced4a0968561a)) | -| ap-southeast-1 | [ami-0c3268d224a7be79f](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0c3268d224a7be79f) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0c3268d224a7be79f)) | -| ap-southeast-2 | [ami-0fe81386105b2c320](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fe81386105b2c320) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0fe81386105b2c320)) | -| ca-central-1 | [ami-02351d48ae19b5153](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02351d48ae19b5153) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02351d48ae19b5153)) | -| eu-central-1 | [ami-082d5ae92b013cf0c](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-082d5ae92b013cf0c) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-082d5ae92b013cf0c)) | -| eu-north-1 | [ami-0a67df0ddb737bca0](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a67df0ddb737bca0) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a67df0ddb737bca0)) | -| eu-south-1 | [ami-0b9e1df4e1ea3f09a](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9e1df4e1ea3f09a) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9e1df4e1ea3f09a)) | -| eu-west-1 | [ami-06318efc075e9c192](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06318efc075e9c192) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06318efc075e9c192)) | -| eu-west-2 | [ami-0a68f325601d8968f](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a68f325601d8968f) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0a68f325601d8968f)) | -| eu-west-3 | [ami-06d6b6f3eb35b4988](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06d6b6f3eb35b4988) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06d6b6f3eb35b4988)) | -| me-south-1 | [ami-0fee76fd32b0acb09](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0fee76fd32b0acb09) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0fee76fd32b0acb09)) | -| sa-east-1 | [ami-0e3921332d634a1bc](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e3921332d634a1bc) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e3921332d634a1bc)) | -| us-east-1 | [ami-09a785c1dd12aa464](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09a785c1dd12aa464) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09a785c1dd12aa464)) | -| us-east-2 | [ami-0f27d5f504d774c42](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f27d5f504d774c42) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f27d5f504d774c42)) | -| us-west-1 | [ami-0e1759b0e8c3b8fde](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e1759b0e8c3b8fde) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e1759b0e8c3b8fde)) | -| us-west-2 | [ami-038d4cc13841ec79f](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-038d4cc13841ec79f) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-038d4cc13841ec79f)) | - -

- -### Alpine Linux Edge (2021-08-07) -
click to show/hide

- -| Region | alpine-ami-edge-aarch64-20210807035653 | alpine-ami-edge-x86_64-20210807035653 | -| ------ | --- | --- | -| af-south-1 | [ami-0d119db2dbae0d1f2](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d119db2dbae0d1f2) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0d119db2dbae0d1f2)) | [ami-043fabf28ec27dd48](https://af-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-043fabf28ec27dd48) ([launch](https://af-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-043fabf28ec27dd48)) | -| ap-east-1 | [ami-06720fd442e84af52](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06720fd442e84af52) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-06720fd442e84af52)) | [ami-0cc5ca3f207d56fe4](https://ap-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0cc5ca3f207d56fe4) ([launch](https://ap-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0cc5ca3f207d56fe4)) | -| ap-northeast-1 | [ami-03bb3e6b43c7e5b3a](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03bb3e6b43c7e5b3a) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03bb3e6b43c7e5b3a)) | [ami-03c77a5b6ef2ce5cf](https://ap-northeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03c77a5b6ef2ce5cf) ([launch](https://ap-northeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03c77a5b6ef2ce5cf)) | -| ap-northeast-2 | [ami-05f6a1444b2dba1be](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05f6a1444b2dba1be) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-05f6a1444b2dba1be)) | [ami-04efc6ef9b126d1b7](https://ap-northeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04efc6ef9b126d1b7) ([launch](https://ap-northeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-04efc6ef9b126d1b7)) | -| ap-northeast-3 | [ami-06553907a3296d356](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06553907a3296d356) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-06553907a3296d356)) | [ami-09de309f09de8634d](https://ap-northeast-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09de309f09de8634d) ([launch](https://ap-northeast-3.console.aws.amazon.com/ec2/home#launchAmi=ami-09de309f09de8634d)) | -| ap-south-1 | [ami-02276ceadfba3d8dc](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-02276ceadfba3d8dc) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-02276ceadfba3d8dc)) | [ami-04e3beb414e5c63a0](https://ap-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04e3beb414e5c63a0) ([launch](https://ap-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04e3beb414e5c63a0)) | -| ap-southeast-1 | [ami-009e681f7123d7507](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-009e681f7123d7507) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-009e681f7123d7507)) | [ami-091c8e0712eb73cfc](https://ap-southeast-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-091c8e0712eb73cfc) ([launch](https://ap-southeast-1.console.aws.amazon.com/ec2/home#launchAmi=ami-091c8e0712eb73cfc)) | -| ap-southeast-2 | [ami-0f609e1d8e752a7d5](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f609e1d8e752a7d5) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f609e1d8e752a7d5)) | [ami-0e0e696ef294e3c54](https://ap-southeast-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e0e696ef294e3c54) ([launch](https://ap-southeast-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0e0e696ef294e3c54)) | -| ca-central-1 | [ami-0e79a284afab67660](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e79a284afab67660) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e79a284afab67660)) | [ami-0ddc8f4f4adfb9432](https://ca-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ddc8f4f4adfb9432) ([launch](https://ca-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ddc8f4f4adfb9432)) | -| eu-central-1 | [ami-00d213f492389362f](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-00d213f492389362f) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-00d213f492389362f)) | [ami-0b8f1eb4317be682b](https://eu-central-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b8f1eb4317be682b) ([launch](https://eu-central-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0b8f1eb4317be682b)) | -| eu-north-1 | [ami-09efda8acd6cd23a3](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-09efda8acd6cd23a3) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-09efda8acd6cd23a3)) | [ami-013ec2fcd6a337f5c](https://eu-north-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-013ec2fcd6a337f5c) ([launch](https://eu-north-1.console.aws.amazon.com/ec2/home#launchAmi=ami-013ec2fcd6a337f5c)) | -| eu-south-1 | [ami-08b0d59e27d5834cd](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-08b0d59e27d5834cd) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-08b0d59e27d5834cd)) | [ami-04d0311c3a559280e](https://eu-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-04d0311c3a559280e) ([launch](https://eu-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-04d0311c3a559280e)) | -| eu-west-1 | [ami-083fce6ab0babc52b](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-083fce6ab0babc52b) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-083fce6ab0babc52b)) | [ami-092803064e707b52d](https://eu-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-092803064e707b52d) ([launch](https://eu-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-092803064e707b52d)) | -| eu-west-2 | [ami-0d5e165b15b45d294](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0d5e165b15b45d294) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0d5e165b15b45d294)) | [ami-06a1e1353977132a1](https://eu-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-06a1e1353977132a1) ([launch](https://eu-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-06a1e1353977132a1)) | -| eu-west-3 | [ami-0b9e58d8fb5a5851d](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b9e58d8fb5a5851d) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0b9e58d8fb5a5851d)) | [ami-0403f988d8f677db2](https://eu-west-3.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0403f988d8f677db2) ([launch](https://eu-west-3.console.aws.amazon.com/ec2/home#launchAmi=ami-0403f988d8f677db2)) | -| me-south-1 | [ami-0a6ce44e9cae12563](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0a6ce44e9cae12563) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0a6ce44e9cae12563)) | [ami-0759c23186662c037](https://me-south-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0759c23186662c037) ([launch](https://me-south-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0759c23186662c037)) | -| sa-east-1 | [ami-0ed048bcd64ffdac7](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0ed048bcd64ffdac7) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0ed048bcd64ffdac7)) | [ami-03502f7175066565d](https://sa-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-03502f7175066565d) ([launch](https://sa-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-03502f7175066565d)) | -| us-east-1 | [ami-0e71191f5db7e9a53](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0e71191f5db7e9a53) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0e71191f5db7e9a53)) | [ami-0320caad46860385f](https://us-east-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0320caad46860385f) ([launch](https://us-east-1.console.aws.amazon.com/ec2/home#launchAmi=ami-0320caad46860385f)) | -| us-east-2 | [ami-01ae9b5526a5530b9](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-01ae9b5526a5530b9) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-01ae9b5526a5530b9)) | [ami-0b6d988e51817d6cb](https://us-east-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0b6d988e51817d6cb) ([launch](https://us-east-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0b6d988e51817d6cb)) | -| us-west-1 | [ami-07236d99bffc73676](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-07236d99bffc73676) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-07236d99bffc73676)) | [ami-05516c86a2533df33](https://us-west-1.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-05516c86a2533df33) ([launch](https://us-west-1.console.aws.amazon.com/ec2/home#launchAmi=ami-05516c86a2533df33)) | -| us-west-2 | [ami-0361c483837e42be5](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0361c483837e42be5) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0361c483837e42be5)) | [ami-0f9252184eaaf469b](https://us-west-2.console.aws.amazon.com/ec2/home#Images:visibility=public-images;imageId=ami-0f9252184eaaf469b) ([launch](https://us-west-2.console.aws.amazon.com/ec2/home#launchAmi=ami-0f9252184eaaf469b)) | - -

diff --git a/releases/README_alpine.md b/releases/README_alpine.md deleted file mode 120000 index 42061c0..0000000 --- a/releases/README_alpine.md +++ /dev/null @@ -1 +0,0 @@ -README.md \ No newline at end of file diff --git a/releases/alpine.yaml b/releases/alpine.yaml deleted file mode 100644 index d13acf5..0000000 --- a/releases/alpine.yaml +++ /dev/null @@ -1,311 +0,0 @@ -3.13.5: - v3_13-aarch64: - alpine-ami-3.13.5-aarch64-r1: - description: Alpine Linux 3.13.5 aarch64 r1 - https://alpinelinux.org/cloud - profile: alpine - profile_build: v3_13-aarch64 - version: '3.13' - release: 3.13.5 - arch: aarch64 - revision: r1 - creation_date: '2021-06-15T15:13:26.000Z' - end_of_life: '2022-11-01T00:00:00' - build_time: 1623798806 - artifacts: - af-south-1: ami-077c41d657f21a319 - eu-north-1: ami-0469d8b4b0f1b6493 - ap-south-1: ami-073046a717b1930dc - eu-west-3: ami-0b5cffef9ef83241c - eu-west-2: ami-07cd282c1d6887959 - eu-south-1: ami-0417a5f0b9249cb6e - eu-west-1: ami-0ff5ce856793c0471 - ap-northeast-3: ami-0df1727e6d714cc2d - ap-northeast-2: ami-070b973637320a52c - me-south-1: ami-00cd03fd11106a4cf - ap-northeast-1: ami-034682c4a51e88cf7 - sa-east-1: ami-0b92ae87d6e141bbb - ca-central-1: ami-0f40fb960a6bac29a - ap-east-1: ami-0650eebfb386ffb89 - ap-southeast-1: ami-03ac48af40b667111 - ap-southeast-2: ami-04d61dc48ced711e3 - eu-central-1: ami-0dcacb8c85ee2349e - us-east-1: ami-08500c947a8870478 - us-east-2: ami-0acde1f635f6811c4 - us-west-1: ami-09e1594112290a416 - us-west-2: ami-034dc333a09683077 - v3_13-x86_64: - alpine-ami-3.13.5-x86_64-r0: - description: Alpine Linux 3.13.5 x86_64 r0 - https://alpinelinux.org/cloud - profile: alpine - profile_build: v3_13-x86_64 - version: '3.13' - release: 3.13.5 - arch: x86_64 - revision: r0 - creation_date: '2021-04-15T01:03:30.000Z' - end_of_life: '2022-11-01T00:00:00' - build_time: 1618477410 - artifacts: - af-south-1: ami-0441b82fd3fb48433 - eu-north-1: ami-03cb5b21303291be4 - ap-south-1: ami-0c0073e10ee3a5b66 - eu-west-3: ami-0adda5d20f341ae82 - eu-west-2: ami-0360a9a8fec665753 - eu-south-1: ami-02bd65e399a33d2c0 - eu-west-1: ami-097ec49079a5d612f - ap-northeast-3: ami-0678e9272dbb276a1 - ap-northeast-2: ami-038fc3b2d886b83ce - me-south-1: ami-0cd56b96bf4e83dcf - ap-northeast-1: ami-02fb62943caac3c71 - sa-east-1: ami-08370ac3635a06147 - ca-central-1: ami-0a464816128999904 - ap-east-1: ami-0e2d8dfaf125a7631 - ap-southeast-1: ami-07c71c29e8cfef967 - ap-southeast-2: ami-039c2e2595e9da7fc - eu-central-1: ami-0d6ad9b3597da40c4 - us-east-1: ami-068216a0f0800db09 - us-east-2: ami-06c24203121c5baa9 - us-west-1: ami-03815baf7396cc308 - us-west-2: ami-0ccbd58d6e42a3f64 -3.12.7: - v3_12-aarch64: - alpine-ami-3.12.7-aarch64-r1: - description: Alpine Linux 3.12.7 aarch64 r1 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-aarch64 - version: '3.12' - release: 3.12.7 - arch: aarch64 - revision: r1 - creation_date: '2021-06-15T15:16:00.000Z' - end_of_life: '2022-05-01T00:00:00' - build_time: 1623798960 - artifacts: - af-south-1: ami-02a463c487f299306 - eu-north-1: ami-005856c2c0649fd53 - ap-south-1: ami-01044c4b5478c4d1d - eu-west-3: ami-0d53043aa280e8b70 - eu-west-2: ami-0fb6524693687cca0 - eu-south-1: ami-0a4b952da5d2e6d51 - eu-west-1: ami-0463f3ec0e6f3ae1c - ap-northeast-3: ami-0181e54576075b5cc - ap-northeast-2: ami-07b5a03e1bb389253 - me-south-1: ami-0a1d69b39aea74ece - ap-northeast-1: ami-035fb63f9b293417d - sa-east-1: ami-0274fe1f8294b34fb - ca-central-1: ami-042c2cb60c794554c - ap-east-1: ami-07ef9272fba7965e3 - ap-southeast-1: ami-01b96ea14b3a15a77 - ap-southeast-2: ami-06855d79571a6e4ac - eu-central-1: ami-00eda68b21e026a70 - us-east-1: ami-0f2f4e0001bf5b275 - us-east-2: ami-01dd480af3ec8e7b5 - us-west-1: ami-006f02a62ee4c57a0 - us-west-2: ami-04485971d90cee562 - v3_12-x86_64: - alpine-ami-3.12.7-x86_64-r0: - description: Alpine Linux 3.12.7 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_12-x86_64 - version: '3.12' - release: 3.12.7 - arch: x86_64 - revision: r0 - creation_date: '2021-04-15T00:51:54.000Z' - end_of_life: '2022-05-01T00:00:00' - build_time: 1618476714 - artifacts: - af-south-1: ami-0ef71998139e39742 - eu-north-1: ami-09447e487e10b7655 - ap-south-1: ami-0f8f786ca89d0968c - eu-west-3: ami-0700c55763af6a1bb - eu-west-2: ami-005a2f89daaf77547 - eu-south-1: ami-04d393060a61a1eca - eu-west-1: ami-095c3d5967fd9c885 - ap-northeast-3: ami-01ddf8610921c1f5b - ap-northeast-2: ami-080b50f812df717ea - me-south-1: ami-039b1ff0cfd4c9e1c - ap-northeast-1: ami-0b34d9cbb63106e61 - sa-east-1: ami-0d364d95ef0e3ed08 - ca-central-1: ami-094e7437e91419deb - ap-east-1: ami-0628f9a686336d658 - ap-southeast-1: ami-079d7c6b97cac3237 - ap-southeast-2: ami-0d2e1217ececc880d - eu-central-1: ami-09eec438ca839ca58 - us-east-1: ami-08a8e1cd5cfe6fc40 - us-east-2: ami-0f213093a04cde948 - us-west-1: ami-0a5fc9a6a5351641e - us-west-2: ami-06b1887a7bc6eb122 -edge: - edge-x86_64: - alpine-ami-edge-x86_64-20210807035653: - description: Alpine Linux edge x86_64 20210807035653 - https://alpinelinux.org/cloud - profile: alpine - profile_build: edge-x86_64 - version: edge - release: edge - arch: x86_64 - revision: '20210807035653' - creation_date: '2021-08-07T04:07:41.000Z' - end_of_life: '2021-08-08T03:56:53' - build_time: 1628338061 - artifacts: - af-south-1: ami-043fabf28ec27dd48 - eu-north-1: ami-013ec2fcd6a337f5c - ap-south-1: ami-04e3beb414e5c63a0 - eu-west-3: ami-0403f988d8f677db2 - eu-west-2: ami-06a1e1353977132a1 - eu-south-1: ami-04d0311c3a559280e - eu-west-1: ami-092803064e707b52d - ap-northeast-3: ami-09de309f09de8634d - ap-northeast-2: ami-04efc6ef9b126d1b7 - me-south-1: ami-0759c23186662c037 - ap-northeast-1: ami-03c77a5b6ef2ce5cf - sa-east-1: ami-03502f7175066565d - ca-central-1: ami-0ddc8f4f4adfb9432 - ap-east-1: ami-0cc5ca3f207d56fe4 - ap-southeast-1: ami-091c8e0712eb73cfc - ap-southeast-2: ami-0e0e696ef294e3c54 - eu-central-1: ami-0b8f1eb4317be682b - us-east-1: ami-0320caad46860385f - us-east-2: ami-0b6d988e51817d6cb - us-west-1: ami-05516c86a2533df33 - us-west-2: ami-0f9252184eaaf469b - edge-aarch64: - alpine-ami-edge-aarch64-20210807035653: - description: Alpine Linux edge aarch64 20210807035653 - https://alpinelinux.org/cloud - profile: alpine - profile_build: edge-aarch64 - version: edge - release: edge - arch: aarch64 - revision: '20210807035653' - creation_date: '2021-08-07T04:02:09.000Z' - end_of_life: '2021-08-08T03:56:53' - build_time: 1628337729 - artifacts: - af-south-1: ami-0d119db2dbae0d1f2 - eu-north-1: ami-09efda8acd6cd23a3 - ap-south-1: ami-02276ceadfba3d8dc - eu-west-3: ami-0b9e58d8fb5a5851d - eu-west-2: ami-0d5e165b15b45d294 - eu-south-1: ami-08b0d59e27d5834cd - eu-west-1: ami-083fce6ab0babc52b - ap-northeast-3: ami-06553907a3296d356 - ap-northeast-2: ami-05f6a1444b2dba1be - me-south-1: ami-0a6ce44e9cae12563 - ap-northeast-1: ami-03bb3e6b43c7e5b3a - sa-east-1: ami-0ed048bcd64ffdac7 - ca-central-1: ami-0e79a284afab67660 - ap-east-1: ami-06720fd442e84af52 - ap-southeast-1: ami-009e681f7123d7507 - ap-southeast-2: ami-0f609e1d8e752a7d5 - eu-central-1: ami-00d213f492389362f - us-east-1: ami-0e71191f5db7e9a53 - us-east-2: ami-01ae9b5526a5530b9 - us-west-1: ami-07236d99bffc73676 - us-west-2: ami-0361c483837e42be5 -3.11.11: - v3_11-x86_64: - alpine-ami-3.11.11-x86_64-r0: - description: Alpine Linux 3.11.11 x86_64 r0 - https://github.com/mcrute/alpine-ec2-ami - profile: alpine - profile_build: v3_11-x86_64 - version: '3.11' - release: 3.11.11 - arch: x86_64 - revision: r0 - creation_date: '2021-04-15T01:12:43.000Z' - end_of_life: '2021-11-01T00:00:00' - build_time: 1618477963 - artifacts: - af-south-1: ami-0a5bccfa2bc184bb1 - eu-north-1: ami-0a67df0ddb737bca0 - ap-south-1: ami-0a09ced4a0968561a - eu-west-3: ami-06d6b6f3eb35b4988 - eu-west-2: ami-0a68f325601d8968f - eu-south-1: ami-0b9e1df4e1ea3f09a - eu-west-1: ami-06318efc075e9c192 - ap-northeast-3: ami-048b8b812a37a6e9d - ap-northeast-2: ami-075d81ae6bd805c9a - me-south-1: ami-0fee76fd32b0acb09 - ap-northeast-1: ami-0ce72c30606d58e2a - sa-east-1: ami-0e3921332d634a1bc - ca-central-1: ami-02351d48ae19b5153 - ap-east-1: ami-057fe5fb6dbaeaabe - ap-southeast-1: ami-0c3268d224a7be79f - ap-southeast-2: ami-0fe81386105b2c320 - eu-central-1: ami-082d5ae92b013cf0c - us-east-1: ami-09a785c1dd12aa464 - us-east-2: ami-0f27d5f504d774c42 - us-west-1: ami-0e1759b0e8c3b8fde - us-west-2: ami-038d4cc13841ec79f -3.14.1: - v3_14-x86_64: - alpine-ami-3.14.1-x86_64-r0: - description: Alpine Linux 3.14.1 x86_64 r0 - https://alpinelinux.org/cloud - profile: alpine - profile_build: v3_14-x86_64 - version: '3.14' - release: 3.14.1 - arch: x86_64 - revision: r0 - creation_date: '2021-08-07T04:04:47.000Z' - end_of_life: '2023-05-01T00:00:00' - build_time: 1628337887 - artifacts: - af-south-1: ami-08aea7443b5d08f79 - eu-north-1: ami-0e2b6818c61b0b113 - ap-south-1: ami-012f6469429d4ad42 - eu-west-3: ami-031817718bbaf781d - eu-west-2: ami-0e4e3a358f49875dc - eu-south-1: ami-0e69ca71abc28babe - eu-west-1: ami-0274c314a1272d2fd - ap-northeast-3: ami-08b52d5efd9abef56 - ap-northeast-2: ami-0d7a7fdf22367713c - me-south-1: ami-0a665daaaf042257a - ap-northeast-1: ami-033c6bceffad8df75 - sa-east-1: ami-0101f8d6e37b57173 - ca-central-1: ami-0bd936dc3de6b791d - ap-east-1: ami-0d4ba085b9c1557b8 - ap-southeast-1: ami-01a542451033fd940 - ap-southeast-2: ami-014e86c5062e164af - eu-central-1: ami-0bb1a41a1c0eafc95 - us-east-1: ami-0f1919ed094505be3 - us-east-2: ami-01f0c5ccdeab2a3d8 - us-west-1: ami-0000605ad5571b4c0 - us-west-2: ami-05e856cad09314ed0 - v3_14-aarch64: - alpine-ami-3.14.1-aarch64-r0: - description: Alpine Linux 3.14.1 aarch64 r0 - https://alpinelinux.org/cloud - profile: alpine - profile_build: v3_14-aarch64 - version: '3.14' - release: 3.14.1 - arch: aarch64 - revision: r0 - creation_date: '2021-08-07T03:59:14.000Z' - end_of_life: '2023-05-01T00:00:00' - build_time: 1628337554 - artifacts: - af-south-1: ami-0bcf48f55b9949a84 - eu-north-1: ami-05f1271ab15bf4557 - ap-south-1: ami-07ed5174d6da65d84 - eu-west-3: ami-08af7eab2ea99f7e5 - eu-west-2: ami-0d0ae9eb51f79e338 - eu-south-1: ami-06fb368b1c23356ca - eu-west-1: ami-0887b1a806a73417a - ap-northeast-3: ami-0956b7bafd7a6720d - ap-northeast-2: ami-07667213840caca26 - me-south-1: ami-02b98efa2cd0b2ab0 - ap-northeast-1: ami-0b559d40e76da2119 - sa-east-1: ami-07f46bbd5674b79a6 - ca-central-1: ami-08bc6f39436e47c30 - ap-east-1: ami-092aa3a38d204b2b5 - ap-southeast-1: ami-0aa966cf6ca931b11 - ap-southeast-2: ami-069d767cedbd4d7a5 - eu-central-1: ami-06f364adb4a297706 - us-east-1: ami-03175ec34a7192e70 - us-east-2: ami-082d34382e0289102 - us-west-1: ami-0081057f803624455 - us-west-2: ami-03e685d5fddaf46e7 diff --git a/scripts/builder.py b/scripts/builder.py deleted file mode 100755 index f16885e..0000000 --- a/scripts/builder.py +++ /dev/null @@ -1,1366 +0,0 @@ -#!/usr/bin/env python3 - -# This bit has to stay at the very top of the script. It exists to ensure that -# running this script all by itself uses the python virtual environment with -# our dependencies installed. If will create that environment if it doesn't -# exist. -import os -import sys -import subprocess - -args = [os.path.join("build", "bin", "python3")] + sys.argv - -# Create the build root if it doesn't exist -if not os.path.exists("build"): - import venv - - print("Build environment does not exist, creating...", file=sys.stderr) - venv.create("build", with_pip=True) - subprocess.run(["build/bin/pip", "install", "-U", "pip", - "pyhocon", "boto3", "python-dateutil", "PyYAML"]) - - print("Re-executing with builder python...", file=sys.stderr) - os.execv(args[0], args) -else: - # If the build root python is not running this script re-execute it with - # that python instead to ensure all of our dependencies exist. - if os.path.join(os.getcwd(), args[0]) != sys.executable: - print("Re-executing with builder python...", file=sys.stderr) - os.execv(args[0], args) - -# Below here is the real script -import io -import os -import re -import sys -import glob -import json -import time -import shutil -import logging -import argparse -import textwrap -import subprocess -import urllib.error -import dateutil.parser - -from enum import Enum -from collections import defaultdict -from datetime import datetime, timedelta -from distutils.version import StrictVersion -from urllib.request import Request, urlopen - -import yaml -import boto3 -import pyhocon - - -# allows us to set values deep within an object that might not be fully defined -def dictfactory(): - return defaultdict(dictfactory) - -# undo dictfactory() objects to normal objects -def undictfactory(o): - if isinstance(o, defaultdict): - o = {k: undictfactory(v) for k, v in o.items()} - return o - -# This is an ugly hack. We occasionally need the region name but it's not -# attached to anything publicly exposed on the client objects. Hide this here. -def region_from_client(client): - return client._client_config.region_name - -# version sorting -def sortable_version(x): - v = x.split('_rc')[0] - return StrictVersion("0.0" if v == "edge" else v) - - -class EC2Architecture(Enum): - - I386 = "i386" - X86_64 = "x86_64" - ARM64 = "arm64" - - -class AMIState(Enum): - - PENDING = "pending" - AVAILABLE = "available" - INVALID = "invalid" - DEREGISTERED = "deregistered" - TRANSIENT = "transient" - FAILED = "failed" - ERROR = "error" - - -class EC2SnapshotState(Enum): - - PENDING = "pending" - COMPLETED = "completed" - ERROR = "error" - - -class TaggedAWSObject: - """Base class for AWS API models that support tagging - """ - - EDGE = StrictVersion("0.0") - - missing_known_tags = None - - _identity = lambda x: x - _known_tags = { - "Name": _identity, - "profile": _identity, - "revision": _identity, - "profile_build": _identity, - "source_ami": _identity, - "source_region": _identity, - "arch": lambda x: EC2Architecture(x), - "end_of_life": lambda x: datetime.fromisoformat(x), - "release": lambda v: EDGE if v == "edge" else StrictVersion(v), - "version": lambda v: EDGE if v == "edge" else StrictVersion(v), - } - - def __repr__(self): - attrs = [] - for k, v in self.__dict__.items(): - if isinstance(v, TaggedAWSObject): - attrs.append(f"{k}=" + object.__repr__(v)) - elif not k.startswith("_"): - attrs.append(f"{k}={v!r}") - attrs = ", ".join(attrs) - - return f"{self.__class__.__name__}({attrs})" - - __str__ = __repr__ - - @property - def aws_tags(self): - """Convert python tags to AWS API tags - - See AMI.aws_permissions for rationale. - """ - for key, values in self.tags.items(): - for value in values: - yield { "Key": key, "Value": value } - - @aws_tags.setter - def aws_tags(self, values): - """Convert AWS API tags to python tags - - See AMI.aws_permissions for rationale. - """ - if not getattr(self, "tags", None): - self.tags = {} - - tags = defaultdict(list) - - for tag in values: - tags[tag["Key"]].append(tag["Value"]) - - self.tags.update(tags) - self._transform_known_tags() - - # XXX(mcrute): The second paragraph might be considered a bug and worth - # fixing at some point. For now those are all read-only attributes though. - def _transform_known_tags(self): - """Convert well known tags into python attributes - - Some tags have special meanings for the model objects that they're - attached to. This copies those tags, transforms them, then sets them in - the model attributes. - - It doesn't touch the tag itself so if that - attribute needs updated and re-saved the tag must be updated in - addition to the model. - """ - self.missing_known_tags = [] - - for k, tf in self._known_tags.items(): - v = self.tags.get(k, []) - if not v: - self.missing_known_tags.append(k) - continue - - if len(v) > 1: - raise Exception(f"multiple instances of tag {k}") - - setattr(self, k, v[0]) - - -class AMI(TaggedAWSObject): - - @property - def aws_permissions(self): - """Convert python permissions to AWS API permissions - - The permissions model for the API makes more sense for a web service - but is overly verbose for working with in Python. This and the setter - allow transforming to/from the API syntax. The python code should - consume the allowed_groups and allowed_users lists directly. - """ - perms = [] - for g in self.allowed_groups: - perms.append({"Group": g}) - - for i in self.allowed_users: - perms.append({"UserId": i}) - - return perms - - @aws_permissions.setter - def aws_permissions(self, perms): - """Convert AWS API permissions to python permissions - """ - for perm in perms: - group = perm.get("Group") - if group: - self.allowed_groups.append(group) - - user = perm.get("UserId") - if user: - self.allowed_users.append(user) - - @classmethod - def from_aws_model(cls, ob, region): - self = cls() - - self.linked_snapshot = None - self.allowed_groups = [] - self.allowed_users = [] - self.region = region - self.architecture = EC2Architecture(ob["Architecture"]) - self.creation_date = ob["CreationDate"] - self.description = ob.get("Description", None) - self.image_id = ob["ImageId"] - self.name = ob.get("Name") - self.owner_id = int(ob["OwnerId"]) - self.public = ob["Public"] - self.state = AMIState(ob["State"]) - self.virtualization_type = ob["VirtualizationType"] - self.state_reason = ob.get("StateReason", {}).get("Message", None) - self.aws_tags = ob.get("Tags", []) - - # XXX(mcrute): Assumes we only ever have one device mapping, which is - # valid for Alpine AMIs but not a good general assumption. - # - # This should always resolve for AVAILABLE images but any part of the - # data structure may not yet exist for images that are still in the - # process of copying. - if ob.get("BlockDeviceMappings"): - self.snapshot_id = \ - ob["BlockDeviceMappings"][0]["Ebs"].get("SnapshotId") - - return self - - -class EC2Snapshot(TaggedAWSObject): - - @classmethod - def from_aws_model(cls, ob, region): - self = cls() - - self.linked_ami = None - self.region = region - self.snapshot_id = ob["SnapshotId"] - self.description = ob.get("Description", None) - self.owner_id = int(ob["OwnerId"]) - self.progress = int(ob["Progress"].rstrip("%")) / 100 - self.start_time = ob["StartTime"] - self.state = EC2SnapshotState(ob["State"]) - self.volume_size = ob["VolumeSize"] - self.aws_tags = ob.get("Tags", []) - - return self - - -class ColoredFormatter(logging.Formatter): - """Log formatter that colors output based on level - """ - - _colors = { - "red": "31", - "green": "32", - "yellow": "33", - "blue": "34", - "magenta": "35", - "cyan": "36", - "white": "37", - } - - def _color_wrap(self, text, color, bold=False): - code = self._colors[color] - if bold: - code = "1;{}".format(code) - return "\033[{}m{}\033[0m".format(code, text) - - def format(self, record): - msg = super().format(record) - # Levels: CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET - if record.levelno in {logging.ERROR, logging.CRITICAL}: - return self._color_wrap(msg, "red") - elif record.levelno == logging.WARNING: - return self._color_wrap(msg, "yellow") - else: - return self._color_wrap(msg, "green") - - -class IdentityBrokerClient: - """Client for identity broker - - Export IDENTITY_BROKER_ENDPOINT to override the default broker endpoint. - Export IDENTITY_BROKER_API_KEY to specify an API key for the broker. - - See README_BROKER.md for more information and a spec. - """ - - _DEFAULT_ENDPOINT = "https://aws-access.crute.us/api/account" - _DEFAULT_ACCOUNT = "alpine-amis-user" - - def __init__(self, endpoint=None, key=None, account=None): - self.endpoint = endpoint or self._DEFAULT_ENDPOINT - self.account = account or self._DEFAULT_ACCOUNT - self.key = key - self._logger = logging.getLogger() - - override_endpoint = os.environ.get("IDENTITY_BROKER_ENDPOINT") - if override_endpoint: - self.endpoint = override_endpoint - - if not self.key: - self.key = os.environ.get("IDENTITY_BROKER_API_KEY") - - if not self.key: - raise Exception("No identity broker key found") - - def _get(self, path): - while True: # to handle rate limits - try: - res = urlopen(Request(path, headers={"X-API-Key": self.key})) - except urllib.error.HTTPError as ex: - if ex.headers.get("Location") == "/logout": - raise Exception("Identity broker token is expired") - - if ex.status == 429: - self._logger.warning( - "Rate-limited by identity broker, sleeping 30 seconds") - time.sleep(30) - continue - - raise ex - - if res.status not in {200, 429}: - raise Exception(res.reason) - - return json.load(res) - - def get_credentials_url(self): - for account in self._get(self.endpoint): - if account["short_name"] == self.account: - return account["credentials_url"] - - raise Exception("No account found") - - def get_regions(self): - out = {} - - for region in self._get(self.get_credentials_url()): - if region["enabled"]: - out[region["name"]] = region["credentials_url"] - - return out - - def get_credentials(self, region): - return self._get(self.get_regions()[region]) - - def _boto3_session_from_creds(self, creds, region): - return boto3.session.Session( - aws_access_key_id=creds["access_key"], - aws_secret_access_key=creds["secret_key"], - aws_session_token=creds["session_token"], - region_name=region) - - def boto3_session_for_region(self, region): - return self._boto3_session_from_creds( - self.get_credentials(region), region) - - def iter_regions(self): - for region, cred_url in self.get_regions().items(): - yield self._boto3_session_from_creds(self._get(cred_url), region) - - -class ConfigBuilder: - - now = datetime.utcnow() - tomorrow = now + timedelta(days=1) - - @staticmethod - def unquote(x): - return x.strip('"') - - @staticmethod - def force_iso_date(input): - return datetime.fromisoformat(input).isoformat(timespec="seconds") - - @classmethod - def resolve_release(cls, input, cfg): - if input: - # release is explicitly defined, run with it - return input - if cfg['version'] == 'edge': - return 'edge' - # hack to determine release value from version's alpine-base APK - pkgs_url = f"https://dl-cdn.alpinelinux.org/alpine/v{cfg['version']}/main/{cfg['arch']}/" - try: - res = urlopen(pkgs_url) - except urllib.error.HTTPError as ex: - print(f"Unable to urlopen {pkgs_url} - {ex}", file=sys.stderr) - exit(1) - - line = res.readline().decode('utf-8') - while line: - if line.startswith('
1: - raise Exception(f"Too many images for query {tags!r}") - elif len(images) == 0: - return None - else: - return images[0] - -def get_all_images(client): - return get_images_with_tags(client) - - -class ReleaseAMIs: - """Copy one or more AMIs to other regions and/or set AMI permissions. - - By default, source AMI permissions are applied to their copies, unless - --public, --private, or --allow-account options are specified. - - If the source AMI's permissions are different than the options provided, - its permissions will be updated to match. - """ - command_name = "release" - - @staticmethod - def add_args(parser): - parser.add_argument("--source-region", default="us-west-2", - metavar="REGION", help="region of source AMI(s)") - rgroup = parser.add_mutually_exclusive_group(required=True) - rgroup.add_argument("--use-broker", action="store_true", - help="identity broker provides destination regions and credentials") - rgroup.add_argument("--region", "-r", action="append", dest="regions", - metavar="REGION", help="destination region (multiple OK)") - pgroup = parser.add_mutually_exclusive_group() - pgroup.add_argument("--public", action="store_true", default=None, - help="make source and copied AMIs public") - pgroup.add_argument("--private", dest="public", action="store_false", - help="make source and copied AMIs private") - pgroup.add_argument("--allow-account", dest="allow_accounts", - action="append", metavar="ID", help="make source and copied AMIs " - "accessible by AWS account id (multiple OK)") - parser.add_argument("amis", metavar="AMI", nargs="+", - help="AMI id(s) to copy") - - def get_source_region_client(self, use_broker, source_region): - if use_broker: - return IdentityBrokerClient().boto3_session_for_region( - source_region).client("ec2") - else: - return boto3.session.Session(region_name=source_region).client( - "ec2") - - def copy_image(self, from_client, to_client, image_id): - source = get_image(from_client, image_id) - - res = to_client.copy_image( - Name=source.name, Description=source.description, - SourceImageId=source.image_id, SourceRegion=source.region) - - tags = [ - { "Key": "source_ami", "Value": source.image_id, }, - { "Key": "source_region", "Value": source.region, } - ] - tags.extend(source.aws_tags) - - to_client.create_tags(Resources=[res["ImageId"]], Tags=tags) - - return get_image(to_client, res["ImageId"]) - - def has_incorrect_perms(self, image, perms): - if (set(image.allowed_groups) != set(perms['groups']) - or set(image.allowed_users) != set(perms['users'])): - return True - - def update_image_permissions(self, client, image): - client.reset_image_attribute( - Attribute="launchPermission", ImageId=image.image_id) - client.modify_image_attribute( - Attribute="launchPermission", ImageId=image.image_id, - LaunchPermission={"Add": image.aws_permissions}) - - def run(self, args, root, log): - source_perms = {} - pending_copy = [] - pending_perms = [] - source_region = args.source_region - - log.info(f"Source region {source_region}") - source_client = self.get_source_region_client( - args.use_broker, source_region) - - # resolve source ami perms, queue for fixing if necessary - for ami in args.amis: - image = get_image(source_client, ami) - - if args.public is True: - source_perms[ami] = { 'groups': ['all'], 'users': [] } - elif args.public is False: - source_perms[ami] = { 'groups': [], 'users': [] } - elif args.allow_accounts: - source_perms[ami] = { 'groups': [], 'users': args.allow_accounts } - else: - log.warning(f"Will apply {source_region} {ami} permissions to its copies") - source_perms[ami] = { - 'groups': image.allowed_groups, - 'users': image.allowed_users - } - - if self.has_incorrect_perms(image, source_perms[ami]): - log.warning(f"Will update source {source_region} {ami} permissions") - pending_perms.append((source_client, ami, source_perms[ami])) - - # Copy image to regions where it's missing, queue images that need - # permission fixes - log.info('') - for client in iter_regions(args.use_broker, args.regions): - region_name = region_from_client(client) # For logging - - # Don't bother copying to source region - if region_name == args.source_region: - continue - - log.info(f"Destination region {region_name}...") - for ami in args.amis: - src_log = f"* source {ami}" - image = get_image_with_tags(client, - source_ami=ami, source_region=args.source_region) - if not image: - log.info(f"{src_log} - copying to {region_name}") - ami_copy = self.copy_image(source_client, client, ami) - pending_copy.append( - (client, ami_copy.image_id, source_perms[ami])) - elif self.has_incorrect_perms(image, source_perms[ami]): - log.info(f"{src_log} - will update {image.image_id} perms") - pending_perms.append( - (client, image.image_id, source_perms[ami])) - else: - log.info(f"{src_log} - verified {image.image_id}") - log.info('') - - if pending_copy: - # seems to take at least 3m - pending_copy.append(('sleep', 180, '')) - - # Wait for images to copy - while pending_copy: - client, id, perms = pending_copy.pop(0) # emulate a FIFO queue - if client == 'sleep': - if not pending_copy: - continue - log.info(f"Sleeping {id}s...") - time.sleep(id) - # recheck every 30s - pending_copy.append(('sleep', 30, '')) - continue - - region_name = region_from_client(client) # For logging - image = get_image(client, id) - if image.state != AMIState.AVAILABLE: - log.info(f"- copying: {id} ({region_name})") - pending_copy.append((client, id, perms)) - else: - done_log = f"+ completed: {id} ({region_name})" - if self.has_incorrect_perms(image, perms): - log.info(f"{done_log} - will update perms") - pending_perms.append((client, id, perms)) - else: - log.info(f"{done_log} - verified perms") - - # Update all permissions - for client, id, perms in pending_perms: - region_name = region_from_client(client) # For logging - - log.info(f"% updating perms: {id} ({region_name})") - image = get_image(client, id) - image.allowed_groups = perms['groups'] - image.allowed_users = perms['users'] - self.update_image_permissions(client, image) - - if pending_perms: - log.info('') - - log.info('Release Completed') - - -class Releases: - - RELEASE_FIELDS = [ - 'description', 'profile', 'profile_build', 'version', 'release', - 'arch', 'revision', 'creation_date', 'end_of_life' - ] - - def __init__(self, profile=None, use_broker=None, regions=None): - self.profile = profile - self.tags = { 'profile': profile } - self.use_broker = use_broker - self.regions = regions - self.clients = {} - self.reset_images() - self.reset_releases() - - def reset_images(self): - self.images = defaultdict(list) - - def reset_releases(self): - self.releases = dictfactory() - - # TODO: separate Clients class? - def iter_clients(self): - if not self.clients: - for client in iter_regions(self.use_broker, self.regions): - region = region_from_client(client) - self.clients[region] = client - yield (region, client) - else: - for region, client in self.clients.items(): - yield (region, client) - - # when we're just interested in the profile's images - def load_profile_images(self, log=None): - for region, client in self.iter_clients(): - if log: log.info(f"Loading '{self.profile}' profile images from {region}...") - self.images[region] = get_images_with_tags(client, **self.tags) - - # not belonging to any profile - def load_unknown_images(self, log=None): - for region, client in self.iter_clients(): - if log: log.info(f"Loading unknown images from {region}...") - for image in get_all_images(client): - if 'profile' not in image.tags: - self.images[region].append(image) - - # build profile releases object based on loaded self.images - def build_releases(self, log=None, trim=None): - now = datetime.utcnow() - versions = dictfactory() - - for region, amis in self.images.items(): - if log: log.info(f"{region}") - for ami in amis: - eol = datetime.fromisoformat(ami.end_of_life) - # if we're trimming, we're not interested in EOL images - if trim and eol < now: - continue - - version = ami.version - release = ami.release - build = ami.profile_build - name = ami.name - id = ami.image_id - build_time = int(dateutil.parser.parse(ami.creation_date).strftime('%s')) - - if log: log.info(f" * {ami.image_id} {ami.name}") - version_obj = versions[version][release][build][name] - - for field in self.RELEASE_FIELDS: - if field not in version_obj: - version_obj[field] = getattr(ami, field) - - # ensure earliest build_time is used - if ('build_time' not in version_obj or - build_time < version_obj['build_time']): - version_obj['build_time'] = build_time - version_obj['creation_date'] = ami.creation_date - - version_obj['artifacts'][region] = id - - for version, releases in versions.items(): - for release, builds in sorted(releases.items(), reverse=True, - key=lambda x: sortable_version(x[0])): - for build, revisions in builds.items(): - for revision, info in sorted(revisions.items(), reverse=True, - key=lambda x: x[1]['build_time']): - self.releases[release][build][revision] = info - # if we are trimming, we want only the most recent revisions - if trim: break - # if we are trimming releases, we want only the most recent release - if trim == 'release': break - - -class ReleasesYAML: - """Update releases/.yaml with profile's currently existing AMIs - """ - command_name = "release-yaml" - - @staticmethod - def add_args(parser): - TRIM_HELP=""" - revision = keep last x.y.z-r# of non-EOL releases, - release = keep last x.y.# of non-EOL versions - """ - - rgroup = parser.add_mutually_exclusive_group(required=True) - rgroup.add_argument("--use-broker", action="store_true", - help="identity broker provides destination regions and credentials") - rgroup.add_argument("--region", "-r", action="append", dest="regions", - metavar="REGION", help="destination region (multiple OK)") - parser.add_argument("--trim", "-t", - choices=['revision','release'], help=TRIM_HELP) - parser.add_argument("profile", metavar="PROFILE", help="profile name") - - def run(self, args, root, log): - release_dir = os.path.join(root, 'releases') - if not os.path.exists(release_dir): - os.makedirs(release_dir) - release_yaml = os.path.join(release_dir, f"{args.profile}.yaml") - - r = Releases( - profile = args.profile, - use_broker = args.use_broker, - regions = args.regions) - r.load_profile_images(log) - r.build_releases(trim=args.trim) - - log.info(f"Writing new {release_yaml}") - with open(release_yaml, 'w') as data: - yaml.dump(undictfactory(r.releases), data, sort_keys=False) - - -class ReleasesReadme: - """Build releases/README_.md from releases/.yaml - """ - command_name = "release-readme" - - SECTION_TPL = textwrap.dedent(""" - ### Alpine Linux {release} ({date}) -
click to show/hide

- - {rows} - -

- """) - - AMI_TPL = ( - " [{id}](https://{r}.console.aws.amazon.com/ec2/home" - "#Images:visibility=public-images;imageId={id}) " - "([launch](https://{r}.console.aws.amazon.com/ec2/home" - "#launchAmi={id})) |" - ) - - @staticmethod - def add_args(parser): - parser.add_argument("profile", metavar="PROFILE", help="profile name") - - @staticmethod - def extract_ver(x): - return sortable_version(x['release']) - - def resolve_sections(self, release_data, log): - sects = dictfactory() - for release, builds in sorted(release_data.items(), reverse=True): - version = '.'.join(release.split('.')[0:2]) - if version in sects: - continue - for build, revisions in builds.items(): - ver = sects[version] - ver['release'] = release - name, info = sorted( - revisions.items(), - key=lambda x: x[1]['build_time'], - reverse=True)[0] - if name in ver['builds']: - log.warning( - f"Duplicate AMI '{name}' in builds " - f"'{info['profile_build']} and " - f"'{ver['builds'][name]['build']}") - ver['builds'][name] = { - 'build': info['profile_build'], - 'built': int(info['build_time']), - 'amis': info['artifacts'] - } - self.sections = sorted( - undictfactory(sects).values(), - key=self.extract_ver, - reverse=True) - - def get_ami_markdown(self): - ami_list = "## AMIs\n" - - for section in self.sections: - built = 0 - regions = [] - rows = ["| Region |", "| ------ |"] - - for name, info in sorted(section['builds'].items()): - rows[0] += f" {name} |" - rows[1] += " --- |" - regions = set(regions) | set(info['amis'].keys()) - built = max(built, info['built']) - - for region in sorted(regions): - row = f"| {region} |" - for name, info in sorted(section['builds'].items()): - amis = info['amis'] - if region in amis: - row += self.AMI_TPL.format(r=region, id=amis[region]) - else: - row += ' |' - rows.append(row) - - ami_list += self.SECTION_TPL.format( - release=section['release'].capitalize(), - date=datetime.utcfromtimestamp(built).date(), - rows="\n".join(rows)) - - return ami_list - - def run(self, args, root, log): - profile = args.profile - release_dir = os.path.join(root, "releases") - profile_file = os.path.join(release_dir, f"{profile}.yaml") - with open(profile_file, "r") as data: - self.resolve_sections(yaml.safe_load(data), log) - - ami_markdown = self.get_ami_markdown() - - readme = "" - readme_md = os.path.join(release_dir, f"README_{profile}.md") - action = "Updated" - if os.path.exists(readme_md): - with open(readme_md, "r") as file: - readme = file.read() - else: - action = "Created" - - re_images = re.compile(r"## AMIs.*\Z", flags=re.DOTALL) - if re_images.search(readme): - readme = re_images.sub(ami_markdown, readme) - else: - log.warning("appending") - readme += "\n" + ami_markdown - - with open(readme_md, "w") as file: - file.write(readme) - - log.info(f"{action} {readme_md}") - - -class PruneAMIs: - """Prune Released AMIs - """ - command_name = "prune" - - @staticmethod - def add_args(parser): - LEVEL_HELP = """ - revision = x.y.z-r#, - release = x.y.#, - end-of-life = EOL versions (#.#), - UNKNOWN = AMIs with no profile tag - """ - - parser.add_argument("level", - choices=["revision", "release", "end-of-life", "UNKNOWN"], - help=LEVEL_HELP) - rgroup = parser.add_mutually_exclusive_group(required=True) - rgroup.add_argument("--use-broker", action="store_true", - help="use identity broker to obtain per-region credentials") - rgroup.add_argument("--region", "-r", metavar='REGION', dest='regions', - action="append", help="regions to prune, may be specified multiple times") - parser.add_argument("profile", metavar='PROFILE', - help="profile to prune") - parser.add_argument("builds", metavar='BUILD', - nargs="*", help="build(s) within profile to prune") - agroup = parser.add_mutually_exclusive_group() - agroup.add_argument( - '--keep', metavar='NUM', type=int, default=0, - help='keep NUM most-recent additional otherwise-pruneable per LEVEL') - agroup.add_argument('--defer-eol', metavar='DAYS', type=int, default=0, - help='defer end-of-life pruning for additional days') - parser.add_argument( - '--no-pretend', action='store_true', help='actually prune images') - - @staticmethod - def check_args(args): - if args.level != 'end-of-life' and args.defer_eol != 0: - return ["--defer-eol may only be used with 'end-of-life' pruning."] - if args.keep < 0: - return ["Only non-negative integers are valid for --keep."] - - def __init__(self): - self.pruneable = dictfactory() - - def find_pruneable(self, r, args, log): - level = args.level - builds = args.builds - keep = args.keep - defer_eol = args.defer_eol - - now = datetime.utcnow() - timedelta(days=args.defer_eol) - - # build releases from profile images - r.load_profile_images(log) - r.build_releases() - - # scan for pruning criteria - criteria = dictfactory() - for release, rdata in r.releases.items(): - for build, bdata in rdata.items(): - if builds and build not in builds: - continue - for ami_name, info in bdata.items(): - version = info['version'] - built = info['build_time'] - eol = datetime.fromisoformat(info['end_of_life']) - # default: level == 'release' - basis = version - if level == 'revision': - basis = release - elif level == 'end-of-life': - # not enough in common with revision/release - if build not in criteria[version]: - criteria[version][build] = [now] - if eol < now and eol not in criteria[version][build]: - criteria[version][build].append(eol) - criteria[version][build].sort(reverse=True) - continue - # revsion/release have enough commonality - if build not in criteria[basis]: - criteria[basis][build] = [built] - elif built not in criteria[basis][build]: - criteria[basis][build].append(built) - criteria[basis][build].sort(reverse=True) - - # scan again to determine what doesn't make the cut - for release, rdata in r.releases.items(): - for build, bdata in rdata.items(): - if builds and build not in builds: - continue - for ami_name, info in bdata.items(): - version = info['version'] - built = info['build_time'] - eol = datetime.fromisoformat(info['end_of_life']) - # default: level == 'release' - basis = version - value = built - if level == 'revision': - basis = release - elif level == 'end-of-life': - value = eol - c = criteria[basis][build] - if keep < len(c) and value < c[keep]: - for region, ami in info['artifacts'].items(): - self.pruneable[region][ami] = { - 'name': ami_name, - } - - # populate AMI creation_date and snapshot_id from Release().images - for region, images in r.images.items(): - for image in images: - if image.image_id in self.pruneable[region]: - p = self.pruneable[region][image.image_id] - p['name'] = image.name - p['creation_date'] = dateutil.parser.parse( - image.creation_date).strftime('%Y-%m-%d') - p['snapshot_id'] = image.snapshot_id - - def all_unknown_pruneable(self, r, log): - r.load_unknown_images(log) - for region, images in r.images.items(): - for image in images: - self.pruneable[region][image.image_id] = { - 'name': image.name, - 'creation_date': dateutil.parser.parse( - image.creation_date).strftime('%Y-%m-%d'), - 'snapshot_id': image.snapshot_id - } - - def run(self, args, root, log): - # instantiate Releases object - r = Releases( - profile=args.profile, - use_broker=args.use_broker, - regions=args.regions) - - if args.level == 'UNKNOWN': - self.all_unknown_pruneable(r, log) - else: - self.find_pruneable(r, args, log) - - for region, amis in sorted(self.pruneable.items()): - r_str = f"{args.level} AMIs in {region}" - if not amis: - log.info(f"No pruneable {r_str}.") - continue - if args.no_pretend: - log.error(f"REMOVING {r_str}:") - else: - log.warning(f"Removable {r_str}:") - for ami, info in sorted(amis.items(), key=lambda x: x[1]['creation_date']): - a_str = f" * {ami} ({info['creation_date']}) {info['name']}" - if args.no_pretend: - log.warning(a_str) - r.clients[region].deregister_image(ImageId=ami) - r.clients[region].delete_snapshot(SnapshotId=info['snapshot_id']) - else: - log.info(a_str) - - -def find_repo_root(): - """Find the root of the repo, which contains a .git folder - """ - path = os.getcwd() - - while ".git" not in set(os.listdir(path)) and path != "/": - path = os.path.dirname(path) - - if path == "/": - raise Exception("No repo found, stopping at /") - - return path - - -def main(): - """An introspective main method - - Just some silly metaprogramming to make commands really easy to write and - to avoid needing to hand register them. Commands have a specific interface, - per below, but should be really easy to create and will be auto discovered. - - Commands are objects that have the following attributes: - - __doc__ (python docstring) - used as help text in the CLI - - command_name (string) - name of the command as invoked by the cli - - add_args(parser) (class or static method) - passed an argparse subparser at setup time that will ultimately - handle the arguments for the command at runtime. Should add any - configuration necessary for the command to use later. Must not - rely on object state as it is not invoked with an instance of the - object. - - check_args(self, args) (class method, optional) - passed the set of arguments that were parsed before the command was - invoked. This function should return a list of errors or None. - Non-empty lists will cause the command to not be executed and help - being printed. - - run(self, args, root, log) (instance method) - passed the arguments object as parsed by argparse as well as a - string indicating the root of the repository (the folder containing - the .git folder) and an instance of a stanard libary logger for - output. Should throw exceptions on error and return when completed. - Should *not* execute sys.exit - """ - dispatch = {} - - parser = argparse.ArgumentParser() - subs = parser.add_subparsers(dest="command_name", required=True) - - # Configure logger - logger = logging.getLogger() - handler = logging.StreamHandler() - handler.setFormatter(ColoredFormatter(fmt="%(message)s")) - logger.addHandler(handler) - logger.setLevel(logging.INFO) - - for command in sys.modules[__name__].__dict__.values(): - if not hasattr(command, "command_name"): - continue - - dispatch[command.command_name] = command() - - doc = getattr(command, "__doc__", "") - subparser = subs.add_parser( - command.command_name, help=doc, description=doc) - - add_args = getattr(command, "add_args", None) - if add_args: - command.add_args(subparser) - - args = parser.parse_args() - - command = dispatch[args.command_name] - errors = getattr(command, "check_args", lambda x: [])(args) - if errors: - logger.error("\n".join(errors)) - # Ugly hack, gets the help for the subcommand, no public API for this - parser._actions[1]._name_parser_map[args.command_name].print_help() - else: - command.run(args, find_repo_root(), logger) - - -if __name__ == "__main__": - main() diff --git a/scripts/cleanup b/scripts/cleanup new file mode 100644 index 0000000..2c97cba --- /dev/null +++ b/scripts/cleanup @@ -0,0 +1,42 @@ +#!/bin/sh -eu +# vim: ts=4 et: + +[ -z "$DEBUG" ] || set +x + +export \ + TARGET=/mnt + + +die() { + printf '\033[1;7;31m FATAL: %s \033[0m\n' "$@" >&2 # bold reversed red + exit 1 +} +einfo() { + printf '\n\033[1;7;36m> %s <\033[0m\n' "$@" >&2 # bold reversed cyan +} + +cleanup() { + # Sweep cruft out of the image that doesn't need to ship or will be + # re-generated when the image boots + rm -f \ + "$TARGET/var/cache/apk/"* \ + "$TARGET/etc/resolv.conf" \ + "$TARGET/root/.ash_history" \ + "$TARGET/etc/"*- + + # unmount extra EFI mount + if [ "$FIRMWARE" = uefi ]; then + umount "$TARGET/boot/efi" + fi + + umount \ + "$TARGET/dev" \ + "$TARGET/proc" \ + "$TARGET/sys" + + umount "$TARGET" +} + +einfo "Cleaning up and unmounting image volume..." +cleanup +einfo "Done!" \ No newline at end of file diff --git a/scripts/setup b/scripts/setup new file mode 100755 index 0000000..15e1d2f --- /dev/null +++ b/scripts/setup @@ -0,0 +1,222 @@ +#!/bin/sh -eu +# vim: ts=4 et: + +[ -z "$DEBUG" -o "$DEBUG" = 0 ] || set -x + +export \ + DEVICE=/dev/vda \ + TARGET=/mnt \ + SETUP=/tmp/setup.d + + +die() { + printf '\033[1;7;31m FATAL: %s \033[0m\n' "$@" >&2 # bold reversed red + exit 1 +} +einfo() { + printf '\n\033[1;7;36m> %s <\033[0m\n' "$@" >&2 # bold reversed cyan +} + +# set up the builder's environment +setup_builder() { + einfo "Setting up Builder Instance" + setup-apkrepos -1 # main repo via dl-cdn + # ODO? also uncomment community repo? + apk --no-cache add \ + e2fsprogs \ + dosfstools \ + gettext \ + lsblk \ + parted +} + +make_filesystem() { + einfo "Making the Filesystem" + root_dev=$DEVICE + + # make sure we're using a blank block device + lsblk -P --fs "$DEVICE" >/dev/null 2>&1 || \ + die "'$DEVICE' is not a valid block device" + if lsblk -P --fs "$DEVICE" | grep -vq 'FSTYPE=""'; then + die "Block device '$DEVICE' is not blank" + fi + + if [ "$FIRMWARE" = uefi ]; then + # EFI partition isn't optimally aligned, but is rarely used after boot + parted "$DEVICE" -- \ + mklabel gpt \ + mkpart EFI fat32 512KiB 1MiB \ + mkpart / ext4 1MiB 100% \ + set 1 esp on \ + unit MiB print + + root_dev="${DEVICE}2" + /usr/sbin/mkfs.fat -n EFI "${DEVICE}1" + fi + + mkfs.ext4 -O ^64bit -L / "$root_dev" + mkdir -p "$TARGET" + mount -t ext4 "$root_dev" "$TARGET" + + if [ "$FIRMWARE" = uefi ]; then + mkdir -p "$TARGET/boot/efi" + mount -t vfat "${DEVICE}1" "$TARGET/boot/efi" + fi +} + +install_base() { + einfo "Installing Alpine Base" + mkdir -p "$TARGET/etc/apk" + echo "$REPOS" > "$TARGET/etc/apk/repositories" + cp -a /etc/apk/keys "$TARGET/etc/apk" + apk --root "$TARGET" --initdb --no-cache add $PACKAGES_ADD + [ -z "$PACKAGES_NOSCRIPTS" ] || \ + apk --root "$TARGET" --no-cache --no-scripts add $PACKAGES_NOSCRIPTS + [ -z "$PACKAGES_DEL" ] || \ + apk --root "$TARGET" --no-cache del $PACKAGES_DEL +} + +setup_chroot() { + mount -t proc none "$TARGET/proc" + mount --bind /dev "$TARGET/dev" + mount --bind /sys "$TARGET/sys" + + # Needed for bootstrap, will be removed in the cleanup stage. + install -Dm644 /etc/resolv.conf "$TARGET/etc/resolv.conf" +} + +install_bootloader() { + einfo "Installing Bootloader" + + # create initfs + sed -Ei "s/^features=\"([^\"]+)\"/features=\"\1 $INITFS_FEATURES\"/" \ + "$TARGET/etc/mkinitfs/mkinitfs.conf" + # shellcheck disable=SC2046 + chroot "$TARGET" /sbin/mkinitfs $(basename $(find "$TARGET/lib/modules/"* -maxdepth 0)) + + if [ "$FIRMWARE" = uefi ]; then + install_grub_efi + else + install_extlinux + fi +} + +install_extlinux() { + # Use disk labels instead of UUID or devices paths so that this works across + # instance familes. UUID works for many instances but breaks on the NVME + # ones because EBS volumes are hidden behind NVME devices. + # + # Shorten timeout (1/10s), eliminating delays for instance launches. + # + # ttyS0 is for EC2 Console "Get system log" and "EC2 Serial Console" + # features, whereas tty0 is for "Get Instance screenshot" feature. Enabling + # the port early in extlinux gives the most complete output in the log. + # + # TODO: review for other clouds -- this may need to be cloud-specific. + sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ + -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"$KERNEL_OPTIONS\"|" \ + -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ + -e "s|^[# ]*(modules)=.*|\1=$KERNEL_MODULES|" \ + -e "s|^[# ]*(default)=.*|\1=virt|" \ + -e "s|^[# ]*(timeout)=.*|\1=1|" \ + "$TARGET/etc/update-extlinux.conf" + + chroot "$TARGET" /sbin/extlinux --install /boot + # TODO: is this really necessary? can we set all this stuff during --install? + chroot "$TARGET" /sbin/update-extlinux --warn-only +} + +install_grub_efi() { + [ -d "/sys/firmware/efi" ] || die "/sys/firmware/efi does not exist" + + case "$ARCH" in + x86_64) grub_target=x86_64-efi ; fwa=x64 ;; + aarch64) grub_target=arm64-efi ; fwa=aa64 ;; + *) die "ARCH=$ARCH is currently unsupported" ;; + esac + + # disable nvram so grub doesn't call efibootmgr + chroot "$TARGET" /usr/sbin/grub-install --target="$grub_target" --efi-directory=/boot/efi \ + --bootloader-id=alpine --boot-directory=/boot --no-nvram + + # fallback mode + install -D "$TARGET/boot/efi/EFI/alpine/grub$fwa.efi" "$TARGET/boot/efi/EFI/boot/boot$fwa.efi" + + # install default grub config + envsubst < "$SETUP/grub.template" > "$SETUP/grub" + install -o root -g root -Dm644 -t "$TARGET/etc/default" \ + "$SETUP/grub" + + # generate/install new config + chroot "$TARGET" grub-mkconfig -o /boot/grub/grub.cfg +} + +configure_system() { + einfo "Configuring System" + + # setup fstab + install -o root -g root -Dm644 -t "$TARGET/etc" \ + "$SETUP/fstab" + # if we're using an EFI bootloader, add extra line for EFI partition + if [ "$FIRMWARE" = uefi ]; then + cat "$SETUP/fstab.grub-efi" >> "$TARGET/etc/fstab" + fi + + # Disable getty for physical ttys, enable getty for serial ttyS0. + sed -Ei -e '/^tty[0-9]/s/^/#/' -e '/^#ttyS0:/s/^#//' "$TARGET/etc/inittab" + + # setup sudo and/or doas + if grep -q '^sudo$' "$TARGET/etc/apk/world"; then + echo '%wheel ALL=(ALL) NOPASSWD: ALL' > "$TARGET/etc/sudoers.d/wheel" + fi + if grep -q '^doas$' "$TARGET/etc/apk/world"; then + echo 'permit nopass :wheel' > "$TARGET/etc/doas.d/wheel.conf" + fi + + # explicitly lock the root account + chroot "$TARGET" /usr/bin/passwd -l root + + # set up image user + user="${IMAGE_LOGIN:-alpine}" + chroot "$TARGET" /usr/sbin/addgroup "$user" + chroot "$TARGET" /usr/sbin/adduser -h "/home/$user" -s /bin/sh -G "$user" -D "$user" + chroot "$TARGET" /usr/sbin/addgroup "$user" wheel + chroot "$TARGET" /usr/bin/passwd -u "$user" + + # modify PS1s in /etc/profile to add user + sed -Ei \ + -e "s/(^PS1=')(\\$\\{HOSTNAME%)/\\1\\$\\USER@\\2/" \ + -e "s/( PS1=')(\\\\h:)/\\1\\\\u@\\2/" \ + -e "s/( PS1=')(%m:)/\\1%n@\\2/" \ + "$TARGET"/etc/profile + + setup_services +} + +# shellcheck disable=SC2046 +setup_services() { + for lvl_svcs in $SERVICES_ENABLE; do + rc add $(echo "$lvl_svcs" | tr '=,' ' ') + done + for lvl_svcs in $SERVICES_DISABLE; do + rc del $(echo "$lvl_svcs" | tr '=,' ' ') + done +} + +rc() { + op="$1" # add or del + runlevel="$2" # runlevel name + shift 2 + services="$*" # names of services + + for svc in $services; do + chroot "$TARGET" rc-update "$op" "$svc" "$runlevel" + done +} + +setup_builder +make_filesystem +install_base +setup_chroot +install_bootloader +configure_system diff --git a/scripts/setup-ami b/scripts/setup-ami deleted file mode 100755 index 47955fc..0000000 --- a/scripts/setup-ami +++ /dev/null @@ -1,414 +0,0 @@ -#!/bin/sh -# vim: set ts=4 et: - -set -eu - -DEVICE=/dev/xvdf -TARGET=/mnt/target -SETUP=/tmp/setup-ami.d - -[ "$VERSION" = 'edge' ] && V= || V=v -MAIN_REPO="https://dl-cdn.alpinelinux.org/alpine/$V$VERSION/main/$ARCH" - -die() { - printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red - exit 1 -} - -einfo() { - printf '\n\033[1;36m> %s\033[0m\n' "$@" >&2 # bold cyan -} - -rc_add() { - runlevel="$1"; shift # runlevel name - services="$*" # names of services - - for svc in $services; do - mkdir -p "$TARGET/etc/runlevels/$runlevel" - ln -s "/etc/init.d/$svc" "$TARGET/etc/runlevels/$runlevel/$svc" - echo " * service $svc added to runlevel $runlevel" - done -} - -validate_block_device() { - lsblk -P --fs "$DEVICE" >/dev/null 2>&1 || \ - die "'$DEVICE' is not a valid block device" - - if lsblk -P --fs "$DEVICE" | grep -vq 'FSTYPE=""'; then - die "Block device '$DEVICE' is not blank" - fi -} - -main_repo_pkgs() { - wget -T 10 -q -O - "$MAIN_REPO/" | grep '^
"$TARGET/etc/apk/repositories" -} - -fetch_keys() { - tmp="$(mktemp -d)" - tarball="$(main_repo_pkgs | grep ^alpine-keys- | sort -V | tail -n 1)" - - wget -T 10 -q -O "$tmp/$tarball" "$MAIN_REPO/$tarball" - tar -C "$TARGET" --warning=no-unknown-keyword -xvf "$tmp/$tarball" etc/apk/keys - rm -rf "$tmp" -} - -install_base() { - $apk add --root "$TARGET" --no-cache --initdb alpine-base - # verify release matches - if [ "$VERSION" != edge ]; then - ALPINE_RELEASE=$(cat "$TARGET/etc/alpine-release") - [ "$RELEASE" = "$ALPINE_RELEASE" ] || \ - die "Release '$RELEASE' does not match /etc/alpine-release: $ALPINE_RELEASE" - fi -} - -setup_chroot() { - mount -t proc none "$TARGET/proc" - mount --bind /dev "$TARGET/dev" - mount --bind /sys "$TARGET/sys" - - # Needed for bootstrap, will be removed in the cleanup stage. - install -Dm644 /etc/resolv.conf "$TARGET/etc/resolv.conf" -} - -install_core_packages() { - chroot "$TARGET" apk --no-cache add $PKGS - - # EFI_STUB requires no bootloader - [ "$BOOTLOADER" = EFI_STUB ] || \ - chroot "$TARGET" apk --no-cache add --no-scripts "$BOOTLOADER" - - # Disable starting getty for physical ttys because they're all inaccessible - # anyhow. With this configuration boot messages will still display in the - # EC2 console. - sed -Ei '/^tty[0-9]/s/^/#/' "$TARGET/etc/inittab" - - # Enable the getty for the serial terminal. This will show the login prompt - # in the get-console-output API that's accessible by the CLI and the web - # console. - sed -Ei '/^#ttyS0:/s/^#//' "$TARGET/etc/inittab" - - # Make it a little more obvious who is logged in by adding username to the - # prompt - sed -i "s/^export PS1='/&\\\\u@/" "$TARGET/etc/profile" - -} - -setup_mdev() { - install -o root -g root -Dm755 -t "$TARGET/lib/mdev" \ - "$SETUP/nvme-ebs-links" \ - "$SETUP/eth-eni-hotplug" - - # insert nvme ebs mdev configs just above "# fallback" comment - sed -n -i \ - -e "/# fallback/r $SETUP/etc/mdev-ec2.conf" \ - -e 1x -e '2,${x;p}' -e '${x;p}' \ - "$TARGET/etc/mdev.conf" -} - -create_initfs() { - sed -Ei "s/^features=\"([^\"]+)\"/features=\"\1 $INITFS_FEATURES\"/" \ - "$TARGET/etc/mkinitfs/mkinitfs.conf" - - chroot "$TARGET" /sbin/mkinitfs $(basename $(find "$TARGET/lib/modules/"* -maxdepth 0)) -} - -install_bootloader() { - case "$BOOTLOADER" in - syslinux) install_extlinux ;; - grub-efi) install_grub_efi ;; - EFI_STUB) install_EFI_STUB ;; - *) die "unknown bootloader '$BOOTLOADER'" ;; - esac -} - -install_extlinux() { - # Must use disk labels instead of UUID or devices paths so that this works - # across instance familes. UUID works for many instances but breaks on the - # NVME ones because EBS volumes are hidden behind NVME devices. - # - # Enable ext4 because the root device is formatted ext4 - # - # Shorten timeout (1/10s) as EC2 has no way to interact with instance console - # - # ttyS0 is the target for EC2s "Get System Log" feature whereas tty0 is the - # target for EC2s "Get Instance Screenshot" feature. Enabling the serial - # port early in extlinux gives the most complete output in the system log. - sed -Ei -e "s|^[# ]*(root)=.*|\1=LABEL=/|" \ - -e "s|^[# ]*(default_kernel_opts)=.*|\1=\"$KERNEL_OPTS\"|" \ - -e "s|^[# ]*(serial_port)=.*|\1=ttyS0|" \ - -e "s|^[# ]*(modules)=.*|\1=$KERNEL_MODS|" \ - -e "s|^[# ]*(default)=.*|\1=virt|" \ - -e "s|^[# ]*(timeout)=.*|\1=1|" \ - "$TARGET/etc/update-extlinux.conf" - - chroot "$TARGET" /sbin/extlinux --install /boot - chroot "$TARGET" /sbin/update-extlinux --warn-only -} - -install_grub_efi() { - [ -d "/sys/firmware/efi" ] || die "/sys/firmware/efi does not exist" - - case "$ARCH" in - x86_64) grub_target=x86_64-efi ; fwa=x64 ;; - aarch64) grub_target=arm64-efi ; fwa=aa64 ;; - *) die "ARCH=$ARCH is currently unsupported" ;; - esac - - # disable nvram so grub doesn't call efibootmgr - chroot "$TARGET" /usr/sbin/grub-install --target="$grub_target" --efi-directory=/boot/efi \ - --bootloader-id=alpine --boot-directory=/boot --no-nvram - - # fallback mode - install -D "$TARGET/boot/efi/EFI/alpine/grub$fwa.efi" "$TARGET/boot/efi/EFI/boot/boot$fwa.efi" - - # install default grub config - envsubst < "$SETUP/etc/grub.template" > "$SETUP/etc/grub" - install -o root -g root -Dm644 -t "$TARGET/etc/default" \ - "$SETUP/etc/grub" - - # generate/install new config - chroot "$TARGET" grub-mkconfig -o /boot/grub/grub.cfg -} - -install_EFI_STUB() { - [ -d "/sys/firmware/efi" ] || die "/sys/firmware/efi does not exist" - - case "$ARCH" in - x86_64) fwa=x64 ;; - aarch64) fwa=aa64 ;; - *) die "ARCH=$ARCH is currently unsupported" ;; - esac - - # TODO: kernel modules/options? - # TODO: will also need initfs in here too - # TODO: make it work - - # install kernel as UEFI fallback - install -o root -g root -Dm644 "$TARGET/boot/vmlinuz-virt" \ - "$TARGET/boot/efi/EFI/boot/boot$fwa.efi" - # replace original with a symlink - rm "$TARGET/boot/vmlinuz-virt" - ln -s "efi/EFI/boot/boot$fwa.efi" "$TARGET/boot/vmlinuz-virt" -} - -setup_fstab() { - install -o root -g root -Dm644 -t "$TARGET/etc" \ - "$SETUP/etc/fstab" - - # if we're using an EFI bootloader, add extra line for EFI partition - if [ "$BOOTLOADER" = grub-efi ] || [ "$BOOTLOADER" = EFI_STUB ]; then - cat "$SETUP/etc/fstab.grub-efi" >> "$TARGET/etc/fstab" - fi -} - -setup_networking() { - # configure standard interfaces - IFACE_CFG="$TARGET/etc/network/interfaces" - install -o root -g root -Dm755 -d "$SETUP/etc/interfaces.d" "$IFACE_CFG.d" - install -o root -g root -Dm644 -t "$IFACE_CFG.d" \ - "$SETUP/etc/interfaces.d/"* - cat "$IFACE_CFG.d/lo" "$IFACE_CFG.d/eth0" > "$IFACE_CFG" - - install -o root -g root -Dm755 -t "$TARGET/etc/network" \ - "$SETUP/assemble-interfaces" - - # install ucdhcp hooks for EC2 ENI IPv6 and secondary IPv4 - install -o root -g root -Dm755 -t "$TARGET/usr/share/udhcpc" \ - "$SETUP/eth-eni-hook" - for i in post-bound post-renew; do - mkdir -p "$TARGET/etc/udhcpc/$i" - ln -sf /usr/share/udhcpc/eth-eni-hook \ - "$TARGET/etc/udhcpc/$i" - done - - # install ENI interface setup init script - install -o root -g root -Dm755 -t "$TARGET/etc/init.d" \ - "$SETUP/eth-eni-setup" -} - -enable_services() { - for lvl_svcs in $SVCS; do - rc_add $(echo "$lvl_svcs" | tr '=,' ' ') - done -} - -create_alpine_user() { - # Allow members of the wheel group to sudo without a password. By default - # this will only be the alpine user. This allows us to ship an AMI that is - # accessible via SSH using the user's configured SSH keys (thanks to - # tiny-ec2-bootstrap) but does not allow remote root access which is the - # best-practice. - sed -i '/%wheel .* NOPASSWD: .*/s/^# //' "$TARGET/etc/sudoers" - - # explicitly lock the root account - chroot "$TARGET" /usr/bin/passwd -l root - - # There is no real standard ec2 username across AMIs, Amazon uses ec2-user - # for their Amazon Linux AMIs but Ubuntu uses ubuntu, Fedora uses fedora, - # etc... (see: https://alestic.com/2014/01/ec2-ssh-username/). So our user - # and group, by default, are alpine because this is Alpine Linux. - user="${EC2_USER:-alpine}" - chroot "$TARGET" /usr/sbin/addgroup "$user" - chroot "$TARGET" /usr/sbin/adduser -h "/home/$user" -s /bin/sh -G "$user" -D "$user" - chroot "$TARGET" /usr/sbin/addgroup "$user" wheel - chroot "$TARGET" /usr/bin/passwd -u "$user" - - # Let tiny-ec2-bootstrap know what the EC2 user of the AMI is - echo "EC2_USER=$user" > "$TARGET/etc/conf.d/tiny-ec2-bootstrap" -} - -configure_ntp() { - # EC2 provides an instance-local NTP service syncronized with GPS and - # atomic clocks in-region. Prefer this over external NTP hosts when running - # in EC2. - # - # See: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html - sed -e 's/^pool /server /' \ - -e 's/pool.ntp.org/169.254.169.123/g' \ - -i "$TARGET/etc/chrony/chrony.conf" -} - -setup_script() { - if [ -f "$SETUP/setup_script" ]; then - einfo "Executing additional setup script" - ( - cd "$SETUP" - chmod u+x ./setup_script - TARGET="$TARGET" ./setup_script - ) - else - einfo "No additional setup script" - fi -} - -cleanup() { - # Sweep cruft out of the image that doesn't need to ship or will be - # re-generated when the image boots - rm -f \ - "$TARGET/var/cache/apk/"* \ - "$TARGET/etc/resolv.conf" \ - "$TARGET/root/.ash_history" \ - "$TARGET/etc/"*- - - # unmount extra EFI mount - if [ "$BOOTLOADER" = grub-efi ] || [ "$BOOTLOADER" = EFI_STUB ]; then - umount "$TARGET/boot/efi" - fi - - umount \ - "$TARGET/dev" \ - "$TARGET/proc" \ - "$TARGET/sys" - - umount "$TARGET" -} - -main() { - validate_block_device - - [ -d "$TARGET" ] || mkdir "$TARGET" - - einfo "Fetching static APK tools" - apk="$(fetch_apk_tools)" - - einfo "Creating root filesystem" - make_filesystem - - einfo "Configuring Alpine repositories" - setup_repositories - - einfo "Fetching Alpine signing keys" - fetch_keys - - einfo "Installing base system" - install_base - - setup_chroot - - einfo "Installing core packages" - install_core_packages - - einfo "Configuring and enabling '$BOOTLOADER' boot loader" - create_initfs - install_bootloader - - einfo "Configuring system" - setup_mdev - setup_fstab - setup_networking - enable_services - create_alpine_user - configure_ntp - - setup_script - - einfo "All done, cleaning up" - cleanup -} - -main "$@" diff --git a/scripts/setup-ami.d/eth-eni-setup b/scripts/setup-ami.d/eth-eni-setup deleted file mode 100755 index 7246dbe..0000000 --- a/scripts/setup-ami.d/eth-eni-setup +++ /dev/null @@ -1,16 +0,0 @@ -#!/sbin/openrc-run - -description="Sets up interfaces for attached Elastic Network Interfaces" - -depend() { - before net - need sysfs -} - -start() { - local iface - - ebegin "Setting up interfaces for attached ENIs" - /etc/network/assemble-interfaces - eend "$?" -} diff --git a/scripts/setup-ami.d/nvme-ebs-links b/scripts/setup-ami.d/nvme-ebs-links deleted file mode 100755 index 6ebdb10..0000000 --- a/scripts/setup-ami.d/nvme-ebs-links +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -[ -x /usr/sbin/nvme ] || exit - -PROC="$(basename "$0")[$$]" - -log() { - FACILITY="kern.$1" - shift - logger -s -p "$FACILITY" -t "$PROC" "$@" -} - -raw_ebs_alias() { - /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null -} - -case $ACTION in - add|"") - BASE=$(echo "$MDEV" | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') - PART=$(echo "$MDEV" | sed -re 's/nvme[0-9]+n[0-9]+p?//g') - MAXTRY=50 - TRY=0 - until [ -n "$EBS" ]; do - EBS=$(raw_ebs_alias | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' | tr -d ' ') - [ -n "$EBS" ] && break - TRY=$((TRY + 1)) - if [ $TRY -eq $MAXTRY ]; then - log err "Failed to get EBS volume alias for $MDEV after $MAXTRY attempts ($(raw_ebs_alias))" - exit 1 - fi - sleep 0.1 - done - # remove any leading '/dev/', 'sd', or 'xvd', and append partition - EBS=${EBS#/dev/} - EBS=${EBS#sd} - EBS=${EBS#xvd}$PART - ln -sf "$MDEV" "sd$EBS" && log notice "Added sd$EBS symlink for $MDEV" - ln -sf "$MDEV" "xvd$EBS" && log notice "Added xvd$EBS symlink for $MDEV" - ;; - remove) - for TARGET in sd* xvd* - do - [ "$(readlink "$TARGET" 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV" - done - ;; -esac diff --git a/scripts/setup-tiny b/scripts/setup-tiny new file mode 100755 index 0000000..9d0bc9c --- /dev/null +++ b/scripts/setup-tiny @@ -0,0 +1,67 @@ +#!/bin/sh -eu +# vim: ts=4 et: + +# NOTE: This is lifted almost verbatim from alpine-ec2-ami's setup-ami script +# While refactoring that, it became apparent that these bits really belonged +# to the tiny-ec2-bootstrap package, and in order to also provide a +# "cloud-init" image flavor, we needed separate these parts out. +# +# It is our intention to eventually incorporate this in a tiny-cloud-bootstrap +# package (and per-cloud subpackages). + +[ -z "$DEBUG" -o "$DEBUG" = 0 ] || set -x + +TARGET=/mnt +SETUP=/tmp/setup-tiny.d + +die() { + printf '\033[1;7;31m FATAL: %s \033[0m\n' "$@" >&2 # bold reversed red + exit 1 +} +einfo() { + printf '\n\033[1;7;36m> %s <\033[0m\n' "$@" >&2 # bold reversed cyan +} + +setup_mdev() { + echo " * Setting up mdev" + install -o root -g root -Dm755 -t "$TARGET/lib/mdev" \ + "$SETUP/nvme-ebs-links" \ + "$SETUP/eth-eni-hotplug" + + # insert nvme ebs mdev configs just above "# fallback" comment + sed -n -i \ + -e "/# fallback/r $SETUP/mdev-ec2.conf" \ + -e 1x -e '2,${x;p}' -e '${x;p}' \ + "$TARGET/etc/mdev.conf" +} + +setup_networking() { + echo " * Setting up networking" + # configure standard interfaces + IFACE_CFG="$TARGET/etc/network/interfaces" + install -o root -g root -Dm755 -d "$SETUP/interfaces.d" "$IFACE_CFG.d" + install -o root -g root -Dm644 -t "$IFACE_CFG.d" \ + "$SETUP/interfaces.d/"* + cat "$IFACE_CFG.d/lo" "$IFACE_CFG.d/eth0" > "$IFACE_CFG" + + install -o root -g root -Dm755 -t "$TARGET/etc/network" \ + "$SETUP/assemble-interfaces" + + # install ucdhcp hooks for EC2 ENI IPv6 and secondary IPv4 + install -o root -g root -Dm755 -t "$TARGET/usr/share/udhcpc" \ + "$SETUP/eth-eni-hook" + for i in post-bound post-renew; do + mkdir -p "$TARGET/etc/udhcpc/$i" + ln -sf /usr/share/udhcpc/eth-eni-hook \ + "$TARGET/etc/udhcpc/$i" + done + + # install ENI interface setup init script + install -o root -g root -Dm755 -t "$TARGET/etc/init.d" \ + "$SETUP/eth-eni-setup" +} + +einfo "Installing up tiny bootstrap components..." +setup_mdev +setup_networking +echo "EC2_USER=$IMAGE_LOGIN" > "$TARGET/etc/conf.d/tiny-ec2-bootstrap" diff --git a/scripts/setup-ami.d/assemble-interfaces b/scripts/setup-tiny.d/assemble-interfaces similarity index 100% rename from scripts/setup-ami.d/assemble-interfaces rename to scripts/setup-tiny.d/assemble-interfaces diff --git a/scripts/setup-ami.d/eth-eni-hook b/scripts/setup-tiny.d/eth-eni-hook similarity index 100% rename from scripts/setup-ami.d/eth-eni-hook rename to scripts/setup-tiny.d/eth-eni-hook diff --git a/scripts/setup-ami.d/eth-eni-hotplug b/scripts/setup-tiny.d/eth-eni-hotplug similarity index 100% rename from scripts/setup-ami.d/eth-eni-hotplug rename to scripts/setup-tiny.d/eth-eni-hotplug diff --git a/scripts/setup-tiny.d/eth-eni-setup b/scripts/setup-tiny.d/eth-eni-setup new file mode 100755 index 0000000..aba272a --- /dev/null +++ b/scripts/setup-tiny.d/eth-eni-setup @@ -0,0 +1,19 @@ +#!/sbin/openrc-run + +# vim: set ts=4 et: +# shellcheck shell=sh + +description="Sets up interfaces for attached Elastic Network Interfaces" + +depend() { + before net + need sysfs +} + +start() { + local iface + + ebegin "Setting up interfaces for attached ENIs" + /etc/network/assemble-interfaces + eend "$?" +} diff --git a/scripts/setup-ami.d/etc/interfaces.d/DEFAULT b/scripts/setup-tiny.d/interfaces.d/DEFAULT similarity index 100% rename from scripts/setup-ami.d/etc/interfaces.d/DEFAULT rename to scripts/setup-tiny.d/interfaces.d/DEFAULT diff --git a/scripts/setup-ami.d/etc/interfaces.d/eth0 b/scripts/setup-tiny.d/interfaces.d/eth0 similarity index 100% rename from scripts/setup-ami.d/etc/interfaces.d/eth0 rename to scripts/setup-tiny.d/interfaces.d/eth0 diff --git a/scripts/setup-ami.d/etc/interfaces.d/lo b/scripts/setup-tiny.d/interfaces.d/lo similarity index 100% rename from scripts/setup-ami.d/etc/interfaces.d/lo rename to scripts/setup-tiny.d/interfaces.d/lo diff --git a/scripts/setup-ami.d/etc/mdev-ec2.conf b/scripts/setup-tiny.d/mdev-ec2.conf similarity index 100% rename from scripts/setup-ami.d/etc/mdev-ec2.conf rename to scripts/setup-tiny.d/mdev-ec2.conf diff --git a/scripts/setup-tiny.d/nvme-ebs-links b/scripts/setup-tiny.d/nvme-ebs-links new file mode 100755 index 0000000..e4ba49f --- /dev/null +++ b/scripts/setup-tiny.d/nvme-ebs-links @@ -0,0 +1,47 @@ +#!/bin/sh +# vim: set ts=4 et: + +[ -x /usr/sbin/nvme ] || exit + +PROC="$(basename "$0")[$$]" + +log() { + FACILITY="kern.$1" + shift + logger -s -p "$FACILITY" -t "$PROC" "$@" +} + +raw_ebs_alias() { + /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null +} + +case $ACTION in + add|"") + BASE=$(echo "$MDEV" | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') + PART=$(echo "$MDEV" | sed -re 's/nvme[0-9]+n[0-9]+p?//g') + MAXTRY=50 + TRY=0 + until [ -n "$EBS" ]; do + EBS=$(raw_ebs_alias | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' | tr -d ' ') + [ -n "$EBS" ] && break + TRY=$((TRY + 1)) + if [ $TRY -eq $MAXTRY ]; then + log err "Failed to get EBS volume alias for $MDEV after $MAXTRY attempts ($(raw_ebs_alias))" + exit 1 + fi + sleep 0.1 + done + # remove any leading '/dev/', 'sd', or 'xvd', and append partition + EBS=${EBS#/dev/} + EBS=${EBS#sd} + EBS=${EBS#xvd}$PART + ln -sf "$MDEV" "sd$EBS" && log notice "Added sd$EBS symlink for $MDEV" + ln -sf "$MDEV" "xvd$EBS" && log notice "Added xvd$EBS symlink for $MDEV" + ;; + remove) + for TARGET in sd* xvd* + do + [ "$(readlink "$TARGET" 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV" + done + ;; +esac diff --git a/scripts/setup-ami.d/etc/fstab b/scripts/setup.d/fstab similarity index 100% rename from scripts/setup-ami.d/etc/fstab rename to scripts/setup.d/fstab diff --git a/scripts/setup-ami.d/etc/fstab.grub-efi b/scripts/setup.d/fstab.grub-efi similarity index 100% rename from scripts/setup-ami.d/etc/fstab.grub-efi rename to scripts/setup.d/fstab.grub-efi diff --git a/scripts/setup-ami.d/etc/grub.template b/scripts/setup.d/grub.template similarity index 68% rename from scripts/setup-ami.d/etc/grub.template rename to scripts/setup.d/grub.template index 7af988a..b88f991 100644 --- a/scripts/setup-ami.d/etc/grub.template +++ b/scripts/setup.d/grub.template @@ -1,5 +1,5 @@ -GRUB_TIMEOUT=0 -GRUB_DISABLE_SUBMENU=y +GRUB_CMDLINE_LINUX_DEFAULT="modules=$KERNEL_MODULES $KERNEL_OPTIONS" GRUB_DISABLE_RECOVERY=true +GRUB_DISABLE_SUBMENU=y GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" -GRUB_CMDLINE_LINUX_DEFAULT="modules=$KERNEL_MODS $KERNEL_OPTS" +GRUB_TIMEOUT=0 diff --git a/scripts/test-setup_script.sh b/scripts/test-setup_script.sh deleted file mode 100755 index 18e3fdb..0000000 --- a/scripts/test-setup_script.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env sh - -set -ex - -# copy a directory into place -cp -a ./base "$TARGET/home/$EC2_USER/test" - -# process a file and put it into place -tac ./aarch64 | rev > "$TARGET/home/$EC2_USER/test/46hcraa" - -# set ownership of installed things -chroot "$TARGET" chown -R "$EC2_USER:$EC2_USER" "/home/$EC2_USER/test" From 6674286b469679ae0c55803d9468f163f835f443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jake=20Buchholz=20G=C3=B6kt=C3=BCrk?= Date: Tue, 23 Nov 2021 06:09:18 +0000 Subject: [PATCH 115/125] alpine-cloud-images, part two --- alpine.py | 32 +++ build | 310 +++++++++++++++++++++++ cloud_helper.py | 107 ++++++++ clouds/__init__.py | 41 +++ clouds/aws.py | 417 ++++++++++++++++++++++++++++++ clouds/identity_broker_client.py | 131 ++++++++++ clouds/interfaces/__init__.py | 0 clouds/interfaces/adapter.py | 40 +++ image_configs.py | 420 +++++++++++++++++++++++++++++++ scripts/cleanup | 2 +- scripts/setup | 2 +- scripts/setup-tiny | 2 +- 12 files changed, 1501 insertions(+), 3 deletions(-) create mode 100644 alpine.py create mode 100755 build create mode 100755 cloud_helper.py create mode 100644 clouds/__init__.py create mode 100644 clouds/aws.py create mode 100644 clouds/identity_broker_client.py create mode 100644 clouds/interfaces/__init__.py create mode 100644 clouds/interfaces/adapter.py create mode 100644 image_configs.py diff --git a/alpine.py b/alpine.py new file mode 100644 index 0000000..ebf99ac --- /dev/null +++ b/alpine.py @@ -0,0 +1,32 @@ +# vim: ts=4 et: + +import re +from urllib.request import urlopen + + +# constants and vars +CDN_URL = 'https://dl-cdn.alpinelinux.org/alpine' + + +def get_version_release(alpine_version): + apk_ver = get_apk_version(alpine_version, 'main', 'x86_64', 'alpine-base') + release = apk_ver.split('-')[0] + version = '.'.join(release.split('.')[:2]) + return {'version': version, 'release': release} + + +# TODO? maybe download and parse APKINDEX instead? +def get_apk_version(alpine_version, repo, arch, apk): + repo_url = f"{CDN_URL}/{alpine_version}/{repo}/{arch}" + apks_re = re.compile(f'"{apk}-(\\d.*)\\.apk"') + res = urlopen(repo_url) + for line in map(lambda x: x.decode('utf8'), res): + if not line.startswith('.* and its objects + def import_image(self, ic): + log = logging.getLogger('import') + image_path = ic.local_path + image_aws = image_path.replace(ic.local_format, 'vhd') + description = ic.image_description + + session = self.session() + s3r = session.resource('s3') + ec2c = session.client('ec2') + ec2r = session.resource('ec2') + + # convert QCOW2 to VHD + log.info('Converting %s to VHD format', image_path) + p = Popen(self.CONVERT_CMD + (image_path, image_aws), stdout=PIPE, stdin=PIPE, encoding='utf8') + out, err = p.communicate() + if p.returncode: + log.error('Unable to convert %s to VHD format (%s)', image_path, p.returncode) + log.error('STDOUT:\n%s', out) + log.error('STDERR:\n%s', err) + sys.exit(p.returncode) + + bucket_name = 'alpine-cloud-images.' + ''.join( + random.SystemRandom().choice(string.ascii_lowercase + string.digits) + for _ in range(40)) + s3_key = os.path.basename(image_aws) + + bucket = s3r.Bucket(bucket_name) + log.info('Creating S3 bucket %s', bucket.name) + bucket.create( + CreateBucketConfiguration={'LocationConstraint': ec2c.meta.region_name} + ) + bucket.wait_until_exists() + s3_url = f"s3://{bucket.name}/{s3_key}" + + try: + log.info('Uploading %s to %s', image_aws, s3_url) + bucket.upload_file(image_aws, s3_key) + + # import snapshot from S3 + log.info('Importing EC2 snapshot from %s', s3_url) + ss_import = ec2c.import_snapshot( + DiskContainer={ + 'Description': description, # https://github.com/boto/boto3/issues/2286 + 'Format': 'VHD', + 'Url': s3_url + } + # NOTE: TagSpecifications -- doesn't work with ResourceType: snapshot? + ) + ss_task_id = ss_import['ImportTaskId'] + while True: + ss_task = ec2c.describe_import_snapshot_tasks( + ImportTaskIds=[ss_task_id] + ) + task_detail = ss_task['ImportSnapshotTasks'][0]['SnapshotTaskDetail'] + if task_detail['Status'] not in ['pending', 'active', 'completed']: + msg = f"Bad EC2 snapshot import: {task_detail['Status']} - {task_detail['StatusMessage']}" + log.error(msg) + raise(RuntimeError, msg) + + if task_detail['Status'] == 'completed': + snapshot_id = task_detail['SnapshotId'] + break + + time.sleep(15) + except Exception: + log.error('Unable to import snapshot from S3:', exc_info=True) + raise + finally: + # always cleanup S3, even if there was an exception raised + log.info('Cleaning up %s', s3_url) + bucket.Object(s3_key).delete() + bucket.delete() + + # tag snapshot + snapshot = ec2r.Snapshot(snapshot_id) + try: + log.info('Tagging EC2 snapshot %s', snapshot_id) + tags = ic.tags + tags.Name = tags.name # because AWS is special + snapshot.create_tags(Tags=tags.as_list()) + except Exception: + log.error('Unable to tag snapshot:', exc_info=True) + log.info('Removing snapshot') + snapshot.delete() + raise + + # register AMI + try: + log.info('Registering EC2 AMI from snapshot %s', snapshot_id) + img = ec2c.register_image( + Architecture=self.ARCH[ic.arch], + BlockDeviceMappings=[{ + 'DeviceName': 'xvda', + 'Ebs': {'SnapshotId': snapshot_id} + }], + Description=description, + EnaSupport=True, + Name=ic.image_name, + RootDeviceName='xvda', + SriovNetSupport='simple', + VirtualizationType='hvm', + BootMode=self.BOOT_MODE[ic.firmware], + ) + except Exception: + log.error('Unable to register image:', exc_info=True) + log.info('Removing snapshot') + snapshot.delete() + raise + + image_id = img['ImageId'] + image = ec2r.Image(image_id) + + try: + # tag image (adds imported tag) + log.info('Tagging EC2 AMI %s', image_id) + tags.imported = datetime.utcnow().isoformat() + tags.source_id = image_id + tags.source_region = ec2c.meta.region_name + image.create_tags(Tags=tags.as_list()) + except Exception: + log.error('Unable to tag image:', exc_info=True) + log.info('Removing image and snapshot') + image.delete() + snapshot.delete() + raise + + return self._image_info(image) + + # remove an (unpublished) image + def remove_image(self, image_id): + log = logging.getLogger('build') + ec2r = self.session().resource('ec2') + image = ec2r.Image(image_id) + # TODO? protect against removing a published image? + snapshot_id = image.block_device_mappings[0]['Ebs']['SnapshotId'] + snapshot = ec2r.Snapshot(snapshot_id) + log.info('Deregistering %s', image_id) + image.deregister() + log.info('Deleting %s', snapshot_id) + snapshot.delete() + + # TODO: this should be standardized and work with cred_provider + def _get_all_regions(self): + ec2c = self.session().client('ec2') + res = ec2c.describe_regions(AllRegions=True) + return { + r['RegionName']: r['OptInStatus'] != 'not-opted-in' + for r in res['Regions'] + } + + # publish an image + def publish_image(self, ic): + log = logging.getLogger('publish') + source_image = self.latest_build_image(ic.name) + if not source_image: + log.error('No source image for %s', ic.name) + sys.exit(1) + + source_id = source_image['id'] + log.info('Publishing source: %s, %s', source_image['region'], source_id) + source = self.session().resource('ec2').Image(source_id) + source_tags = Tags(from_list=source.tags) + publish = ic.publish + + # sort out published image access permissions + perms = {'groups': [], 'users': []} + if 'PUBLIC' in publish['access'] and publish['access']['PUBLIC']: + perms['groups'] = ['all'] + else: + for k, v in publish['access'].items(): + if v: + log.debug('users: %s', k) + perms['users'].append(str(k)) + + log.debug('perms: %s', perms) + + # resolve destination regions + regions = self.regions() + if 'ALL' in publish['regions'] and publish['regions']['ALL']: + log.info('Publishing to ALL available regions') + else: + # clear ALL out of the way if it's still there + publish['regions'].pop('ALL', None) + # TODO: politely warn/skip unknown regions in b.aws.regions + regions = {r: regions[r] for r in publish['regions']} + + publishing = {} + for r in regions.keys(): + if not regions[r]: + log.warning('Skipping unsubscribed AWS region %s', r) + continue + + images = self._get_images_with_tags( + region=r, + tags={ + 'build_name': ic.name, + 'build_revision': ic.revision + } + ) + if images: + image = images[0] + log.info('%s: Already exists as %s', r, image.id) + else: + ec2c = self.session(r).client('ec2') + try: + res = ec2c.copy_image( + Description=source.description, + Name=source.name, + SourceImageId=source.id, + SourceRegion=source_image['region'], + ) + except Exception: + log.warning('Skipping %s, unable to copy image:', r, exc_info=True) + continue + + image_id = res['ImageId'] + log.info('%s: Publishing to %s', r, image_id) + image = self.session(r).resource('ec2').Image(image_id) + + publishing[r] = image + + published = {} + copy_wait = 180 + while len(published) < len(publishing): + for r, image in publishing.items(): + if r not in published: + image.reload() + if image.state == 'available': + # tag image + log.info('%s: Adding tags to %s', r, image.id) + tags = Tags(from_list=image.tags) + fresh = False + if 'published' not in tags: + fresh = True + + if not tags: + # fallback to source image's tags + tags = Tags(source_tags) + + if fresh: + tags.published = datetime.utcnow().isoformat() + + image.create_tags(Tags=tags.as_list()) + + # tag image's snapshot, too + snapshot = self.session(r).resource('ec2').Snapshot( + image.block_device_mappings[0]['Ebs']['SnapshotId'] + ) + snapshot.create_tags(Tags=image.tags) + + # apply launch perms + log.info('%s: Applying launch perms to %s', r, image.id) + image.reset_attribute(Attribute='launchPermission') + image.modify_attribute( + Attribute='launchPermission', + OperationType='add', + UserGroups=perms['groups'], + UserIds=perms['users'], + ) + + # set up AMI deprecation + ec2c = image.meta.client + log.info('%s: Setting EOL deprecation time on %s', r, image.id) + ec2c.enable_image_deprecation( + ImageId=image.id, + DeprecateAt=f"{source_image['tags']['end_of_life']}T23:59:59Z" + ) + + published[r] = self._image_info(image) + + if image.state == 'failed': + log.error('%s: %s - %s - %s', r, image.id, image.state, image.state_reason) + published[r] = None + + remaining = len(publishing) - len(published) + if remaining > 0: + log.info('Waiting %ds for %d images to complete', copy_wait, remaining) + time.sleep(copy_wait) + copy_wait = 30 + + return published + + +def register(cloud, cred_provider=None): + return AWSCloudAdapter(cloud, cred_provider) diff --git a/clouds/identity_broker_client.py b/clouds/identity_broker_client.py new file mode 100644 index 0000000..d47a21c --- /dev/null +++ b/clouds/identity_broker_client.py @@ -0,0 +1,131 @@ +# vim: ts=4 et: + +import json +import logging +import os +import sys +import time +import urllib.error + +from datetime import datetime +from email.utils import parsedate +from urllib.request import Request, urlopen + + +class IdentityBrokerClient: + """Client for identity broker + + Export IDENTITY_BROKER_ENDPOINT to override the default broker endpoint. + Export IDENTITY_BROKER_API_KEY to specify an API key for the broker. + + See README_BROKER.md for more information and a spec. + """ + + _DEFAULT_ENDPOINT = 'https://aws-access.crute.us/api/account' + _DEFAULT_ACCOUNT = 'alpine-amis-user' + _LOGFORMAT = '%(name)s - %(levelname)s - %(message)s' + + def __init__(self, endpoint=None, key=None, account=None, debug=False): + # log to STDOUT so that it's not all red when executed by Packer + self._logger = logging.getLogger('identity-broker') + self._logger.setLevel(logging.DEBUG if debug else logging.INFO) + console = logging.StreamHandler(sys.stdout) + console.setFormatter(logging.Formatter(self._LOGFORMAT)) + self._logger.addHandler(console) + + self._endpoint = os.environ.get('IDENTITY_BROKER_ENDPOINT') or endpoint \ + or self._DEFAULT_ENDPOINT + self._key = os.environ.get('IDENTITY_BROKER_API_KEY') or key + self._account = account or self._DEFAULT_ACCOUNT + if not self._key: + raise Exception('No identity broker key found') + + self._headers = { + 'Accept': 'application/vnd.broker.v2+json', + 'X-API-Key': self._key + } + self._cache = {} + self._expires = {} + self._default_region = {} + + def _is_cache_valid(self, path): + if path not in self._cache: + return False + + # path is subject to expiry AND its time has passed + if self._expires[path] and self._expires[path] < datetime.utcnow(): + return False + + return True + + def _get(self, path): + if not self._is_cache_valid(path): + while True: # to handle rate limits + try: + res = urlopen(Request(path, headers=self._headers)) + except urllib.error.HTTPError as ex: + if ex.status == 401: + raise Exception('Expired or invalid identity broker token') + + if ex.status == 406: + raise Exception('Invalid or malformed identity broker token') + + # TODO: will this be entirely handled by the 401 above? + if ex.headers.get('Location') == '/logout': + raise Exception('Identity broker token is expired') + + if ex.status == 429: + self._logger.warning( + 'Rate-limited by identity broker, sleeping 30 seconds') + time.sleep(30) + continue + + raise ex + + if res.status not in {200, 429}: + raise Exception(res.reason) + + # never expires without valid RFC 1123 Expires header + if expires := res.getheader('Expires'): + expires = parsedate(expires) + # convert RFC 1123 to datetime, if parsed successfully + expires = datetime(*expires[:6]) + + self._expires[path] = expires + self._cache[path] = json.load(res) + break + + return self._cache[path] + + def get_credentials_url(self, vendor): + accounts = self._get(self._endpoint) + if vendor not in accounts: + raise Exception(f'No {vendor} credentials found') + + for account in accounts[vendor]: + if account['short_name'] == self._account: + return account['credentials_url'] + + raise Exception('No account credentials found') + + def get_regions(self, vendor): + out = {} + + for region in self._get(self.get_credentials_url(vendor)): + if region['enabled']: + out[region['name']] = region['credentials_url'] + + if region['default']: + self._default_region[vendor] = region['name'] + out[None] = region['credentials_url'] + + return out + + def get_default_region(self, vendor): + if vendor not in self._default_region: + self.get_regions(vendor) + + return self._default_region.get(vendor) + + def get_credentials(self, vendor, region=None): + return self._get(self.get_regions(vendor)[region]) diff --git a/clouds/interfaces/__init__.py b/clouds/interfaces/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/clouds/interfaces/adapter.py b/clouds/interfaces/adapter.py new file mode 100644 index 0000000..d0b5b07 --- /dev/null +++ b/clouds/interfaces/adapter.py @@ -0,0 +1,40 @@ +# vim: ts=4 et: + +class CloudAdapterInterface: + + def __init__(self, cloud, cred_provider=None): + self._sdk = None + self._sessions = {} + self.cloud = cloud + self.cred_provider = cred_provider + self._default_region = None + + @property + def sdk(self): + raise NotImplementedError + + def regions(self): + raise NotImplementedError + + def default_region(self): + raise NotImplementedError + + def credentials(self, region=None): + raise NotImplementedError + + def session(self, region=None): + raise NotImplementedError + + def latest_build_image(self, build_name): + raise NotImplementedError + + # TODO: be more specific about what gets passed into these + + def import_image(self, config): + raise NotImplementedError + + def remove_image(self, config, image_id): + raise NotImplementedError + + def publish_image(self, config): + raise NotImplementedError diff --git a/image_configs.py b/image_configs.py new file mode 100644 index 0000000..b697c35 --- /dev/null +++ b/image_configs.py @@ -0,0 +1,420 @@ +# vim: ts=4 et: + +import itertools +import logging +import mergedeep +import os +import pyhocon +import shutil + +from copy import deepcopy +from datetime import datetime, timedelta +from pathlib import Path +from ruamel.yaml import YAML + +from alpine import get_version_release +import clouds + + +class ImageConfigManager(): + + def __init__(self, conf_path, yaml_path, log=__name__, iso_url_format=None): + self.conf_path = Path(conf_path) + self.yaml_path = Path(yaml_path) + self.log = logging.getLogger(log) + self.iso_url_format = iso_url_format + + self.now = datetime.utcnow() + self.tomorrow = self.now + timedelta(days=1) + self._configs = {} + + self.yaml = YAML() + self.yaml.register_class(ImageConfig) + self.yaml.default_flow_style = False + self.yaml.explicit_start = True + # hide !ImageConfig tag from Packer + self.yaml.representer.org_represent_mapping = self.yaml.representer.represent_mapping + self.yaml.representer.represent_mapping = self._strip_yaml_tag_type + + # load resolved YAML, if exists + if self.yaml_path.exists(): + self._load_yaml() + else: + self._resolve() + + def get(self, key=None): + if not key: + return self._configs + + return self._configs[key] + + # load already-resolved YAML configs, restoring ImageConfig objects + def _load_yaml(self): + # TODO: no warning if we're being called from cloud_helper.py + self.log.warning('Loading existing %s', self.yaml_path) + for key, config in self.yaml.load(self.yaml_path).items(): + self._configs[key] = ImageConfig(key, config) + + # save resolved configs to YAML + def _save_yaml(self): + self.log.info('Saving %s', self.yaml_path) + self.yaml.dump(self._configs, self.yaml_path) + + # hide !ImageConfig tag from Packer + def _strip_yaml_tag_type(self, tag, mapping, flow_style=None): + if tag == '!ImageConfig': + tag = u'tag:yaml.org,2002:map' + + return self.yaml.representer.org_represent_mapping(tag, mapping, flow_style=flow_style) + + # resolve from HOCON configs + def _resolve(self): + self.log.info('Generating configs.yaml in work environment') + cfg = pyhocon.ConfigFactory.parse_file(self.conf_path) + # set version releases + for v, vcfg in cfg.Dimensions.version.items(): + # version keys are quoted to protect dots + self.set_version_release(v.strip('"'), vcfg) + + dimensions = list(cfg.Dimensions.keys()) + self.log.debug('dimensions: %s', dimensions) + + for dim_keys in (itertools.product(*cfg['Dimensions'].values())): + image_key = '-'.join(dim_keys).replace('"', '') + + # dict of dimension -> dimension_key + dim_map = dict(zip(dimensions, dim_keys)) + release = cfg.Dimensions.version[dim_map['version']].release + image_config = ImageConfig(image_key, {'release': release} | dim_map) + + # merge in the Default config + image_config._merge(cfg.Default) + skip = False + # merge in each dimension key's configs + for dim, dim_key in dim_map.items(): + dim_cfg = deepcopy(cfg.Dimensions[dim][dim_key]) + exclude = dim_cfg.pop('EXCLUDE', None) + if exclude and set(exclude) & set(dim_keys): + self.log.debug('%s SKIPPED, %s excludes %s', image_key, dim_key, exclude) + skip = True + break + + image_config._merge(dim_cfg) + + # now that we're done with ConfigTree/dim_cfg, remove " from dim_keys + dim_keys = set(k.replace('"', '') for k in dim_keys) + + # WHEN blocks inside WHEN blocks are considered "and" operations + while (when := image_config._pop('WHEN', None)): + for when_keys, when_conf in when.items(): + # WHEN keys with spaces are considered "or" operations + if len(set(when_keys.split(' ')) & dim_keys) > 0: + image_config._merge(when_conf) + + if skip is True: + continue + + # merge in the Mandatory configs at the end + image_config._merge(cfg.Mandatory) + + # clean stuff up + image_config._normalize() + image_config.qemu['iso_url'] = self.iso_url_format.format(arch=image_config.arch) + + # we've resolved everything, add tags attribute to config + self._configs[image_key] = image_config + + self._save_yaml() + + # set current version release + def set_version_release(self, v, c): + if v == 'edge': + c.put('release', self.now.strftime('%Y%m%d')) + c.put('end_of_life', self.tomorrow.strftime('%F')) + else: + c.put('release', get_version_release(f"v{v}")['release']) + + # release is also appended to build name array + c.put('name', [c.release]) + + # update current config status + def determine_actions(self, step, only, skip, revise): + self.log.info('Determining Actions') + has_actions = False + for ic in self._configs.values(): + # clear away any previous actions + if hasattr(ic, 'actions'): + delattr(ic, 'actions') + + dim_keys = set(ic.image_key.split('-')) + if only and len(set(only) & dim_keys) != len(only): + self.log.debug("%s SKIPPED, doesn't match --only", ic.image_key) + continue + + if skip and len(set(skip) & dim_keys) > 0: + self.log.debug('%s SKIPPED, matches --skip', ic.image_key) + continue + + ic.determine_actions(step, revise) + if not has_actions and len(ic.actions): + has_actions = True + + # re-save with updated actions + self._save_yaml() + return has_actions + + +class ImageConfig(): + + def __init__(self, image_key, obj={}): + self.image_key = str(image_key) + tags = obj.pop('tags', None) + self.__dict__ |= self._deep_dict(obj) + # ensure tag values are str() when loading + if tags: + self.tags = tags + + @property + def local_dir(self): + return os.path.join('work/images', self.name) + + @property + def local_path(self): + return os.path.join(self.local_dir, 'image.' + self.local_format) + + @property + def image_name(self): + return '-r'.join([self.name, str(self.revision)]) + + @property + def image_description(self): + return self.description.format(**self.__dict__) + + @property + def tags(self): + # stuff that really ought to be there + t = { + 'arch': self.arch, + 'bootstrap': self.bootstrap, + 'build_name': self.name, + 'build_revision': self.revision, + 'cloud': self.cloud, + 'description': self.image_description, + 'end_of_life': self.end_of_life, + 'firmware': self.firmware, + 'name': self.image_name, + 'release': self.release, + 'version': self.version + } + # stuff that might not be there yet + for k in ['imported', 'published', 'source_id', 'source_region']: + if k in self.__dict__: + t[k] = self.__dict__[k] + return Tags(t) + + # recursively convert a ConfigTree object to a dict object + def _deep_dict(self, layer): + obj = deepcopy(layer) + if isinstance(layer, pyhocon.ConfigTree): + obj = dict(obj) + + try: + for key, value in layer.items(): + # some HOCON keys are quoted to preserve dots + if '"' in key: + obj.pop(key) + key = key.strip('"') + + # version values were HOCON keys at one point, too + if key == 'version' and '"' in value: + value = value.strip('"') + + obj[key] = self._deep_dict(value) + except AttributeError: + pass + + return obj + + def _merge(self, obj={}): + mergedeep.merge(self.__dict__, self._deep_dict(obj), strategy=mergedeep.Strategy.ADDITIVE) + + def _pop(self, attr, default=None): + return self.__dict__.pop(attr, default) + + # make data ready for Packer ingestion + def _normalize(self): + # stringify arrays + self.name = '-'.join(self.name) + self.description = ' '.join(self.description) + self._stringify_repos() + self._stringify_packages() + self._stringify_services() + self._stringify_dict_keys('kernel_modules', ',') + self._stringify_dict_keys('kernel_options', ' ') + self._stringify_dict_keys('initfs_features', ' ') + + def _stringify_repos(self): + # stringify repos map + # : # @ enabled + # : false # disabled (commented out) + # : true # enabled + # : null # skip entirely + # ...and interpolate {version} + self.repos = "\n".join(filter(None, ( + f"@{v} {r}" if isinstance(v, str) else + f"#{r}" if v is False else + r if v is True else None + for r, v in self.repos.items() + ))).format(version=self.version) + + def _stringify_packages(self): + # resolve/stringify packages map + # : true # add + # : # add @ + # : --no-scripts # add --no-scripts + # : --no-scripts # add --no-scripts @ + # : false # del + # : null # skip explicit add/del + pkgs = {'add': '', 'del': '', 'noscripts': ''} + for p, v in self.packages.items(): + k = 'add' + if isinstance(v, str): + if '--no-scripts' in v: + k = 'noscripts' + v = v.replace('--no-scripts', '') + v = v.strip() + if len(v): + p += f"@{v}" + elif v is False: + k = 'del' + elif v is None: + continue + + pkgs[k] = p if len(pkgs[k]) == 0 else pkgs[k] + ' ' + p + + self.packages = pkgs + + def _stringify_services(self): + # stringify services map + # : + # : true # enable at + # : false # disable at + # : null # skip explicit en/disable at + self.services = { + 'enable': ' '.join(filter(lambda x: not x.endswith('='), ( + '{}={}'.format(lvl, ','.join(filter(None, ( + s if v is True else None + for s, v in svcs.items() + )))) + for lvl, svcs in self.services.items() + ))), + 'disable': ' '.join(filter(lambda x: not x.endswith('='), ( + '{}={}'.format(lvl, ','.join(filter(None, ( + s if v is False else None + for s, v in svcs.items() + )))) + for lvl, svcs in self.services.items() + ))) + } + + def _stringify_dict_keys(self, d, sep): + self.__dict__[d] = sep.join(filter(None, ( + m if v is True else None + for m, v in self.__dict__[d].items() + ))) + + # TODO? determine_current_state() + def determine_actions(self, step, revise): + log = logging.getLogger('build') + self.revision = 0 + # TODO: be more specific about our parameters + self.remote_image = clouds.latest_build_image(self) + actions = {} + + # enable actions based on the specified step + if step in ['local', 'import', 'publish']: + actions['build'] = True + + if step in ['import', 'publish']: + actions['import'] = True + + if step == 'publish': + # we will resolve publish destinations (if any) later + actions['publish'] = True + + if revise: + if os.path.exists(self.local_path): + # remove previously built local image artifacts + log.warning('Removing existing local image dir %s', self.local_dir) + shutil.rmtree(self.local_dir) + + if self.remote_image and 'published' in self.remote_image['tags']: + log.warning('Bumping build revision for %s', self.name) + self.revision = int(self.remote_image['tags']['build_revision']) + 1 + + elif self.remote_image and 'imported' in self.remote_image['tags']: + # remove existing imported (but unpublished) image + log.warning('Removing unpublished remote image %s', self.remote_image['id']) + # TODO: be more specific? + clouds.remove_image(self) + + self.remote_image = None + + elif self.remote_image and 'imported' in self.remote_image['tags']: + # already imported, don't build/import again + log.warning('Already imported, skipping build/import') + actions.pop('build', None) + actions.pop('import', None) + + if os.path.exists(self.local_path): + log.warning('Already built, skipping build') + # local image's already built, don't rebuild + actions.pop('build', None) + + # set at time of import, carries forward when published + if self.remote_image: + self.end_of_life = self.remote_image['tags']['end_of_life'] + self.revision = self.remote_image['tags']['build_revision'] + + else: + # default to tomorrow's date if unset + if 'end_of_life' not in self.__dict__: + tomorrow = datetime.utcnow() + timedelta(days=1) + self.end_of_life = tomorrow.strftime('%F') + + self.actions = list(actions) + log.info('%s/%s-r%s = %s', self.cloud, self.name, self.revision, self.actions) + + +class Tags(dict): + + def __init__(self, d={}, from_list=None, key_name='Key', value_name='Value'): + for key, value in d.items(): + self.__setattr__(key, value) + + if from_list: + self.from_list(from_list, key_name, value_name) + + def __getattr__(self, key): + return self[key] + + def __setattr__(self, key, value): + self[key] = str(value) + + def __delattr__(self, key): + del self[key] + + def pop(self, key, default): + value = default + if key in self: + value = self[key] + del self[key] + + return value + + def as_list(self, key_name='Key', value_name='Value'): + return [{key_name: k, value_name: v} for k, v in self.items()] + + def from_list(self, list=[], key_name='Key', value_name='Value'): + for tag in list: + self.__setattr__(tag[key_name], tag[value_name]) diff --git a/scripts/cleanup b/scripts/cleanup index 2c97cba..81e579b 100644 --- a/scripts/cleanup +++ b/scripts/cleanup @@ -1,7 +1,7 @@ #!/bin/sh -eu # vim: ts=4 et: -[ -z "$DEBUG" ] || set +x +[ -z "$DEBUG" ] || [ "$DEBUG" = 0 ] || set -x export \ TARGET=/mnt diff --git a/scripts/setup b/scripts/setup index 15e1d2f..6093b59 100755 --- a/scripts/setup +++ b/scripts/setup @@ -1,7 +1,7 @@ #!/bin/sh -eu # vim: ts=4 et: -[ -z "$DEBUG" -o "$DEBUG" = 0 ] || set -x +[ -z "$DEBUG" ] || [ "$DEBUG" = 0 ] || set -x export \ DEVICE=/dev/vda \ diff --git a/scripts/setup-tiny b/scripts/setup-tiny index 9d0bc9c..2fa00ab 100755 --- a/scripts/setup-tiny +++ b/scripts/setup-tiny @@ -9,7 +9,7 @@ # It is our intention to eventually incorporate this in a tiny-cloud-bootstrap # package (and per-cloud subpackages). -[ -z "$DEBUG" -o "$DEBUG" = 0 ] || set -x +[ -z "$DEBUG" ] || [ "$DEBUG" = 0 ] || set -x TARGET=/mnt SETUP=/tmp/setup-tiny.d From 274d883acb82d900abee9c451e1503777f7d02b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jake=20Buchholz=20G=C3=B6kt=C3=BCrk?= Date: Sun, 28 Nov 2021 23:04:28 +0000 Subject: [PATCH 116/125] alpine-cloud-images, part three --- alpine.pkr.hcl | 22 +- alpine.py | 3 + build | 18 +- cloud_helper.py | 32 +-- clouds/__init__.py | 13 +- clouds/aws.py | 152 ++++++------- clouds/identity_broker_client.py | 6 +- clouds/interfaces/adapter.py | 6 +- configs/alpine.conf | 54 +++-- configs/arch/x86_64.conf | 3 + configs/bootstrap/cloudinit.conf | 2 - configs/bootstrap/tiny.conf | 5 +- configs/cloud/aws.conf | 51 ++--- configs/cloud/oci.conf | 2 - configs/firmware/bios.conf | 8 +- configs/firmware/uefi.conf | 4 +- configs/{configs.conf => images.conf} | 0 configs/version/3.15.conf | 9 + configs/version/base/1.conf | 2 - configs/version/base/2.conf | 1 + configs/version/base/3.conf | 3 +- configs/version/base/4.conf | 8 + configs/version/edge.conf | 6 +- gen_releases.py | 100 +++++++++ image_configs.py | 201 +++++++++++------- overlays/testing/configs/alpine-testing.conf | 39 ++++ overlays/testing/configs/images.conf | 1 + .../testing/configs/testing/cloudinit.conf | 9 + overlays/testing/configs/testing/oci.conf | 4 + overlays/testing/scripts/setup-cloudinit | 27 +++ scripts/setup | 33 ++- 31 files changed, 534 insertions(+), 290 deletions(-) delete mode 100644 configs/bootstrap/cloudinit.conf delete mode 100644 configs/cloud/oci.conf rename configs/{configs.conf => images.conf} (100%) create mode 100644 configs/version/3.15.conf create mode 100644 configs/version/base/4.conf create mode 100755 gen_releases.py create mode 100644 overlays/testing/configs/alpine-testing.conf create mode 120000 overlays/testing/configs/images.conf create mode 100644 overlays/testing/configs/testing/cloudinit.conf create mode 100644 overlays/testing/configs/testing/oci.conf create mode 100755 overlays/testing/scripts/setup-cloudinit diff --git a/alpine.pkr.hcl b/alpine.pkr.hcl index 3c93c5e..e55f28b 100644 --- a/alpine.pkr.hcl +++ b/alpine.pkr.hcl @@ -28,15 +28,9 @@ locals { # randomly generated password password = uuidv4() - # all build configs - all_configs = yamldecode(file("work/configs.yaml")) - - # load the build actions to be taken - actions = yamldecode(file("work/actions.yaml")) - # resolve actionable build configs - configs = { for b, acfg in local.actions: - b => merge(local.all_configs[b], acfg) if length(acfg.actions) > 0 + configs = { for b, cfg in yamldecode(file("work/images.yaml")): + b => cfg if contains(keys(cfg), "actions") } } @@ -99,10 +93,10 @@ build { boot_wait = var.qemu.boot_wait[B.value.arch] # results - output_directory = B.value.image.dir - disk_size = B.value.image.size - format = B.value.image.format - vm_name = B.value.image.file + output_directory = "work/images/${B.value.cloud}/${B.value.image_key}" + disk_size = B.value.size + format = B.value.local_format + vm_name = "image.${B.value.local_format}" } } @@ -150,16 +144,18 @@ build { environment_vars = [ "DEBUG=${var.DEBUG}", "ARCH=${B.value.arch}", + "BOOTLOADER=${B.value.bootloader}", "BOOTSTRAP=${B.value.bootstrap}", "BUILD_NAME=${B.value.name}", "BUILD_REVISION=${B.value.revision}", "CLOUD=${B.value.cloud}", "END_OF_LIFE=${B.value.end_of_life}", "FIRMWARE=${B.value.firmware}", - "IMAGE_LOGIN=${B.value.image.login}", + "IMAGE_LOGIN=${B.value.login}", "INITFS_FEATURES=${B.value.initfs_features}", "KERNEL_MODULES=${B.value.kernel_modules}", "KERNEL_OPTIONS=${B.value.kernel_options}", + "MOTD=${B.value.motd}", "PACKAGES_ADD=${B.value.packages.add}", "PACKAGES_DEL=${B.value.packages.del}", "PACKAGES_NOSCRIPTS=${B.value.packages.noscripts}", diff --git a/alpine.py b/alpine.py index ebf99ac..46b10f1 100644 --- a/alpine.py +++ b/alpine.py @@ -8,6 +8,8 @@ from urllib.request import urlopen CDN_URL = 'https://dl-cdn.alpinelinux.org/alpine' +# TODO: also get EOL from authoritative source + def get_version_release(alpine_version): apk_ver = get_apk_version(alpine_version, 'main', 'x86_64', 'alpine-base') release = apk_ver.split('-')[0] @@ -16,6 +18,7 @@ def get_version_release(alpine_version): # TODO? maybe download and parse APKINDEX instead? +# also check out https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/latest-releases.yaml def get_apk_version(alpine_version, repo, arch, apk): repo_url = f"{CDN_URL}/{alpine_version}/{repo}/{arch}" apks_re = re.compile(f'"{apk}-(\\d.*)\\.apk"') diff --git a/build b/build index 86df6ea..6f13f5c 100755 --- a/build +++ b/build @@ -13,7 +13,6 @@ if not os.path.exists('work'): import venv PIP_LIBS = [ - 'pip', 'mergedeep', 'pyhocon', 'python-dateutil', @@ -21,6 +20,7 @@ if not os.path.exists('work'): ] print('Work environment does not exist, creating...', file=sys.stderr) venv.create('work', with_pip=True) + subprocess.run(['work/bin/pip', 'install', '-U', 'pip', 'wheel']) subprocess.run(['work/bin/pip', 'install', '-U', *PIP_LIBS]) # Re-execute using the right virtual environment, if necessary. @@ -109,6 +109,7 @@ def is_same_dir_symlink(x): return x_link == os.path.basename(x_link) +# TODO: revisit this to improve --custom overlay implementation def install_overlay(overlay): log.info("Installing '%s' overlay in work environment", overlay) dest_dir = os.path.join('work', overlay) @@ -123,7 +124,7 @@ def install_overlay(overlay): else: rel_x = os.path.relpath(src_x, dest_dir) - # TODO: only images.conf symlink can be overridden + # TODO: only images.conf symlink can be overridden, in reality if os.path.islink(dest_x): # only same-dir symlinks can be overridden if not is_same_dir_symlink(dest_x): @@ -230,7 +231,7 @@ log.debug(args) # set up credential provider, if we're going to use it if args.use_broker: - clouds.set_credential_provider() + clouds.set_credential_provider(debug=args.debug) ### Setup Configs @@ -256,7 +257,7 @@ if args.step == 'configs': ### What needs doing? -if not image_configs.determine_actions( +if not image_configs.refresh_state( step=args.step, only=args.only, skip=args.skip, revise=args.revise): log.info('No pending actions to take at this time.') sys.exit(0) @@ -307,4 +308,11 @@ if p.returncode != 0: log.info('Packer Completed') -# TODO? collect artifacts? +# update final state in work/images.yaml +image_configs.refresh_state( + step='final', + only=args.only, + skip=args.skip +) + +log.info('Build Finished') diff --git a/cloud_helper.py b/cloud_helper.py index 3aaeaa0..d568254 100755 --- a/cloud_helper.py +++ b/cloud_helper.py @@ -42,28 +42,6 @@ ACTIONS = ['import', 'publish'] LOGFORMAT = '%(name)s - %(levelname)s - %(message)s' -### Functions - -# TODO? be more specific with args? -# import image config's local image to cloud -def import_image(ic): - imported = clouds.import_image(ic) - # write imported metadata - imported_yaml = Path(os.path.join(ic.local_dir, 'imported.yaml')) - yaml.dump(imported, imported_yaml) - - -# TODO? be more specific with args? -# publish image config's imported image to target regions with expected permissions -def publish_image(ic): - published = clouds.publish_image(ic) - # ensure image work directory exists - os.makedirs(ic.local_dir, exist_ok=True) - # write published metadata - published_yaml = Path(os.path.join(ic.local_dir, 'published.yaml')) - yaml.dump(published, published_yaml) - - ### Command Line & Logging parser = argparse.ArgumentParser(description=NOTE) @@ -85,7 +63,7 @@ log.debug(args) # set up credential provider, if we're going to use it if args.use_broker: - clouds.set_credential_provider() + clouds.set_credential_provider(debug=args.debug) # load build configs configs = ImageConfigManager( @@ -95,13 +73,15 @@ configs = ImageConfigManager( ) yaml = YAML() -yaml.default_flow_style = False +yaml.explicit_start = True for image_key in args.image_keys: image_config = configs.get(image_key) if args.action == 'import': - import_image(image_config) + clouds.import_image(image_config) elif args.action == 'publish': - publish_image(image_config) + os.makedirs(image_config.local_dir, exist_ok=True) + artifacts = clouds.publish_image(image_config) + yaml.dump(artifacts, Path(image_config.local_dir) / 'artifacts.yaml') diff --git a/clouds/__init__.py b/clouds/__init__.py index f35e94d..cd23d33 100644 --- a/clouds/__init__.py +++ b/clouds/__init__.py @@ -16,9 +16,9 @@ register(aws) # , oci, azure, gcp) # using a credential provider is optional, set across all adapters -def set_credential_provider(): +def set_credential_provider(debug=False): from .identity_broker_client import IdentityBrokerClient - cred_provider = IdentityBrokerClient() + cred_provider = IdentityBrokerClient(debug=debug) for adapter in ADAPTERS.values(): adapter.cred_provider = cred_provider @@ -26,15 +26,18 @@ def set_credential_provider(): ### forward to the correct adapter def latest_build_image(config): - return ADAPTERS[config.cloud].latest_build_image(config.name) + return ADAPTERS[config.cloud].latest_build_image( + config.project, + config.image_key + ) def import_image(config): return ADAPTERS[config.cloud].import_image(config) -def remove_image(config): - return ADAPTERS[config.cloud].remove_image(config.remote_image['id']) +def remove_image(config, image_id): + return ADAPTERS[config.cloud].remove_image(image_id) def publish_image(config): diff --git a/clouds/aws.py b/clouds/aws.py index 53808f0..51b5fc9 100644 --- a/clouds/aws.py +++ b/clouds/aws.py @@ -2,20 +2,22 @@ # vim: ts=4 et: import logging +import hashlib import os -import random -import string -import sys import time from datetime import datetime from subprocess import Popen, PIPE, run from .interfaces.adapter import CloudAdapterInterface -from image_configs import Tags +from image_configs import Tags, DictObj class AWSCloudAdapter(CloudAdapterInterface): + IMAGE_INFO = [ + 'revision', 'imported', 'import_id', 'import_region', 'published', + 'end_of_life', + ] CRED_MAP = { 'access_key': 'aws_access_key_id', 'secret_key': 'aws_secret_access_key', @@ -54,7 +56,7 @@ class AWSCloudAdapter(CloudAdapterInterface): return self._sessions[region] - # TODO: property? + @property def regions(self): if self.cred_provider: return self.cred_provider.get_regions(self.cloud) @@ -62,7 +64,7 @@ class AWSCloudAdapter(CloudAdapterInterface): # list of all subscribed regions return {r['RegionName']: True for r in self.session().client('ec2').describe_regions()['Regions']} - # TODO: property? + @property def default_region(self): if self.cred_provider: return self.cred_provider.get_default_region(self.cloud) @@ -79,82 +81,63 @@ class AWSCloudAdapter(CloudAdapterInterface): # return dict suitable to use for session() return {self.CRED_MAP[k]: v for k, v in creds.items() if k in self.CRED_MAP} - def _get_images_with_tags(self, tags={}, region=None): + def _get_images_with_tags(self, project, image_key, tags={}, region=None): ec2r = self.session(region).resource('ec2') req = {'Owners': ['self'], 'Filters': []} + tags |= { + 'project': project, + 'image_key': image_key, + } for k, v in tags.items(): req['Filters'].append({'Name': f"tag:{k}", 'Values': [str(v)]}) return sorted( ec2r.images.filter(**req), key=lambda k: k.creation_date, reverse=True) - def _aws_tags(self, b_tags): - # convert dict to [{'Key': k, 'Value': v}, ...] - a_tags = [] - for k, v in b_tags.items(): - # add extra Name tag - if k == 'name': - a_tags += [{'Key': 'Name', 'Value': str(v)}] - - a_tags += [{'Key': k, 'Value': str(v)}] - - return a_tags - - # cloud-agnostic necessary info about an ec2.Image + # necessary cloud-agnostic image info def _image_info(self, i): tags = Tags(from_list=i.tags) - del tags.Name - # TODO? realm/partition? - return { - 'id': i.image_id, - 'region': i.meta.client.meta.region_name, - 'tags': dict(tags) - # TODO? narrow down to these? - # imported = i.tags.imported - # published = i.tags.published - # revision = i.tags.build_revision - # source_id = i.image_id, - # source_region = i.meta.client.meta.region_name, - } + return DictObj({k: tags.get(k, None) for k in self.IMAGE_INFO}) # get the latest imported image for a given build name - def latest_build_image(self, build_name): - images = self._get_images_with_tags(tags={'build_name': build_name}) + def latest_build_image(self, project, image_key): + images = self._get_images_with_tags( + project=project, + image_key=image_key, + ) if images: # first one is the latest return self._image_info(images[0]) return None - ## TODO: rework these next two as a Tags class - # import an image # NOTE: requires 'vmimport' role with read/write of .* and its objects def import_image(self, ic): log = logging.getLogger('import') image_path = ic.local_path - image_aws = image_path.replace(ic.local_format, 'vhd') + image_aws = ic.local_dir / 'image.vhd' + name = ic.image_name description = ic.image_description - session = self.session() - s3r = session.resource('s3') - ec2c = session.client('ec2') - ec2r = session.resource('ec2') - # convert QCOW2 to VHD log.info('Converting %s to VHD format', image_path) p = Popen(self.CONVERT_CMD + (image_path, image_aws), stdout=PIPE, stdin=PIPE, encoding='utf8') out, err = p.communicate() if p.returncode: log.error('Unable to convert %s to VHD format (%s)', image_path, p.returncode) + log.error('EXIT: %d', p.returncode) log.error('STDOUT:\n%s', out) log.error('STDERR:\n%s', err) - sys.exit(p.returncode) + raise RuntimeError - bucket_name = 'alpine-cloud-images.' + ''.join( - random.SystemRandom().choice(string.ascii_lowercase + string.digits) - for _ in range(40)) - s3_key = os.path.basename(image_aws) + session = self.session() + s3r = session.resource('s3') + ec2c = session.client('ec2') + ec2r = session.resource('ec2') + + bucket_name = 'alpine-cloud-images.' + hashlib.sha1(os.urandom(40)).hexdigest() + s3_key = name + '.vhd' bucket = s3r.Bucket(bucket_name) log.info('Creating S3 bucket %s', bucket.name) @@ -166,7 +149,7 @@ class AWSCloudAdapter(CloudAdapterInterface): try: log.info('Uploading %s to %s', image_aws, s3_url) - bucket.upload_file(image_aws, s3_key) + bucket.upload_file(str(image_aws), s3_key) # import snapshot from S3 log.info('Importing EC2 snapshot from %s', s3_url) @@ -187,7 +170,7 @@ class AWSCloudAdapter(CloudAdapterInterface): if task_detail['Status'] not in ['pending', 'active', 'completed']: msg = f"Bad EC2 snapshot import: {task_detail['Status']} - {task_detail['StatusMessage']}" log.error(msg) - raise(RuntimeError, msg) + raise RuntimeError(msg) if task_detail['Status'] == 'completed': snapshot_id = task_detail['SnapshotId'] @@ -246,8 +229,8 @@ class AWSCloudAdapter(CloudAdapterInterface): # tag image (adds imported tag) log.info('Tagging EC2 AMI %s', image_id) tags.imported = datetime.utcnow().isoformat() - tags.source_id = image_id - tags.source_region = ec2c.meta.region_name + tags.import_id = image_id + tags.import_region = ec2c.meta.region_name image.create_tags(Tags=tags.as_list()) except Exception: log.error('Unable to tag image:', exc_info=True) @@ -263,7 +246,6 @@ class AWSCloudAdapter(CloudAdapterInterface): log = logging.getLogger('build') ec2r = self.session().resource('ec2') image = ec2r.Image(image_id) - # TODO? protect against removing a published image? snapshot_id = image.block_device_mappings[0]['Ebs']['SnapshotId'] snapshot = ec2r.Snapshot(snapshot_id) log.info('Deregistering %s', image_id) @@ -271,35 +253,29 @@ class AWSCloudAdapter(CloudAdapterInterface): log.info('Deleting %s', snapshot_id) snapshot.delete() - # TODO: this should be standardized and work with cred_provider - def _get_all_regions(self): - ec2c = self.session().client('ec2') - res = ec2c.describe_regions(AllRegions=True) - return { - r['RegionName']: r['OptInStatus'] != 'not-opted-in' - for r in res['Regions'] - } - # publish an image def publish_image(self, ic): log = logging.getLogger('publish') - source_image = self.latest_build_image(ic.name) + source_image = self.latest_build_image( + ic.project, + ic.image_key, + ) if not source_image: - log.error('No source image for %s', ic.name) - sys.exit(1) + log.error('No source image for %s', ic.image_key) + raise RuntimeError('Missing source imamge') - source_id = source_image['id'] - log.info('Publishing source: %s, %s', source_image['region'], source_id) + source_id = source_image.import_id + source_region = source_image.import_region + log.info('Publishing source: %s/%s', source_region, source_id) source = self.session().resource('ec2').Image(source_id) source_tags = Tags(from_list=source.tags) - publish = ic.publish # sort out published image access permissions perms = {'groups': [], 'users': []} - if 'PUBLIC' in publish['access'] and publish['access']['PUBLIC']: + if ic.access.get('PUBLIC', None): perms['groups'] = ['all'] else: - for k, v in publish['access'].items(): + for k, v in ic.access.items(): if v: log.debug('users: %s', k) perms['users'].append(str(k)) @@ -307,14 +283,13 @@ class AWSCloudAdapter(CloudAdapterInterface): log.debug('perms: %s', perms) # resolve destination regions - regions = self.regions() - if 'ALL' in publish['regions'] and publish['regions']['ALL']: + regions = self.regions + if ic.regions.pop('ALL', None): log.info('Publishing to ALL available regions') else: # clear ALL out of the way if it's still there - publish['regions'].pop('ALL', None) - # TODO: politely warn/skip unknown regions in b.aws.regions - regions = {r: regions[r] for r in publish['regions']} + ic.regions.pop('ALL', None) + regions = {r: regions[r] for r in ic.regions} publishing = {} for r in regions.keys(): @@ -324,10 +299,9 @@ class AWSCloudAdapter(CloudAdapterInterface): images = self._get_images_with_tags( region=r, - tags={ - 'build_name': ic.name, - 'build_revision': ic.revision - } + project=ic.project, + image_key=ic.image_key, + tags={'revision': ic.revision} ) if images: image = images[0] @@ -338,8 +312,8 @@ class AWSCloudAdapter(CloudAdapterInterface): res = ec2c.copy_image( Description=source.description, Name=source.name, - SourceImageId=source.id, - SourceRegion=source_image['region'], + SourceImageId=source_id, + SourceRegion=source_region, ) except Exception: log.warning('Skipping %s, unable to copy image:', r, exc_info=True) @@ -351,11 +325,11 @@ class AWSCloudAdapter(CloudAdapterInterface): publishing[r] = image - published = {} + artifacts = {} copy_wait = 180 - while len(published) < len(publishing): + while len(artifacts) < len(publishing): for r, image in publishing.items(): - if r not in published: + if r not in artifacts: image.reload() if image.state == 'available': # tag image @@ -395,22 +369,22 @@ class AWSCloudAdapter(CloudAdapterInterface): log.info('%s: Setting EOL deprecation time on %s', r, image.id) ec2c.enable_image_deprecation( ImageId=image.id, - DeprecateAt=f"{source_image['tags']['end_of_life']}T23:59:59Z" + DeprecateAt=f"{source_image.end_of_life}T23:59:59Z" ) - published[r] = self._image_info(image) + artifacts[r] = image.id if image.state == 'failed': log.error('%s: %s - %s - %s', r, image.id, image.state, image.state_reason) - published[r] = None + artifacts[r] = None - remaining = len(publishing) - len(published) + remaining = len(publishing) - len(artifacts) if remaining > 0: log.info('Waiting %ds for %d images to complete', copy_wait, remaining) time.sleep(copy_wait) copy_wait = 30 - return published + return artifacts def register(cloud, cred_provider=None): diff --git a/clouds/identity_broker_client.py b/clouds/identity_broker_client.py index d47a21c..0465d82 100644 --- a/clouds/identity_broker_client.py +++ b/clouds/identity_broker_client.py @@ -59,6 +59,7 @@ class IdentityBrokerClient: return True def _get(self, path): + self._logger.debug("request: %s", path) if not self._is_cache_valid(path): while True: # to handle rate limits try: @@ -95,6 +96,7 @@ class IdentityBrokerClient: self._cache[path] = json.load(res) break + self._logger.debug("response: %s", self._cache[path]) return self._cache[path] def get_credentials_url(self, vendor): @@ -117,7 +119,6 @@ class IdentityBrokerClient: if region['default']: self._default_region[vendor] = region['name'] - out[None] = region['credentials_url'] return out @@ -128,4 +129,7 @@ class IdentityBrokerClient: return self._default_region.get(vendor) def get_credentials(self, vendor, region=None): + if not region: + region = self.get_default_region(vendor) + return self._get(self.get_regions(vendor)[region]) diff --git a/clouds/interfaces/adapter.py b/clouds/interfaces/adapter.py index d0b5b07..77618b2 100644 --- a/clouds/interfaces/adapter.py +++ b/clouds/interfaces/adapter.py @@ -13,9 +13,11 @@ class CloudAdapterInterface: def sdk(self): raise NotImplementedError + @property def regions(self): raise NotImplementedError + @property def default_region(self): raise NotImplementedError @@ -25,11 +27,9 @@ class CloudAdapterInterface: def session(self, region=None): raise NotImplementedError - def latest_build_image(self, build_name): + def latest_build_image(self, project, image_key): raise NotImplementedError - # TODO: be more specific about what gets passed into these - def import_image(self, config): raise NotImplementedError diff --git a/configs/alpine.conf b/configs/alpine.conf index 9bde530..6180074 100644 --- a/configs/alpine.conf +++ b/configs/alpine.conf @@ -1,24 +1,45 @@ # vim: ts=2 et: +# NOTE: If you are using alpine-cloud-images to build public cloud images +# for something/someone other than Alpine Linux, you *MUST* override +# *AT LEAST* the 'project' setting with a unique identifier string value +# via a "config overlay" to avoid image import and publishing collisions. + +project = https://alpinelinux.org/cloud + # all build configs start with these Default { + project = ${project} + # image name/description components name = [ alpine ] - description = [ "Alpine Linux {release}-r{revision}" ] + description = [ Alpine Linux ] + + motd { + welcome = "Welcome to Alpine!" + wiki = \ + "The Alpine Wiki contains a large amount of how-to guides and general\n"\ + "information about administrating Alpine systems.\n"\ + "See ." + version_notes = "Release Notes:\n"\ + "* " + release_notes = "* = true - # ... - } - regions { - ALL = true - # alternately... - # = true - # ... - } - } -} +kernel_modules.ena = true +initfs_features.ena = true + +access.PUBLIC = true +regions.ALL = true WHEN { - # Arch aarch64 { - aws.arch = arm64 + # new AWS aarch64 default... + kernel_modules.gpio_pl061 = true + initfs_features.gpio_pl061 = true + WHEN { + "3.14 3.13 3.12" { + # ...but not supported for older versions + kernel_modules.gpio_pl061 = false + initfs_features.gpio_pl061 = false + } + } } - x86_64 { - aws.arch = x86_64 - } - - # Firmware - bios { - aws.boot_mode = legacy-bios - } - uefi { - aws.boot_mode = uefi - } -} +} \ No newline at end of file diff --git a/configs/cloud/oci.conf b/configs/cloud/oci.conf deleted file mode 100644 index 17a83c2..0000000 --- a/configs/cloud/oci.conf +++ /dev/null @@ -1,2 +0,0 @@ -# vim: ts=2 et: -builder = qemu \ No newline at end of file diff --git a/configs/firmware/bios.conf b/configs/firmware/bios.conf index ca37692..c1d9602 100644 --- a/configs/firmware/bios.conf +++ b/configs/firmware/bios.conf @@ -1,8 +1,6 @@ # vim: ts=2 et: name = [bios] -packages { - syslinux = --no-scripts -} - -qemu.firmware = null \ No newline at end of file +bootloader = extlinux +packages.syslinux = --no-scripts +qemu.firmware = null \ No newline at end of file diff --git a/configs/firmware/uefi.conf b/configs/firmware/uefi.conf index b37c25b..fe23a45 100644 --- a/configs/firmware/uefi.conf +++ b/configs/firmware/uefi.conf @@ -1,8 +1,10 @@ # vim: ts=2 et: name = [uefi] +bootloader = grub-efi packages { - grub-efi = --no-scripts + grub-efi = --no-scripts + dosfstools = true } WHEN { diff --git a/configs/configs.conf b/configs/images.conf similarity index 100% rename from configs/configs.conf rename to configs/images.conf diff --git a/configs/version/3.15.conf b/configs/version/3.15.conf new file mode 100644 index 0000000..f7f92f2 --- /dev/null +++ b/configs/version/3.15.conf @@ -0,0 +1,9 @@ +# vim: ts=2 et: + +include required("base/3.conf") + +end_of_life = "2023-11-01" + +motd { + sudo_deprecated = "NOTE: 'sudo' has been deprecated, please use 'doas' instead." +} \ No newline at end of file diff --git a/configs/version/base/1.conf b/configs/version/base/1.conf index 628fe85..ac3cbc3 100644 --- a/configs/version/base/1.conf +++ b/configs/version/base/1.conf @@ -52,7 +52,6 @@ kernel_modules { usb-storage = true ext4 = true nvme = true - ena = true } kernel_options { @@ -62,5 +61,4 @@ kernel_options { initfs_features { nvme = true - ena = true } diff --git a/configs/version/base/2.conf b/configs/version/base/2.conf index 644485b..e1a8f43 100644 --- a/configs/version/base/2.conf +++ b/configs/version/base/2.conf @@ -5,6 +5,7 @@ include required("1.conf") packages { # drop old alpine-mirrors alpine-mirrors = null + # use iproute2-minimal instead of full iproute2 iproute2 = null iproute2-minimal = true diff --git a/configs/version/base/3.conf b/configs/version/base/3.conf index 3aba9b8..4373266 100644 --- a/configs/version/base/3.conf +++ b/configs/version/base/3.conf @@ -3,7 +3,6 @@ include required("2.conf") packages { - # doas replaces sudo - sudo = null + # doas will officially replace sudo in 3.16 doas = true } diff --git a/configs/version/base/4.conf b/configs/version/base/4.conf new file mode 100644 index 0000000..6f2e978 --- /dev/null +++ b/configs/version/base/4.conf @@ -0,0 +1,8 @@ +# vim: ts=2 et: + +include required("3.conf") + +packages { + # doas officially replaces sudo in 3.16 + sudo = false +} diff --git a/configs/version/edge.conf b/configs/version/edge.conf index 4818ada..885a4bf 100644 --- a/configs/version/edge.conf +++ b/configs/version/edge.conf @@ -1,6 +1,10 @@ # vim: ts=2 et: -include required("base/3.conf") +include required("base/4.conf") + +motd { + sudo_removed = "NOTE: 'sudo' is no longer installed by default, please use 'doas' instead." +} # clear out inherited repos repos = null diff --git a/gen_releases.py b/gen_releases.py new file mode 100755 index 0000000..cd038b5 --- /dev/null +++ b/gen_releases.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +# vim: ts=4 et: + +# Ensure we're using the Python virtual env with our installed dependencies +import os +import sys +import textwrap + +NOTE = textwrap.dedent(""" + This script's output is meant to be compatible with alpine-ec2-ami's + releases.yaml, in order to bridge the gap until https://alpinelinux.org/cloud + can be updated to be generated from another source, or dynamically calls an + published image metadata service. This script should only be run after + the main 'build' script has been used successfully to publish all images. + """) + +sys.pycache_prefix = 'work/__pycache__' + +if not os.path.exists('work'): + print('FATAL: Work directory does not exist.', file=sys.stderr) + print(NOTE, file=sys.stderr) + exit(1) + +# Re-execute using the right virtual environment, if necessary. +venv_args = [os.path.join('work', 'bin', 'python3')] + sys.argv +if os.path.join(os.getcwd(), venv_args[0]) != sys.executable: + print("Re-executing with work environment's Python...\n", file=sys.stderr) + os.execv(venv_args[0], venv_args) + +# We're now in the right Python environment + +import argparse +import logging + +from collections import defaultdict +from ruamel.yaml import YAML + +import clouds +from image_configs import ImageConfigManager + + +### Constants & Variables + +LOGFORMAT = '%(name)s - %(levelname)s - %(message)s' + + +### Functions + +# allows us to set values deep within an object that might not be fully defined +def dictfactory(): + return defaultdict(dictfactory) + + +# undo dictfactory() objects to normal objects +def undictfactory(o): + if isinstance(o, defaultdict): + o = {k: undictfactory(v) for k, v in o.items()} + return o + + +### Command Line & Logging + +parser = argparse.ArgumentParser(description=NOTE) +parser.add_argument( + '--use-broker', action='store_true', + help='use the identity broker to get credentials') +parser.add_argument('--debug', action='store_true', help='enable debug output') +args = parser.parse_args() + +log = logging.getLogger('gen_releases') +log.setLevel(logging.DEBUG if args.debug else logging.INFO) +console = logging.StreamHandler(sys.stderr) +console.setFormatter(logging.Formatter(LOGFORMAT)) +log.addHandler(console) +log.debug(args) + +# set up credential provider, if we're going to use it +if args.use_broker: + clouds.set_credential_provider() + +# load build configs +configs = ImageConfigManager( + conf_path='work/configs/images.conf', + yaml_path='work/images.yaml', + log='gen_releases' +) +# make sure images.yaml is up-to-date with reality +configs.refresh_state('final') + +yaml = YAML() + +releases = dictfactory() +for i_key, i_cfg in configs.get().items(): + release = i_cfg.version if i_cfg.version == 'edge' else i_cfg.release + releases[release][i_key][i_cfg.tags.name] = dict(i_cfg.tags) | { + 'creation_date': i_cfg.published, + 'artifacts': i_cfg.artifacts, + } + +yaml.dump(undictfactory(releases), sys.stdout) diff --git a/image_configs.py b/image_configs.py index b697c35..84efa02 100644 --- a/image_configs.py +++ b/image_configs.py @@ -3,7 +3,6 @@ import itertools import logging import mergedeep -import os import pyhocon import shutil @@ -30,7 +29,6 @@ class ImageConfigManager(): self.yaml = YAML() self.yaml.register_class(ImageConfig) - self.yaml.default_flow_style = False self.yaml.explicit_start = True # hide !ImageConfig tag from Packer self.yaml.representer.org_represent_mapping = self.yaml.representer.represent_mapping @@ -50,8 +48,7 @@ class ImageConfigManager(): # load already-resolved YAML configs, restoring ImageConfig objects def _load_yaml(self): - # TODO: no warning if we're being called from cloud_helper.py - self.log.warning('Loading existing %s', self.yaml_path) + self.log.info('Loading existing %s', self.yaml_path) for key, config in self.yaml.load(self.yaml_path).items(): self._configs[key] = ImageConfig(key, config) @@ -74,18 +71,29 @@ class ImageConfigManager(): # set version releases for v, vcfg in cfg.Dimensions.version.items(): # version keys are quoted to protect dots - self.set_version_release(v.strip('"'), vcfg) + self._set_version_release(v.strip('"'), vcfg) dimensions = list(cfg.Dimensions.keys()) self.log.debug('dimensions: %s', dimensions) for dim_keys in (itertools.product(*cfg['Dimensions'].values())): - image_key = '-'.join(dim_keys).replace('"', '') + config_key = '-'.join(dim_keys).replace('"', '') # dict of dimension -> dimension_key dim_map = dict(zip(dimensions, dim_keys)) + + # replace version with release, and make image_key from that release = cfg.Dimensions.version[dim_map['version']].release - image_config = ImageConfig(image_key, {'release': release} | dim_map) + (rel_map := dim_map.copy())['version'] = release + image_key = '-'.join(rel_map.values()) + + image_config = ImageConfig( + config_key, + { + 'image_key': image_key, + 'release': release + } | dim_map + ) # merge in the Default config image_config._merge(cfg.Default) @@ -93,12 +101,19 @@ class ImageConfigManager(): # merge in each dimension key's configs for dim, dim_key in dim_map.items(): dim_cfg = deepcopy(cfg.Dimensions[dim][dim_key]) + exclude = dim_cfg.pop('EXCLUDE', None) if exclude and set(exclude) & set(dim_keys): - self.log.debug('%s SKIPPED, %s excludes %s', image_key, dim_key, exclude) + self.log.debug('%s SKIPPED, %s excludes %s', config_key, dim_key, exclude) skip = True break + if eol := dim_cfg.get('end_of_life', None): + if self.now > datetime.fromisoformat(eol): + self.log.warning('%s SKIPPED, %s end_of_life %s', config_key, dim_key, eol) + skip = True + break + image_config._merge(dim_cfg) # now that we're done with ConfigTree/dim_cfg, remove " from dim_keys @@ -122,40 +137,41 @@ class ImageConfigManager(): image_config.qemu['iso_url'] = self.iso_url_format.format(arch=image_config.arch) # we've resolved everything, add tags attribute to config - self._configs[image_key] = image_config + self._configs[config_key] = image_config self._save_yaml() # set current version release - def set_version_release(self, v, c): + def _set_version_release(self, v, c): if v == 'edge': c.put('release', self.now.strftime('%Y%m%d')) c.put('end_of_life', self.tomorrow.strftime('%F')) else: c.put('release', get_version_release(f"v{v}")['release']) - # release is also appended to build name array + # release is also appended to name & description arrays c.put('name', [c.release]) + c.put('description', [c.release]) # update current config status - def determine_actions(self, step, only, skip, revise): - self.log.info('Determining Actions') + def refresh_state(self, step, only=[], skip=[], revise=False): + self.log.info('Refreshing State') has_actions = False for ic in self._configs.values(): # clear away any previous actions if hasattr(ic, 'actions'): delattr(ic, 'actions') - dim_keys = set(ic.image_key.split('-')) + dim_keys = set(ic.config_key.split('-')) if only and len(set(only) & dim_keys) != len(only): - self.log.debug("%s SKIPPED, doesn't match --only", ic.image_key) + self.log.debug("%s SKIPPED, doesn't match --only", ic.config_key) continue if skip and len(set(skip) & dim_keys) > 0: - self.log.debug('%s SKIPPED, matches --skip', ic.image_key) + self.log.debug('%s SKIPPED, matches --skip', ic.config_key) continue - ic.determine_actions(step, revise) + ic.refresh_state(step, revise) if not has_actions and len(ic.actions): has_actions = True @@ -166,8 +182,8 @@ class ImageConfigManager(): class ImageConfig(): - def __init__(self, image_key, obj={}): - self.image_key = str(image_key) + def __init__(self, config_key, obj={}): + self.config_key = str(config_key) tags = obj.pop('tags', None) self.__dict__ |= self._deep_dict(obj) # ensure tag values are str() when loading @@ -176,15 +192,19 @@ class ImageConfig(): @property def local_dir(self): - return os.path.join('work/images', self.name) + return Path('work/images') / self.cloud / self.image_key @property def local_path(self): - return os.path.join(self.local_dir, 'image.' + self.local_format) + return self.local_dir / ('image.' + self.local_format) + + @property + def published_yaml(self): + return self.local_dir / 'published.yaml' @property def image_name(self): - return '-r'.join([self.name, str(self.revision)]) + return self.name.format(**self.__dict__) @property def image_description(self): @@ -196,19 +216,20 @@ class ImageConfig(): t = { 'arch': self.arch, 'bootstrap': self.bootstrap, - 'build_name': self.name, - 'build_revision': self.revision, 'cloud': self.cloud, 'description': self.image_description, 'end_of_life': self.end_of_life, 'firmware': self.firmware, + 'image_key': self.image_key, 'name': self.image_name, + 'project': self.project, 'release': self.release, + 'revision': self.revision, 'version': self.version } # stuff that might not be there yet - for k in ['imported', 'published', 'source_id', 'source_region']: - if k in self.__dict__: + for k in ['imported', 'import_id', 'import_region', 'published']: + if self.__dict__.get(k, None): t[k] = self.__dict__[k] return Tags(t) @@ -246,6 +267,7 @@ class ImageConfig(): # stringify arrays self.name = '-'.join(self.name) self.description = ' '.join(self.description) + self._resolve_motd() self._stringify_repos() self._stringify_packages() self._stringify_services() @@ -253,6 +275,26 @@ class ImageConfig(): self._stringify_dict_keys('kernel_options', ' ') self._stringify_dict_keys('initfs_features', ' ') + def _resolve_motd(self): + # merge version/release notes, as apporpriate + if self.motd.get('version_notes', None) and self.motd.get('release_notes', None): + if self.version == 'edge': + # edge is, by definition, not released + self.motd.pop('version_notes', None) + self.motd.pop('release_notes', None) + + elif self.release == self.version + '.0': + # no point in showing the same URL twice + self.motd.pop('release_notes') + + else: + # combine version and release notes + self.motd['release_notes'] = self.motd.pop('version_notes') + '\n' + \ + self.motd['release_notes'] + + # TODO: be rid of null values + self.motd = '\n\n'.join(self.motd.values()).format(**self.__dict__) + def _stringify_repos(self): # stringify repos map # : # @ enabled @@ -323,13 +365,11 @@ class ImageConfig(): for m, v in self.__dict__[d].items() ))) - # TODO? determine_current_state() - def determine_actions(self, step, revise): + def refresh_state(self, step, revise=False): log = logging.getLogger('build') - self.revision = 0 - # TODO: be more specific about our parameters - self.remote_image = clouds.latest_build_image(self) actions = {} + revision = 0 + remote_image = clouds.latest_build_image(self) # enable actions based on the specified step if step in ['local', 'import', 'publish']: @@ -343,50 +383,83 @@ class ImageConfig(): actions['publish'] = True if revise: - if os.path.exists(self.local_path): + if self.local_path.exists(): # remove previously built local image artifacts log.warning('Removing existing local image dir %s', self.local_dir) shutil.rmtree(self.local_dir) - if self.remote_image and 'published' in self.remote_image['tags']: - log.warning('Bumping build revision for %s', self.name) - self.revision = int(self.remote_image['tags']['build_revision']) + 1 + if remote_image and remote_image.published: + log.warning('Bumping image revision for %s', self.image_key) + revision = int(remote_image.revision) + 1 - elif self.remote_image and 'imported' in self.remote_image['tags']: + elif remote_image and remote_image.imported: # remove existing imported (but unpublished) image - log.warning('Removing unpublished remote image %s', self.remote_image['id']) - # TODO: be more specific? - clouds.remove_image(self) + log.warning('Removing unpublished remote image %s', remote_image.import_id) + clouds.remove_image(self, remote_image.import_id) - self.remote_image = None + remote_image = None - elif self.remote_image and 'imported' in self.remote_image['tags']: - # already imported, don't build/import again - log.warning('Already imported, skipping build/import') - actions.pop('build', None) - actions.pop('import', None) + elif remote_image: + if remote_image.imported: + # already imported, don't build/import again + log.info('%s - already imported', self.image_key) + actions.pop('build', None) + actions.pop('import', None) - if os.path.exists(self.local_path): - log.warning('Already built, skipping build') + if remote_image.published: + # NOTE: re-publishing can update perms or push to new regions + log.info('%s - already published', self.image_key) + + if self.local_path.exists(): # local image's already built, don't rebuild + log.info('%s - already locally built', self.image_key) actions.pop('build', None) - # set at time of import, carries forward when published - if self.remote_image: - self.end_of_life = self.remote_image['tags']['end_of_life'] - self.revision = self.remote_image['tags']['build_revision'] + # merge remote_image data into image state + if remote_image: + self.__dict__ |= dict(remote_image) else: - # default to tomorrow's date if unset - if 'end_of_life' not in self.__dict__: - tomorrow = datetime.utcnow() + timedelta(days=1) - self.end_of_life = tomorrow.strftime('%F') + self.__dict__ |= { + 'revision': revision, + 'imported': None, + 'import_id': None, + 'import_region': None, + 'published': None, + } + self.end_of_life = self.__dict__.pop( + 'end_of_life', + # EOL is tomorrow, if otherwise unset + (datetime.utcnow() + timedelta(days=1)).strftime('%F') + ) + + # update artifacts, if we've got 'em + artifacts_yaml = self.local_dir / 'artifacts.yaml' + if artifacts_yaml.exists(): + yaml = YAML() + self.artifacts = yaml.load(artifacts_yaml) + else: + self.artifacts = None self.actions = list(actions) - log.info('%s/%s-r%s = %s', self.cloud, self.name, self.revision, self.actions) + log.info('%s/%s = %s', self.cloud, self.image_name, self.actions) + + self.state_updated = datetime.utcnow().isoformat() -class Tags(dict): +class DictObj(dict): + + def __getattr__(self, key): + return self[key] + + def __setattr__(self, key, value): + self[key] = value + + def __delattr__(self, key): + del self[key] + + +class Tags(DictObj): def __init__(self, d={}, from_list=None, key_name='Key', value_name='Value'): for key, value in d.items(): @@ -395,23 +468,9 @@ class Tags(dict): if from_list: self.from_list(from_list, key_name, value_name) - def __getattr__(self, key): - return self[key] - def __setattr__(self, key, value): self[key] = str(value) - def __delattr__(self, key): - del self[key] - - def pop(self, key, default): - value = default - if key in self: - value = self[key] - del self[key] - - return value - def as_list(self, key_name='Key', value_name='Value'): return [{key_name: k, value_name: v} for k, v in self.items()] diff --git a/overlays/testing/configs/alpine-testing.conf b/overlays/testing/configs/alpine-testing.conf new file mode 100644 index 0000000..9b68e5e --- /dev/null +++ b/overlays/testing/configs/alpine-testing.conf @@ -0,0 +1,39 @@ +# vim: ts=2 et: + +# Overlay for testing alpine-cloud-images + +# start with the production alpine config +include required("alpine.conf") + +# override specific things... + +project = alpine-cloud-images__test + +Default { + # unset before resetting + name = null + name = [ test ] + description = null + description = [ Alpine Test ] +} + +Dimensions { + bootstrap { + # not quite working yet + #cloudinit { include required("testing/cloudinit.conf") } + } + cloud { + # adapters need to be written + #oci { include required("testing/oci.conf") } + #gcp { include required("testing/gcp.conf") } + #azure { include required("testing/azure.conf") } + } +} + +# test in private, and only in a couple regions +Mandatory.access.PUBLIC = false +Mandatory.regions = { + ALL = false + us-west-2 = true + us-east-1 = true +} \ No newline at end of file diff --git a/overlays/testing/configs/images.conf b/overlays/testing/configs/images.conf new file mode 120000 index 0000000..cc0f93d --- /dev/null +++ b/overlays/testing/configs/images.conf @@ -0,0 +1 @@ +alpine-testing.conf \ No newline at end of file diff --git a/overlays/testing/configs/testing/cloudinit.conf b/overlays/testing/configs/testing/cloudinit.conf new file mode 100644 index 0000000..0659a1e --- /dev/null +++ b/overlays/testing/configs/testing/cloudinit.conf @@ -0,0 +1,9 @@ +# vim: ts=2 et: +name = [cloudinit] + +packages { + cloud-init = true + openssh-server-pam = true +} +scripts = [ setup-cloudinit ] +script_dirs = [ setup-cloudinit.d ] \ No newline at end of file diff --git a/overlays/testing/configs/testing/oci.conf b/overlays/testing/configs/testing/oci.conf new file mode 100644 index 0000000..0e80256 --- /dev/null +++ b/overlays/testing/configs/testing/oci.conf @@ -0,0 +1,4 @@ +# vim: ts=2 et: +builder = qemu + +# TBD \ No newline at end of file diff --git a/overlays/testing/scripts/setup-cloudinit b/overlays/testing/scripts/setup-cloudinit new file mode 100755 index 0000000..9407e57 --- /dev/null +++ b/overlays/testing/scripts/setup-cloudinit @@ -0,0 +1,27 @@ +#!/bin/sh -eu +# vim: ts=4 et: + +[ -z "$DEBUG" ] || [ "$DEBUG" = 0 ] || set -x + +TARGET=/mnt +#SETUP=/tmp/setup-cloudinit.d + +die() { + printf '\033[1;7;31m FATAL: %s \033[0m\n' "$@" >&2 # bold reversed red + exit 1 +} +einfo() { + printf '\n\033[1;7;36m> %s <\033[0m\n' "$@" >&2 # bold reversed cyan +} + +einfo "Installing up cloud-init bootstrap components..." + +# This adds the init scripts at the correct boot phases +chroot "$TARGET" /sbin/setup-cloud-init + +# cloud-init locks our user by default which means alpine can't login from +# SSH. This seems like a bug in cloud-init that should be fixed but we can +# hack around it for now here. +if [ -f "$TARGET"/etc/cloud/cloud.cfg ]; then + sed -i '/lock_passwd:/s/True/False/' "$TARGET"/etc/cloud/cloud.cfg +fi diff --git a/scripts/setup b/scripts/setup index 6093b59..1eefb59 100755 --- a/scripts/setup +++ b/scripts/setup @@ -51,7 +51,7 @@ make_filesystem() { unit MiB print root_dev="${DEVICE}2" - /usr/sbin/mkfs.fat -n EFI "${DEVICE}1" + mkfs.fat -n EFI "${DEVICE}1" fi mkfs.ext4 -O ^64bit -L / "$root_dev" @@ -69,9 +69,12 @@ install_base() { mkdir -p "$TARGET/etc/apk" echo "$REPOS" > "$TARGET/etc/apk/repositories" cp -a /etc/apk/keys "$TARGET/etc/apk" + # shellcheck disable=SC2086 apk --root "$TARGET" --initdb --no-cache add $PACKAGES_ADD + # shellcheck disable=SC2086 [ -z "$PACKAGES_NOSCRIPTS" ] || \ apk --root "$TARGET" --no-cache --no-scripts add $PACKAGES_NOSCRIPTS + # shellcheck disable=SC2086 [ -z "$PACKAGES_DEL" ] || \ apk --root "$TARGET" --no-cache del $PACKAGES_DEL } @@ -89,10 +92,28 @@ install_bootloader() { einfo "Installing Bootloader" # create initfs + + # shellcheck disable=SC2046 + kernel=$(basename $(find "$TARGET/lib/modules/"* -maxdepth 0)) + + # ensure features can be found by mkinitfs + for FEATURE in $INITFS_FEATURES; do + # already taken care of? + [ -f "$TARGET/etc/mkinitfs/features.d/$FEATURE.modules" ] || \ + [ -f "$TARGET/etc/mkinitfs/features.d/$FEATURE.files" ] && continue + # find the kernel module directory + module=$(chroot "$TARGET" /sbin/modinfo -k "$kernel" -n "$FEATURE") + [ -z "$module" ] && die "initfs_feature '$FEATURE' kernel module not found" + # replace everything after .ko with a * + echo "$module" | cut -d/ -f5- | sed -e 's/\.ko.*/.ko*/' \ + > "$TARGET/etc/mkinitfs/features.d/$FEATURE.modules" + done + + # TODO? this appends INITFS_FEATURES, we may want to allow removal someday? sed -Ei "s/^features=\"([^\"]+)\"/features=\"\1 $INITFS_FEATURES\"/" \ "$TARGET/etc/mkinitfs/mkinitfs.conf" - # shellcheck disable=SC2046 - chroot "$TARGET" /sbin/mkinitfs $(basename $(find "$TARGET/lib/modules/"* -maxdepth 0)) + + chroot "$TARGET" /sbin/mkinitfs "$kernel" if [ "$FIRMWARE" = uefi ]; then install_grub_efi @@ -174,6 +195,7 @@ configure_system() { fi # explicitly lock the root account + chroot "$TARGET" /bin/sh -c "/bin/echo 'root:*' | /usr/sbin/chpasswd -e" chroot "$TARGET" /usr/bin/passwd -l root # set up image user @@ -181,7 +203,7 @@ configure_system() { chroot "$TARGET" /usr/sbin/addgroup "$user" chroot "$TARGET" /usr/sbin/adduser -h "/home/$user" -s /bin/sh -G "$user" -D "$user" chroot "$TARGET" /usr/sbin/addgroup "$user" wheel - chroot "$TARGET" /usr/bin/passwd -u "$user" + chroot "$TARGET" /bin/sh -c "echo '$user:*' | /usr/sbin/chpasswd -e" # modify PS1s in /etc/profile to add user sed -Ei \ @@ -190,6 +212,9 @@ configure_system() { -e "s/( PS1=')(%m:)/\\1%n@\\2/" \ "$TARGET"/etc/profile + # write /etc/motd + echo "$MOTD" > "$TARGET"/etc/motd + setup_services } From a8fae241f06b90695ff069f19af47bee6a0db800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jake=20Buchholz=20G=C3=B6kt=C3=BCrk?= Date: Tue, 30 Nov 2021 16:11:32 +0000 Subject: [PATCH 117/125] Authoritative EOL / Publish Updates Tags & Description Implement alpine lib as a class * get versions/releases/EOLs from authoritative source * methods to build appropriate URLs * fallback to old method of determining release for RC versions * compute edge & RC EOLs here instead of elsewhere Remove end_of_life from configs, and don't return it from imported images. Always update image tags and descriptions when re/publishing images. Fix image description URL... :P --- alpine.py | 112 ++++++++++++++++++++++++++++++-------- build | 13 ++--- clouds/aws.py | 23 ++++---- configs/alpine.conf | 2 +- configs/version/3.11.conf | 2 - configs/version/3.12.conf | 4 +- configs/version/3.13.conf | 4 +- configs/version/3.14.conf | 4 +- configs/version/3.15.conf | 2 - image_configs.py | 23 +++----- 10 files changed, 120 insertions(+), 69 deletions(-) diff --git a/alpine.py b/alpine.py index 46b10f1..09f393d 100644 --- a/alpine.py +++ b/alpine.py @@ -1,35 +1,103 @@ # vim: ts=4 et: +import json import re +from datetime import datetime, timedelta from urllib.request import urlopen -# constants and vars -CDN_URL = 'https://dl-cdn.alpinelinux.org/alpine' +class Alpine(): + DEFAULT_RELEASES_URL = 'https://alpinelinux.org/releases.json' + DEFAULT_CDN_URL = 'https://dl-cdn.alpinelinux.org/alpine' -# TODO: also get EOL from authoritative source + def __init__(self, releases_url=None, cdn_url=None): + self.now = datetime.utcnow() + self.release_today = self.now.strftime('%Y%m%d') + self.eol_tomorrow = (self.now + timedelta(days=1)).strftime('%F') + self.latest = None + self.versions = {} + self.releases_url = releases_url or self.DEFAULT_RELEASES_URL + self.cdn_url = cdn_url or self.DEFAULT_CDN_URL -def get_version_release(alpine_version): - apk_ver = get_apk_version(alpine_version, 'main', 'x86_64', 'alpine-base') - release = apk_ver.split('-')[0] - version = '.'.join(release.split('.')[:2]) - return {'version': version, 'release': release} + # get all Alpine versions, and their EOL and latest release + res = urlopen(self.releases_url) + r = json.load(res) + branches = sorted( + r['release_branches'], reverse=True, + key=lambda x: x.get('branch_date', '0000-00-00') + ) + for b in branches: + ver = b['rel_branch'].lstrip('v') + if not self.latest: + self.latest = ver + rel = None + if releases := b.get('releases', None): + rel = sorted( + releases, reverse=True, key=lambda x: x['date'] + )[0]['version'] + elif ver == 'edge': + # edge "releases" is today's YYYYMMDD + rel = self.release_today -# TODO? maybe download and parse APKINDEX instead? -# also check out https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/latest-releases.yaml -def get_apk_version(alpine_version, repo, arch, apk): - repo_url = f"{CDN_URL}/{alpine_version}/{repo}/{arch}" - apks_re = re.compile(f'"{apk}-(\\d.*)\\.apk"') - res = urlopen(repo_url) - for line in map(lambda x: x.decode('utf8'), res): - if not line.startswith(' Date: Sun, 26 Dec 2021 21:52:47 +0000 Subject: [PATCH 118/125] Update Docs / Misc Refinements Fleshed out Documentation alpine.conf * improve motd readability * default access = public * default regions = all * remove version 3.11 (EOL) alpine-testing.conf * access is private * limit aws regions build * improve/refine overlay installation * rename "actions" step to "state" image_configs.py * target step "state" updates images.yaml as if "publish" WOULD be done (but won't be) --- CONFIGURATION.md | 318 +++++++++++++++++++ README.md | 289 +++++++---------- alpine.pkr.hcl | 13 +- build | 74 +++-- configs/alpine.conf | 31 +- configs/version/3.11.conf | 6 - image_configs.py | 25 +- overlays/testing/configs/alpine-testing.conf | 13 +- 8 files changed, 533 insertions(+), 236 deletions(-) create mode 100644 CONFIGURATION.md delete mode 100644 configs/version/3.11.conf diff --git a/CONFIGURATION.md b/CONFIGURATION.md new file mode 100644 index 0000000..f3b9ccf --- /dev/null +++ b/CONFIGURATION.md @@ -0,0 +1,318 @@ +# Configuration + +All the configuration for building image variants is defined by multiple +config files; the base configs for official Alpine Linux cloud images are in +the [`configs/`](configs/) directory. + +We use [HOCON](https://github.com/lightbend/config/blob/main/HOCON.md) for +configuration -- this primarily facilitates importing deeper configs from +other files, but also allows the extension/concatenation of arrays and maps +(which can be a useful feature for customization), and inline comments. + +---- +## Resolving Work Environment Configs and Scripts + +If `work/configs/` and `work/scripts/` don't exist, the `build` script will +install the contents of the base [`configs/`](configs/) and [`scripts/`](scripts/) +directories, and overlay additional `configs/` and `scripts/` subdirectories +from `--custom` directories (if any). + +Files cannot be installed over existing files, with one exception -- the +[`configs/images.conf`](configs/images.conf) same-directory symlink. Because +the `build` script _always_ loads `work/configs/images.conf`, this is the hook +for "rolling your own" custom Alpine Linux cloud images. + +The base [`configs/images.conf`](configs/images.conf) symlinks to +[`alpine.conf`](configs/images.conf), but this can be overridden using a +`--custom` directory containing a new `configs/images.conf` same-directory +symlink pointing to its custom top-level config. + +For example, the configs and scripts in the [`overlays/testing/`](overlays/testing/) +directory can be resolved in a _clean_ work environment with... +``` +./build configs --custom overlays/testing +``` +This results in the `work/configs/images.conf` symlink to point to +`work/configs/alpine-testing.conf` instead of `work/configs/alpine.conf`. + +If multiple directories are specified with `--custom`, they are applied in +the order given. + +---- +## Top-Level Config File + +Examples of top-level config files are [`configs/alpine.conf`](configs/alpine.conf) +and [`overlays/testing/configs/alpine-testing.conf`](overlays/testing/configs/alpine-testing.conf). + +There are three main blocks that need to exist (or be `import`ed into) the top +level HOCON configuration, and are merged in this exact order: + +### `Default` + +All image variant configs start with this block's contents as a starting point. +Arrays and maps can be appended by configs in `Dimensions` and `Mandatory` +blocks. + +### `Dimensions` + +The sub-blocks in `Dimensions` define the "dimensions" a variant config is +comprised of, and the different config values possible for that dimension. +The default [`alpine.conf`](configs/alpine.conf) defines the following +dimensional configs: + +* `version` - Alpine Linux _x_._y_ (plus `edge`) versions +* `arch` - machine architectures, `x86_64` or `aarch64` +* `firmware` - supports launching via legacy BIOS or UEFI +* `bootstrap` - the system/scripts responsible for setting up an instance + during its initial launch +* `cloud` - for specific cloud platforms + +The specific dimensional configs for an image variant are merged in the order +that the dimensions are listed. + +### `Mandatory` + +After a variant's dimensional configs have been applied, this is the last block +that's merged to the image variant configuration. This block is the ultimate +enforcer of any non-overrideable configuration across all variants, and can +also provide the last element to array config items. + +---- +## Dimensional Config Directives + +Because a full cross-product across all dimensional configs may produce images +variants that are not viable (i.e. `aarch64` simply does not support legacy +`bios`), or may require further adjustments (i.e. the `aws` `aarch64` images +require an additional kernel module from `3.15` forward, which aren't available +in previous versions), we have two special directives which may appear in +dimensional configs. + +### `EXCLUDE` array + +This directive provides an array of dimensional config keys which are +incompatible with the current dimensional config. For example, +[`configs/arch/aarch64.conf`](configs/arch/aarch64.conf) specifies... +``` +# aarch64 is UEFI only +EXCLUDE = [bios] +``` +...which indicates that any image variant that includes both `aarch64` (the +current dimensional config) and `bios` configuration should be skipped. + +### `WHEN` block + +This directive conditionally merges additional configuration ***IF*** the +image variant also includes a specific dimensional config key (or keys). In +order to handle more complex situations, `WHEN` blocks may be nested. For +example, [`configs/cloud/aws.conf`](configs/cloud/aws.conf) has... +``` +WHEN { + aarch64 { + # new AWS aarch64 default... + kernel_modules.gpio_pl061 = true + initfs_features.gpio_pl061 = true + WHEN { + "3.14 3.13 3.12" { + # ...but not supported for older versions + kernel_modules.gpio_pl061 = false + initfs_features.gpio_pl061 = false + } + } + } +``` +This configures AWS `aarch64` images to use the `gpio_pl061` kernel module in +order to cleanly shutdown/reboot instances from the web console, CLI, or SDK. +However, this module is unavailable on older Alpine versions. + +Spaces in `WHEN` block keys serve as an "OR" operator; nested `WHEN` blocks +function as "AND" operators. + +---- +## Config Settings + +**Scalar** values can be simply overridden in later configs. + +**Array** and **map** settings in later configs are merged with the previous +values, _or entirely reset if it's first set to `null`_, for example... +``` +some_array = [ thing ] +# [...] +some_array = null +some_array = [ other_thing ] +``` + +Mostly in order of appearance, as we walk through +[`configs/alpine.conf`](configs/alpine.conf) and the deeper configs it +imports... + +### `project` string + +This is a unique identifier for the whole collection of images being built. +For the official Alpine Linux cloud images, this is set to +`https://alpinelinux.org/cloud`. + +When building custom images, you **MUST** override **AT LEAST** this setting to +avoid image import and publishing collisions. + +### `name` array + +The ultimate contents of this array contribute to the overall naming of the +resultant image. Almost all dimensional configs will add to the `name` array, +with two notable exceptions: **version** configs' contribution to this array is +determined when `work/images.yaml` is resolved, and is set to the current +Alpine Linux release (_x.y.z_ or _YYYYMMDD_ for edge); also because +**cloud** images are isolated from each other, it's redundant to include that +in the image name. + +### `description` array + +Similar to the `name` array, the elements of this array contribute to the final +image description. However, for the official Alpine configs, only the +**version** dimension adds to this array, via the same mechanism that sets the +revision for the `name` array. + +### `motd` map + +This setting controls the contents of what ultimately gets written into the +variant image's `/etc/motd` file. Later configs can add additional messages, +replace existing contents, or remove them entirely (by setting the value to +`null`). + +The `motd.version_notes` and `motd.release_notes` settings have slightly +different behavior: +* if the Alpine release (_x.y.z_) ends with `.0`, `release_notes` is dropped + to avoid redundancy +* edge versions are technically not released, so both of these notes are + dropped from `/etc/motd` +* otherwise, `version_notes` and `release_notes` are concatenated together as + `release_notes` to avoid a blank line between them + +### `scripts` array + +These are the scripts that will be executed by Packer, in order, to do various +setup tasks inside a variant's image. The `work/scripts/` directory contains +all scripts, including those that may have been added via `build --custom`. + +### `script_dirs` array + +Directories (under `work/scripts/`) that contain additional data that the +`scripts` will need. Packer will copy these to the VM responsible for setting +up the variant image. + +### `size` string + +The size of the image disk, by default we use `1G` (1 GiB). This disk may (or +may not) be further partitioned, based on other factors. + +### `login` string + +The image's primary login user, set to `alpine`. + +### `local_format` string + +The local VM's disk image format, set to `qcow2`. + +### `repos` map + +Defines the contents of the image's `/etc/apk/repositories` file. The map's +key is the URL of the repo, and the value determines how that URL will be +represented in the `repositories` file... +| value | result | +|-|-| +| `null` | make no reference to this repo | +| `false` | this repo is commented out (disabled) | +| `true` | this repo is enabled for use | +| _tag_ | enable this repo with `@`_`tag`_ | + +### `packages` map + +Defines what APK packages to add/delete. The map's key is the package +name, and the value determines whether (or not) to install/uninstall the +package... +| value | result | +|-|-| +| `null` | don't add or delete | +| `false` | explicitly delete | +| `true` | add from default repos | +| _tag_ | add from `@`_`tag`_ repo | +| `--no-scripts` | add with `--no-scripts` option | +| `--no-scripts` _tag_ | add from `@`_`tag`_ repo, with `--no-scripts` option | + +### `services` map of maps + +Defines what services are enabled/disabled at various runlevels. The first +map's key is the runlevel, the second key is the service. The service value +determines whether (or not) to enable/disable the service at that runlevel... +| value | result | +|-|-| +| `null` | don't enable or disable | +| `false` | explicitly disable | +| `true` | explicitly enable | + +### `kernel_modules` map + +Defines what kernel modules are specified in the boot loader. The key is the +kernel module, and the value determines whether or not it's in the final +list... +| value | result | +|-|-| +| `null` | skip | +| `false` | skip | +| `true` | include | + +### `kernel_options` map + +Defines what kernel options are specified on the kernel command line. The keys +are the kernel options, the value determines whether or not it's in the final +list... +| value | result | +|-|-| +| `null` | skip | +| `false` | skip | +| `true` | include | + +### `initfs_features` map + +Defines what initfs features are included when making the image's initramfs +file. The keys are the initfs features, and the values determine whether or +not they're included in the final list... +| value | result | +|-|-| +| `null` | skip | +| `false` | skip | +| `true` | include | + +### `builder` string + +The Packer builder that's used to build images. This is set to `qemu`. + +### `qemu.machine_type` string + +The QEMU machine type to use when building local images. For x86_64, this is +set to `null`, for aarch64, we use `virt`. + +### `qemu.args` list of lists + +Additional QEMU arguments. For x86_64, this is set to `null`; but aarch64 +requires several additional arguments to start an operational VM. + +### `qemu.firmware` string + +The path to the QEMU firmware (installed in `work/firmware/`). This is only +used when creating UEFI images. + +### `bootloader` string + +The bootloader to use, currently `extlinux` or `grub-efi`. + +### `access` map + +When images are published, this determines who has access to those images. +The key is the cloud account (or `PUBLIC`), and the value is whether or not +access is granted, `true` or `false`/`null`. + +### `regions` map + +Determines where images should be published. The key is the region +identifier (or `ALL`), and the value is whether or not to publish to that +region, `true` or `false`/`null`. \ No newline at end of file diff --git a/README.md b/README.md index a2ac172..d9dd491 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,3 @@ -## _**NOTE: This is a Work-in-Progress**_ - -_It is intended that this will eventually replace -https://gitlab.alpinelinux.org/alpine/cloud/alpine-ec2-ami -as the offical multi-cloud image builder for Alpine Linux._ - ----- - # Alpine Linux Cloud Image Builder This repository contains the code and and configs for the build system used to @@ -18,26 +10,64 @@ own customized images. To get started with offical pre-built Alpine Linux cloud images, visit https://alpinelinux.org/cloud. Currently, we build official images for the -following providers: +following cloud platforms... * AWS -You should also be able to find the most recently published Alpine Linux -images via your cloud provider's web console, or programatically query their -API with a CLI tool or library. +...we are working on also publishing offical images to other major cloud +providers. -_(TODO: examples)_ +Each published image's name contains the Alpine version release, architecture, firmware, bootstrap, and image revision. These details (and more) are also +tagged on the images... + +| Tag | Description / Values | +|-----|----------------------| +| name | `alpine-`_`release-arch-firmware-bootstrap-`_`r`_`revision`_ | +| project | `https://alpinelinux.org/cloud` | +| image_key | _`release-arch-firmware-bootstrap-cloud`_ | +| version | Alpine version (_`x.y`_ or `edge`) | +| release | Alpine release (_`x.y.z`_ or _`YYYYMMDD`_ for edge) | +| arch | architecture (`aarch64` or `x86_64`) | +| firmware | boot mode (`bios` or `uefi`) | +| bootstrap | initial bootstrap system (`tiny` = tiny-ec2-bootstrap) | +| cloud | provider short name (`aws`) | +| revision | image revision number | +| imported | image import timestamp | +| import_id | imported image id | +| import_region | imported image region | +| published | image publication timestamp | +| description | image description | + +Although AWS does not allow cross-account filtering by tags, the image name can +still be used to filter images. For example, to get a list of available Alpine +3.x aarch64 images in AWS eu-west-2... +``` +aws ec2 describe-images \ + --region eu-west-2 \ + --owners 538276064493 \ + --filters \ + Name=name,Values='alpine-3.*-aarch64-*' \ + Name=state,Values=available \ + --output text \ + --query 'reverse(sort_by(Images, &CreationDate))[].[ImageId,Name,CreationDate]' +``` +To get just the most recent matching image, use... +``` + --query 'max_by(Image, &CreationDate).[ImageId,Name,CreationDate]' +``` ---- ## Build System The build system consists of a number of components: -* the primary `build` script and related cloud-specific helpers -* a directory of `configs/` defining the set of images to be built -* a Packer `alpine.pkr.hcl` orchestrating the images' local build, as well as - importing them to cloud providers and publishing them to desitnation regions -* a directory of `scripts/` which set up the images' contents during - provisioning +* the primary `build` script +* the `configs/` directory, defining the set of images to be built +* the `scripts/` directory, containing scripts and related data used to set up + image contents during provisioning +* the Packer `alpine.pkr.hcl`, which orchestrates build, import, and publishing + of images +* the `cloud_helper.py` script that Packer runs in order to do cloud-specific + import and publish operations ### Build Requirements * [Python](https://python.org) (3.9.7 is known to work) @@ -47,182 +77,105 @@ The build system consists of a number of components: ### Cloud Credentials -This build system relies on the cloud providers' Python API libraries to find -and use the necessary credentials -- via configuration in the user's home -directory (i.e. `~/.aws/...`, `~/.oci/...`, etc.) or with special environment -variables (i.e. `AWS_...`, `OCI_...`, etc.) +By default, the build system relies on the cloud providers' Python API +libraries to find and use the necessary credentials, usually via configuration +under the user's home directory (i.e. `~/.aws/`, `~/.oci/`, etc.) or or via +environment variables (i.e. `AWS_...`, `OCI_...`, etc.) -It is expected that each cloud provider's user/role will have been set up with -sufficient permission in order to accomplish the operations necessary to query, -import, and publish images; _it is highly recommended that no permissions are -granted beyond what is absolutely necessary_. +The credentials' user/role needs sufficient permission to query, import, and +publish images -- the exact details will vary from cloud to cloud. _It is +recommended that only the minimum required permissions are granted._ + +_We manage the credentials for publishing official Alpine images with an +"identity broker" service, and retrieve those credentials via the +`--use-broker` argument of the `build` script._ ### The `build` Script ``` -usage: build [-h] [--debug] [--clean] [--revise] {configs,local,import,publish} - [--custom DIR [DIR ...]] [--skip KEY [KEY ...]] [--only KEY [KEY ...]] +usage: build [-h] [--debug] [--clean] [--custom DIR [DIR ...]] + [--skip KEY [KEY ...]] [--only KEY [KEY ...]] [--revise] [--use-broker] [--no-color] [--parallel N] [--vars FILE [FILE ...]] + {configs,state,local,import,publish} -build steps: - configs resolve build configuration - local build local images - import import to cloud providers - publish set permissions and publish to cloud regions +positional arguments: (build up to and including this step) + configs resolve image build configuration + state refresh current image build state + local build images locally + import import local images to cloud provider default region + publish set image permissions and publish to cloud regions optional arguments: -h, --help show this help message and exit - --debug enable debug output (False) - --clean start with a clean work environment (False) - --revise bump revisions if images already published (False) + --debug enable debug output + --clean start with a clean work environment --custom DIR [DIR ...] overlay custom directory in work environment --skip KEY [KEY ...] skip variants with dimension key(s) --only KEY [KEY ...] only variants with dimension key(s) - --no-color turn off Packer color output (False) - --parallel N build N images in parallel (1) - --vars FILE [FILE ...] supply Packer with additional -vars-file(s) + --revise remove existing local/imported image, or bump + revision and rebuild if published + --use-broker use the identity broker to get credentials + --no-color turn off Packer color output + --parallel N build N images in parallel (default: 1) + --vars FILE [FILE ...] supply Packer with -vars-file(s) ``` -A `work/` directory will be created for its Python virtual environment, any -necessary Python libraries will be `pip install`ed, and `build` will execute -itself to ensure that it's running in the work environment. +The `build` script will automatically create a `work/` directory containing a +Python virtual environment if one does not already exist. This directory also +hosts other data related to building images. The `--clean` argument will +remove everything in the `work/` directory except for things related to the +Python virtual environment. -This directory also contains `configs/` and `scripts/` subdirs (with custom -overlays), UEFI firmware for QEMU, Packer cache, the generated `configs.yaml` -and `actions.yaml` configs, and the `images/` tree for local image builds. +If `work/configs/` or `work/scripts/` directories do not yet exist, they will +be populated with the base configuration and scripts from `configs/` and/or +`scripts/` directories. If any custom overlay directories are specified with +the `--custom` argument, their `configs/` and `scripts/` subdirectories are +also added to `work/configs/` and `work/scripts/`. -Use `--clean` if you want to re-overlay, re-download, re-generate, or rebuild -anything in the `work/` directory. To redo the Python virtual environment, -simply remove the `work/` directory and its contents, and it will be recreated -the next time `build` is run. +The "build step" positional argument deterimines the last step the `build` +script should execute -- all steps before this targeted step may also be +executed. That is, `build local` will first execute the `configs` step (if +necessary) and then the `state` step (always) before proceeding to the `local` +step. -### Build Steps +The `configs` step resolves configuration for all buildable images, and writes +it to `work/images.yaml`, if it does not already exist. -When executing `build` you also provide the target step you wish to reach. For -example, if you only want to build local images, use `build local`. Any -predecessor steps which haven't been done will also be executed -- that is, -`build local` also implies `build configs` if that step hasn't completed yet. +The `state` step always checks the current state of the image builds, +determines what actions need to be taken, and updates `work/images.yaml`. A +subset of image builds can be targeted by using the `--skip` and `--only` +arguments. The `--revise` argument indicates that any _unpublished_ local +or imported images should be removed and rebuilt; as _published_ images can't +be removed, `--revise` instead increments the _`revision`_ value to rebuild +new images. -The **configs** step determines the latest stable Alpine Linux release, and -ensures that the `configs/` and `scripts/` overlays, UEFI firmware, and -`configs.yaml` exist. This allows you to validate the generated build variant -configuration before attempting to build any images locally. +`local`, `import`, and `publish` steps are orchestrated by Packer. By default, +each image will be processed serially; providing the `--parallel` argument with +a value greater than 1 will parallelize operations. The degree to which you +can parallelze `local` image builds will depend on the local build hardware -- +as QEMU virtual machines are launched for each image being built. Image +`import` and `publish` steps are much more lightweight, and can support higher parallelism. -If `build` is moving on past **configs** to other steps, it will determine which -image variants to work on (based on `--skip` and `--only` values) and what -actions will be taken, based on existence of local/imported/published images, and -generate the `actions.yaml` file. Providing the `--revise` flag allows you to -rebuild local images that were previously built, reimport unpublished images to -cloud providers, and bump the "revision" value of previously published images -- -this is useful if published images require fixes but the Alpine release itself -isn't changing; published images are not removed (though they may be pruned once -their "end-of-life" date has passed). +The `local` step builds local images with QEMU, for those that are not already +built locally or have already been imported. -At this point, `build` executes Packer, which is responsible for the remaining -**local**, **import**, and **publish** steps -- and also for parallelization, if -the `--parallel` argument is given. Because build hardware varies, it is also -possible to tune a number of QEMU timeouts and memory requirements by providing -an HCL2 Packer Vars file and specifying `--vars ` to override the -defaults in `alpine.pkr.hcl`. +The `import` step imports the local images into the cloud providers' default +regions, unless they've already been imported. At this point the images are +not available publicly, allowing for additional testing prior to publishing. -### Packer and `alpine.pkr.hcl` - -Packer loads and merges `actions.yaml` and `configs.yaml`, and iterates the -resulting object in order to determine what it should do with each image -variant configuration. - -`alpine.pkr.hcl` defines two base `source` blocks -- `null` is used when an -image variant is already built locally and/or already imported to the -destination cloud provider; otherwise, the `qemu` source is used. - -The `qemu` builder spins up a QEMU virtual machine with a blank virtual disk -attached, using the latest stable Alpine Linux Virtual ISO, brings up the VM's -network, enables the SSH daemon, and sets a random password for root. - -If an image variant is to be **built locally**, the two dynamic provisioners copy -the required data for the setup scripts to the VM's `/tmp/` directory, and then -run those setup scripts. It's these scripts that are ultimately responsible for -installing and configuring the desired image on the attached virtual disk. -When the setup scripts are complete, the virtual machine is shut down, and the -resulting local disk image can be found at -`work/images///image.qcow2`. - -The dynamic post-processor uses the `cloud_helper.py` script to **import** a -local image to the cloud provider, and/or **publish** an imported image to the -cloud provider's destination regions, based on what actions are applicable for -that image variant. When the **publish** step is reapplied to an -already-published image, the script ensures that images have been copied to all -destination regions (for example, if the cloud provider recently added a new -region), and that all launch permissions are set as expected. +The `publish` step copies the image from the default region to other regions, +if they haven't already been copied there. This step will always update +image permissions, descriptions, tags, and deprecation date (if applicable) +in all regions where the image has been published. ### The `cloud_helper.py` Script -This script is only meant to be imported by `build` and called from Packer, and -provides a normalized cloud-agnostic way of doing common cloud operations -- -getting details about a variant's latest imported image, importing new local -image to the cloud, removing a previouly imported (but unpublished) image so it -can be replaced, or publishing an imported image to destination regions. +This script is meant to be called only by Packer from its `post-processor` +block for image `import` and `publish` steps. ---- ## Build Configuration -The `build` script generates `work/configs.yaml` based on the contents of the -top-level config file, `work/configs/configs.conf`; normally this is a symlink to -`alpine.conf`, but can be overridden for custom builds. All configs are -declared in [HOCON](https://github.com/lightbend/config/blob/master/HOCON.md) -format, which allows importing from other files, simple variable interpolation, -and easy merging of objects. This flexibility helps keep configuration -[DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). - -The top-level `build.conf` has three main blocks, `Default` (default/starting -values), `Dimensions` (with configs that apply in different circumstances), and -`Mandatory` (required/final values). The configuration for these blocks are -merged in this exact order. - -### Dimensions and Build Variants - -Build variants _(I was watching Loki™ at the time...)_ are the sets of -dimensional "features" and related configuration details produced from a -Cartesian product across each of the dimensional keys. Dimensional configs are -merged together in the order they appear in `build.conf`. - -If two dimensional keys are incompatible (for example, **version/3.11** did not -yet support **arch/aarch64**), an `EXCLUDE` directive indicates that such a -variant is non-viable, and will be skipped. - -Likewise, if one dimension's configuration depends on the value of a different -dimensional key, the `WHEN` directive will supply the conditional config -details when that other dimensional key is part of the variant. - -Currently the base set of dimensions (and dimension keys) are... - -**version** - current "release" value for each is autodetected, and always a - component of an image's name -* **edge** ("release" value is the current UTC date) -* all *non-EOL* Alpine Linux versions - - **arch** - machine architecture - * **x86_64** (aka "amd64") - * **aarch64** (aka "arm64") - -**firmware** - machine boot firmware -* **bios** (legacy BIOS) -* **uefi** - -**bootstrap** - image instantiation bootstrap is provided by... -* **tiny** (tiny-cloud-boostrap) -* **cloudinit** (cloud-init) - -**cloud** - cloud provider or platform -* **aws** - Amazone Web Services / EC2 -* **oci** - Oracle Cloud Infrastructure _(WiP)_ -* **gcp** - Google Cloud Platform _(WiP)_ -* **azure** - Microsoft Azure _(WiP)_ - -...each dimension may (or may not) contribute to the image name or description, -if the dimensional key's config contributes to the `name` or `description` -array values. - -### Customized Builds - -_(TODO)_ \ No newline at end of file +For more in-depth information about how the build system configuration works, +how to create custom config overlays, and details about individual config +settings, see [CONFIGURATION.md](CONFIGURATION.md). diff --git a/alpine.pkr.hcl b/alpine.pkr.hcl index e55f28b..4956903 100644 --- a/alpine.pkr.hcl +++ b/alpine.pkr.hcl @@ -1,13 +1,19 @@ -# Enable script debug output, set via 'packer build -var DEBUG=1' +# Alpine Cloud Images Packer Configuration + +### Variables + +# include debug output from provisioning/post-processing scripts variable "DEBUG" { default = 0 } +# indicates cloud_helper.py should be run with --use-broker variable "USE_BROKER" { default = 0 } -# Tuneable based on perfomance of whatever Packer's running on, -# override with './build --vars ' +# tuneable QEMU VM parameters, based on perfomance of the local machine; +# overrideable via build script --vars parameter referencing a Packer +# ".vars.hcl" file containing alternate settings variable "qemu" { default = { boot_wait = { @@ -20,6 +26,7 @@ variable "qemu" { } } +### Local Data locals { debug_arg = var.DEBUG == 0 ? "" : "--debug" diff --git a/build b/build index 913911e..00c5b91 100755 --- a/build +++ b/build @@ -37,6 +37,7 @@ import logging import shutil import time +from glob import glob from subprocess import Popen, PIPE from urllib.request import urlopen @@ -47,7 +48,7 @@ from image_configs import ImageConfigManager ### Constants & Variables -STEPS = ['configs', 'actions', 'local', 'import', 'publish'] +STEPS = ['configs', 'state', 'local', 'import', 'publish'] LOGFORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' WORK_CLEAN = {'bin', 'include', 'lib', 'pyvenv.cfg', '__pycache__'} WORK_OVERLAYS = ['configs', 'scripts'] @@ -100,46 +101,54 @@ def clean_work(): os.unlink(x) -def is_same_dir_symlink(x): - if not os.path.islink(x): +def is_images_conf(o, x): + if not all([ + o == 'configs', + x.endswith('/images.conf'), + os.path.islink(x), + ]): return False + # must also link to file in the same directory x_link = os.path.normpath(os.readlink(x)) return x_link == os.path.basename(x_link) -# TODO: revisit this to improve --custom overlay implementation def install_overlay(overlay): log.info("Installing '%s' overlay in work environment", overlay) dest_dir = os.path.join('work', overlay) os.makedirs(dest_dir, exist_ok=True) for src in unique_list(['.'] + args.custom): src_dir = os.path.join(src, overlay) - for x in os.listdir(src_dir): + for x in glob(os.path.join(src_dir, '**'), recursive=True): + x = x.removeprefix(src_dir + '/') src_x = os.path.join(src_dir, x) dest_x = os.path.join(dest_dir, x) - if is_same_dir_symlink(src_x): - rel_x = os.readlink(src_x) - else: - rel_x = os.path.relpath(src_x, dest_dir) - # TODO: only images.conf symlink can be overridden, in reality - if os.path.islink(dest_x): - # only same-dir symlinks can be overridden - if not is_same_dir_symlink(dest_x): - log.warning("Can't override %s with %s", dest_x, src_x) + if is_images_conf(overlay, src_x): + rel_x = os.readlink(src_x) + if os.path.islink(dest_x): + print(f"\toverriding {dest_x}") + os.unlink(dest_x) + + print(f"\tln -s {rel_x} {dest_x}") + os.symlink(rel_x, dest_x) + continue + + if os.path.isdir(src_x): + if not os.path.exists(dest_x): + log.debug('makedirs %s', dest_x) + os.makedirs(dest_x) + + if os.path.isdir(dest_x): continue - log.debug('overriding %s with %s', dest_x, src_x) - os.unlink(dest_x) - - elif os.path.exists(dest_x): - # we expect only symlnks in the overlay destination! - log.critical('Config overlay non-symlink detected: %s', dest_x) + if os.path.exists(dest_x): + log.critical('Unallowable destination overwirte detected: %s', dest_x) sys.exit(1) - log.debug('ln -sf %s %s', rel_x, dest_x) - os.symlink(rel_x, dest_x) + log.debug('cp -p %s %s', src_x, dest_x) + shutil.copy(src_x, dest_x) def install_overlays(): @@ -188,22 +197,24 @@ parser.add_argument( '--debug', action='store_true', help='enable debug output') parser.add_argument( '--clean', action='store_true', help='start with a clean work environment') -parser.add_argument( - '--revise', action='store_true', - help='bump revisions if images already published') -# positional argument -parser.add_argument( - 'step', choices=STEPS, help='build up to and including this step') # config options parser.add_argument( '--custom', metavar='DIR', nargs='+', action=are_args_valid(os.path.isdir), default=[], help='overlay custom directory in work environment') +# state options parser.add_argument( '--skip', metavar='KEY', nargs='+', action=remove_dupe_args(), default=[], help='skip variants with dimension key(s)') parser.add_argument( '--only', metavar='KEY', nargs='+', action=remove_dupe_args(), default=[], help='only variants with dimension key(s)') +parser.add_argument( + '--revise', action='store_true', + help='remove existing local/imported image, or bump revision and rebuild' + 'if published') +parser.add_argument( + '--use-broker', action='store_true', + help='use the identity broker to get credentials') # packer options parser.add_argument( '--no-color', action='store_true', help='turn off Packer color output') @@ -213,10 +224,9 @@ parser.add_argument( parser.add_argument( '--vars', metavar='FILE', nargs='+', action=are_args_valid(os.path.isfile), default=[], help='supply Packer with -vars-file(s)') +# positional argument parser.add_argument( - '--use-broker', action='store_true', - help='use the identity broker to get credentials') -# perhaps others? + 'step', choices=STEPS, help='build up to and including this step') args = parser.parse_args() log = logging.getLogger('build') @@ -261,7 +271,7 @@ if not image_configs.refresh_state( log.info('No pending actions to take at this time.') sys.exit(0) -if args.step == 'actions': +if args.step == 'state': sys.exit(0) # install firmware if missing diff --git a/configs/alpine.conf b/configs/alpine.conf index 1dd7f32..e3aa9b4 100644 --- a/configs/alpine.conf +++ b/configs/alpine.conf @@ -5,7 +5,7 @@ # *AT LEAST* the 'project' setting with a unique identifier string value # via a "config overlay" to avoid image import and publishing collisions. -project = https://alpinelinux.org/cloud +project = "https://alpinelinux.org/cloud" # all build configs start with these Default { @@ -17,13 +17,14 @@ Default { motd { welcome = "Welcome to Alpine!" - wiki = \ - "The Alpine Wiki contains a large amount of how-to guides and general\n"\ - "information about administrating Alpine systems.\n"\ - "See ." - version_notes = "Release Notes:\n"\ - "* " - release_notes = "* Date: Tue, 28 Dec 2021 13:11:16 -0800 Subject: [PATCH 119/125] Make AWS Images Work with CloudFormation root device / block device needs full '/dev/...' for CloudFormation to work (individual instance launches worked just fine though). Also... * HOCON += introduces unwanted spaces in motd * minor log.debug fixes * update gen_releases.py --help note --- build | 4 ++-- clouds/aws.py | 4 ++-- configs/alpine.conf | 12 ++++++------ gen_releases.py | 12 +++++++----- image_configs.py | 7 ++++--- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/build b/build index 00c5b91..ba5b84b 100755 --- a/build +++ b/build @@ -128,10 +128,10 @@ def install_overlay(overlay): if is_images_conf(overlay, src_x): rel_x = os.readlink(src_x) if os.path.islink(dest_x): - print(f"\toverriding {dest_x}") + log.debug('overriding %s', dest_x) os.unlink(dest_x) - print(f"\tln -s {rel_x} {dest_x}") + log.debug('ln -s %s %s', rel_x, dest_x) os.symlink(rel_x, dest_x) continue diff --git a/clouds/aws.py b/clouds/aws.py index 3a997b0..436caa7 100644 --- a/clouds/aws.py +++ b/clouds/aws.py @@ -204,13 +204,13 @@ class AWSCloudAdapter(CloudAdapterInterface): img = ec2c.register_image( Architecture=self.ARCH[ic.arch], BlockDeviceMappings=[{ - 'DeviceName': 'xvda', + 'DeviceName': '/dev/xvda', 'Ebs': {'SnapshotId': snapshot_id} }], Description=description, EnaSupport=True, Name=ic.image_name, - RootDeviceName='xvda', + RootDeviceName='/dev/xvda', SriovNetSupport='simple', VirtualizationType='hvm', BootMode=self.BOOT_MODE[ic.firmware], diff --git a/configs/alpine.conf b/configs/alpine.conf index e3aa9b4..ef335ea 100644 --- a/configs/alpine.conf +++ b/configs/alpine.conf @@ -18,13 +18,13 @@ Default { motd { welcome = "Welcome to Alpine!" - wiki = "The Alpine Wiki contains a large amount of how-to guides and general\n" - wiki += "information about administrating Alpine systems.\n" - wiki += "See ." + wiki = "The Alpine Wiki contains a large amount of how-to guides and general\n"\ + "information about administrating Alpine systems.\n"\ + "See ." - version_notes = "Release Notes:\n" - version_notes += "* " - release_notes = "* " + release_notes = "* Date: Sun, 30 Jan 2022 19:18:09 +0000 Subject: [PATCH 120/125] Tiny Cloud / set default NTP server * switch to tiny-cloud instead of tiny-ec2-bootstrap * set default NTP server, if configured * add default /etc/network/interfaces * add urlopen() timeout to mitigate ipv6 issues connecting to alpinelinux.org --- LICENSE.txt | 2 +- alpine.pkr.hcl | 1 + alpine.py | 9 +- configs/bootstrap/tiny.conf | 18 ++- configs/cloud/aws.conf | 2 + scripts/setup | 11 +- scripts/setup-tiny | 60 +------ scripts/setup-tiny.d/assemble-interfaces | 42 ----- scripts/setup-tiny.d/eth-eni-hook | 187 ---------------------- scripts/setup-tiny.d/eth-eni-hotplug | 96 ----------- scripts/setup-tiny.d/eth-eni-setup | 19 --- scripts/setup-tiny.d/interfaces.d/DEFAULT | 3 - scripts/setup-tiny.d/interfaces.d/eth0 | 3 - scripts/setup-tiny.d/interfaces.d/lo | 3 - scripts/setup-tiny.d/mdev-ec2.conf | 6 - scripts/setup-tiny.d/nvme-ebs-links | 47 ------ scripts/setup.d/interfaces | 7 + 17 files changed, 41 insertions(+), 475 deletions(-) delete mode 100755 scripts/setup-tiny.d/assemble-interfaces delete mode 100755 scripts/setup-tiny.d/eth-eni-hook delete mode 100755 scripts/setup-tiny.d/eth-eni-hotplug delete mode 100755 scripts/setup-tiny.d/eth-eni-setup delete mode 100644 scripts/setup-tiny.d/interfaces.d/DEFAULT delete mode 100644 scripts/setup-tiny.d/interfaces.d/eth0 delete mode 100644 scripts/setup-tiny.d/interfaces.d/lo delete mode 100644 scripts/setup-tiny.d/mdev-ec2.conf delete mode 100755 scripts/setup-tiny.d/nvme-ebs-links create mode 100644 scripts/setup.d/interfaces diff --git a/LICENSE.txt b/LICENSE.txt index ab6f63d..817eab1 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2017-2021 Jake Buchholz Göktürk, Michael Crute +Copyright (c) 2017-2022 Jake Buchholz Göktürk, Michael Crute Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/alpine.pkr.hcl b/alpine.pkr.hcl index 4956903..5cd4c99 100644 --- a/alpine.pkr.hcl +++ b/alpine.pkr.hcl @@ -163,6 +163,7 @@ build { "KERNEL_MODULES=${B.value.kernel_modules}", "KERNEL_OPTIONS=${B.value.kernel_options}", "MOTD=${B.value.motd}", + "NTP_SERVER=${B.value.ntp_server}", "PACKAGES_ADD=${B.value.packages.add}", "PACKAGES_DEL=${B.value.packages.del}", "PACKAGES_NOSCRIPTS=${B.value.packages.noscripts}", diff --git a/alpine.py b/alpine.py index 09f393d..8fa4a6a 100644 --- a/alpine.py +++ b/alpine.py @@ -10,18 +10,20 @@ class Alpine(): DEFAULT_RELEASES_URL = 'https://alpinelinux.org/releases.json' DEFAULT_CDN_URL = 'https://dl-cdn.alpinelinux.org/alpine' + DEFAULT_WEB_TIMEOUT = 5 - def __init__(self, releases_url=None, cdn_url=None): + def __init__(self, releases_url=None, cdn_url=None, web_timeout=None): self.now = datetime.utcnow() self.release_today = self.now.strftime('%Y%m%d') self.eol_tomorrow = (self.now + timedelta(days=1)).strftime('%F') self.latest = None self.versions = {} self.releases_url = releases_url or self.DEFAULT_RELEASES_URL + self.web_timeout = web_timeout or self.DEFAULT_WEB_TIMEOUT self.cdn_url = cdn_url or self.DEFAULT_CDN_URL # get all Alpine versions, and their EOL and latest release - res = urlopen(self.releases_url) + res = urlopen(self.releases_url, timeout=self.web_timeout) r = json.load(res) branches = sorted( r['release_branches'], reverse=True, @@ -89,8 +91,7 @@ class Alpine(): ver = self._ver(ver) repo_url = self.repo_url(repo, arch, ver=ver) apks_re = re.compile(f'"{apk}-(\\d.*)\\.apk"') - print(repo_url) - res = urlopen(repo_url) + res = urlopen(repo_url, timeout=self.web_timeout) for line in map(lambda x: x.decode('utf8'), res): if not line.startswith('> "$TARGET/etc/fstab" diff --git a/scripts/setup-tiny b/scripts/setup-tiny index 2fa00ab..7081842 100755 --- a/scripts/setup-tiny +++ b/scripts/setup-tiny @@ -1,67 +1,15 @@ #!/bin/sh -eu # vim: ts=4 et: -# NOTE: This is lifted almost verbatim from alpine-ec2-ami's setup-ami script -# While refactoring that, it became apparent that these bits really belonged -# to the tiny-ec2-bootstrap package, and in order to also provide a -# "cloud-init" image flavor, we needed separate these parts out. -# -# It is our intention to eventually incorporate this in a tiny-cloud-bootstrap -# package (and per-cloud subpackages). - [ -z "$DEBUG" ] || [ "$DEBUG" = 0 ] || set -x TARGET=/mnt -SETUP=/tmp/setup-tiny.d -die() { - printf '\033[1;7;31m FATAL: %s \033[0m\n' "$@" >&2 # bold reversed red - exit 1 -} einfo() { printf '\n\033[1;7;36m> %s <\033[0m\n' "$@" >&2 # bold reversed cyan } -setup_mdev() { - echo " * Setting up mdev" - install -o root -g root -Dm755 -t "$TARGET/lib/mdev" \ - "$SETUP/nvme-ebs-links" \ - "$SETUP/eth-eni-hotplug" - - # insert nvme ebs mdev configs just above "# fallback" comment - sed -n -i \ - -e "/# fallback/r $SETUP/mdev-ec2.conf" \ - -e 1x -e '2,${x;p}' -e '${x;p}' \ - "$TARGET/etc/mdev.conf" -} - -setup_networking() { - echo " * Setting up networking" - # configure standard interfaces - IFACE_CFG="$TARGET/etc/network/interfaces" - install -o root -g root -Dm755 -d "$SETUP/interfaces.d" "$IFACE_CFG.d" - install -o root -g root -Dm644 -t "$IFACE_CFG.d" \ - "$SETUP/interfaces.d/"* - cat "$IFACE_CFG.d/lo" "$IFACE_CFG.d/eth0" > "$IFACE_CFG" - - install -o root -g root -Dm755 -t "$TARGET/etc/network" \ - "$SETUP/assemble-interfaces" - - # install ucdhcp hooks for EC2 ENI IPv6 and secondary IPv4 - install -o root -g root -Dm755 -t "$TARGET/usr/share/udhcpc" \ - "$SETUP/eth-eni-hook" - for i in post-bound post-renew; do - mkdir -p "$TARGET/etc/udhcpc/$i" - ln -sf /usr/share/udhcpc/eth-eni-hook \ - "$TARGET/etc/udhcpc/$i" - done - - # install ENI interface setup init script - install -o root -g root -Dm755 -t "$TARGET/etc/init.d" \ - "$SETUP/eth-eni-setup" -} - -einfo "Installing up tiny bootstrap components..." -setup_mdev -setup_networking -echo "EC2_USER=$IMAGE_LOGIN" > "$TARGET/etc/conf.d/tiny-ec2-bootstrap" +einfo "Configuring Tiny Cloud..." +sed -i.bak -Ee "s/^#?CLOUD_USER=.*/CLOUD_USER=$IMAGE_LOGIN/" \ + "$TARGET"/etc/conf.d/tiny-cloud +rm "$TARGET"/etc/conf.d/tiny-cloud.bak \ No newline at end of file diff --git a/scripts/setup-tiny.d/assemble-interfaces b/scripts/setup-tiny.d/assemble-interfaces deleted file mode 100755 index e723f43..0000000 --- a/scripts/setup-tiny.d/assemble-interfaces +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# vim: set ts=4 et: - -set -e - -IFACE_CFG=/etc/network/interfaces -IFACE_DIR="${IFACE_CFG}.d" - -cd "$IFACE_DIR" - -cat > "$IFACE_CFG.new" <> "$IFACE_CFG.new" - -# existing eths -for i in /sys/class/net/eth*; do - IFACE="$(basename "$i")" - [ ! -f "$IFACE" ] && sed -e "s/%%/$IFACE/g" DEFAULT > "$IFACE" - cat "$IFACE" >> "$IFACE_CFG.new" -done - -# all the rest -for i in "$IFACE_DIR"/*; do - IFACE="$(basename "$i")" - case $IFACE in - DEFAULT|lo|eth*) - continue - ;; - *) - cat "$IFACE" >> "$IFACE_CFG.new" - ;; - esac -done - -# install new interfaces config -cp -a "$IFACE_CFG" "$IFACE_CFG.bak" -mv "$IFACE_CFG.new" "$IFACE_CFG" diff --git a/scripts/setup-tiny.d/eth-eni-hook b/scripts/setup-tiny.d/eth-eni-hook deleted file mode 100755 index 317f844..0000000 --- a/scripts/setup-tiny.d/eth-eni-hook +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/sh -# vim: set ts=4 et: - -# This script should be installed as symlinks in -# /etc/udhcpc//eth-eni-hook -# :- -# post-bound - after udhcpc binds an IP to the interface -# post-renew - after udhcpc renews the lease for the IP -# -# udhcpc provides via ENV... -# IFACE - eth0, etc. -# mask - bits in IPv4 subnet mask - -set -e - -HOOK="$(basename "$(dirname "$0")")" - -DEBUG= - -log() { - [ -z "$DEBUG" ] && [ "$1" = "debug" ] && return - FACILITY="daemon.$1" - shift - logger -s -p "$FACILITY" -t "udhcpc/${HOOK}[$$]" -- "$@" -} - -if [ -z "$IFACE" ] || [ -z "$mask" ]; then - log err "Missing 'IFACE' or 'mask' ENV from udhcpc" - exit 1 -fi - -# route table number -RTABLE="${IFACE#eth}" -let RTABLE+=1000 - -IMDS=X-aws-ec2-metadata-token -IMDS_IP=169.254.169.254 -IMDS_MAC="http://$IMDS_IP/latest/meta-data/network/interfaces/macs/$( - cat "/sys/class/net/$IFACE/address")" - -get_imds_token() { - IMDS_TOKEN="$(echo -ne \ - "PUT /latest/api/token HTTP/1.0\r\n$IMDS-ttl-seconds: 60\r\n\r\n" | - nc "$IMDS_IP" 80 | tail -n 1)" -} - -mac_meta() { - wget -qO - --header "$IMDS: $IMDS_TOKEN" "$IMDS_MAC/$1" 2>/dev/null \ - || true # when no ipv6s attached (yet), IMDS returns 404 error -} - -ip() { - FAIL_OK= - if [ "$1" = '+F' ]; then - FAIL_OK=1 - shift - fi - v=-4 - if [ "$1" = '-4' ] || [ "$1" = '-6' ]; then - v="$1" - shift - fi - OP="$2" - [ "$OP" = show ] && LEV=debug || LEV=info - if /sbin/ip "$v" "$@" || [ -n "$FAIL_OK" ]; then - log "$LEV" "OK: ip $v $*" - else - log err "FAIL: ip $v $*" - fi -} - -iface_ip4s() { - ip -4 addr show "$IFACE" secondary | - sed -E -e '/inet /!d' -e 's/.*inet ([0-9.]+).*/\1/' -} - -iface_ip6s() { - ip -6 addr show "$IFACE" scope global | - sed -E -e '/inet6/!d' -e 's/.*inet6 ([0-9a-f:]+).*/\1/' -} - -ec2_ip4s() { - get_imds_token - # NOTE: metadata for ENI arrives later than hotplug events - TRIES=60 - while true; do - IP4="$(mac_meta local-ipv4s)" - [ -n "$IP4" ] && break - let TRIES-- - if [ "$TRIES" -eq 0 ]; then - log err "Unable to get IPv4 addresses for $IFACE after 30s" - exit 1 - fi - sleep 0.5 - done - IP4S="$(echo "$IP4" | tail +2)" # secondary IPs (udhcpc handles primary) - - # non-eth0 interfaces need custom route tables - # - if [ "$IFACE" != eth0 ] && [ -n "$IP4S" ] && - [ -z "$(ip +F -4 route show table "$RTABLE")" ]; then - IP4P="$(echo "$IP4" | head -1)" # primary IP - IP4_CIDR="$(mac_meta subnet-ipv4-cidr-block)" - IP4_GW="$(echo "$IP4_CIDR" | cut -d/ -f1 | - awk -F. '{ print $1"."$2"."$3"."$4+1 }')" - ip -4 route add default via "$IP4_GW" dev "$IFACE" table "$RTABLE" - ip -4 route add "$IP4_CIDR" dev "$IFACE" proto kernel scope link \ - src "$IP4P" table "$RTABLE" - fi - echo "$IP4S" -} - -ec2_ip6s() { - get_imds_token - # NOTE: IPv6 metadata (if any) may arrive later than IPv4 metadata - TRIES=60 - while true; do - IP6S="$(mac_meta ipv6s)" - [ -n "$IP6S" ] && break - let TRIES-- - if [ "$TRIES" -eq 0 ]; then - log warn "Unable to get IPv6 addresses for $IFACE after 30s" - break - fi - sleep 0.5 - done - - # non-eth0 interfaces need custom route tables - # - # NOTE: busybox iproute2 doesn't do 'route show table' properly for IPv6, - # so iproute2-minimal package is required! - # - if [ "$IFACE" != eth0 ] && [ -n "$IP6S" ] && - [ -z "$(ip +F -6 route show table "$RTABLE")" ]; then - TRIES=20 - while true; do - GW="$(ip -6 route show dev "$IFACE" default | awk '{ print $3 }')" - [ -n "$GW" ] && break - let TRIES-- - if [ "$TRIES" -eq 0 ]; then - log warn "Unable to get IPv6 gateway RA after 10s" - break - fi - sleep 0.5 - done - ip -6 route add default via "$GW" dev "$IFACE" table "$RTABLE" - fi - echo "$IP6S" -} - -in_list() { - echo "$2" | grep -q "^$1$" -} - -# ip_addr {4|6} {add|del} -ip_addr() { - [ "$1" -eq 6 ] && MASK=128 || MASK="$mask" # IP6s are always /128 - ip -"$1" addr "$2" "$3/$MASK" dev "$IFACE" - [ "$IFACE" = eth0 ] && return - - # non-eth0 interfaces get rules associating IPs with route tables - ip -"$1" rule "$2" from "$3" lookup "$RTABLE" -} - -# sync_ips {4|6} "" "" -sync_ips() { - # remove extra IPs - for i in $3; do - in_list "$i" "$2" || ip_addr "$1" del "$i" - done - # add missing IPs - for i in $2; do - in_list "$i" "$3" || ip_addr "$1" add "$i" - done -} - -log info "STARTING: $IFACE" - -if [ "$HOOK" != post-bound ] && [ "$HOOK" != post-renew ]; then - log err "Unhandled udhcpc hook '$HOOK'" - exit 1 -fi - -sync_ips 4 "$(ec2_ip4s)" "$(iface_ip4s)" -sync_ips 6 "$(ec2_ip6s)" "$(iface_ip6s)" - -log info "FINISHED: $IFACE" diff --git a/scripts/setup-tiny.d/eth-eni-hotplug b/scripts/setup-tiny.d/eth-eni-hotplug deleted file mode 100755 index b421942..0000000 --- a/scripts/setup-tiny.d/eth-eni-hotplug +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -# vim: set ts=4 et: - -set -e - -PROC="$(basename "$0")[$$]" - -DEBUG= - -log() { - [ -z "$DEBUG" ] && [ "$1" = "debug" ] && return - FACILITY="kern.$1" - shift - logger -s -p "$FACILITY" -t "$PROC" "$@" -} - -if [ -z "$MDEV" ]; then - log err "MDEV env not defined" - exit 1 -fi - -RTABLE="${MDEV#eth}" -let RTABLE+=1000 - -IFACE_CFG=/etc/network/interfaces - -ip() { - v=-4 - if [ "$1" = '-4' ] || [ "$1" = '-6' ]; then - v="$1" - shift - fi - OP="$2" - [ "$OP" = show ] && LEV=debug || LEV=info - if /sbin/ip "$v" "$@" || [ -n "$FAIL_OK" ]; then - log "$LEV" "OK: ip $v $*" - else - log err "FAIL: ip $v $*" - fi -} - -assemble_interfaces() { - log info "Rebuilding $IFACE_CFG" - /etc/network/assemble-interfaces -} - -interface_up() { - log info "Bringing up $MDEV" - ifup "$MDEV" -} - -cleanup_interface() { - log info "Cleaning up $MDEV" - - # kill related udhcpc - kill "$(cat "/run/udhcpc.$MDEV.pid")" - - # tidy up /run/ifstate, if it exists - [ -f /run/ifstate ] && sed -i -e "/^$MDEV=/d" /run/ifstate - - # remove related rules - for V in 4 6; do - for P in $(ip -"$V" rule show table "$RTABLE" | cut -d: -f1); do - ip -"$V" rule del pref "$P" - done - done -} - -log info "STARTING: $ACTION $MDEV" - -if exec 200>>"$IFACE_CFG"; then - if flock 200; then - case $ACTION in - add|"") - assemble_interfaces - interface_up - ;; - remove) - assemble_interfaces - cleanup_interface - ;; - *) - log err "Unknown action '$ACTION'" - exit 1 - ;; - esac - else - log err "Unable to flock $IFACE_CFG" - exit 1 - fi -else - log err "Unable to assign fd 200 to flock $IFACE_CFG" - exit 1 -fi - -log info "FINISHED: $ACTION $MDEV" diff --git a/scripts/setup-tiny.d/eth-eni-setup b/scripts/setup-tiny.d/eth-eni-setup deleted file mode 100755 index aba272a..0000000 --- a/scripts/setup-tiny.d/eth-eni-setup +++ /dev/null @@ -1,19 +0,0 @@ -#!/sbin/openrc-run - -# vim: set ts=4 et: -# shellcheck shell=sh - -description="Sets up interfaces for attached Elastic Network Interfaces" - -depend() { - before net - need sysfs -} - -start() { - local iface - - ebegin "Setting up interfaces for attached ENIs" - /etc/network/assemble-interfaces - eend "$?" -} diff --git a/scripts/setup-tiny.d/interfaces.d/DEFAULT b/scripts/setup-tiny.d/interfaces.d/DEFAULT deleted file mode 100644 index b6fdf49..0000000 --- a/scripts/setup-tiny.d/interfaces.d/DEFAULT +++ /dev/null @@ -1,3 +0,0 @@ -auto %% -iface %% inet dhcp - diff --git a/scripts/setup-tiny.d/interfaces.d/eth0 b/scripts/setup-tiny.d/interfaces.d/eth0 deleted file mode 100644 index ed9d3b7..0000000 --- a/scripts/setup-tiny.d/interfaces.d/eth0 +++ /dev/null @@ -1,3 +0,0 @@ -auto eth0 -iface eth0 inet dhcp - diff --git a/scripts/setup-tiny.d/interfaces.d/lo b/scripts/setup-tiny.d/interfaces.d/lo deleted file mode 100644 index 77efa67..0000000 --- a/scripts/setup-tiny.d/interfaces.d/lo +++ /dev/null @@ -1,3 +0,0 @@ -auto lo -iface lo inet loopback - diff --git a/scripts/setup-tiny.d/mdev-ec2.conf b/scripts/setup-tiny.d/mdev-ec2.conf deleted file mode 100644 index 860a96e..0000000 --- a/scripts/setup-tiny.d/mdev-ec2.conf +++ /dev/null @@ -1,6 +0,0 @@ -# additional ENIs -eth[1-9] root:root 0644 */lib/mdev/eth-eni-hotplug - -# EBS NVMe links -nvme[0-9]+n[0-9]+.* root:root 0660 */lib/mdev/nvme-ebs-links - diff --git a/scripts/setup-tiny.d/nvme-ebs-links b/scripts/setup-tiny.d/nvme-ebs-links deleted file mode 100755 index e4ba49f..0000000 --- a/scripts/setup-tiny.d/nvme-ebs-links +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -# vim: set ts=4 et: - -[ -x /usr/sbin/nvme ] || exit - -PROC="$(basename "$0")[$$]" - -log() { - FACILITY="kern.$1" - shift - logger -s -p "$FACILITY" -t "$PROC" "$@" -} - -raw_ebs_alias() { - /usr/sbin/nvme id-ctrl "/dev/$BASE" -b 2>/dev/null | dd bs=32 skip=96 count=1 2>/dev/null -} - -case $ACTION in - add|"") - BASE=$(echo "$MDEV" | sed -re 's/^(nvme[0-9]+n[0-9]+).*/\1/') - PART=$(echo "$MDEV" | sed -re 's/nvme[0-9]+n[0-9]+p?//g') - MAXTRY=50 - TRY=0 - until [ -n "$EBS" ]; do - EBS=$(raw_ebs_alias | sed -nre '/^(\/dev\/)?(s|xv)d[a-z]{1,2} /p' | tr -d ' ') - [ -n "$EBS" ] && break - TRY=$((TRY + 1)) - if [ $TRY -eq $MAXTRY ]; then - log err "Failed to get EBS volume alias for $MDEV after $MAXTRY attempts ($(raw_ebs_alias))" - exit 1 - fi - sleep 0.1 - done - # remove any leading '/dev/', 'sd', or 'xvd', and append partition - EBS=${EBS#/dev/} - EBS=${EBS#sd} - EBS=${EBS#xvd}$PART - ln -sf "$MDEV" "sd$EBS" && log notice "Added sd$EBS symlink for $MDEV" - ln -sf "$MDEV" "xvd$EBS" && log notice "Added xvd$EBS symlink for $MDEV" - ;; - remove) - for TARGET in sd* xvd* - do - [ "$(readlink "$TARGET" 2>/dev/null)" = "$MDEV" ] && rm -f "$TARGET" && log notice "Removed $TARGET symlink for $MDEV" - done - ;; -esac diff --git a/scripts/setup.d/interfaces b/scripts/setup.d/interfaces new file mode 100644 index 0000000..864f3e3 --- /dev/null +++ b/scripts/setup.d/interfaces @@ -0,0 +1,7 @@ +# default alpine-cloud-images network configuration + +auto lo +iface lo inet loopback + +auto eth0 +iface eth0 inet dhcp From 2a3d99fdc914e157045566886e5f92d4a2991e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jake=20Buchholz=20G=C3=B6kt=C3=BCrk?= Date: Mon, 31 Jan 2022 19:44:08 -0800 Subject: [PATCH 121/125] tweak readme --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d9dd491..595f8d2 100644 --- a/README.md +++ b/README.md @@ -16,19 +16,20 @@ following cloud platforms... ...we are working on also publishing offical images to other major cloud providers. -Each published image's name contains the Alpine version release, architecture, firmware, bootstrap, and image revision. These details (and more) are also +Each published image's name contains the Alpine version release, architecture, +firmware, bootstrap, and image revision. These details (and more) are also tagged on the images... | Tag | Description / Values | |-----|----------------------| -| name | `alpine-`_`release-arch-firmware-bootstrap-`_`r`_`revision`_ | +| name | `alpine-`_`release`_`-`_`arch`_`-`_`firmware`_`-`_`bootstrap`_`-r`_`revision`_ | | project | `https://alpinelinux.org/cloud` | -| image_key | _`release-arch-firmware-bootstrap-cloud`_ | +| image_key | _`release`_`-`_`arch`_`-`_`firmware`_`-`_`bootstrap`_`-`_`cloud`_ | | version | Alpine version (_`x.y`_ or `edge`) | | release | Alpine release (_`x.y.z`_ or _`YYYYMMDD`_ for edge) | | arch | architecture (`aarch64` or `x86_64`) | | firmware | boot mode (`bios` or `uefi`) | -| bootstrap | initial bootstrap system (`tiny` = tiny-ec2-bootstrap) | +| bootstrap | initial bootstrap system (`tiny` = Tiny Cloud) | | cloud | provider short name (`aws`) | | revision | image revision number | | imported | image import timestamp | @@ -154,7 +155,8 @@ each image will be processed serially; providing the `--parallel` argument with a value greater than 1 will parallelize operations. The degree to which you can parallelze `local` image builds will depend on the local build hardware -- as QEMU virtual machines are launched for each image being built. Image -`import` and `publish` steps are much more lightweight, and can support higher parallelism. +`import` and `publish` steps are much more lightweight, and can support higher +parallelism. The `local` step builds local images with QEMU, for those that are not already built locally or have already been imported. From 13ad49f6f303a63a53dca0e4afe7f0d13da83275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jake=20Buchholz=20G=C3=B6kt=C3=BCrk?= Date: Wed, 23 Feb 2022 18:51:07 -0800 Subject: [PATCH 122/125] Move AWS-Related configs to aws.conf Resolves #131 --- configs/cloud/aws.conf | 13 +++++++++++-- configs/version/base/1.conf | 7 +------ configs/version/base/2.conf | 4 ---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/configs/cloud/aws.conf b/configs/cloud/aws.conf index e417d9b..f7e6329 100644 --- a/configs/cloud/aws.conf +++ b/configs/cloud/aws.conf @@ -3,8 +3,17 @@ builder = qemu ntp_server = 169.254.169.123 -kernel_modules.ena = true -initfs_features.ena = true +kernel_modules { + ena = true + nvme = true +} +kernel_options { + "nvme_core.io_timeout=4294967295" = true +} +initfs_features { + ena = true + nvme = true +} access.PUBLIC = true regions.ALL = true diff --git a/configs/version/base/1.conf b/configs/version/base/1.conf index ac3cbc3..f470b34 100644 --- a/configs/version/base/1.conf +++ b/configs/version/base/1.conf @@ -11,8 +11,6 @@ packages { linux-virt = true alpine-mirrors = true chrony = true - iproute2 = true - nvme-cli = true openssh = true sudo = true tzdata = true @@ -51,14 +49,11 @@ kernel_modules { sd-mod = true usb-storage = true ext4 = true - nvme = true } kernel_options { - "console=ttyS0,115200n8" = true - "nvme_core.io_timeout=4294967295" = true + "console=ttyS0,115200n8" = true } initfs_features { - nvme = true } diff --git a/configs/version/base/2.conf b/configs/version/base/2.conf index e1a8f43..f6909c6 100644 --- a/configs/version/base/2.conf +++ b/configs/version/base/2.conf @@ -5,8 +5,4 @@ include required("1.conf") packages { # drop old alpine-mirrors alpine-mirrors = null - - # use iproute2-minimal instead of full iproute2 - iproute2 = null - iproute2-minimal = true } From c9665f68dc83e837ef7bb2f32d3a4646a6c1fe21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jake=20Buchholz=20G=C3=B6kt=C3=BCrk?= Date: Thu, 24 Feb 2022 20:10:24 -0800 Subject: [PATCH 123/125] Add "cloudinit" to Bootstrap Dimension * cloudinit bootstrap is functional now * remove cloudinit from testing overlay * add e2fsprogs to all images Resolves #100 --- configs/alpine.conf | 1 + configs/bootstrap/cloudinit.conf | 11 +++++++++++ configs/version/base/1.conf | 1 + overlays/testing/configs/alpine-testing.conf | 6 ++---- .../testing/configs/testing/cloudinit.conf | 9 --------- .../scripts => scripts}/setup-cloudinit | 19 ++++++++++++++----- 6 files changed, 29 insertions(+), 18 deletions(-) create mode 100644 configs/bootstrap/cloudinit.conf delete mode 100644 overlays/testing/configs/testing/cloudinit.conf rename {overlays/testing/scripts => scripts}/setup-cloudinit (63%) diff --git a/configs/alpine.conf b/configs/alpine.conf index ef335ea..81606c6 100644 --- a/configs/alpine.conf +++ b/configs/alpine.conf @@ -62,6 +62,7 @@ Dimensions { } bootstrap { tiny { include required("bootstrap/tiny.conf") } + cloudinit { include required("bootstrap/cloudinit.conf") } } cloud { aws { include required("cloud/aws.conf") } diff --git a/configs/bootstrap/cloudinit.conf b/configs/bootstrap/cloudinit.conf new file mode 100644 index 0000000..19f2bd7 --- /dev/null +++ b/configs/bootstrap/cloudinit.conf @@ -0,0 +1,11 @@ +# vim: ts=2 et: +name = [cloudinit] + +packages { + cloud-init = true + openssh-server-pam = true + e2fsprogs-extra = true # for resize2fs +} +services.default.cloud-init-hotplugd = true + +scripts = [ setup-cloudinit ] \ No newline at end of file diff --git a/configs/version/base/1.conf b/configs/version/base/1.conf index f470b34..9d95504 100644 --- a/configs/version/base/1.conf +++ b/configs/version/base/1.conf @@ -11,6 +11,7 @@ packages { linux-virt = true alpine-mirrors = true chrony = true + e2fsprogs = true openssh = true sudo = true tzdata = true diff --git a/overlays/testing/configs/alpine-testing.conf b/overlays/testing/configs/alpine-testing.conf index a0a1400..e82e372 100644 --- a/overlays/testing/configs/alpine-testing.conf +++ b/overlays/testing/configs/alpine-testing.conf @@ -18,10 +18,6 @@ Default { } Dimensions { - bootstrap { - # not quite working yet - #cloudinit { include required("testing/cloudinit.conf") } - } cloud { # just test in these regions aws.regions { @@ -32,6 +28,8 @@ Dimensions { #oci { include required("testing/oci.conf") } #gcp { include required("testing/gcp.conf") } #azure { include required("testing/azure.conf") } + #generic + #nocloud } } diff --git a/overlays/testing/configs/testing/cloudinit.conf b/overlays/testing/configs/testing/cloudinit.conf deleted file mode 100644 index 0659a1e..0000000 --- a/overlays/testing/configs/testing/cloudinit.conf +++ /dev/null @@ -1,9 +0,0 @@ -# vim: ts=2 et: -name = [cloudinit] - -packages { - cloud-init = true - openssh-server-pam = true -} -scripts = [ setup-cloudinit ] -script_dirs = [ setup-cloudinit.d ] \ No newline at end of file diff --git a/overlays/testing/scripts/setup-cloudinit b/scripts/setup-cloudinit similarity index 63% rename from overlays/testing/scripts/setup-cloudinit rename to scripts/setup-cloudinit index 9407e57..01658a1 100755 --- a/overlays/testing/scripts/setup-cloudinit +++ b/scripts/setup-cloudinit @@ -4,12 +4,7 @@ [ -z "$DEBUG" ] || [ "$DEBUG" = 0 ] || set -x TARGET=/mnt -#SETUP=/tmp/setup-cloudinit.d -die() { - printf '\033[1;7;31m FATAL: %s \033[0m\n' "$@" >&2 # bold reversed red - exit 1 -} einfo() { printf '\n\033[1;7;36m> %s <\033[0m\n' "$@" >&2 # bold reversed cyan } @@ -25,3 +20,17 @@ chroot "$TARGET" /sbin/setup-cloud-init if [ -f "$TARGET"/etc/cloud/cloud.cfg ]; then sed -i '/lock_passwd:/s/True/False/' "$TARGET"/etc/cloud/cloud.cfg fi + +# configure the image for a particular cloud datasource +case "$CLOUD" in + aws) + DATASOURCE="Ec2" + ;; + *) + echo "Unsupported Cloud '$CLOUD'" >&2 + exit 1 + ;; +esac + +printf '\n\n# Cloud-Init will use default configuration for this DataSource\n' +printf 'datasource_list: ["%s"]\n' "$DATASOURCE" >> "$TARGET"/etc/cloud/cloud.cfg \ No newline at end of file From 882bfa4393fc72d5142a6fb680e719ec8db72115 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Fri, 11 Mar 2022 15:38:00 +0100 Subject: [PATCH 124/125] Fix minor bug for softlinks pointing to directories during clean --- build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build b/build index ba5b84b..f269bf9 100755 --- a/build +++ b/build @@ -95,7 +95,7 @@ def clean_work(): for x in (set(os.listdir('work')) - WORK_CLEAN): x = os.path.join('work', x) log.debug('removing %s', x) - if os.path.isdir(x): + if os.path.isdir(x) and not os.path.islink(x): shutil.rmtree(x) else: os.unlink(x) From 99474a8a6ab7a22e90f5f73d7cfb706cab51ace0 Mon Sep 17 00:00:00 2001 From: Stefan Reimer Date: Fri, 11 Mar 2022 15:38:35 +0100 Subject: [PATCH 125/125] Always use latest packages within the release during builds to pick up security patches etc --- scripts/setup | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/setup b/scripts/setup index 29aff42..3bd3726 100755 --- a/scripts/setup +++ b/scripts/setup @@ -22,6 +22,8 @@ setup_builder() { einfo "Setting up Builder Instance" setup-apkrepos -1 # main repo via dl-cdn # ODO? also uncomment community repo? + # Always use latest versions within the release, security patches etc. + apk upgrade -U --available --no-cache apk --no-cache add \ e2fsprogs \ dosfstools \