-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.js
80 lines (70 loc) · 2.21 KB
/
app.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
'use strict';
const { Route53Client, ChangeResourceRecordSetsCommand } = require('@aws-sdk/client-route-53');
// Create an instance of the Route 53 client
const route53 = new Route53Client();
module.exports.update = async (event) => {
try {
// Required params (errors written to CloudWatch logs)
if (!event.queryStringParameters.hosted_zone_id) {
return {
statusCode: 400,
body: JSON.stringify({ message: 'Missing hosted_zone_id parameter' }),
};
}
if (!event.queryStringParameters.record_name) {
return {
statusCode: 400,
body: JSON.stringify({ message: 'Missing record name parameter' }),
};
}
if (!event.requestContext.identity.sourceIp) {
return {
statusCode: 400,
body: JSON.stringify({ message: 'Missing IP parameter' }),
};
}
// Route 53 client request params
const params = {
ChangeBatch: {
Changes: [
{
Action: 'UPSERT', // Create or Update Route 53 record name
ResourceRecordSet: {
Name: event.queryStringParameters.record_name, // Record name
ResourceRecords: [
{
Value: event.requestContext.identity.sourceIp, // Request's IP address
},
],
TTL: 300, // Time to live
Type: 'A', // Record Type
},
},
],
},
HostedZoneId: event.queryStringParameters.hosted_zone_id, // Route 53 Hosted Zone Id
};
// Create/Update Route 53 record name based on the specified hosted zone id and record name
const data = await route53.send(new ChangeResourceRecordSetsCommand(params));
// Write result to CloudWatch logs
console.log(data);
// Success response
return {
statusCode: 200,
body: JSON.stringify({
message: `Success. Execution time: ${new Date().toTimeString()}.`,
}),
};
} catch (error) {
// Write error to CloudWatch logs
console.error(error);
// Error response
return {
statusCode: 500,
body: JSON.stringify({ message: 'Internal Server Error' }),
};
} finally {
// Close the Route53 client
await route53.destroy();
}
};