/
get_instance.js
64 lines (53 loc) · 1.89 KB
/
get_instance.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var AWS = require('aws-sdk');
var response = require('cfn-response');
exports.handler = function(event, context) {
console.log("Request received:\n", JSON.stringify(event));
var physicalId = event.PhysicalResourceId;
function success(data) {
data = data || {}
console.log('SUCCESS:\n', data);
return response.send(event, context, response.SUCCESS, data, physicalId);
}
function failed(err) {
console.log('FAILED:\n', err);
return response.send(event, context, response.FAILED, err, physicalId);
}
// ignore delete request
if (event.RequestType === 'Delete') {
console.log('Delete request is ignored');
return success();
}
var spotFleetRequestId = event.ResourceProperties.SpotFleetRequestId;
if (!spotFleetRequestId) {
return failed('SpotFleetRequestId required');
}
var ec2 = new AWS.EC2();
// waiting for an instance in the running state
ec2.waitFor('instanceRunning', {
'Filters': [{
'Name': 'tag:aws:ec2spot:fleet-request-id',
'Values': [spotFleetRequestId]
}]
})
.promise()
.then((data) => {
console.log('"instanceRunning" Response:\n', JSON.stringify(data));
var instance = data.Reservations[0].Instances[0];
// cancel spot fleet request
ec2.cancelSpotFleetRequests({
SpotFleetRequestIds: [spotFleetRequestId],
TerminateInstances: false
})
.promise()
.then((data) => {
console.log('"cancelSpotFleetRequests" Response:\n', JSON.stringify(data));
physicalId = instance.InstanceId;
success({
'PublicIpAddress': instance.PublicIpAddress,
'AvailabilityZone': instance.Placement.AvailabilityZone
});
})
.catch((err) => failed(err));
})
.catch((err) => failed(err));
};