Основы AWS Tags и Terraform с S3 — часть 1

Основы AWS Tags и Terraform с S3 — часть 1

12 марта 2022 г.

Введение


Управление [ресурсами AWS] (https://aws.amazon.com/) может быть чрезвычайно сложным процессом. У AWS нет логических групп ресурсов и других тонкостей, которые есть у Azure и GCP. Несмотря на это, AWS все еще далеко до самого популярного облачного провайдера в мире. Поэтому по-прежнему очень важно найти способы эффективной организации ваших ресурсов.


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


Эти сообщения написаны так, чтобы вы могли следить за видео на YouTube ниже. Вам просто понадобится среда с доступом к AWS API в вашем регионе. Обычно для этой цели я использую AWS Cloud9, но подойдет любая среда с доступом.


https://www.youtube.com/watch?v=-U6k0eQSVfc


Репозиторий Github: https://github.com/CloudForecast/aws-tagged-with-terraform


Блоки тегов


Первый метод, который мы можем использовать для тегирования ресурсов, — это использование базового блока тегов. Давайте создадим файл main.tf и настроим корзину S3, чтобы посмотреть на это.


Настройте Terraform для использования поставщика AWS


терраформировать {


required_providers {


авс = {


источник = "hashicorp/aws"


версия = "~> 4.0"


Настройка поставщика AWS


провайдер "aws" {


регион = "США-Запад-2"


Создайте случайный идентификатор, чтобы предотвратить конфликты имен корзин


ресурс "random_id" "s3_id" {


длина_байта = 2


Мы используем функцию random_id: https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/id для создания энтропии, необходимой в именах наших корзин, чтобы гарантировать, что мы не пересекаемся с именем еще одно ведро S3.


Создайте корзину S3 с Terraform и пометьте ее


ресурс "aws_s3_bucket" "devops_bucket" {


ведро = "devops-bucket-${random_id.s3_id.dec}"


теги = {


Окружение = "разработчик"


Сервис = "s3"


Команда = "devops"


Теперь давайте запустим terraform apply -auto-approve.


Как только приложение будет завершено, давайте запустим консоль terraform, а затем запустим aws_s3_bucket.devops_bucket.tags, чтобы проверить теги:


aws_s3_bucket.devops_bucket.tags


на карту({


"Окружающая среда" = "разработчик"


"Сервис" = "s3"


"Команда" = "devops"


Чтобы выйти из консоли, запустите «exit» или «ctrl+c». Вы также можете просто запустить «terraform state show aws_s3_bucket.devops_bucket.tags», «terraform show» или просто прокрутить вывод вверх, чтобы увидеть теги.


Как видите, теги AWS можно указать в ресурсах AWS, используя блок тегов внутри ресурса. Это простой способ убедиться, что у каждой корзины s3 есть теги, но он никоим образом не эффективен. Помечать таким образом каждый ресурс в AWS не только утомительно и полностью противоречит принципу DRY (не повторяйтесь), но и в какой-то степени этого можно избежать!


Теги и Terraform AWS по умолчанию


Чтобы указать теги для всего развертывания, вы можете указать блок default_tags внутри блока провайдера. Это позволит вам указать резервные теги для любого ресурса, для которого не определены теги. Однако если вы укажете теги для определенного ресурса, эти теги будут иметь приоритет. Давайте взглянем:


Использование Terraform для создания второй корзины S3


ресурс "aws_s3_bucket" "finance_bucket" {


ведро = "cloudforecast-finance-${random_id.s3_id.dec)"


теги = {


Окружение = "разработчик"


Сервис = "s3"


Команда = "финансы"


После того, как вы добавили второе определение корзины и сохранили файл, примените конфигурацию с помощью terraform apply -auto-approve. После того, как вы подали заявку, вы можете запустить terraform console и получить доступ к обоим корзинам по имени их ресурса:


aws_s3_bucket.devops_bucket.tags


на карту({


"Окружающая среда" = "разработчик"


"Сервис" = "s3"


"Команда" = "devops"


aws_s3_bucket.finance_bucket.tags


на карту({


"Окружающая среда" = "разработчик"


"Сервис" = "s3"


"Команда" = "финансы"


Если бы мы развернули 10, 100 или даже 1000 ресурсов, это было бы не очень эффективно. Давайте добавим теги по умолчанию, чтобы сделать это более эффективным:


Добавить теги AWS по умолчанию с Terraform


В блоке provider нашей конфигурации добавьте тег по умолчанию, чтобы назначить обоим ресурсам тег Env:


провайдер "aws" {


регион = "США-Запад-2"


default_tags {


теги = {


Окружение = "разработчик"


Удалить теги Env с Terraform


Теперь, когда мы добавили теги по умолчанию, давайте удалим тег Env из корзин AWS S3:


ресурс "aws_s3_bucket" "devops_bucket" {


ведро = "devops-bucket-${random_id.s3_id.dec}"


теги = {


Сервис = "s3"


Команда = "devops"


ресурс "aws_s3_bucket" "finance_bucket" {


ведро = "финансовое ведро-${random_id.s3_id.dec}"


теги = {


Сервис = "s3"


Команда = "финансы"


Запустите «terraform apply -auto-approve» еще раз, а после завершения развертывания запустите «terraform console». В консоли введите адрес ресурса каждой корзины S3 и просмотрите вывод:


aws_s3_bucket.devops_bucket.tags


на карту({


"Сервис" = "s3"


"Команда" = "devops"


aws_s3_bucket.finance_bucket.tags


на карту({


"Сервис" = "s3"


"Команда" = "финансы"


Вы замечаете, что чего-то не хватает? Теги по умолчанию не отображаются в атрибуте tags. Теги по умолчанию находятся внутри атрибута tags_all, поэтому повторно запустите предыдущие команды с tags_all вместо tags:


aws_s3_bucket.devops_bucket.tags_all


на карту({


"Окружающая среда" = "разработчик"


"Сервис" = "s3"


"Команда" = "devops"


aws_s3_bucket.finance_bucket.tags_all


на карту({


"Окружающая среда" = "разработчик"


"Сервис" = "s3"


"Команда" = "финансы"


Там они! Имейте это в виду. Если вы запрашиваете состояние для выполнения действий на основе тегов, вы захотите использовать атрибут «tags_all», а не просто «теги» сами по себе.


Приоритет тегов


Теперь, для последнего быстрого теста, чтобы увидеть приоритет тега в действии, давайте добавим тег Env обратно в нашу финансовую корзину, но определим его как prod вместо dev:


ресурс "aws_s3_bucket" "finance_bucket" {


ведро = "финансовое ведро-${random_id.s3_id.dec}"


теги = {


Окружение = "продукт"


Сервис = "s3"


Команда = "финансы"


Запустите terraform apply -auto-approve еще раз:


aws_s3_bucket.finance_bucket будет обновляться на месте


~ ресурс "aws_s3_bucket" "finance_bucket" {


id = "финансовое ведро-52680"


~ теги = {


  • "окружение" = "продукт"

(2 скрытых элемента без изменений)


~ tags_all = {


~ "Env" = "dev" -> "prod"


(2 скрытых элемента без изменений)


(скрыты 17 неизменных атрибутов)


Обратите внимание на сделанные изменения, затем запустите terraform console:


aws_s3_bucket.finance_bucket.tags_all


на карту({


"Окружающая среда" = "продукт"


"Сервис" = "s3"


"Команда" = "финансы"


Обратите внимание, что тег Env теперь был изменен на prod, наше обновленное значение, переопределяющее теги по умолчанию.


Уничтожить ресурсы


Теперь, если вы готовы, идите вперед и уничтожайте свои ресурсы!


терраформировать уничтожить -авто-одобрить


Заключение


Итак, теперь, когда у нас есть представление о том, как назначать пользовательские теги и теги по умолчанию, присоединяйтесь ко мне в следующей части этой серии, где мы углубимся!


Также опубликовано [Здесь] (https://www.cloudforecast.io/blog/terraform-s3-bucket-aws-tags/)



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE