AWS CDK - действия после развертывания

кто-нибудь знает о методе выполнения функций после развертывания. Follwing - это образец обычного CDK-приложения.

app = core.App()
Stack(app, ...)
app.synth()

Я ищу способ применить некоторую логику после развертывания шаблона. Дело в том, что приложение завершает работу до того, как инструмент cdk начинает развертывание шаблона.

Благодарность


person Łukasz    schedule 01.07.2019    source источник


Ответы (4)


На данный момент вы не можете сделать это из CDK. См. https://github.com/awslabs/aws-cdk/issues/2849. Может быть, добавьте туда свой +1, дайте им знать, что вы хотели бы увидеть эту функцию.

Что вы можете сделать, так это обернуть cdk deploy в сценарий оболочки, который будет запускать все, что вам нужно, после завершения CDK. Что-то вроде:

#!/bin/sh

cdk deploy "$@"
success=$?
if [ $success != 0 ]; then
    exit $success
fi

run_post_deploy_with_arguments.sh "$@"

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

person bgdnlp    schedule 05.07.2019

Вы можете использовать CustomResource для запуска некоторого кода в лямбде (который, к сожалению, вам также потребуется развернуть). Лямбда получит событие настраиваемого ресурса (создание, обновление, удаление), поэтому вы сможете обрабатывать различные сценарии (скажем, вы хотите заполнить некоторую таблицу после развертывания, таким образом вы сможете очистить данные в например, уничтожить).

Вот довольно хороший пост об этом.

Лично я не мог найти более элегантного способа сделать это.

person vladvel    schedule 07.10.2019

Вместо того, чтобы заключать команду cdk deploy в сценарий bash, я считаю более удобным добавить сценарий развертывания pre и post в файл cdk_hooks.sh и вызывать его до и после команды развертывания CDK через файл cdk.json. Таким образом, вы можете продолжать использовать команду cdk deploy без ручного вызова пользовательских сценариев.

cdk.json

{
    "app": "sh cdk_hooks.sh pre && npx ts-node bin/stacks.ts && sh cdk_hooks.sh post"
    ,
    "context": {
      "@aws-cdk/core:enableStackNameDuplicates": "true",
      "aws-cdk:enableDiffNoFail": "true"
    }
  }

и cdk_hooks.sh

#!/bin/bash
PHASE=$1
case "$PHASE" in
    pre)
            # Do something
            ;;
    post)   
            # Do something
            ;;
    *)
            echo "Please provide a valid cdk_hooks phase"
            exit 64
esac
person marcuse    schedule 20.10.2020

Короткий ответ: нельзя. Я тоже ждал этой функции.

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

Другое решение - полагаться на сборку кода для выполнения развертывания и определения там всех ваших шагов и настраиваемых сценариев, которые следует запускать после развертывания (я лично использую это решение с конкретным стеком для развертывания этого конкретного проекта развертывания кода).

person Luca T    schedule 11.05.2020