Roblo3 - Unofficial AWS SDK for Roblox
Security Disclaimer
Security Disclaimer
It’s no secret that, at best, Roblox has lackluster security tools available for securely storing protected secrets, such as API credentials. For many services, this lackluster security, while not necessarily acceptable, is (for all intents and purposes) “look-the-other-direction-able”, mainly because such services cannot easily rack up high (shockingly high) costs in short periods of time.
However, with AWS, very high costs can be incurred in rather short periods of time (sometimes just overnight while you’re sleeping) without much notice if AWS credentials are compromised. As such, it is up to you (or your development team) if such a risk is acceptable when using the Roblo3 SDK. Additionally, it is up to you to secure your AWS credentials as best as possible, both on the Roblox-side through safe storage of any scripts containing security credentials and the AWS-side through AWS’ Identity and Access Management dashboard.
The Roblo3 Documentation has more information here about how to best secure your credentials from the AWS-side.
Security tips will continue to be added to the documentation over time as best practices are refined and as new Roblox services are added.
Introduction
Introducing Roblo3, an unofficial Amazon Web Services Software (or rather, game) Development Kit for Roblox Lua.
Roblo3 allows for integration of supported AWS Services into your Roblox games, allowing you to leverage the power and extensibility of Amazon Web Services with relative ease.
Roblo3 is different from other AWS integrations by not using what most people would use: an Amazon API Gateway. Instead, Roblo3 makes use of the AWS API Endpoints (ex. https://dynamodb.us-west-2.amazonaws.com
).
Roblo3 automatically sends and receives payloads to the AWS API Endpoints; automatically generating authorization signatures that conform to AWS Signature Version 4, and automatically parsing and translating responses from the API Endpoints into data natively useable by your scripts.
Additionally, Roblo3 is also open source, allowing all to contribute feature requests, bug reports, as well as review of the code base for security vulnerabilities and even contributions to the code base.
Roblo3 aims to support as many AWS services as possible over time, as well as support as much of each service’s API as possible. More AWS services (and more actions for existing integrations) will be added as time goes on. Note that some services may not be integrated due to limitations posed by either Lua 5.1 or the Roblox Engine.
Supported Services
Supported Services
Services currently supported by the Roblo3 SDK:
- Amazon DynamoDB (support for basic CRUD operations and
GetTableInfo
only)
Planned Services
Planned Services
Services currently planned to be integrated (not necessarily in order):
- AWS Lambda
- Amazon Simple Queue Service
- Amazon Simple Notification Service
- Amazon CloudWatch Logging
Roblo3 makes use of BoatBomber’s HashLib
module, found here. Go support him and/or the module; without the HashLib
module, the making of Roblo3 would not have been possible.
Links
- Latest Releases: Releases · Roblo3/Roblo3 · GitHub
- GitHub Repository: GitHub - Roblo3/Roblo3: Unofficial SDK for Amazon Web Services compatible with Roblox Lua
- Documentation: https://roblo3.netlify.app
- Latest Model: Roblo3.rbxmx (92.7 KB)
Getting Started
To get started, download the .rbxmx
file from the latest GitHub release and put it into a test place you have available. Follow the instructions found on the documentation here to access the Amazon Resource Name of a DynamoDB table named TestTable
in your account; you will likely need to setup a table named TestTable
in DynamoDB via the Management Console prior to you getting started.
Other
Why did I make this?
I chose to make this because, as a Web Developer, I love making websites interact with Roblox; and I especially love making websites interact with Roblox that really…probably shouldn’t interact (or at least, not interact easily, as is the case with AWS and Roblox).
Additionally, I’ve always wanted to be able to use Amazon DynamoDB with Roblox without resorting to using API Gateways, mainly due to API Gateways being fairly expensive when used at scale. Because of this, I wanted to integrate DynamoDB first so I can play around with it in Roblox; not to mention, it’s likely one of the more useful services available to be used inside of Roblox.
Why not use an API Gateway?
Don’t get me wrong, Amazon API Gateways are awesome. They allow you to build your own API with your own data that conforms to what you need it to do. However, as mentioned in the previous question, API Gateways can be expensive at scale; $1.00 USD per 1 million requests may not sound expensive, but when used at scale, they can be quite expensive. (This is especially the case if you needed to, for example, call an API every time a player joins or leaves; for instance, if you integrated with an external database.)
How can I trust you?
tl;dr: If you don’t trust me, then don’t. Go verify for yourself that I haven’t added anything nefarious.
I realize that I’m a fairly new developer to the Roblox community (though I have been playing on Roblox since the beginning of 2012); and thus, my trustworthiness is questionable at best. However, for those who know me, I have always been a security-freak; I use strong passwords everywhere, 2FA wherever possible, and a password manager, just to name a few things I do.
I completely understand you if you don’t trust that I haven’t implemented a backdoor or some way for the SDK to send your keys to some external storage resource for me to use. And, if you don’t trust me, then don’t. A good practice with anything of a sensitive nature is always verify for yourself that things are (or aren’t) the case.
In this case, you can trust that I haven’t implemented either a backdoor or access-key-scavenger (my intermediate-at-best programming skills aside), but you can also verify that I haven’t added nefarious things yourself by looking at the source code; it is open source.
Do I need an AWS account to use this?
I would hope the answer to this question is obvious, but just to cover my bases:
Yes, an Amazon Web Services account is required to make use of the Roblo3 SDK. The Roblo3 SDK does not provide access to any test account of any sort; it makes use of AWS security credentials you provide.
Why the name `Roblo3`?
“Roblo3” was chosen as the name as a reference to the official AWS SDK for Python: Boto3. I chose the name “Roblo” because this SDK is made for Roblox, and the “3” at the end because…Boto3 did it.
Can you help me setup something in my AWS account?
Of course! Although I’m neither an export in AWS nor an AWS Solutions Architect, I’m absolutely in love with AWS currently, and I’m more than willing to help you setup something that makes use of the SDK (or an API Gateway if the SDK doesn’t support the service (and I’ll help you transition when/if the SDK does eventually support the service)) and an AWS service.
For your security, I will only help you via messages (either her or Discord); I will never access your AWS account directly.
What are some possible uses for this?
I’m glad you asked!
While I was adding integration with DynamoDB, I thought about what you might want to use the Roblo3 SDK for, and here are two things I came up with:
- A “backup” system for Roblox’s DataStoreService (DSS). This would essentially save to and load from both DSS and DynamoDB, providing a way of checking to see if data was saved correctly and allowing user recovery if data was lost in one service and not the other. If you combined this with DataStore2 (or perhaps
UpdateAsync
from DSS), as well as DynamoDB Point-in-time-Recovery and/or On-Demand backups, you could have a very reliable and durable data storage system for player data.* (I may build a module like this in the future…who knows?) - Access data for a custom Discord bot that manages ranks based on XP (or something similar). In other words, if you rolled your own Discord bot that managed ranks based on XP and stored its data in a DynamoDB table, you could access that data and show it to users in game–all without resorting to a moderately expensive API Gateway.
*Note that a solution like this does nothing to prevent data load/save failures if DynamoDB itself experiences degraded performance. As mentioned in a couple forum posts before (here and here), Roblox uses DynamoDB under the hood to store all data sent to the DataStoreService. By using the DataStoreService, you are technically using DynamoDB, you just don’t have access to the data outside of your game. Additionally, if DynamoDB experiences any degraded performance or downtime, these will be propagated to the DataStoreService. In order to mitigate this, you’d need to integrate with a service such as MongoDB Atlas (or your own MongoDB server), Google Cloud Firestore, or your own SQL/NoSQL server.
Final Message
If you make anything cool with the Roblo3 SDK, be sure to post it below!
I’ll also post new releases down below, as addendums to this original post, and as new releases on the GitHub. The models will always be posted on GitHub as well as here.
If you’d like to help contribute to the project, you can follow the directions outlined in the documentation here to help out.
Lasly, if you have any further questions, feel free to message me here or on Discord. (My username on Discord is tycoonlover1359#6970
.)
Happy developing!