Melakukan perubahan di AWS CloudFormation
CloudFormation Yaml sebelumnya dibagian TimeUnit Budget Alertnya masih dibuat MONTHLY, dikarenakan monthly alert terlalu lama, maka saya ingin merubah TimeUnit nya menjadi DAILY, dan sebenarnya perubahan ini bisa dilakukan secara langsung di setingan Budget AWS, dikarenakan pembuatannya menggunakan CloudFormation maka sebaiknya perubahan dilakukan di YAML CloudFormation sebelumnya.
Perubahan yang akan dilakukan
dari:
TimeUnit: MONTHLY
Menjadi:
TimeUnit: DAILY
๐ Apa Efeknya?
Dengan TimeUnit: DAILY
, maka:
-
Budget limit $0.01 berlaku per hari
-
Kalau hari ini kamu pakai lebih dari $0.01 โ langsung trigger notifikasi
-
Besok akan mulai hitung ulang lagi dari nol
Ini cocok banget buat pengguna Free Tier atau akun lab, karena kamu ingin tau langsung saat mulai keluar biaya, bukan nunggu akhir bulan.
๐ ๏ธ Cara Update CloudFormation Stack
- Kalau kamu pakai CloudFormation:
Ubah bagianZeroSpendBudget
jadi:
TimeUnit: DAILY
Dan berikut YAML File lengkapnya
AWSTemplateFormatVersion: '2010-09-09' Description: Zero Spend Daily Budget Notification using SNS and Lambda Parameters: NotificationEmail: Type: String Description: Email address to receive budget notifications Resources: ZeroSpendSNSTopic: Type: AWS::SNS::Topic Properties: TopicName: ZeroSpendDailyBudgetTopic SNSEmailSubscription: Type: AWS::SNS::Subscription Properties: Protocol: email Endpoint: !Ref NotificationEmail TopicArn: !Ref ZeroSpendSNSTopic BudgetNotificationLambdaRole: Type: AWS::IAM::Role Properties: RoleName: BudgetNotificationLambdaRole AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole BudgetNotificationFunction: Type: AWS::Lambda::Function Properties: FunctionName: BudgetNotificationHandler Runtime: python3.12 Handler: index.lambda_handler Role: !GetAtt BudgetNotificationLambdaRole.Arn Code: ZipFile: | def lambda_handler(event, context): print("Received budget alert event:") print(event) return { 'statusCode': 200, 'body': 'Budget notification processed.' } BudgetNotificationPermission: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunction FunctionName: !Ref BudgetNotificationFunction Principal: sns.amazonaws.com SourceArn: !Ref ZeroSpendSNSTopic BudgetNotificationSNSSubscription: Type: AWS::SNS::Subscription Properties: Protocol: lambda Endpoint: !GetAtt BudgetNotificationFunction.Arn TopicArn: !Ref ZeroSpendSNSTopic ZeroSpendDailyBudget: Type: AWS::Budgets::Budget Properties: Budget: BudgetName: ZeroSpendDailyBudget BudgetLimit: Amount: 0.01 Unit: USD BudgetType: COST TimeUnit: DAILY NotificationsWithSubscribers: - Notification: NotificationType: ACTUAL ComparisonOperator: GREATER_THAN Threshold: 100 ThresholdType: PERCENTAGE Subscribers: - SubscriptionType: SNS Address: !Ref ZeroSpendSNSTopic
ย
- Simpan template ini ke file, misalnya
zero-spend-daily.yaml
- Buka AWS Console โย CloudFormation
- Pilih stack yang sebelumnya โ Klikย Update stack
- setelah kamu klik update ada dua pilihan yang muncul
๐ง Penjelasan Singkat:
Saat kamu memilih "Create a change set", itu artinya kamu baru membuat rencana perubahan, belum benar-benar menerapkannya.
CloudFormation kasih kamu kesempatan untuk:
-
-
Cek dulu perubahan apa yang akan dilakukan (kayak dry-run)
-
Baru kalau yakin โ kamu harus klik โExecuteโ untuk menerapkan perubahan
-
-
Pilih Replace current template
-
Upload file
zero-spend-daily.yaml
-
Klik Next sampai akhir โ Klik Update Stack
- Lanjut kebagian "cara execute cloudformation stack" ya
๐ก Note: Kamu tidak perlu menghapus stack lama, cukup update saja. Notifikasi email tetap dikirim ke email kamu
aku@widianto.org
(pastikan kamu tetap subscribe ke SNS-nya). -
๐ ๏ธ Cara Execute CloudFormation Stack
FAQ:
setelah saya click menu "execute change set" keluar notif seperti gambar berikut ini, apakah kamu bisa menjelaskan apakah itu?
Oke, aku lihat gambarnya! โจ
Yang muncul itu adalah konfirmasi terakhir sebelum eksekusi perubahan.
Yuk aku jelaskan satu-satu isinya, gampang kok:
๐ Penjelasan pilihan-pilihan di โExecute change set?โ
1. Behavior on provisioning failure:
-
Roll back all stack resources (default, sudah terpilih)
โ Kalau nanti update gagal di tengah jalan, semua resource akan dikembalikan ke kondisi sebelum update. Ini aman banget untuk sekarang. -
Preserve successfully provisioned resources
โ Kalau kamu pilih ini, resource yang berhasil dibuat tetap dipertahankan, hanya yang gagal yang di-rollback. (Tidak perlu dipilih untuk kasus kita.)
2. Delete newly created resources during a rollback:
-
Use deletion policy (default, sudah terpilih)
โ Artinya kalau ada resource yang baru dibuat saat update dan update itu gagal, maka CloudFormation akan memutuskan untuk menghapus atau mempertahankan resource berdasarkan kebijakanDeletionPolicy
yang diset di template (kalau ada).
Ini pilihan aman dan standar. -
Delete all newly created resources
โ Kalau pilih ini, semua resource yang baru dibuat akan dihapus saat rollback, apapun kondisinya. (Kamu tidak perlu pilih ini.)
No Comments