Skip to main content

Melakukan perubahan di AWS CloudFormation

CloudFormation Yaml sebelumnya dibagian TimeUnit Budget Alertnya masih dibuat MONTHLY, dikarenakan monthly 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:

Kalau kamu pakai CloudFormation:

Ubah bagian ZeroSpendBudget 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

πŸ› οΈ Cara Update CloudFormation Stack

  1. Simpan template ini ke file, misalnya zero-spend-daily.yaml

  2. Buka AWS Console β†’ CloudFormation

  3. Pilih stack yang sebelumnya β†’ Klik Update stack
    setelah kamu klik update ada dua pilihan yang muncul

    image.png


    🧠 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

  4. Pilih Replace current template

  5. Upload file zero-spend-daily.yaml

  6. Klik Next sampai akhir β†’ Klik Update Stack


πŸ’‘ 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

  1. Buka AWS Console β†’ CloudFormation

  2. Pilih stack yang sebelumnya

    image.png

  3. Done

FAQ:

setelah saya click menu "execute change set" keluar notif seperti gambar berikut ini, apakah kamu bisa menjelaskan apakah itu?

image.png

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 kebijakan DeletionPolicy 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.)


lebih buruk

Β