ROS CDK魔法书:建立你的游戏王国(TypeScript篇)

news2024/12/25 1:45:22

引言

在虚拟游戏的世界里,数字化的乐趣如同流动的音符,谱写着无数玩家的共同回忆。而在这片充满创意与冒险的乐园中,您的使命就是将独特的游戏体验与丰富的技术知识相结合,打造出令人难以忘怀的作品。当面对如何实现这一宏伟蓝图时,您或许会想:如何将一款简单而富有趣味的游戏部署到云端,使更多玩家共享这份乐趣?

别担心,现在您手中握有一把开启无限可能的大门钥匙——阿里云资源编排服务(Resource Orchestration Service,简称ROS)的云开发套件(Cloud Development Kit,简称CDK)。借助这一强大的工具,您可以轻松创建和管理云资源,将您的2048小游戏安全、快速地部署到云端,以便让它在浩瀚的网络中闪耀光芒。

在接下来的文章中,我们将一起踏上这段旅程,通过将2048小游戏部属到阿里云的实例,让您借助ROS CDK的魔法,为您的梦想游戏搭建起一个坚实的云基础。无需复杂的配置,也不必担心繁琐的操作,我们将以最简单的方式,带您一步步揭开部署游戏的面纱,实现从本地到云端的无缝迁移。

背景

什么是ROS CDK?

想象一下,您是一位游戏设计师,面前有一个崭新的游戏世界等待您去构建。在传统的开发过程中,您可能需要逐步搭建每一个元素,反复测试和优化,这不仅费时费力,还需要应对大量的技术细节。然而,假设您拥有一本魔法书,只需一段简短的代码,就能轻松生成整个游戏的架构,这本魔法书便是阿里云资源编排服务(Resource Orchestration Service,简称ROS)的云开发套件(Cloud Development Kit,简称CDK)。

ROS CDK 是一个强大的开发框架,允许您使用熟悉的编程语言来定义、构建和部署云资源。通过ROS CDK,您能够将游戏基础设施转化为代码(Infrastructure as Code, IaC),就像编写游戏逻辑一样轻松创建和配置云资源。

借助这个框架,您无需再逐一配置每个组件,而是能够编写直观的代码描述游戏的整体结构。这些代码随后会被转换为具体的云资源配置,比如云服务器(ECS)、对象存储服务(OSS)以及数据库服务等,并快速在云端部署。这种简化的流程使得整个开发过程更加高效且可重复,帮助开发者轻松实现跨团队的协作与分享。

将基础设施代码化,不仅降低了人为错误的风险,还让云服务管理变得如同玩游戏般简单。ROS CDK 为快速开发、升级和扩展游戏应用提供了无与伦比的便利,使您能把更多的精力投入到创意和设计中,而不是被繁琐的操作所困扰。简而言之,ROS CDK 赋予您在云端构建游戏世界的无尽可能性,让您的创意得以在这片广阔的数字海洋中翱翔。

什么是ECS?

在这个广袤无垠的云霄之域,你是一名追寻智慧与力量的幻术师,渴望孕育出无数绚丽多彩的应用与服务。在这神秘的征途上,你需要一个强大的支持者,为你的创世之路提供源源不断的计算资源——这便是ECS(弹性计算服务)。

ECS宛如一座巍峨耸立的云端堡垒,拥有着无数灵活且可扩展的魔法隔间(实例),每一个隔间都蕴含着强大的运算能量,能够随心所欲地变幻组合,以适应你的任何需求。无论是轻巧的文字咒语(轻量级应用),还是巨大的虚拟巨兽(复杂计算任务),ECS都能迅速响应,助你一臂之力。

将你的应用部署在ECS上,仿佛为它们施下了一个永恒的召唤咒。不论是刮风下雨,亦或是雷霆万钧,ECS都将为你提供高度可靠的计算能力,确保每一个念头都能在瞬间化为现实,推动你的奇幻世界不断发展壮大。

如同天际星辰的引导者,ECS让你对计算资源进行灵巧的调配与管理。它的智能监控与弹性伸缩能力如同召唤的法术,让你在流动的需求中完全掌控,无需担忧资源的紧缺与浪费。而那些强大的安全护盾(网络隔离与访问控制)则守护着你的应用免受外敌的侵犯,确保你的魔法研究与创意成果在安全的环境中悄然绽放。

