首页 > 解决方案 > 通过 node.js 创建和管理 AWS 实例

问题描述

我正在尝试使用 Node.js api 创建 AWS 实例,该实例将管理其他实例并安装 docker 映像,但我找不到任何文档或教程

标签: node.jsamazon-web-servicesdocker

解决方案


使用 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


推荐阅读