Рубрики
Uncategorized

Выделить AWS стоит с тегами ресурсов

Некоторые советы по использованию тегов для агрегирования ресурсов AWS и имеют лучший обзор в отчетах о стоимости. Помечено с AWS, DEVOPS, учебным пособием, серверу.

Когда вы начинаете иметь много проектов — каждая с различными средами — в вашей учетной записи AWS IT Очень важно иметь обзор затрат по проекту (и/или окружающей среде).

В разделе AWS Cost Management Explorer можно просмотреть отчеты и совокупные расходы по услугам, и вы можете настроить множество различных фильтров, чтобы иметь более зернистое представление.

Один фильтр, который я нахожу более полезным, это по меткам .

Предполагая, что вы развертываете свою неверную инфраструктуру через облачность (напрямую, или через AWS SAM или SERVERLOLE Framework), вы немедленно сможете фильтровать затраты по тегу с помощью автоматического сгенерированного Облакоформация: Stackname (Это имя, которое вы назначаете на службу в файле YML).

Часто этого недостаточно, потому что, возможно, ваша инфраструктура разделена на несколько отдельных стеков.

В некоторых из наших недавних проектов, например, у нас есть:

  • А React Frontend который мы развертываем S3 и подавать с Распределение CloudFront (который обрабатывает кэширование для нас) + Market53 для доменного имени.
  • А Redapi который полагается на API Gateway и много разных Лямбдас которые читают и пишут на Dynamodb и использовать SQS. .
  • a Cognito User Pool Чтобы обработать аутентификацию на интерфейс и позволяет ей делать вызовы RESTAPI.
  • некоторые дополнительные Распределение CloudFront (+ Route 53 ) Чтобы разоблачить некоторые определенные конечные точки restapi на 3-й сторонний (не уполномоченный адрес Cognito) и справиться с кэшированием на основе параметров запроса.

Это означает, что эти 4 компонента архитектуры описаны с различными стопами пласта облака (в некоторых случаях у нас даже нет стека, потому что мы создали ресурсы через AWS CLI или CDK или простить меня, напрямую с консолью AWS UI) Отказ

Простой фильтр по имени стека, следовательно, недостаточно. Это не означает, что вы не можете следить за затратами на весь приложение/проект.

Многие услуги AWS поддерживают сгенерированные пользователем теги, поэтому можно назначить тот же тег для ресурсов из разных сервисов, чтобы указать, что ресурсы связаны. Например, вы можете назначить тот же тег на сцену шлюза API, который вы назначаете правилу событий CloudWatch.

Пользовательские теги Простые пары ключа-значений, назначенные для ресурса, который вы создаете (или уже создали).

Как обычно, самый быстрый и легкий подход может добавлять их для каждого ресурса непосредственно в UIConsole:

Но это определенно то, что вы не хотите делать для чего-либо еще, чем быстрый тест или прототип проекта.

Также добавление тегов с AWS CLI — быстро и просто, просто проверьте документы для CLI для вашего ресурса. (К сожалению, правильный способ передачи тегов немного отличается от ресурса к другому ).

Например, чтобы добавить теги для бассейна пользователей Cognito просто:

 aws cognito-idp tag-resource --resource-arn YOUR_USER_POOL_ARN --tags Project=PROJECT_NAME,Environment=YOUR_ENV

Но для S3 вам нужно пройти метку:

     # add cost allocation tags
    export tagSet="TagSet=[{Key=Project,Value=$PROJECT},{Key=Environment,Value=$YOUR_ENV}]"
    aws s3api put-bucket-tagging --bucket $S3_BUCKET_NAME --tagging=$tagSet 

А для Cloudfront Теги определены в массиве, называемых элементами. Поэтому вы можете создать файл JSON и использовать это.

# in tags.json
{
  "Items": [
    { 
     "Key": "Project",
     "Value":"cap"
    },
    {
     "Key": "Environment",
     "Value": "dev"
    }
  ]
}

aws cloudfront tag-resource --resource arn:aws:cloudfront::Q1W2E3R4T5:distribution/Q1W2E3R4T5Y6 --tags file://tags.json
tags.json 

И примеры и различия могут продолжаться. Как видите, лучший и более ремонторуемый подход определяет ваши метки вместе с ресурсом в вашем Инфраструктура как код (Будь то террафой, Сэм или Смертный).

С Смертные рамки Это так же просто, как добавление этого фрагмента к разделу провайдера вашего сервеса. MASIML:

  stackTags:
    Project: PROJECT_NAME
    Environment: YOUR_STAGE/ENV

Все будет работать из коробки для ваших лямбда и для dynamodb, но опять же, вам может понадобиться некоторые настройки для Cognito, SQS, S3 и Gateway API.

