如何通过Node.js创建并管理AWS实例,实现实例管控及Docker镜像部署
使用Node.js AWS SDK实现EC2实例管控及Docker部署指引
前置准备
- 本地安装Node.js 14+版本,完成AWS凭证配置,可通过
~/.aws/credentials文件或者AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY环境变量配置,对应账号需持有EC2操作、IAM角色绑定相关权限 - 安装AWS SDK v3(推荐使用,v2已进入维护阶段),执行命令:
npm install @aws-sdk/client-ec2 @aws-sdk/util-waiter
管控实例创建代码实现
以下为创建带Docker预装、拥有EC2管控权限的实例示例代码:
const { EC2Client, RunInstancesCommand, waitUntilInstanceRunning } = require("@aws-sdk/client-ec2"); // 配置EC2客户端,替换为你需要的AWS区域 const ec2Client = new EC2Client({ region: "cn-north-1" }); // 实例初始化脚本:自动安装Docker并启动、拉取示例镜像 const initScript = `#!/bin/bash yum update -y amazon-linux-extras install docker -y systemctl start docker systemctl enable docker usermod -aG docker ec2-user # 可替换为你需要部署的Docker镜像 docker pull nginx:alpine `; const createControlInstance = async () => { const createParams = { // 替换为对应区域的Amazon Linux 2 AMI ID ImageId: "ami-xxxxxxxxx", // 可替换为你需要的实例规格 InstanceType: "t2.medium", // 替换为你提前创建的EC2密钥对名称 KeyName: "your-key-pair", MinCount: 1, MaxCount: 1, // 替换为你配置好的安全组ID,需开放SSH等必要端口 SecurityGroupIds: ["sg-xxxxxxxxx"], // 传入初始化脚本,需要转base64编码 UserData: Buffer.from(initScript).toString('base64'), // 替换为你提前创建的IAM实例配置文件,对应角色需绑定EC2管控权限 IamInstanceProfile: { Name: "EC2-Control-Role" } }; const res = await ec2Client.send(new RunInstancesCommand(createParams)); const instanceId = res.Instances[0].InstanceId; console.log("管控实例创建成功,实例ID:", instanceId); // 等待实例启动完成,最长等待5分钟 await waitUntilInstanceRunning({client: ec2Client, maxWaitTime: 300}, {InstanceIds: [instanceId]}); console.log("管控实例已启动完成,Docker已预装"); }; createControlInstance();
管控其他EC2实例的配置说明
- 给管控实例绑定的IAM角色,按需附加EC2操作权限,生产环境建议配置最小权限,避免直接授予全权限策略
- 操作其他实例时,可直接在管控实例中调用AWS EC2 SDK执行开关机、配置修改、镜像部署等操作,无需手动配置密钥
- 如需在其他实例中批量部署Docker环境,可通过SSM远程命令执行功能批量推送安装脚本,无需连接实例SSH
注意事项
- 安全组仅开放必要端口,避免全端口暴露到公网
- 密钥对、AWS凭证不要硬编码到代码中,避免泄露
- 正式上线前建议先在测试环境验证权限配置、实例创建逻辑
内容的提问来源于stack exchange,提问作者Adasqu
相关产品推荐
相关产品推荐

