Как обрабатывать сбои в ПОЛЬЗОВАТЕЛЬСКИХ ресурсах AWS cloudformation?

#amazon-web-services #amazon-cloudformation

#amazon-веб-сервисы #aws-cloudformation

Вопрос:

У меня есть лямбда-функция, созданная с использованием CFN, которая выглядит следующим образом:

 InitializeDynamoDBLambda:   
    Type: AWS::Lambda::Function
    Properties:
      Code:
        ZipFile:  |          
          const AWS = require("aws-sdk");
          const response = require("cfn-response");
          const docClient = new AWS.DynamoDB.DocumentClient();
          exports.handler = function(event, context) {
              let DynamoTableName = event.ResourceProperties.DynamoTable;
              let KeyJSON = JSON.parse(event.ResourceProperties.KeyJSON);
              let ValueJSON = JSON.parse(event.ResourceProperties.ValueJSON);

              for(key in KeyJSON){
              var params = {
                  TableName: DynamoTableName,
                  Item: {
                      'Key': KeyJSON[key],
                      'Value': JSON.stringify(ValueJSON[key])
                  }
              };
              docClient.put(params, function(err, data) {
                  if (err) {
                      console.log(err);                    
                      response.send(event, context, response.FAILED, {});
                  }
                  else {
                      response.send(event, context, response.SUCCESS, {});
                  }
              });
              }
          };          
      Handler: index.handler
      Role: !GetAtt 'LambdaExecutionRole.Arn'
      Runtime: nodejs12.x
      Timeout: 60
  

Этот лямбда-код инициализируется с помощью CUSTOM ресурса, подобного этому:

 InitializeDB:
    Type: Custom::InitializeDynamoDBLambda
    Properties:
        ServiceToken:
            Fn::GetAtt: [ InitializeDynamoDBLambda , "Arn" ]
        DynamoTable: !Ref TenantLevelDBname
        KeyJSON: !Ref KeyJSON
        ValueJSON: !Ref ValueJSON
  

Проблема в том, что при возникновении ошибки стек Cloudformation застревает в состоянии, подобном UPDATE_IN_PROGRESS и т.д.

Как мне обрабатывать сбои в таких сценариях?

Комментарии:

1. Лучше всего предположить, что одна из вещей, которая не содержится в try / catch, — это выбрасывание. Вы просмотрели вывод журнала в CloudWatch? Хорошим началом отладки может быть перенос всего тела функции в try / catch. Я бы также зарегистрировал содержимое event , чтобы убедиться, что получаю то, что ожидаю. Наконец, вам, вероятно, следует реструктурировать этот цикл (и правильно сделать в нем отступ), чтобы каждый раз не отправлять ответ.