-
Notifications
You must be signed in to change notification settings - Fork 20
/
elastic-beanstalk.js
96 lines (79 loc) · 2.31 KB
/
elastic-beanstalk.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
"use strict";
const AWS = require('aws-sdk');
class ElasticBeanstalk {
constructor(options) {
this.eb = new AWS.ElasticBeanstalk({
apiVersion: '2010-12-01',
region: options.region
});
}
describeApplications() {
return this.eb.describeApplications().promise()
.then(apps => (apps ? apps.Applications : []));
}
describeEnvironment(appName, envName) {
return this.performAction('describeEnvironments', {
ApplicationName: appName,
EnvironmentNames: [envName]
})
.then(data => data.Environments[0]);
}
createApplication(appName) {
let params = {
ApplicationName: appName
};
return this.eb.createApplication(params).promise()
.then(data => data.Application);
}
createEnvironment(options) {
const appName = options.applicationName;
const environmentName = options.environmentName;
const versionLabel = options.versionLabel;
let env = buildEBEnv(options.env);
env.push({
Namespace: "aws:autoscaling:launchconfiguration",
OptionName: "IamInstanceProfile",
Value: `${environmentName}-instance-profile`
});
return this.eb.createEnvironment({
ApplicationName: appName,
EnvironmentName: environmentName,
VersionLabel: versionLabel,
SolutionStackName: '64bit Amazon Linux 2016.09 v3.3.1 running Node.js',
OptionSettings: env
}).promise();
}
createApplicationVersion(appName) {
const versionLabel = appName + Date.now();
return this.eb.createApplicationVersion({
ApplicationName: appName,
VersionLabel: versionLabel,
AutoCreateApplication: false,
SourceBundle: {
S3Bucket: 'fastboot-aws',
S3Key: 'fastboot-aws-latest.zip'
}
}).promise()
.then(() => versionLabel);
}
updateEnvironment(applicationName, environmentName, env) {
const params = {
ApplicationName: applicationName,
EnvironmentName: environmentName,
OptionSettings: buildEBEnv(env)
};
return this.performAction('updateEnvironment', params);
}
}
function buildEBEnv(hash) {
const env = [];
for (const key in hash) {
env.push({
Namespace: 'aws:elasticbeanstalk:application:environment',
OptionName: key,
Value: hash[key]
});
}
return env;
}
module.exports = ElasticBeanstalk;