在阿里云这片充满灵气的领域,ECS已经成为每位幻术师实现创世梦想、探索无尽可能的最佳伙伴。无论你的梦想多么宏伟、挑战多么艰巨,ECS将始终是你可以倚靠的庇护所,让你在云端尽情释放智慧与创造力。因此,尊敬的幻术师,当你准备在云海中绘制你的未来蓝图时,ECS定会成为你不可或缺的助手,为你书写更辉煌的篇章。

准备工作

语言要求

在进入IaC魔法世界前,我们还需要一些准备工作。为了安装ROS CDK,请确保Node.js和TypeScript满足以下版本要求:

  • Node.js:14.17.0及以上
  • TypeScript:3.8及以上

初始化工程项目

首先让我们获取魔杖(安装ROS CDK)。

注意:请确保你安装的 ros-cdk-cli 版本在 1.0.50 以上,可以通过运行 npm list -g 确认。

在你的魔法实践中,每当你打算开始一个全新的咒法项目,你都需要在你的魔法工作台(编程环境)上准备一些基础元素。就好比在开始一场远征前的准备过程,你需要确保你有一张图(项目框架),一些指南(配置)以及能够让你进出神秘地域(云平台)的通行证(凭证信息)。

初始化工程就好比是在你的魔法工作台上铺好一张干净的魔法制图纸,上面标注了将要完成的奇迹蓝图的基本轮廓。在你的电脑上,这就是创建一个包含必要文件结构的新目录,给魔法师们(开发者)提供了一个可以施展咒语(编码)的场所。

配置凭证信息则像是在你的魔法袍上缝上一枚能够开启云之城门的徽章,这枚徽章(AccessKey)凭证证明了你有权利指挥云中的能量流动,操纵存储在云中的宝藏。在阿里云的世界里,这意味着你需要在本地环境中配置好用于鉴权的AccessKey ID和Secret AccessKey。这样一来,当你使用ROS CDK这个强大的咒法工具时,它能够确保你是有权操控这些云资源的魔法师,而不是一个无意闯入的冒险者。

