AWS — Установите глобальный бюджет для проекта?

#terraform

Вопрос:

Я работаю над проектом Terraform по созданию, обновлению или удалению AWS sandboxs для каждого нового сотрудника в моей компании. Тем не менее, мы хотели бы иметь фиксированный бюджет для каждой песочницы и, по возможности, не превышать этот бюджет. Я читал о бюджетных действиях AWS, но не уверен, как лучше всего интегрировать их с моим текущим кодом.

main.tf

 ## this is creating a new project and I would like to set a budget of $50 for this account

resource "aws_organizations_account" "account" {
  name      = "sandbox"
  email     = "new-user sandbox@company.com"
  role_name = "myOrganizationRole"
}
 

Ответ №1:

Вам необходимо создать ресурсы aws_budgets_budget и aws_budgets_budget_action в новой учетной записи. Чтобы создать ресурсы в новой учетной записи, вам необходимо создать поставщика для этой учетной записи, взяв на себя роль администратора, которая была создана:

 provider "aws" {
  alias   = "sandbox"
  region  = "us-east-1"
  ...
  // Specify your credentials source, same as you use for the provider you used for the aws_organizations_account resource
  ...
  assume_role {
    role_arn = "arn:aws:iam::${aws_organizations_account.account.id}:role/${aws_organizations_account.account.role_name}"
  }
}
 

И теперь вы можете использовать этого поставщика для создания бюджетных ресурсов в новой учетной записи песочницы (обратите внимание на provider входные параметры).:

 resource "aws_budgets_budget" "example" {
  provider          = aws.sandbox
  name              = "example"
  budget_type       = "USAGE"
  limit_amount      = "10.0"
  limit_unit        = "dollars"
  time_period_start = "2006-01-02_15:04"
  time_unit         = "MONTHLY"
}

resource "aws_budgets_budget_action" "example" {
  provider           = aws.sandbox
  budget_name        = aws_budgets_budget.example.name
  ...
}
 

Комментарии:

1. Они не обязательно должны быть в новой учетной записи, они могут быть в основной учетной записи, используя LinkedAccount фильтр, чтобы ограничить их новой учетной записью.

2. Хорошая мысль. И это, вероятно, лучший подход для организации с несколькими учетными записями: либо иметь специальную учетную запись для управления бюджетами во всей организации, либо устанавливать бюджеты в специальной учетной записи для каждого подразделения Организации.

3. Спасибо за ваш ответ. Я только что понял, что легко создавать новые AWS с помощью Terraform, но невозможно удалить их (по крайней мере, с помощью Terraform).: Deleting this Terraform resource will only remove an AWS account from an organization. Terraform will not close the account. The member account must be prepared to be a standalone account beforehand. See the AWS Organizations documentation for more information.