지속적으로 AWS 비용 모니터링

월말에 예상치 못한 요금이 부과되지 않도록 AWS 비용을 모니터링하는 것은 항상 중요합니다.

AWS 예산을 사용하는 방법에 대한 훌륭한 기사는 거의 없지만 CloudFormation을 통해 예산 알림 생성을 자동화하고 여러 AWS 계정에 배포하는 방법을 공유하기 위해 이 게시물을 작성했습니다.

아래 템플릿을 사용하면 월별 비용뿐만 아니라 일일 비용도 예산할 수 있습니다.

Description: AWS Budget - daily and monthly alerts

Parameters:
  AccountAlias:
    Description: AWS account alias
    Type: String

Mappings:
  awsAccount:
    "000000000": # nonprod
      BudgetDailyAmount: 22
      BudgetMonthlyAmount: 700
      Unit: USD
      DevTeamEmail: [email protected]
      PlatformTeamEmail: [email protected]
    "111111111": # prod
      BudgetDailyAmount: 32
      BudgetMonthlyAmount: 1000
      Unit: USD
      DevTeamEmail: [email protected]
      PlatformTeamEmail: [email protected]

Resources:
  BudgetDaily:
    Type: AWS::Budgets::Budget
    Properties:
      Budget:
        BudgetName: !Sub ${AWS::AccountId}-${AccountAlias}-daily
        BudgetLimit:
          Amount: !FindInMap [awsAccount, !Ref 'AWS::AccountId', BudgetDailyAmount]
          Unit: !FindInMap [awsAccount, !Ref 'AWS::AccountId', Unit]
        TimeUnit: DAILY
        BudgetType: COST
      NotificationsWithSubscribers:
        - Notification:
            NotificationType: ACTUAL
            ComparisonOperator: GREATER_THAN
            Threshold: 99
          Subscribers:
            - SubscriptionType: EMAIL
              Address: !FindInMap [awsAccount, !Ref 'AWS::AccountId', DevTeamEmail]
            - SubscriptionType: EMAIL
              Address: !FindInMap [awsAccount, !Ref 'AWS::AccountId', PlatformTeamEmail]
        - Notification:
            NotificationType: ACTUAL
            ComparisonOperator: GREATER_THAN
            Threshold: 80
          Subscribers:
            - SubscriptionType: EMAIL
              Address: !FindInMap [awsAccount, !Ref 'AWS::AccountId', DevTeamEmail]
            - SubscriptionType: EMAIL
              Address: !FindInMap [awsAccount, !Ref 'AWS::AccountId', PlatformTeamEmail]

  BudgetMonthly:
    Type: AWS::Budgets::Budget
    Properties:
      Budget:
        BudgetName: !Sub ${AWS::AccountId}-${AccountAlias}-monthly
        BudgetLimit:
          Amount: !FindInMap [awsAccount, !Ref 'AWS::AccountId', BudgetMonthlyAmount]
          Unit: !FindInMap [awsAccount, !Ref 'AWS::AccountId', Unit]
        TimeUnit: MONTHLY
        BudgetType: COST
      NotificationsWithSubscribers:
        - Notification:
            NotificationType: ACTUAL
            ComparisonOperator: GREATER_THAN
            Threshold: 99
          Subscribers:
            - SubscriptionType: EMAIL
              Address: !FindInMap [awsAccount, !Ref 'AWS::AccountId', DevTeamEmail]
            - SubscriptionType: EMAIL
              Address: !FindInMap [awsAccount, !Ref 'AWS::AccountId', PlatformTeamEmail]
        - Notification:
            NotificationType: ACTUAL
            ComparisonOperator: GREATER_THAN
            Threshold: 80
          Subscribers:
            - SubscriptionType: EMAIL
              Address: !FindInMap [awsAccount, !Ref 'AWS::AccountId', DevTeamEmail]
            - SubscriptionType: EMAIL
              Address: !FindInMap [awsAccount, !Ref 'AWS::AccountId', PlatformTeamEmail]



이 템플릿은 두 개의 알림을 생성합니다. 하나는 일일 비용과 다른 하나는 월별 비용입니다. 템플릿을 배포하기 전에 "매핑"에서 계정 ID와 이메일 주소를 바꿔야 합니다.

아래 스크립트를 사용하여 스택을 배포했습니다.

export AWS_REGION="us-east-1"
export AWS_ACCOUNT_ALIAS=$(aws iam list-account-aliases --query 'AccountAliases' --output text) 

aws cloudformation deploy --stack-name budgets-alerts \
        --parameter-overrides AccountAlias=$AWS_ACCOUNT_ALIAS \
        --template-file budgets.yaml --region $AWS_REGION --capabilities CAPABILITY_NAMED_IAM \
        --no-fail-on-empty-changeset




이것이 AWS 비용을 추적하고 놀라움을 피하는 데 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기