Blog
Halten Sie Ihre AMIs in CloudFormation auf dem neuesten Stand

Die Referenzierung von Images virtueller Maschinen in Ihrer CloudFormation-Vorlage ist schwierig. Sie müssen das Image, das Sie verwenden möchten, suchen und seine nicht beschreibende ID (ami-xxxxxxx) in die Vorlage kopieren
. Wenn Sie in mehreren Regionen bereitstellen, müssen Sie auch diese IDs suchen und hinzufügen. Wann immer eine neue Version des Images der virtuellen Maschine verfügbar ist, müssen Sie den gesamten Vorgang wiederholen. Mit unserem Custom CloudFormation Provider und unserem Wartungsdienstprogramm wird die Referenzierung von Images virtueller Maschinen sowohl einfach zu lesen als auch zu pflegen.
Um die Angabe und Pflege von Images virtueller Maschinen in CloudFormation zu vereinfachen, haben wir eine
Custom CloudFormation Resource
Die Custom Resource ermöglicht es Ihnen, ein Image einer virtuellen Maschine nach Namen anzugeben. Das Dienstprogramm aws-cfn-update bietet die Möglichkeit,
diese Definitionen der benutzerdefinierten Ressource in Ihren Vorlagen über die Befehlszeile zu aktualisieren.
Angabe eines AMI nach Name
Um ein AMI mit Namen zu spezifizieren, fügen Sie eine Custom::AMI-Ressource
zu Ihrer Vorlage hinzu:
AMI:
Type: Custom::AMI
Properties:
Filters:
name: 'amzn-ami-2017.09.a-amazon-ecs-optimized'
ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-ami-provider'
Mit der Eigenschaft Filters können Sie angeben, welches AMI Sie wünschen. Der Name des Images ist ausreichend, aber wenn Sie möchten, können Sie sich austoben und jeden beliebigen Parameter angeben, der im EC2-API-Aufruf describe-images definiert ist.
Sobald Sie die benutzerdefinierte AMI-Ressourcendefinition hinzugefügt haben, können Sie die ID wie folgt abrufen:
Instance:
Type: AWS:EC2::Instance
EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref AMI
Halten Sie Ihr AMI auf dem neuesten Stand
Um das AMI auf dem neuesten Stand zu halten, können Sie das Dienstprogramm aws-cfn-update verwenden:
aws-cfn-update latest-ami --ami-name-pattern 'amzn-ami-2017.09.a-amazon-ecs-optimized' .
Das Dienstprogramm verwendet ein AMI-Namensmuster, um über die API describe-images nach dem neuesten AMI zu suchen. Das Dienstprogramm aktualisiert die Eigenschaft
Möchten Sie es ausprobieren? Dann installieren Sie den benutzerdefinierten Ressourcenanbieter und das Dienstprogramm.
Installieren des benutzerdefinierten Ressourcenanbieters
Um diesen benutzerdefinierten Ressourcenanbieter zu installieren, geben Sie ein:
aws cloudformation create-stack
--capabilities CAPABILITY_IAM
--stack-name cfn-ami-provider
--template-body file://cloudformation/cfn-ami-provider.json
aws cloudformation wait stack-create-complete --stack-name cfn-ami-provider
Diese CloudFormation-Vorlage verwendet unseren vorgefertigten Provider von s3://binxio-public-${AWS_REGION}/lambdas/cfn-ami-provider-latest.zip.
Installation des Dienstprogramms aws-cfn-updae
Um das Dienstprogramm aws-cfn-update zu installieren, geben Sie ein:
pip install aws-cfn-update
Demo
Um die Verwendung der benutzerdefinierten Ressource zu demonstrieren, geben Sie ein:
aws cloudformation create-stack --stack-name cfn-ami-provider-demo
--template-body file://cloudformation/demo-stack.json
aws cloudformation wait stack-create-complete --stack-name cfn-ami-provider-demo
und aktualisieren Sie die Vorlage, indem Sie eingeben:
aws-cfn-update latest-ami --ami-name-pattern 'amzn-ami-2017.09.a-amazon-ecs-optimized ./cloudformation
Prüfen Sie die aktualisierte Custom::AMI Ressourcendefinition (git diff) und aktualisieren Sie die Vorlage:
aws cloudformation update-stack --stack-name cfn-ami-provider-demo
--template-body file://cloudformation/demo-stack.json
aws cloudformation wait stack-update-complete --stack-name cfn-ami-provider-demo
Fazit
Mit diesem benutzerdefinierten CloudFormation-Provider und Aktualisierungsdienstprogramm können Sie ein AMI namentlich deklarieren und pflegen, was
die Wartbarkeit Ihrer CloudFormation-Vorlagen erleichtert.
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.
Unsere Ideen
Weitere Blogs
Contact