那么让我们在施展更高级魔法之前,先布置一下仪式现场。

  1. 执行以下命令,创建工程目录并初始化工程:
    mkdir demo
    cd demo
    ros-cdk init --language=typescript --generate-only=true
    
  2. 执行以下命令,配置阿里云凭证信息:
    ros-cdk config
    
  3. 根据界面提示输入配置信息:
    endpoint(optional, default:https://ros.aliyuncs.com):
    defaultRegionId(optional, default:cn-hangzhou):
    
    [1] AK
    [2] StsToken
    [3] RamRoleArn
    [4] EcsRamRole
    [0] CANCEL
    
    Authenticate mode [1...4 / 0]: 1
    accessKeyId:************************
    accessKeySecret:******************************
    
    ✅ Your cdk configuration has been saved successfully!
    

配置内容说明如下:

  • endpoint:ROS服务地址。默认值为https://ros.aliyuncs.com。
  • defaultRegionId:ROS资源栈部署的地域。默认值为cn-hangzhou。
  • Authenticate mode:鉴权方式。本示例的鉴权方式为AccessKey,您需要输入AccessKey ID和AccessKey Secret。关于如何获取AccessKey,请参见交互式配置(快速配置)。

万事俱备,让我们开始ROS CDK魔法之旅。

最佳实践:云端部署2048小游戏

接下来,我们将通过一个最佳实践案例来演示如何在云端服务器部署2048小游戏。

进行如下步骤之前请确保你已完成所有必须的准备工作,包括环境配置和初始化项目工程。

安装依赖

首先,我们需要安装开发 CDK 项目时所需的依赖。

进入在「准备工作」中初始化的项目,并修改 package.json 文件内容如下:

{
  "name": "demo",
  "version": "0.1.0",
  "bin": {
    "demo": "bin/demo.js"
  },
  "scripts": {
    "build": "tsc",
    "test": "jest"
  },
  "devDependencies": {
    "@types/jest": "^25.2.1",
    "@types/node": "10.17.5",
    "typescript": "^3.9.7",
    "jest": "^25.5.0",
    "ts-jest": "^25.3.1",
    "ts-node": "^8.1.0",
    "babel-jest": "^26.6.3",
    "@babel/core": "^7.12.9",
    "@babel/preset-env": "7.12.7",
    "@babel/preset-typescript": "^7.12.7",
    "@alicloud/ros-cdk-assert": "^1.1.0"
  },
  "dependencies": {
    "@alicloud/ros-cdk-core": "^1.1.0",
    "@alicloud/ros-cdk-ecs": "^1.1.0"
  }
}

修改完成后执行以下命令,安装依赖:

npm install

添加资源

接着,我们要为项目中添加资源。本示例涉及到的资源有:

  • ALIYUN::ECS::SecurityGroup
  • ALIYUN::ECS::SecurityGroupIngress
  • ALIYUN::ECS::Instance
  • ALIYUN::ECS::VPC
  • ALIYUN::ECS::VSwitch
  • ALIYUN::ECS::RunCommand

本项目涉及到的收费项有:

  • ECS按量付费

进入项目目录,并修改 lib/demo-stack.ts 的内容如下:

import * as ros from '@alicloud/ros-cdk-core';
import * as ecs from '@alicloud/ros-cdk-ecs';

export class DemoStack extends ros.Stack {
  constructor(scope: ros.Construct, id: string, props?: ros.StackProps) {
    super(scope, id, props);
    new ros.RosInfo(this, ros.RosInfo.description, "Deploy 2048 game through ROS CDK.");

    const zoneId = new ros.RosParameter(this, 'ZoneId', {
      type: ros.RosParameterType.STRING
    });

    const vpc = new ecs.Vpc(this, 'Vpc', {
      cidrBlock: '192.168.0.0/16'
    });

    const sg = new ecs.SecurityGroup(this, 'SecurityGroup', {
      vpcId: vpc.ref
    });

    const vsw = new ecs.VSwitch(this, 'VSwitch', {
      cidrBlock: '192.168.0.0/24',
      zoneId: zoneId,
      vpcId: vpc.ref
    })

    const instance = new ecs.Instance(this, 'Instance', {
      vpcId: vpc.ref,
      vSwitchId: vsw.ref,
      securityGroupId: sg.ref,
      zoneId: zoneId,
      instanceType: 'ecs.c6e.large',
      imageId: 'centos_7_8',
      systemDiskCategory: 'cloud_essd',
      ioOptimized: 'optimized'
    });

    const sgIngress = new ecs.SecurityGroupIngress(this, 'SecurityGroupIngress', {
      ipProtocol: 'tcp',
      portRange: '80/80',
      sourceCidrIp: '0.0.0.0/0',
      securityGroupId: sg.ref,
      nicType: 'intranet'
    });

    const runCommand = new ecs.RunCommand(this, 'RunCommand', {
      instanceIds: [instance.ref],
      type: 'RunShellScript',
      sync: true,
      timeout: 3600,
      commandContent: `yum install -y httpd wget\nsystemctl start httpd\nwget 'https://computenest-artifacts-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/1853370294850618/cn-beijing/1697533575326/2048.tgz' -O 2048.tgz\ntar xvf 2048.tgz\nmv 2048/* /var/www/html && rm -rf 2048`
    });
    runCommand.addDependency(sgIngress);

    new ros.RosOutput(this, 'Url', {
      value: `http://${instance.attrPublicIp}:80`
    });
  }
}

部署资源栈

执行以下命令以部署资源栈:

ros-cdk deploy --parameters ZoneId=cn-hangzhou-i --sync=true

--sync=true 会将资源栈信息同步返回至终端显示。成功后,命令行终端返回如下信息:

Create bucket(cdk-tcbgaxxxx-assets-cn-hangzhou) successfully!
Upload file(./cdk.out/DemoStack.template.json) to bucket(cdk-tcbgaxxxx-assets-cn-hangzhou) successfully!
DemoStack: deploying...
|DemoStack               |2024-09-09T08:56:47 | CREATE_COMPLETE      | ALIYUN::ECS::SecurityGroup | sg-bp121z2wd687mdxxxxxx | SecurityGroup

|DemoStack               |2024-09-09T08:56:47 | CREATE_COMPLETE      | ALIYUN::ECS::SecurityGroupIngress | sg-bp121z2wd687mdxxxxxx | SecurityGroupIngress

|DemoStack               |2024-09-09T08:56:47 | CREATE_COMPLETE      | ALIYUN::ECS::Instance   | i-bp16t9mt9b0uscixxxxx | Instance

|DemoStack               |2024-09-09T08:56:47 | CREATE_COMPLETE      | ALIYUN::ECS::VPC        | vpc-bp10y18ke2x6v0bjxxxxx | Vpc

|DemoStack               |2024-09-09T08:56:47 | CREATE_COMPLETE      | ALIYUN::ECS::VSwitch    | vsw-bp1qfb9u90cuyu69xxxxx | VSwitch

|DemoStack               |2024-09-09T08:56:47 | CREATE_COMPLETE      | ALIYUN::ECS::RunCommand | t-hz04w6ckiuxxxxx | RunCommand


Outputs:

 Key: Url  Value: http://121.40.xxx.xx:80 Description: No description given

 ✅ The deployment(sync create stack) has completed!
Status: CREATE_COMPLETE
StatusReason: Stack CREATE completed successfully
StackId: 40c92773-33fb-4249-bd46-3ab6xxxxxxxx

等待部署完成后,复制Outputs中的链接并在浏览器中打开,即可畅玩2048!

在这里插入图片描述

删除资源栈

执行以下命令以删除资源栈:

ros-cdk destroy --sync=true 

CDK 会二次确认即将删除的资源栈:

The following stack(s) will be destroyed(Only deployed stacks will be displayed).

DemoStack

Please confirm.(Y/N)

输入 y 并回车,删除成功会显示如下信息:

✅ The task(sync destroy stack) has finished!
status: DELETE_COMPLETE
StatusReason: Stack DELETE completed successfully
StackId: 40c92773-33fb-4249-bd46-3ab6xxxxxxxx

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MOS管G极串联电阻的作用是什么

MOS管栅极串联电阻是如何抑制谐振? 为什么会震荡? 首先了解一下LC串联谐振电路,虽然,LC串联在电路中运用的并不多,但是在无意中总会形成串联谐振,从而产生很多各种各样的现象。如果不了解其本质,会让我们很难理解。比如,使用同样的LC电路滤波,用到两个电路上,有的电…

CCF推荐B类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)

