CloudFormation: Infrastruktúra kódként az AWS-ben

  • Erőforrás típus: IaaS
  • Felhő szolgáltató: Amazon Web Services
  • Angol név: CloudFormation
  • Magyar név: CloudFormation
  • Rövidített név (ha van ilyen):

Korábban írtam már az infrastruktúra automatizálásáról és a DevOps megközelítés fontosságáról az informatikai projektekben. Ezen megközelítés neve Infrastructure as Code (IaC). A Terraform-al már kicsit ismerkedtünk, de minden felhőszolgáltatónak van valamilyen IaC megoldása. Olvashattál már az Azure esetén az ARM-ről és a Bicep-ről is.

AWS-ben a CloudFormation az a szolgáltatás, amely lehetővé teszi, hogy az infrastruktúrát kódként kezeljük – azaz sablonfájlok segítségével automatikusan hozzuk létre és kezeljük az AWS erőforrásokat.

Mi az AWS CloudFormation?

A CloudFormation egy sablonalapú eszköz, amely lehetővé teszi, hogy JSON vagy YAML fájlban írjuk le, milyen AWS erőforrásokat szeretnénk létrehozni – például EC2 példányokat, S3 tárolókat, IAM szerepköröket, VPC-ket stb.

A sablon betöltése után a CloudFormation létrehozza ezeket az erőforrásokat Stack formájában. A stack egy logikai egység, amely tartalmazza az összes erőforrást, amit egy adott sablon alapján hoztunk létre.

Miért érdemes a CloudFormation-t használni?

Az alábbi lista önmagáért beszél:

  • Kód nézet: YAML vagy JSON formátumban írhatjuk meg a sablonokat – ez könnyen verziózható, visszakövethető, automatizálható.
  • Grafikus nézet: Az AWS Console-on belül vizuálisan is megtekinthetjük a sablon struktúráját (Resource Map), így könnyen átlátható, mi mivel áll kapcsolatban.
  • Újrahasználhatóság: A sablonok paraméterezhetők, így ugyanaz a sablon használható több környezetben (pl. dev, test, prod).
  • Exportálás: Egy meglévő környezetből könnyen generálhatunk sablont, amit újra felhasználhatunk máshol.
  • Rollback és állapotkezelés: Ha egy stack létrehozása során hiba történik, a CloudFormation automatikusan visszaállítja a korábbi állapotot.
  • Integráció más AWS eszközökkel: Például CodePipeline vagy Service Catalog támogatás.

Ha megnézzük ezt a listát, akkor láthatjuk, hogy a CloudFormation erősségei vitathatatlanok.

Egyszerű példa: Egy S3 tároló létrehozása

Ez a példa bemutatja, hogyan lehet egyetlen S3 tárolót létrehozni YAML-ben:

AWSTemplateFormatVersion: '2010-09-09'
Description: Egyszerű S3 bucket létrehozása

Resources:
 MySimpleBucket:
 Type: AWS::S3::Bucket
 Properties:
 BucketName: egy-cloudformation-s3-bucket

Mit csinál ez?

  • Létrehoz egy S3 tárolót egy-cloudformation-s3-bucket névvel.
  • A stack elindítása után a CloudFormation automatikusan elvégzi a létrehozást.

Használat lépései az AWS Console-ban:

  1. Menj a CloudFormation szolgáltatásra.
  2. Válaszd a „Create Stack” opciót.
  3. Töltsd fel a sablon YAML fájlt.
  4. Add meg a stack nevét, majd kattints a „Next” gombokra.
  5. Pár perc múlva kész is az erőforrásod!

Komplex példa: EC2 példány biztonságos környezetben

Ebben a példában egy EC2 példányt hozunk létre saját VPC-ben, nyilvános IP nélkül, biztonsági csoporttal:

AWSTemplateFormatVersion: '2010-09-09'
Description: EC2 példány saját VPC-ben

Resources:
 SajatVPC:
 Type: AWS::EC2::VPC
 Properties:
 CidrBlock: 10.0.0.0/16
 Tags:
 - Key: Name
 Value: VCP01

 SajatSubnet:
 Type: AWS::EC2::Subnet
 Properties:
 VpcId: !Ref SajatVPC
 CidrBlock: 10.0.1.0/24
 AvailabilityZone: !Select [0, !GetAZs '']

 BiztonsagiCsoport:
 Type: AWS::EC2::SecurityGroup
 Properties:
 GroupDescription: Csak SSH
 VpcId: !Ref SajatVPC
 SecurityGroupIngress:
 - IpProtocol: tcp
 FromPort: 22
 ToPort: 22
 CidrIp: 0.0.0.0/0

 LinuxVM:
 Type: AWS::EC2::Instance
 Properties:
 InstanceType: t3.micro
 ImageId: ami-0c2e61fdcb5495691 # AMI ID eu-north-1 régióban
 SubnetId: !Ref SajatSubnet
 SecurityGroupIds:
 - !Ref BiztonsagiCsoport
 Tags:
 - Key: Name
 Value: CloudFormationEC2

Mi történik itt?

  • Létrejön egy új VPC, alhálózat (subnet), biztonsági csoport (SG) és EC2 példány.
  • A példány csak SSH-n keresztül érhető el.
  • Ez egy jól strukturált, reprodukálható környezet, amit bármikor újra létrehozhatunk.

CloudFormation sablon részei: Az alapok

Egy CloudFormation sablon tipikusan a következő szekciókból állhat:

  • Parameters – A sablon újrahasználhatóságát biztosítják. Ezek segítségével a sablon külső értékeket fogadhat.
  • Resources – A kötelező szekció, ahol magukat az AWS erőforrásokat definiáljuk.
  • Outputs – Ezekkel az információkkal a stack létrehozása után dolgozhatunk tovább (pl. EC2 publikus IP címe).
  • Conditions – Opcionálisan szabályozhatjuk, hogy egyes erőforrások létrejöjjenek-e vagy sem.
  • Mappings – Előre definiált értéktáblák (pl. régiókhoz tartozó AMI ID-k).
  • Metadata – Opcionális dokumentáció, megjegyzések.
  • Transform – Haladó funkció, például a Serverless Application Model (SAM) használatához.

Ezek használatáról egy következő cikkben írok részletesebben.


Az AWS CloudFormation hatalmas segítség mindazok számára, akik szeretnék infrastruktúrájukat kóddá alakítani. Kezdőknek is ideális, mivel a sablonokat akár vizuálisan is generálhatják és módosíthatják, míg a haladó felhasználók számára teljes automatizálást tesz lehetővé CI/CD pipeline-okban.

Ha komolyan gondolod a felhőalapú rendszerek kiépítését, a CloudFormation ismerete egy igazi svájcibicska lehet a kezedben. 🙂