AWS CDK: как настроить свойство параметров для ассоциации SSM?

Моя цель — использовать AWS Systems Manager State Manager для запуска задания cron, которое отключит экземпляр RDS в 9 вечера. Я занимаюсь созданием шаблона CloudFormation с помощью AWS CDK.

В документации AWS CDK для конструкции CfnAssociation упоминается свойство parameters. Он имеет тип any. Я пытаюсь найти пример того, как использовать свойство.

Пожалуйста, помогите мне понять, как правильно добавить параметр AutomationAssumeRole, используя этот фрагмент кода. AutomationAssumeRole ожидает ARN на роль. Например, arn:aws:iam::12345678999:role/StopStartRebootRDS.

// Create the State Manager association that will shut down an RDS instance.
new ssm.CfnAssociation(this, 'StopRdsInstanceAssociation', {
  name: 'AWS-StopRdsInstance', // The document name to use.
  associationName: 'StopRdsInstance', // A user friendly name for this association.
  documentVersion: '$DEFAULT', // I'm guessing this will work. Not sure yet.
  instanceId: dbInstance.instanceIdentifier, // The RDS database that will be shut down.
  scheduleExpression: '0 00 21 ? * * *', // Daily at 9PM.
  parameters: {}, // What does this look like?
});

Ваше руководство приветствуется.

Что я пробовал

Я подумал, что могу создать параметр SSM и заполнить его ролью ARN. Но это неправильно. Я не уверен, как еще это настроить. Ошибка из этой конфигурации ниже.

const automationAssumeRole = new ssm.CfnParameter(this, 'RdsParameter', {
  type: 'String',
  value: role.roleArn,
});

// Create the State Manager association that will shut down an RDS instance.
new ssm.CfnAssociation(this, 'StopRdsInstanceAssociation', {
  name: 'AWS-StopRdsInstance',
  associationName: 'StopRdsInstance',
  documentVersion: '$DEFAULT',
  instanceId: dbInstance.instanceIdentifier,
  scheduleExpression: '0 00 21 ? * * *',
  parameters: {
    automationAssumeRole,
  },
});

Ошибка: Ошибка разрешения: Ошибка разрешения: Попытка разрешить () конструкцию в /Resources/${Token[InfrastructureDev.RdsStack.StopRdsInstanceAssociation.LogicalID.762]}/Properties/parameters/automationAssumeRole/node..

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
1
0
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Передайте ARN роли напрямую. Имена ключей параметров должны быть в регистре Pascal.

new ssm.CfnAssociation(this, "StopRdsAssociation", {
  name: "AWS-StopRdsInstance",
  associationName: "StopRdsInstance",
  scheduleExpression: "cron(0 00 2 ? * * *)",
  parameters: {
    InstanceId: [dbInstance.instanceIdentifier],
    AutomationAssumeRole: [role.roleArn],
  },
});

Согласно сообщению в блоге AWS Запланируйте остановку и запуск Amazon RDS с помощью AWS Systems Manager, достаточно идентификатора экземпляра и роли.

Спасибо @fedonev, это не сработало из-за ошибки в коде. Я ценю это предложение.

Gregg 06.02.2023 19:18

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

// Create the State Manager association that will shut down an RDS instance.
const association = new ssm.CfnAssociation(this, 'StopRdsInstanceAssociation', {
  name: 'AWS-StopRdsInstance',
  associationName: 'StopRdsInstance',
  scheduleExpression: 'cron(0 00 2 ? * * *)',
});

// Use an escape hatch to set the parameters. https://github.com/aws/aws-cdk/issues/4057
association.addPropertyOverride('Parameters.InstanceId', [dbInstance.instanceIdentifier]);
association.addPropertyOverride('Parameters.AutomationAssumeRole', [role.roleArn]);

Обновлять

Я хотел бы оставить это для исторических целей, но решение @fedonev у меня работает. Аварийный люк не нужен.

Рад, что вы нашли решение! Кстати, проблема (с 2019 года) должна была быть решена. Пересмотренный код в моем ответе успешно развертывается. Аварийный люк не требуется.

fedonev 06.02.2023 20:28

Большой! Спасибо за внимание. Изначально я запутался в конструкции, и что-то еще, должно быть, маскировало настоящую проблему. Например, мой cron был в неправильном формате, я решил не использовать свойство Target и свойство InstanceId (прикрепленное непосредственно к ассоциации). Удаление их помогло добиться некоторого прогресса.

Gregg 06.02.2023 21:04

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