Blog

So beenden Sie verweilende Packer-Instanzen auf AWS

Mark van Holsteijn

Aktualisiert Oktober 21, 2025
3 Minuten

HashiCorp Packer ist ein großartiges Tool zur Erstellung von Images virtueller Maschinen für eine Vielzahl von Plattformen, einschließlich AWS. Normalerweise startet Packer eine EC2-Instanz, erstellt das AMI für sie und beendet die Instanz nach Abschluss. Manchmal wird der Prozess jedoch abgebrochen und die Instanz läuft weiter und verursacht unnötige Cloud-Ausgaben. In diesem Blog stelle ich ein Dienstprogramm vor, mit dem Sie alte Packer-Instanzen loswerden können.

Das Dienstprogramm aws-hashicorp-packer-reaper hält alle Packer Builder EC2-Instanzen an oder beendet sie. Sie verwenden es über das Befehlszeilendienstprogramm oder installieren es als AWS Lambda-Funktion, damit alte Instanzen automatisch beendet werden.

den Sensenmann installieren

um den Packer Reaper zu installieren, geben Sie ein:

$ pip install aws-hashicorp-packer-reaper

Mit diesem Dienstprogramm können Sie jede EC2-Instanz auflisten, anhalten oder beenden, die mit dem Namen Packer Builder gekennzeichnet wurde. Es gibt keine weitere Überprüfung, ob es sich bei der Instanz tatsächlich um einen von Packer gestarteten Rechner handelt. Der Name ist ziemlich eindeutig, aber wenn Sie Ihren Anwendungsserver mit demselben Namen kennzeichnen, wird er ebenfalls ausgewählt.

laufende Packer-Instanzen anzeigen

Um laufende Packer-Instanzen anzuzeigen, geben Sie ein:

$ aws-hashicorp-packer-reaper list

i-06ac951992dbc11a1 (Packer Builder) launched 13 minutes ago - terminated
i-035ebe427a538c829 (Packer Builder) launched 4 minutes ago - running
INFO: 2 packer builder instances found

Stoppen Sie laufende Packer-Instanzen

Um die Ausführung von Packer-Instanzen, die älter als 2 Stunden sind, zu stoppen, geben Sie ein:

$ aws-hashicorp-packer-reaper stop --older-than 2h

INFO: stopping i-035ebe427a538c829 (Packer Builder) created 2 hours ago
INFO: total of 1 running instances stopped

Wenn Sie sehen möchten, welche Instanzen gestoppt werden, geben Sie --dry-run an.

Beenden Sie laufende Packer-Instanzen

Um gestoppte und laufende Packer-Instanzen, die älter als 24 Stunden sind, zu beenden:

aws-hashicorp-packer-reaper --verbose terminate --older-than 24h

INFO: terminating i-035ebe427a538c829 (Packer Builder) created 25 hours ago
INFO: total of 1 instances terminated

Wenn Sie sehen möchten, welche Instanzen beendet werden, geben Sie --dry-run an.

als Lambda bereitstellen

Um den Packer Reaper als AWS Lambda bereitzustellen, geben Sie ein:

git clone https://github.com/binxio/aws-hashicorp-packer-reaper.git
cd aws-hashicorp-packer-reaper
aws cloudformation deploy 
    --capabilities CAPABILITY_IAM 
    --stack-name aws-hashicorp-packer-reaper 
    --template-file ./cloudformation/aws-hashicorp-packer-reaper.yaml

Dadurch wird der Packer Reaper in Ihrem AWS-Konto installiert. Es gibt zwei Zeitpläne, die den Reaper jede Stunde ausführen. Einen, um Instanzen zu stoppen, die älter als 2 Stunden sind:

 AWSHashicorpPackerReaperStopSchedule:
    Type: AWS::Events::Rule
    Properties:
      Name: stop-old-aws-hashicorp-packer-machines
      Description: reap expired Hashicorp Packer Builders
      ScheduleExpression: 'rate(1 hour)'
      State: ENABLED
      Targets:
        - Id: aws-hashicorp-packer-build-reaper
          Arn: !GetAtt AWSHashicorpPackerReaper.Arn
          Input: '{"dry_run": false, "older_than": "2h", "mode": "stop"}'

und eine zum Beenden von Instanzen, die älter als 24 Stunden sind.

  AWSHashicorpPackerReaperTerminatorSchedule:
    Type: AWS::Events::Rule
    Properties:
      Name: terminate-old-aws-hashicorp-packer-machines
      Description: reap expired Hashicorp Packer Builders
      ScheduleExpression: 'rate(4 hours)'
      State: ENABLED
      Targets:
        - Id: aws-hashicorp-packer-build-reaper
          Arn: !GetAtt AWSHashicorpPackerReaper.Arn
          Input: '{"dry_run": false, "older_than": "24h", "mode": "terminate"}'

Natürlich können Sie diese Zeitpläne in der entsprechenden [CloudFormation-Vorlage]() an Ihre Anforderungen anpassen.

Fazit

Das Dienstprogramm aws-hashicorp-packer-reaper stoppt oder beendet alle virtuellen Maschinen mit dem Namenstag Packer Builder. Ich empfehle, den Lambda in Ihrem AWS-Konto bereitzustellen, damit Sie nie für verweilende Packer-Instanzen bezahlen müssen.

Möchten Sie weitere Kosten reduzieren? Lesen Sie meinen Blog darüber, wie Sie versehentliche Cloud-Kosten in Ihrem AWS-Konto minimieren können

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.