#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
, чтобы убедиться, что получаю то, что ожидаю. Наконец, вам, вероятно, следует реструктурировать этот цикл (и правильно сделать в нем отступ), чтобы каждый раз не отправлять ответ.