Можно ли установить время хранения по умолчанию для групп журналов, созданных в созданном конвейере AWS CDK v2?

У меня есть стек приложений на основе AWS VDK v2, который настраивает CodePipeline с различными этапами, приложением и всем остальным, что работает нормально. Но эта настройка создает довольно много групп журналов, в которых время хранения не установлено. Поскольку группы журналов создаются не моим кодом cdk, а скрыто самим cdk, я не могу явно установить время хранения.

Поэтому я попытался использовать Aspects, чтобы добиться этого. Я создал следующее:

export class LogGroupRetentionChecker implements IAspect {

    prefix: String

    constructor(prefix: String) {
        this.prefix = prefix;
    }

    visit(node: IConstruct): void {

        console.info(`${(this.prefix)}: checking node ${node.constructor.name}`)

        if (node instanceof CfnResource) {
            console.info(`${this.prefix}: resource type ${node.cfnResourceType}`)
        }

        if (node instanceof CfnLogGroup) {

            console.info(`aspect found log-group ${node.logGroupName}, retention: ${node.retentionInDays}`);

            if (node.retentionInDays === undefined) {
                node.retentionInDays = 60
            }
        }
    }
}

Затем в месте создания конвейера я делаю следующее:

Aspects.of(this.pipeline).add(new LogGroupRetentionChecker("pipeline"));

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

pipeline: checking node CodePipeline
pipeline: checking node Pipeline
pipeline: checking node Key
pipeline: checking node CfnKey
pipeline: resource type AWS::KMS::Key
pipeline: checking node Alias
pipeline: checking node CfnAlias
pipeline: resource type AWS::KMS::Alias
pipeline: checking node Bucket
pipeline: checking node CfnBucket
pipeline: resource type AWS::S3::Bucket
pipeline: checking node BucketPolicy
pipeline: checking node CfnBucketPolicy
pipeline: resource type AWS::S3::BucketPolicy
pipeline: checking node Role
pipeline: checking node CfnRole
pipeline: resource type AWS::IAM::Role
pipeline: checking node Policy
pipeline: checking node CfnPolicyConditional
pipeline: resource type AWS::IAM::Policy
pipeline: checking node CfnPipeline
pipeline: resource type AWS::CodePipeline::Pipeline
pipeline: checking node Construct
pipeline: checking node Construct
pipeline: checking node Role
pipeline: checking node CfnRole
pipeline: resource type AWS::IAM::Role
pipeline: checking node Policy
pipeline: checking node CfnPolicyConditional
pipeline: resource type AWS::IAM::Policy
pipeline: checking node Construct

...

Итак, аспект называется, но ни один из посещаемых IConstruct не является CfnLogGroup.

Теперь мой вопрос: как я могу настроить эти группы журналов? Если не по аспекту, есть ли другой способ сделать это?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для групп журналов, к которым вы не можете получить доступ напрямую в CDK/Cfn, используйте Триггер или Пользовательский ресурс с поддержкой Lambda, чтобы установить политику хранения с помощью вызовов SDK. CloudFormation вызовет вашу Lambda как часть жизненного цикла развертывания стека конвейера. Настройте Trigger/CR для запуска Lambda только при создании стека.

Работа лямбды заключается в следующем:

  1. Найдите группы журналов с помощью ОписатьLogGroups. Отфильтруйте, установив logGroupNamePrefix: "/aws/codebuild/MyPipeline".
  2. Вызовите путретентионполици для каждого имени группы журналов.

Обновлено: еще один вариант

Другой вариант — создать явные группы журналов для каждого проекта CodeBuild в конвейере.

Многие конструкции конвейера, в том числе ShellStep, разворачивают ресурс AWS::CodeBuild::Project под капотом. Если мы создадим ЛогГрупп с желаемым набором дней хранения, мы можем передать его в проект.

Для косвенно созданных проектов (таких как базовый ShellStep) мы должны сначала использовать синтаксис экранного люка для ссылки на базовые конструкции КфнПроект. Затем мы передаем наше настроенное имя LogGroup в его свойство logsConfig.

Для явно построенного codebuild.Project проще. Он принимает LogGroup непосредственно в реквизите ведение журнала: логгингоптионс.

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

P.J.Meisch 06.04.2022 10:51

@P.J.Meisch Группы журналов конвейера создаются косвенно в ходе развертывания ресурсов проекта CodeBuild стека. Вы не найдете ресурсы группы журналов, определенные в шаблоне Cfn, который создает CDK, если только вы не создали их явно (см. редактирование).

fedonev 06.04.2022 13:29

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

P.J.Meisch 06.04.2022 18:19

@P.J.Meisch Рад помочь. Мне бы помогло, если бы вы проголосовали/приняли ответ. Я признаю, что вы решили не использовать подход CDK по причинам, не указанным в ОП. Но ваш вопрос был "как я могу сделать это в CDK?", на который я ответил.

fedonev 06.04.2022 19:14

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

P.J.Meisch 06.04.2022 20:18

Другие вопросы по теме