1. Pengantar AWS CloudFormation
AWS CloudFormation adalah layanan dari Amazon Web Services yang memungkinkan Anda untuk memodelkan dan menyediakan sumber daya AWS secara otomatis dan terstruktur menggunakan template. Dengan CloudFormation, Anda dapat mengelola infrastruktur sebagai kode (IaC) sehingga memudahkan pengelolaan, pengulangan, dan kolaborasi.
Template CloudFormation ditulis dalam format JSON atau YAML. Pada panduan ini, kita akan fokus pada format YAML yang lebih mudah dibaca dan ditulis.
2. Struktur Template YAML CloudFormation
Template YAML CloudFormation memiliki beberapa bagian utama yang wajib dan opsional, yaitu:
-
AWSTemplateFormatVersion:
Versi format template (opsional).
-
Description:
Deskripsi singkat tentang template.
-
Parameters:
Parameter yang dapat diinput saat deployment.
-
Mappings:
Pemetaan nilai statis berdasarkan kondisi.
-
Conditions:
Kondisi untuk menentukan resource yang dibuat.
-
Resources:
Bagian utama yang mendefinisikan resource AWS.
-
Outputs:
Output yang ingin ditampilkan setelah stack dibuat.
AWSTemplateFormatVersion: '2010-09-09'
Description: Template contoh sederhana
Parameters:
InstanceType:
Type: String
Default: t2.micro
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !Ref InstanceType
ImageId: ami-0abcdef1234567890
Outputs:
InstanceId:
Description: ID instance EC2
Value: !Ref MyEC2Instance
3. Mendefinisikan Resource
Resource adalah komponen utama dalam template CloudFormation yang merepresentasikan layanan AWS yang ingin Anda buat, seperti EC2, S3, VPC, dan lain-lain.
Contoh mendefinisikan sebuah instance EC2:
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t3.micro
ImageId: ami-0abcdef1234567890
KeyName: my-key-pair
Tags:
- Key: Name
Value: MyInstance
4. Parameter dan Output
Parameter memungkinkan Anda membuat template yang dinamis dengan menerima input saat stack dibuat. Output digunakan untuk menampilkan informasi penting setelah stack selesai dibuat.
Contoh parameter dan output:
Parameters:
InstanceType:
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- t2.small
- t2.medium
Description: Tipe instance EC2
Outputs:
InstanceId:
Description: ID instance EC2 yang dibuat
Value: !Ref MyEC2Instance
5. Intrinsic Functions
Intrinsic functions adalah fungsi bawaan CloudFormation yang membantu Anda mengelola referensi, kondisi, dan manipulasi data dalam template.
-
!Ref
- Mengambil nilai dari parameter atau resource.
-
!GetAtt
- Mengambil atribut dari resource.
-
!Sub
- Melakukan substitusi string dengan variabel.
-
!Join
- Menggabungkan array string menjadi satu string.
-
!If
- Menggunakan kondisi untuk memilih nilai.
Contoh penggunaan
!Sub
dan
!GetAtt
:
Resources:
MyBucket:
Type: AWS::S3::Bucket
Outputs:
BucketName:
Value: !Ref MyBucket
BucketArn:
Value: !GetAtt MyBucket.Arn
BucketUrl:
Value: !Sub "https://${MyBucket}.s3.amazonaws.com"
6. Condition dan Mapping
Condition memungkinkan Anda membuat resource atau properti tertentu hanya jika kondisi terpenuhi. Mapping digunakan untuk membuat tabel lookup statis.
Contoh mapping dan condition:
Mappings:
RegionMap:
us-east-1:
AMI: ami-0abcdef1234567890
us-west-2:
AMI: ami-0fedcba9876543210
Conditions:
IsUSEast1: !Equals [ !Ref "AWS::Region", "us-east-1" ]
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !FindInMap [RegionMap, !Ref "AWS::Region", AMI]
InstanceType: t2.micro
Condition: IsUSEast1
7. Deployment dan Manajemen Stack
Setelah template selesai dibuat, Anda dapat melakukan deployment stack menggunakan AWS Management Console, AWS CLI, atau AWS SDK. Manajemen stack meliputi update, delete, dan monitoring status stack.
Contoh perintah AWS CLI untuk membuat stack:
aws cloudformation create-stack --stack-name MyStack --template-body file://template.yaml --parameters ParameterKey=InstanceType,ParameterValue=t2.micro
8. Best Practices dan Tips
-
Gunakan parameter untuk membuat template fleksibel dan reusable.
-
Manfaatkan kondisi untuk mengontrol resource yang dibuat sesuai kebutuhan.
-
Gunakan mapping untuk mengelola konfigurasi berdasarkan region atau environment.
-
Selalu validasi template sebelum deployment menggunakan
aws cloudformation validate-template
.
-
Gunakan version control untuk menyimpan template Anda.
-
Dokumentasikan template dengan baik di bagian
Description
.
9. Studi Kasus: Membuat VPC dan EC2 Instance
Berikut contoh template YAML sederhana untuk membuat VPC, subnet, dan EC2 instance:
AWSTemplateFormatVersion: '2010-09-09'
Description: Template membuat VPC, Subnet, dan EC2 Instance
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: MyVPC
MySubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.1.0/24
AvailabilityZone: !Select [0, !GetAZs '']
Tags:
- Key: Name
Value: MySubnet
MyInternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: MyIGW
AttachIGW:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref MyVPC
InternetGatewayId: !Ref MyInternetGateway
MyRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref MyVPC
Tags:
- Key: Name
Value: MyRouteTable
MyRoute:
Type: AWS::EC2::Route
DependsOn: AttachIGW
Properties:
RouteTableId: !Ref MyRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref MyInternetGateway
MySubnetRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref MySubnet
RouteTableId: !Ref MyRouteTable
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t3.micro
ImageId: ami-0abcdef1234567890
SubnetId: !Ref MySubnet
KeyName: my-key-pair
Tags:
- Key: Name
Value: MyEC2Instance
Outputs:
VPCId:
Description: ID VPC yang dibuat
Value: !Ref MyVPC
SubnetId:
Description: ID Subnet yang dibuat
Value: !Ref MySubnet
InstanceId:
Description: ID EC2 Instance yang dibuat
Value: !Ref MyEC2Instance
10. Referensi dan Sumber Belajar