当前位置: 首页 > news >正文

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

引言

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

别担心,现在您手中握有一把开启无限可能的大门钥匙——阿里云资源编排服务(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] CANCELAuthenticate 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 | RunCommandOutputs: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).DemoStackPlease 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【conda】Conda 环境迁移指南:如何更改 envs_dirs 和 pkgs_dirs 以及跨盘迁移
  • RAG与LLM原理及实践(15)---RAG Python 前端构建技术Flask
  • Linux 访问控制列表(Access Control List)
  • Rancher 与 Kubernetes(K8s)的关系
  • 运维学习————Zabbix监控框架(1)
  • 【笔记】第一章 金属在单向静拉伸载荷下的力学性能
  • Mac视频vedio转成gif图
  • 【PPT学习笔记】使用PPT制作动画/手书/视频等作品的适配性和可能性?
  • 网络工程师学习笔记——无线通信网(二)
  • 用Python爬虫制作一个简易翻译器
  • SpringBoot自动装配中的Condition机制
  • 【kubernetes】配置管理中心Configmap运用
  • 使用左右指针方法解决最长无重复字符子串问题
  • 网络学习-eNSP配置路由器
  • 再遇“类和对象”
  • @jsonView过滤属性
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 4个实用的微服务测试策略
  • Date型的使用
  • JS笔记四:作用域、变量(函数)提升
  • STAR法则
  • WebSocket使用
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 两列自适应布局方案整理
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深度学习在携程攻略社区的应用
  • 使用Gradle第一次构建Java程序
  • 用element的upload组件实现多图片上传和压缩
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​​​​​​​​​​​​​​Γ函数
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # Redis 入门到精通(一)数据类型(4)
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #includecmath
  • #include到底该写在哪
  • #数据结构 笔记一
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (pojstep1.3.1)1017(构造法模拟)
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (区间dp) (经典例题) 石子合并
  • (四)linux文件内容查看
  • (五)Python 垃圾回收机制
  • (转)LINQ之路
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET Core引入性能分析引导优化
  • .net 流——流的类型体系简单介绍
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • @NestedConfigurationProperty 注解用法
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ IO.File ] FileSystemWatcher
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件