aws(学习笔记第二课) AWS SDK(node js)

aws(学习笔记第二课)

  • 使用AWS SDK(node js)

学习内容:

  • 使用AWS SDK(node js)

1. AWS SDK(node js)

  1. AWS支持多种SDK开发(除了AWS CLI,还支持其他的SDK)
    • Android
    • Python
    • Node.js(Javascript)
    • Java
    • Browsers(Javascript)
    • Ruby
    • PHP
    • .NET
    • IOS
    • Go
  2. 使用Node.js来控制AWS
    • 安装Node.js
      这是前提条件,这里采用windows + git bash的方式练习,首先安装Node.js

    • Node.js的程序结构在这里插入图片描述

    • index.js
      这个是main程序入口,定义了以下的功能

      • listServer(list servers 展示所有的ec2 server列表)
      • listAMIs.js(create server 创建ec2 server)
      • listServers.js( terminate server 终止ec2 server)在这里插入图片描述
    • \lib下的各个*.js

      • createServer.js 创建ec2 server
        注意,这里的KeyName一定要和前面设定的密钥对名字一致。在这里插入图片描述
      • listAMIs.js 列出全部可用ami
      • listServers.js 列出全部可用ec2 server
      • listSubnets.js 列出全部可用subnet
      • showServer.js 列出所有创建的ec2 server
      • terminateServer.js 终止列出的ec2 server
    • index.js以及各个lib/*.js

      • index.js
        var blessed = require('blessed');var screen = blessed.screen({autoPadding: true,smartCSR: true,log: "./nodecc.log"
        });screen.title = 'Node Control Center for AWS';var content = blessed.box({  parent: screen,width: '70%',height: '90%',top: '10%',left: '30%',border: {type: 'none',fg: '#ffffff'},fg: 'white',bg: 'blue',content: '{bold}Node Control Center for AWS{/bold}\n\nPlease select one of the actions from the left and press return.\n\nYou can always go back with the left arrow key.\n\nYou can terminate the application by pressing ESC or q.',tags: true
        });var progress = blessed.progressbar({parent: screen,width: '70%',height: '10%',top: '0%',left: '30%',orientation: 'horizontal',border: {type: 'line',fg: '#ffffff'},fg: 'white',bg: 'blue',barFg: 'green',barBg: 'green',filled: 0
        });var list = blessed.list({  parent: screen,width: '30%',height: '100%',top: '0%',left: '0%',border: {type: 'line',fg: '#ffffff'},fg: 'white',bg: 'blue',selectedBg: 'green',mouse: true,keys: true,vi: true,label: 'actions',items: ['list servers', 'create server', 'terminate server']
        });
        list.on('select', function(ev, i) {content.border.type = 'line';content.focus();list.border.type = 'none';open(i);screen.render(); 
        });
        list.focus();function open(i) {screen.log('open(' + i + ')');if (i === 0) {loading();require('./lib/listServers.js')(function(err, instanceIds) {loaded();if (err) {log('error', 'listServers cb err: ' + err);} else {var instanceList = blessed.list({fg: 'white',bg: 'blue',selectedBg: 'green',mouse: true,keys: true,vi: true,items: instanceIds});content.append(instanceList);instanceList.focus();instanceList.on('select', function(ev, i) {loading();require('./lib/showServer.js')(instanceIds[i], function(err, instance) {loaded();if (err) {log('error', 'showServer cb err: ' + err);} else {var serverContent = blessed.box({  fg: 'white',bg: 'blue',content:'InstanceId: ' + instance.InstanceId + '\n' +'InstanceType: ' + instance.InstanceType + '\n' +'LaunchTime: ' + instance.LaunchTime + '\n' +'ImageId: ' + instance.ImageId + '\n' +'PublicDnsName: ' + instance.PublicDnsName});content.append(serverContent);}screen.render(); });});screen.render(); }screen.render(); });} else if (i === 1) {loading();require('./lib/listAMIs.js')(function(err, result) {loaded();if (err) {log('error', 'listAMIs cb err: ' + err);} else {var amiList = blessed.list({fg: 'white',bg: 'blue',selectedBg: 'green',mouse: true,keys: true,vi: true,items: result.descriptions});content.append(amiList);amiList.focus();amiList.on('select', function(ev, i) {var amiId = result.amiIds[i];loading();require('./lib/listSubnets.js')(function(err, subnetIds) {loaded();if (err) {log('error', 'listSubnets cb err: ' + err);} else {var subnetList = blessed.list({fg: 'white',bg: 'blue',selectedBg: 'green',mouse: true,keys: true,vi: true,items: subnetIds});content.append(subnetList);subnetList.focus();subnetList.on('select', function(ev, i) {loading();require('./lib/createServer.js')(amiId, subnetIds[i], function(err) {loaded();if (err) {log('error', 'createServer cb err: ' + err);} else {var serverContent = blessed.box({  fg: 'white',bg: 'blue',content: 'starting ...'});content.append(serverContent);}screen.render(); });});screen.render(); }screen.render(); });});screen.render(); }screen.render(); });} else if (i === 2) {loading();require('./lib/listServers.js')(function(err, instanceIds) {loaded();if (err) {log('error', 'listServers cb err: ' + err);} else {var instanceList = blessed.list({fg: 'white',bg: 'blue',selectedBg: 'green',mouse: true,keys: true,vi: true,items: instanceIds});content.append(instanceList);instanceList.focus();instanceList.on('select', function(ev, i) {loading();require('./lib/terminateServer.js')(instanceIds[i], function(err) {loaded();if (err) {log('error', 'terminateServer cb err: ' + err);} else {var serverContent = blessed.box({  fg: 'white',bg: 'blue',content: 'terminating ...'});content.append(serverContent);}screen.render(); });});screen.render(); }screen.render(); });} else {log('error', 'not supported');screen.render(); }
        }screen.key('left', function(ch, key) {  content.border.type = 'none';content.children.slice().forEach(function(child) {content.remove(child);});list.border.type = 'line';list.focus();screen.render(); 
        });screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0);
        });var loadingInterval;function loading() {progress.reset();clearInterval(loadingInterval);loadingInterval = setInterval(function() {if (progress.filled < 75) {progress.progress(progress.filled + 5);}screen.render(); }, 200);
        }function loaded() {clearInterval(loadingInterval);progress.progress(100);screen.render(); 
        }function log(level, message) {screen.log('[' + level + ']: ' + message);
        }screen.render(); 
        
    • /lib/createServer.js

      var AWS = require('aws-sdk');
      var ec2 = new AWS.EC2({"region": "ap-northeast-1"
      });module.exports = function(amiId, subnetId, cb) {ec2.runInstances({"ImageId": amiId,"MinCount": 1,"MaxCount": 1,"KeyName": "my-cli-key","InstanceType": "t2.micro","SubnetId": subnetId}, function(err) {if (err) {cb(err);} else {cb(null);}});
      };
      
    • /lib/listAMIs.js

      var jmespath = require('jmespath');
      var AWS = require('aws-sdk');
      var ec2 = new AWS.EC2({"region": "ap-northeast-1"
      });module.exports = function(cb) {ec2.describeImages({"Filters": [{"Name": "description","Values": ["Amazon Linux AMI *"]}]}, function(err, data) {if (err) {cb(err);} else {var amiIds = jmespath.search(data, 'Images[*].ImageId');var descriptions = jmespath.search(data, 'Images[*].Description');cb(null, {"amiIds": amiIds, "descriptions": descriptions});}});
      };
      
    • /lib/listServers.js

      var jmespath = require('jmespath');
      var AWS = require('aws-sdk');
      var ec2 = new AWS.EC2({"region": "ap-northeast-1"
      });module.exports = function(cb) {ec2.describeInstances({"Filters": [{"Name": "instance-state-name","Values": ["pending", "running"]}],"MaxResults": 10}, function(err, data) {if (err) {cb(err);} else {var instanceIds = jmespath.search(data, 'Reservations[].Instances[].InstanceId');cb(null, instanceIds);}});
      };
      
    • /lib/listSubnets.js 注意,这里默认的vpc

      var jmespath = require('jmespath');
      var AWS = require('aws-sdk');
      var ec2 = new AWS.EC2({"region": "ap-northeast-1"
      });module.exports = function(cb) {ec2.describeVpcs({"Filters": [{"Name": "isDefault","Values": ["true"]}]}, function(err, data) {if (err) {cb(err);} else {var vpcId = data.Vpcs[0].VpcId;ec2.describeSubnets({"Filters": [{"Name": "vpc-id","Values": [vpcId]}]}, function(err, data) {if (err) {cb(err);} else {var subnetIds = jmespath.search(data, 'Subnets[*].SubnetId');cb(null, subnetIds);}});}});
      };
      
    • /lib/showServer.js

      var AWS = require('aws-sdk');
      var ec2 = new AWS.EC2({"region": "ap-northeast-1"
      });module.exports = function(instanceId, cb) {ec2.describeInstances({"InstanceIds": [instanceId]}, function(err, data) {if (err) {cb(err);} else {cb(null, data.Reservations[0].Instances[0]);}});
      };
      
    • /lib/terminateServer.js

      var AWS = require('aws-sdk');
      var ec2 = new AWS.EC2({"region": "ap-northeast-1"
      });module.exports = function(instanceId, cb) {ec2.terminateInstances({"InstanceIds": [instanceId]}, function(err) {if (err) {cb(err);} else {cb(null);}});
      };
      
    • 启动Node.jsAWS SDK的应用程序nodecc press escape key to exit

      npm install
      node index.js
      
  3. 使用应用程序nodecc控制AWS
    • 启动主程序,创建ec2 server
      create server-> 选择Amazon Linux AMI 2018.03.0.20230322.0这个ami注意,这里的InstanceType: t2micro,会导致一些ami会创建ec2 server失败q
    • 进入主菜单(left key to return main menu in the left),进入list servers
    • 选择subnet
      这里存在唯一default subnet,因此就显示一个subnet在这里插入图片描述
    • 创建了ec2 server之后,进入list server进行检查
      注意,可以在create server的同时,执行tail -f nodecc.log,因为可能有些原因,导致create server失败
      在这里插入图片描述
    • 进入AWS Console进行检查
      在这里插入图片描述
    • 登录创建的ec2 server
      在这里插入图片描述
    • 及时终止创建的ec2 server
      练习完毕,利用terminate server进行ec2 server的终止,以免发生费用。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/439744.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

约数个数约数之和

好久没发文章了.......不过粉丝还是一个没少...... 今天来看两道超级恶心的数论题目&#xff01; No.1 约数个数 No.2 约数之和 先来看第一道&#xff1a;约数个数 题目描述 给定 n 个正整数 ai​,请你输出这些数的乘积的约数个数,答案对 10^97 取模 输入格式 第一行包含…

五种IO模型与阻塞IO

一、前言 在网络中通信的本质其实是网络中的两台主机的进程间进行通信&#xff0c;而进程通信的本质就是IO。 IO分为输入&#xff08;input&#xff09;和输出&#xff08;output&#xff09;站在进程的角度讲&#xff0c;进程出去数据为输出&#xff0c;外部数据进入进程为输…

YOLOv8 基于NCNN的安卓部署

YOLOv8 NCNN安卓部署 前两节我们依次介绍了基于YOLOv8的剪枝和蒸馏 本节将上一节得到的蒸馏模型导出NCNN&#xff0c;并部署到安卓。 NCNN 导出 YOLOv8项目中提供了NCNN导出的接口&#xff0c;但是这个模型放到ncnn-android-yolov8项目中你会发现更换模型后app会闪退。原因…

[ComfyUI]Flux:太强了!任意扩图神器,小红书极致逼真风格出游打卡写实风

随着人工智能技术的不断发展&#xff0c;图像生成与反推技术已经成为了AI领域的一大热点。今天&#xff0c;我们就来为大家详细介绍一款由ComfyUI团队开发的超强图像反推工具——Flux&#xff0c;以及如何使用它实现任意扩图和极致逼真风格出游打卡写实风。 一、Flux&#xff…

【AI大模型】使用Embedding API

一、使用OpenAI API 目前GPT embedding mode有三种&#xff0c;性能如下所示&#xff1a; 模型每美元页数MTEB得分MIRACL得分text-embedding-3-large9,61554.964.6text-embedding-3-small62,50062.344.0text-embedding-ada-00212,50061.031.4 MTEB得分为embedding model分类…

centos7安装配置nginx

先安装依赖 安装依赖之前最好先执行下update yum update yum install gcc gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel -y cd /usr/local/nginx wget http://nginx.org/download/nginx-1.18.0.tar.gz tar -zxvf nginx-1.18.0.tar.gz cd /usr/local/ngi…

双非本 985 硕,上岸快手大模型算法岗!

最近已有不少大厂都在秋招宣讲&#xff0c;也有一些已在 Offer 发放阶段了。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行…

高校校园交友系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;基础数据管理&#xff0c;论坛管理&#xff0c;公告信息管理&#xff0c;轮播图信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;用户&#…

反调试—1

IsDebuggerPresent() CheckRemoteDebuggerPresent() 其内部实际调用NtQueryInformationProcess() bool _stdcall ThreadCall() {while (true){BOOL pbDebuggerPresent FALSE;CheckRemoteDebuggerPresent(GetCurrentProcess(), &pbDebuggerPresent);if (pbDebuggerPres…

fiddler抓包18-2_导出jmeter、postman脚本(带请求头)

课程大纲 1. Fiddler导出请求为curl脚本 选中请求&#xff0c;“文件” - “导出会话” - “选中的会话” - “cURL Script”。 2. 导入jmeter ① 复制curl脚本。 ② 打开jmeter&#xff0c;“工具” - “import from cURL”&#xff0c;粘贴脚本&#xff0c;勾选“Add cooki…

二分查找一>寻找峰值

1.题目&#xff1a; 2.解析&#xff1a; 暴力遍历代码&#xff1a;O(N),由于该题数据很少所以可以通过 暴力遍历&#xff1a;O(N),由于该题数据很少所以可以通过int index 0;for(int i 1; i < nums.length-1; i) {//某段区域内一直递增&#xff0c;更新就indexif(nums[i]…

红黑树学习

红黑树: k v 方式 用在哪里&#xff1a; 1.hash 强查找的过程&#xff1a; 1.rbtree 2.hash 3.b/b tree 4.链表 红黑树&#xff1a; 1.每个结点是红的或者是黑的 2.根结点是黑的 3.每个叶子结点是黑的 4.如果一个结点是红的&#xff0c;则它的两个儿子是黑的 5.对每个节点&…

性能学习5:性能测试的流程

一.需求分析 二.性能测试计划 1&#xff09;测什么&#xff1f; - 项目背景 - 测试目的 - 测试范围 - ... 2&#xff09;谁来测试 - 时间进度与分工 - 交付清单 - ... 3&#xff09;怎么测 - 测试策略 - ... 三.性能测试用例 四.性能测试执行 五.性能分析和调优 六…

ElasticSearch备考 -- Search across cluster

一、题目 配置两个集群&#xff0c;集群名称为my-application-01、my-application-02&#xff0c;导入es自带Sample flight data数据集&#xff0c;配置扩集群检索&#xff0c;查询数据 二、思考 准备工作有两个集群&#xff0c;并需要对集群配置角色中增加 remote_cluster_cl…

【优选算法】(第八篇)

目录 串联所有单词的⼦串&#xff08;hard&#xff09; 题目解析 讲解算法原理 编写代码 最⼩覆盖⼦串&#xff08;hard&#xff09; 题目解析 讲解算法原理 编写代码 串联所有单词的⼦串&#xff08;hard&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#…

光伏组件模型模板在SketchUp中如何完成成模数化设计?

选中模板组件&#xff0c;点击左侧工具栏中移动工具&#xff0c;按住Ctrl再依次点击组件起始点和终点&#xff0c;完成组件复制&#xff0c;输入需要复制的组件数量&#xff08;*n&#xff09;后回车&#xff0c;即可完成模数化设计。 选中模组的多块模型右键进行创建组件或群…

高考技术——pandas使用

百家讲坛&#xff0c;谈论古今&#xff0c;今天我们不聊别的&#xff0c;我们来聊一聊中国的国宝——大熊猫&#xff08;bushi&#xff09; 好好&#xff0c;言归正传&#xff0c;我们今天来讲pandas import pandas as pd 申明无需多言&#xff0c;高考主要考察Series和Data…

【Docker】docker的存储

介绍 docker存储主要是涉及到3个方面&#xff1a; 第一个是容器启动时需要的镜像 镜像文件都是基于图层存储驱动来实现的&#xff0c;镜像图层都是只读层&#xff0c; 第二个是&#xff1a; 容器读写层&#xff0c; 容器启动后&#xff0c;docker会基于容器镜像的读层&…

多文件并发多线程MD5工具(相对快速的MD5一批文件),适配自定义MD5 Hash I/O缓存。

自己写的多文件 MD5校验工具&#xff0c;一个文件开一个线程&#xff0c;有最大I/O 缓存设置&#xff0c;兼容读写MD5后缀文件。 共计91个文件&#xff0c;合计180G左右 12分钟左右&#xff0c;UI基本卡废&#xff0c;但程序没蹦&#xff0c;属于正常。 卡的原因是基本是用 I/O…

WSL2Linux 子系统(十二)

wsl 子系统安装 cuda 环境 《WSL2Linux 子系统(十一)》讲述 WSL 网络转为桥接模式的两种方法&#xff0c;WSL 网络桥接模式无论是静态 IP 还是动态分配 IP 均支持。本篇文章则是简单讲述 WSL 安装 cuda 环境。 作者&#xff1a;炭烤毛蛋 &#xff0c;点击博主了解更多。 提示…