Например, для Cognito вам необходимо указать их в свойствах пула пользователя Cognito:

 UserPoolTags: {'Project': '${self:provider.stackTags.Project}', "Environment": '${self:provider.stackTags.Environment}'}

Для SQS вместо этого вам необходимо указать пары клавишных значений под свойствами вашей очереди.

Properties: 
 Tags: 
   - Key: Project
      Value: ${self:service}
    - Key: Environment
      Value: ${self:provider.stage}

Если у вас есть много очередей в вашем сервере Serverless.yml, это может иметь смысл создать пользовательскую переменную и обратиться к нему в каждой очереди.

custom:
  sqsTags:
    - Key: Project
      Value: ${self:service}
    - Key: Environment
      Value: ${self:provider.stage}

// and then in SQS block:
 Properties
  Tags: ${self:custom.sqsTags}

Как только мы сделали это, с Всего еще один поиск Google Мы узнали, что есть плагин Чтобы упростить скрипт.

Это привело нас к другому плагин, необходимый для метки Aspitay (который, как вы можете увидеть по исходный код Я думаю, что это явно разветвляется кв.

В мире без прослушивания вещи меняются быстро, и кажется, что, по крайней мере, для шлюза API, который плагин больше не нужен, и мы можем просто использовать Stacktags что Приходите с рамками (в одиночку или вместе с другим узлом теги которые позволяют настраивать еще больше ресурсов API. Честно говоря, я еще не выяснил, в чем разница между использованием Stacktags и Tags. Похоже, теги добавлены с Теги Узел добавляются в API/этапы/настраивают теги (вместе со штатами), в то время как стекты добавляются только к API/настройки/настройки тегов. Если вы заинтересованы в более гранулярности в этой теге, вы можете проверить API Gateway Resources Что можно пометить

AWS Resources Группы и редактор тегов

То, что я действительно нашел полезным, работая над тегами распределения затрат, — это редактор тегов и групповой группы ресурсов консоли пользовательского интерфейса.

Редактор тегов позволяет выбрать все ресурсы, которые у вас есть в своей учетной записи, фильтруйте их и редактируйте непосредственно их теги.

Группы ресурсов позволяют вам иметь агрегированный вид на все ресурсы в определенных тегах.

Эти 2 инструмента очень удобны, чтобы иметь обзор тегов, которые вы применили, и убедитесь, что все разные ресурсы из разных стеков будут хорошо принадлежать, когда речь идет о стоимости отчетов.

К сожалению, Дистрибутивы Cloudfront не поддерживаются (пока) в группах ресурсов (за пределами США-Востока-1) Но вы все еще можете добавить теги напрямую к ним. Они не будут показаны на меченных группах ресурсов, но они будут в отчетах о стоимости.

Err на стороне используя слишком много тегов, а не слишком мало.

Как вы видели, вы можете играть много и настроить мечь для каждого сервиса. Вы можете установить теги на уровне провайдера или на уровне ресурса. И, конечно, вы можете сделать обоими. Одно из предложений от AWS в отношении метки состоит в том, чтобы быть таким же точным и гранулированным, как вам нравится, лучше иметь слишком много тегов, чем слишком мало, и именно поэтому они устанавливают довольно высокое Ограничение 50 меток для каждого ресурса У вас будет много места, чтобы настроить и быть специфическими вашими тегами!

Как и во многих вещах, как только вы начнете работать над чем-то, вы понимаете, что есть огромное количество вещей, которые вы не знаете (и это никогда не хорошо для вашего Создание синдрома ..). В конечных метках ресурсы для распределения затрат очень просты, но это только один аспект, потому что, например, вы можете использовать теги для предоставления доступа к ресурсам (ограничивая разрешения IAM по определенным тегам). Если вы хотите узнать больше, вы можете начать читать это страница

Что-то еще, что вы можете проверить, это версия AWS CLI, которую вы установили на своем компьютере, недавно я потратил впустую добрые 20 минут, пытаясь выяснить, почему AWS Cognito-Identity Tag-Resource --resource-Arn Arn: AWS: Cognito-Identity: My_Ruition: my_account: addictitypool/my_region: my_идентично_pool_id --tags не работал: я получал ответ на ошибку Операция аргумента: Неверный выбор несмотря на видимо, все, что именно так, как описано здесь

Затем я бегу PIP3 Установить --uppgrade Awscli и обратите внимание, что мой AWS CLI был обновлен от 1.16.70 до 1.16.283. (Довольно большой прыжок патчей), а затем волшебным образом Список-теги-для ресурсов и Тег-ресурс где наконец доступен.

Фото Дэвид Канбори на бессплашне

Оригинал: «https://dev.to/dvddpl/allocate-aws-costs-with-resource-tags-18j0»