node.js - 通过 node.js 创建和管理 AWS 实例
问题描述
我正在尝试使用 Node.js api 创建 AWS 实例,该实例将管理其他实例并安装 docker 映像,但我找不到任何文档或教程
解决方案
使用 AWS 开发工具包
首先你应该npm install aws-sdk
。
这有点令人困惑,实例定义实际上称为“保留”。创建其中之一称为“runInstance”。
因此,您当然首先需要初始化您的 EC2 对象。
import { EC2, config } from 'aws-sdk';
config.loadFromPath(__dirname + "/../aws.config.json");
const ec2: EC2 = new EC2(); // to start/stop instances
接下来,我个人尝试在使用 AWS 实例时尽可能使用 Promise。他们大大清理了代码。
import { promisify } from 'util';
如果您已经有预留,则可以使用其实例 ID 启动它。
const params: EC2.StartInstancesRequest = { InstanceIds: [instanceId] };
const result: EC2.StartInstancesResult = await promisify((cb) => ec2.startInstances(params, cb))();
你也可以像这样停止它:
const params: EC2.StopInstancesRequest = { InstanceIds: [instanceId] };
const result: EC2.StopInstancesResult = await promisify((cb) => ec2.stopInstances(params, cb))();
要创建您的实例,您需要:
const params: EC2.RunInstancesRequest = { InstanceType: "t1.micro", ImageId: "ami-31814f58", MinCount: 1, MaxCount: 1 };
const result: EC2.Reservation = await promisify((cb) => ec2.runInstances(params, cb))();
最后,列出您的实例/预留(带有一些可选过滤器):
const stateFilter = { Name: "instance-state-name", Values: ["running"] };
const idFilter = { Name: "instance-id", Values: [instanceId] };
const params: DescribeInstancesRequest = { Filters: [stateFilter, idFilter] };
const result: EC2.DescribeInstancesResponse = await promisify((cb) => ec2.describeInstances(params, cb))();
响应包含一个预留集合,并且对于每个预留都有一个实例集合。
您自己的图像
要使用您自己的映像,您应该提前创建一个“亚马逊系统映像”(AMI)。
您可能需要设置“弹性容器注册表”(ECR)。您可以将 docker 映像推送到此存储库:https ://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html
推荐阅读
- javascript - Babelifying JavaScript Module Pattern with ES6 Arrow Functions
- wix - 是什么导致 WIX 错误:““GenerateHarvestedSourceFiles”任务意外失败。'?
- angular - 在使用处理异步调用方面需要帮助。任何关于使用 Vertx3-EventBus 和 angular 编写 Observable 的建议
- corda - 通知compatibilityZoneURL 时,广告的P2P 消息地址发生变化
- jekyll - 传递参数以包含在 Liquid for 循环中
- cmd - How to move PDF files depending on number at beginning of file name into directory starting with same number?
- c# - WPF:双向绑定不设置源
- javascript - What do triple brackets (i.e. {{{ stuff }}}) mean in Javascript/Typescript?
- android - Firebase数据库在检索数据后通知适配器?
- php - 专门将 YouTube 网址转换为 iframe 标签,同时将 BBCode 网址转换为 html 元素