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

ops/2024/11/10 12:08:32/

引言

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

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

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

背景

ROS_CDK_11">什么是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以及C#满足以下版本要求:

  • Node.js:14.17.0及以上
  • TypeScript:3.8及以上
  • C#语言请确保本地存在.NET Core3.1版本,并且.NET SDK版本在5.0及以上

初始化工程项目

首先让我们获取魔杖(安装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=csharp --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 项目时所需的依赖。

进入在「准备工作」中初始化的项目,并修改 src/Demo/Demo.csproj 文件内容如下(请根据你蹦迪的实际dotnet核心包版本修改):

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>netcoreapp3.1</TargetFramework><!-- Roll forward to future major versions of the netcoreapp as needed --><RollForward>Major</RollForward></PropertyGroup><ItemGroup><!-- CDK Construct Library dependencies --><PackageReference Include="AlibabaCloud.SDK.ROS.CDK.Core" Version="1.1.0" /><PackageReference Include="AlibabaCloud.SDK.ROS.CDK.Ecs" Version="1.1.0" /><!-- jsii Roslyn analyzers (un-comment to obtain compile-time checks for missing required props<PackageReference Include="Amazon.Jsii.Analyzers" Version="*" PrivateAssets="all" />--></ItemGroup></Project>

添加资源

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

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

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

  • ECS按量付费

进入项目目录,并修改 src/Demo/DemoStack.cs 的内容如下:

using System.Collections.Generic;
using AlibabaCloud.SDK.ROS.CDK.Core;
using AlibabaCloud.SDK.ROS.CDK.Ecs;namespace Demo
{public class DemoStack : Stack{public DemoStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props){// The code that defines your stack goes herenew RosInfo(this, RosInfo.Description, "Deploy 2048 game through ROS CDK.");var zoneId = new RosParameter(this, "ZoneId", new RosParameterProps{Type = RosParameterType.STRING});var vpc = new Vpc(this, "Vpc", new VPCProps{CidrBlock = "192.168.0.0/16"});var sg = new SecurityGroup(this, "SecurityGroup", new SecurityGroupProps{VpcId = vpc.Ref});var vsw = new VSwitch(this, "VSwitch", new VSwitchProps{CidrBlock = "192.168.0.0/24",ZoneId = zoneId.Value,VpcId = vpc.Ref});var instance = new Instance(this, "Instance", new InstanceProps{VpcId = vpc.Ref,VSwitchId = vsw.Ref,SecurityGroupId = sg.Ref,ZoneId = zoneId.Value,InstanceType = "ecs.c6e.large",ImageId = "centos_7_8",SystemDiskCategory = "cloud_essd",IoOptimized = "optimized"});var sgIngress = new SecurityGroupIngress(this, "SecurityGroupIngress", new SecurityGroupIngressProps{IpProtocol = "tcp",PortRange = "80/80",SourceCidrIp = "0.0.0.0/0",SecurityGroupId = sg.Ref,NicType = "intranet"});var runCommand = new RunCommand(this, "RunCommand", new RunCommandProps{InstanceIds = new IResolvable[] { instance.AttrInstanceId },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",Type = "RunShellScript",Timeout = 3600,Sync = true});runCommand.AddDependency(sgIngress);new RosOutput(this, "Url", new RosOutputProps{Value = "http://" + instance.AttrPublicIp.ToString() + ":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

http://www.ppmy.cn/ops/111730.html

相关文章

几种手段mfc140u.dll丢失的解决方法,了解mfc140u.dll

在使用Windows操作系统时&#xff0c;许多用户可能会遇到“找不到mfc140u.dll”或“mfc140u.dll未找到”的错误提示。这个错误通常是由于该文件丢失或损坏所致。本文将详细介绍mfc140u.dll文件的作用、丢失的原因及其解决方法&#xff0c;帮助您快速恢复系统的正常运行。 一、m…

spring项目中如何通过redis的setnx实现互斥锁解决缓存缓存击穿问题

通tryLock尝试去获取锁&#xff0c;如果获取到返回true&#xff0c;没有获取到则返回false private boolean tryLock(String key){Boolean result redisTemplate.opsForValue().setIfAbsent(key, "1", 10L, TimeUnit.SECONDS);return BooleanUtil.isTrue(resul…

如何管理付费媒体预算:分配、风险与扩展

对于优先考虑利润率和现金流的企业而言&#xff0c;管理广告预算是一项基本技能。由于人为错误导致的超支几乎总是意味着与客户和利益相关者的艰难对话。这时候&#xff0c;借助光年AI智能平台可以极大程度地降低这种风险&#xff0c;通过AI驱动的全面流量和增长服务&#xff0…

【数据结构】排序算法---直接插入排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 7. 折半插入排序代码实现——C 结语 1. 定义 直接插入排序是一种简单直观的排序算法。它的工作原理为将待排列元素划分为「已排序」和「未排序」两部分&#xff0c;每次从「未排序的」…

先有正态分布,还是先有高斯函数?

概率分布是对自然界现象的一种数学描述。它提供了一种量化随机事件结果不确定性的方法&#xff0c;使我们能够更深入地理解和分析自然界中的各种随机现象。在自然界中&#xff0c;许多事件的结果是不确定的&#xff0c;如天气变化、生物种群的波动、物理粒子的运动等。这些事件…

Eclipse WEB项目在IDEA中使用

bolg前景 发现很多老邓教学喜欢用eclipse来作为javaweb课程的编译软件&#xff0c;但是我相信有很大一部分人都跟我一样喜欢用IDEA这款编译软件的&#xff0c;同时我发现很多文章都无法确确实实的解决“Eclipse WEB项目在IDEA中使用”这一问题&#xff0c;所以专门写了这篇文章…

mysql DBA常用的sql

是否一般查询日志&#xff0c;默认关闭 show variables like ‘general_log’; 是否开启慢日志查询 默认关闭 show global variables like ‘slow_query_log’; 开启慢日志查询 SET GLOBAL slow_query_log ‘ON’; 默认是10 单位s SELECT long_query_time; 设置超过1s就算…

机器学习与深度学习的区别

文章目录 机器学习与深度学习的区别一、引言二、机器学习概述1、机器学习定义1.1、机器学习的应用 2、机器学习算法 三、深度学习概述1、深度学习定义1.1、深度学习的应用 2、深度学习算法 四、机器学习与深度学习的区别1、学习方法2、数据需求3、应用领域 五、总结 机器学习与…