目录 前言 B类会议 1. SoCC 2. SPAA 3. PODC 4. FPGA 5. CGO 6. DATE 7. HOT CHIPS 8. CLUSTER 9. ICCD 10. ICCAD 11. ICDCS 12. CODESISSS 13. HiPEAC 14. SIGMETRICS 15. PACT 16. ICPP 17. ICS 18. VEE 19. IPDPS 20. Performance 21. HPDC 22. ITC…

在亚马逊云科技上利用Graviton4代芯片构建高性能Java应用(下篇)

简介 在AI迅猛发展的时代,芯片算力对于模型性能起到了至关重要的作用。一款能够同时兼具高性能和低成本的芯片,能够帮助开发者快速构建性能稳定的生成式AI应用,同时降低开发成本。今天小李哥将介绍亚马逊推出的4代高性能计算处理器Gravition…

计算机毕业设计Python电影评论情感分析 电影可视化 豆瓣电影爬虫 电影推荐系统 电影数据分析 电影大数据 大数据毕业设计 机器学习 深度学习 知识图谱

相关技术介绍 豆瓣电影数据采集与可视化分析系统是用当前应用很广泛的Python语言和Flask框架,并结合CSS与HTML搭建Web网页,使用MySQL数据库对数据进行存储,依次来开发实现系统的功能。本系统运行需要的软件有Pycharm、普通浏览器、Navicat f…

AD原理图update为pcb

首先,要在自己的项目下面创建好原理图和PCB,记得保存!!! 点击设计>update 更新成功!

数据结构-图-存储-邻接矩阵-邻接表

数据结构-图-存储 邻接矩阵 存储如下图1,图2 图1 对应邻接矩阵 图2 #include<bits/stdc.h> #define MAXN 1005 using namespace std; int n; int v[MAXN][MAXN]; int main(){cin>>n;for(int i1;i<n;i){for(int j1;j<n;j){cin>>v[i][j];}}for(int…

RM比赛常见的电机(直流无刷电机)

声明&#xff1a;个人笔记&#xff0c;仅供参考 一、M2006电机 M2006 P36 电机采用三相永磁直流无刷结构&#xff0c;具有输出转速高、体积小、功率密度高等特点。该电机内置位置传感器&#xff0c;可提供精确的位置反馈&#xff0c;以 FOC 矢量控制方式使电机产生连续的扭矩。…

Cannot Locate Document 原理图导入pcb出现报错

将原理图update到pcb时报错Cannot Locate Document&#xff1a; 记得保存pcb到你的项目就可以了

爬虫之淘宝接口获取||Python返回淘宝商品详情数据SKU接口

在学习爬虫的过程中&#xff0c;大多数的人都是些豆瓣&#xff0c;招聘网站什么的。这里给出一些工作上能够用得到的内容&#xff0c; 仅供大家参考。 本次需要看的是淘宝的接口&#xff0c; 这个接口与微博寻找接口的方式大致相同。请看详细的寻找方法。首先我们先在百度页面点…

