У меня есть стек приложений на основе 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
.
Теперь мой вопрос: как я могу настроить эти группы журналов? Если не по аспекту, есть ли другой способ сделать это?
Для групп журналов, к которым вы не можете получить доступ напрямую в CDK/Cfn, используйте Триггер или Пользовательский ресурс с поддержкой Lambda, чтобы установить политику хранения с помощью вызовов SDK. CloudFormation вызовет вашу Lambda как часть жизненного цикла развертывания стека конвейера. Настройте Trigger/CR для запуска Lambda только при создании стека.
Работа лямбды заключается в следующем:
logGroupNamePrefix: "/aws/codebuild/MyPipeline"
.Другой вариант — создать явные группы журналов для каждого проекта CodeBuild в конвейере.
Многие конструкции конвейера, в том числе ShellStep
, разворачивают ресурс AWS::CodeBuild::Project
под капотом. Если мы создадим ЛогГрупп с желаемым набором дней хранения, мы можем передать его в проект.
Для косвенно созданных проектов (таких как базовый ShellStep
) мы должны сначала использовать синтаксис экранного люка для ссылки на базовые конструкции КфнПроект. Затем мы передаем наше настроенное имя LogGroup в его свойство logsConfig.
Для явно построенного codebuild.Project
проще. Он принимает LogGroup
непосредственно в реквизите ведение журнала: логгингоптионс.
@P.J.Meisch Группы журналов конвейера создаются косвенно в ходе развертывания ресурсов проекта CodeBuild стека. Вы не найдете ресурсы группы журналов, определенные в шаблоне Cfn, который создает CDK, если только вы не создали их явно (см. редактирование).
Мы решили пойти по пути запланированной лямбда-выражения, которая проверяет группы журналов, для которых не установлено время хранения — не только из одного конвейера, а у нас их много. У нас есть приложение, которое выполняет обычную задачу, поэтому мы можем добавить его туда. И мы, вероятно, добавим туда и другие проверки. Но большое спасибо за ответ
@P.J.Meisch Рад помочь. Мне бы помогло, если бы вы проголосовали/приняли ответ. Я признаю, что вы решили не использовать подход CDK по причинам, не указанным в ОП. Но ваш вопрос был "как я могу сделать это в CDK?", на который я ответил.
Что ж, ваш ответ в конце концов пошел в направлении создания выделенных групп журналов, тогда как я хотел настроить те, которые созданы неявно. Но если это сделает тебя счастливым, я соглашусь.
для нового стека группы журналов уже существуют при развертывании? Или они не создаются при запуске развернутого пайплайна? Но наличие лямбды для настройки кажется хорошей идеей, возможно, мы используем этот подход для обработки всех групп журналов из разных конвейеров.