python实现c4d的tp粒子在多个物体上发射思维粒子

基本状态思维粒子只能传入一个物体&#xff0c;在一个物体身上发射粒子。 场景如下&#xff0c;右边的multiEmitter的python标签里的python脚本执行后会在其下面生成数个从pt物体的拷贝&#xff0c;同时拷贝其上的XPresso标签及标签里的内容 下面是pt物体的XPresso标签标签的内…

[ RK3566-Android11 ] 关于 RK628F 驱动移植以及调试说明

问题描述 我这个项目的SDK比较老&#xff0c;移植RK628F最新驱动的调试过程&#xff0c;踩了很多坑&#xff0c;希望大家别踩坑。 解决方案&#xff1a; 首先在FTP上下载最新的RK628的驱动 rk628-for-all-v27-240730 版本。 下载完后 不要直接替换&#xff0c;不要直接替换&a…

Vue获取后端重定向拼接的参数

前言 比如我们要重定向这样一个连接&#xff1a; http://192.168.2.189:8081?nameadmin springboot重定向&#xff1a; Vue获取&#xff1a; getParam(param) {var reg new RegExp("(^|&)" param "([^&]*)(&|$)");var r location.searc…

计算机的错误计算(八十八)

摘要 探讨双曲反正切函数 atanh(x)的计算精度问题。 IEEE 754-2019 中含有 atanh(x)函数。其定义为 例1. 计算 atanh(0.9999999999997) . 不妨用 LibreOffice中的电子表格计算&#xff0c;则有&#xff1a; 若在线运行JavaScript代码&#xff1a; let result Math.atanh(0.…

单电源转正负双电源电路

单电源转正负双电源电路&#xff1a; 1.通过两个DCDC芯片进行降压&#xff1a; 不同负载下电源纹波不同&#xff0c;所以看电源纹波首先先说明负载是什么&#xff1a; 采用TPS5430将单电源转换成双电源的方式供电&#xff1a; 2.通过电荷泵的方式转换电压 成本可以压低&#…

民生水暖工程背后的科技力量引领工程智能化转型

物联网技术的广泛应用&#xff0c;使得物理设备能够实时传输运行状态数据至云端&#xff0c;实现了设备的全面感知与互联互通。每一台机器、每一个传感器都成为数据的源泉&#xff0c;为远程监控提供了坚实的基础。而大数据分析技术的应用&#xff0c;则让这些海量数据得以被高…

R语言统计分析——用回归做ANOVA

参考资料&#xff1a;R语言实战【第2版】 ANOVA&#xff08;方差分析&#xff09;和回归都是广义线性模型的特例&#xff0c;方差分析也都可以使用lm()函数来分析。 # 加载multcomp包 library(multcomp) # 查看cholesterol数据集的处理水平 levels(cholesterol$trt) # 用aov()…

久久派搭建风电系统网站(基于mariadb数据库)

久久派搭建风电系统网站 1、安装mariadb2、设置root账号密码3、设置MariaDB开机自启4、允许远程登录5、还原数据库6、扩容swap7、拷贝数据8、运行系统方法1&#xff1a;通过sh脚本运行方法2&#xff1a;直接运行jar包 文中所需网盘资料及讲解视频在文章末尾哦1。 本文中参考资料…

万能无线航模模拟器加密狗说明书

快速开始 Step1 插入加密狗到你的电脑&#xff0c;手机或MAC的USB口。 Step2 使用加密狗上的按钮&#xff0c;选择一个合适的协议。具体看第一节。 Step3 和遥控器对码&#xff0c;成功后指示灯常亮。具体看FAQ第二节。 Step4 在你的电脑&#xff0c;手机或MAC 安装对…

GD32F103单片机-GPIO

GD32F103单片机-GPIO 一、GPIO介绍二、GD32F103库函数介绍三、GPIO输入输出3.1 GPIO输出-LED闪烁3.2 GPIO输入-独立按键 STM32GPIO部分见STM32F1单片机-GPIO 一、GPIO介绍 GD32的GPIO同STM32一样&#xff0c;GPIO可以配置成8种输入输出模式&#xff0c;由软件配置成推挽输出、…

八、发票校验(2)

第三节 发票校验后台设置 1、设置发票进项税默认值&#xff08;事务代码OMR2&#xff09; 维护指定公司代码的进项税缺省值&#xff0c;在采购业务的发票校验操作中能够快速地指定税码。 ——路径&#xff1a;IMG&#xff1a;物料管理>后勤发票校验>收入发票>维护…