Skip to content

hubaimaster/aws-interface

Repository files navigation



Language Language Build Status

WE R Naver D2 Award of Excellence!

Globalization

AWS Interface

AWS-Interface lets you jump start your next big idea with a powerful and flexible backend. Amazon's web services were meant to be easy and simple—but they're simply not ☹️. There are often too many services for us mere mortals to track. With AWS Interface, we take away the nitty-gritty and let you focus on your ideas and your business.

Here's how it works: register your AWS IAM credentials for us to work with. Then, select the Service that you need for your backend service and tweak them through our website. That's it! We've built an infinitely scalable backend for your service via AWS services, and an auto-generated SDK for the frontend platform of your choice.

For Users

Service

This is an abstraction of backend/DB components for you to use in your service. We will support these five Services when we first kick off AWS Interface.

  • Bill: Billing for your internal AWS account
  • Auth: Login/authentication of users
  • Database: General-purpose database stuff
  • Storage: File storage and distribution
  • Logic : Deployment of server-less (state-less) logic
  • Log : User Logging and Viewing

Dashboard

This is where you can configure and manage your Service/internal database. You can access your dashboard via aws-interface.com or host your own dashboard on your local server. Make sure to register your AWS IAM credentials to start using AWS Interface. The Dashboard is currently build on the Django framework.

Backend

The Backend refers to the AWS services that actually serve your Recipes. Currently, the Backend consists of AWS services such as DynamoDB, Lambda, API Gateways etc (which you don't need to care about). We plan do to support other Backends like Google Cloud Platform or Naver Cloud Platform (which you might care about). Not for now.

Client SDK

You can use the auto-generated client SDK's within your client apps to communicate with the Backend. Client SDK's can be generated in the language or platform of your choice. We currently plan to support Python, Swift and Java.

For Contributors



Django

The Django Web interface imports the core classes above and calls the necessary functions through the adapter.

Adapter Abstract Class

It takes the user's credentials and app_id as constructor parameters, and bundles the API and ResourceAllocator together to make it easier to use functions in the upper layer. For example, if the top layer is Django, Create and use DjangoAdapter.

ServiceController Abstract Class

It is a wrapping layer that allows you to call functions implemented in the Cloud layer directly without going through AWS or Azure.

Cloud Module

Auth, and Database are implemented by calling Resource. This module is called by the ServiceController and, at the same time, is uploaded by the ResourceAllocator to a server-less architecture like AWS Lambda.

Resource Abstract Class

This layer allows you to use Cloud Services, including Azure, GCP, and NCP, including AWS. For example, if you implement an AWSResource that inherits Resource, you can use AWS as a backend.

ResourceAllocator Abstract Class

Initializes the state of the Cloud service to be used in the Resource layer. Create a DB instance and upload the Cloud module to the Server-less service to prepare the resource for use. AWSResourceAllocator, for example, uses the boto3 module in AWS to create DynamoDB, Lambda, and API Gateway to prepare resources for use.

SDK

It is an SDK automatically generated by superclass of ResourceAllocator. You can access the Service on various platforms by importing the SDK into the client.

How it works

When you create an application in the dashboard, AWS DynamoDB tables, Lambda functions, and API Gateway are automatically connected to Lambda. And automatically generated SDK communicates with API Gateway through http method.

For example, below is the actual operation of the Auth Service.

  1. (User) Register the AWS IAM authentication information in the AWS interface.
  2. (User) From the Dashboard, create an application and change the service configuration.
  3. (AWS interface) Create a single table in DynamoDB and create a user model in it.
  4. (AWS interface) Write a Lambda function that can read and write models.
  5. (AWS interface) Connect the created Lambda function to the API Gateway for external use.
  6. (AWS Interface) Automatically creates an SDK that can be accessed from outside the API Gateway with Java, Python, Swift, etc.
  7. (User) Invoke the auto-generated SDK from the client app to communicate with AWS resources.

Environment

Python Version & Libraries

AWS Interface uses Python version 3.6.

When installing Python libraries, we recommend that you use a virtual environment of your choice.

This is how you use the venv module provided by Python 3.5+.

# Install Python on Linux Debian
sudo apt update
sudo apt install python3
sudo apt install python3-venv
python3 -m venv venv
source venv/bin/activate  # activate virtual environment
pip install -r requirements.txt  # install packages
# deactivate  # deactivate virtual environment

Python Versions on AWS EC2 (Ubuntu)

The default Python3 provided via apt on Ubuntu 16.04 is version 3.5. It is possible to upgrade to 3.6 from there, but we recommend that you start with a Ubuntu 18.04 instance.

IAM Account

To use AWS Interface, you must provide administrator rights to your AWS account. Before you access your dashboard, you must provide your AWS IAM User's 'Access Key' and 'Secret Access Key'.

Reference

Quick Start

You can use the following commands to quickly launch the dashboard on your local environment.

# activate virtual environment
cd aws_interface
python3 manage.py migrate --run-syncdb
python3 manage.py runserver
# open 127.0.0.1:8000 on your browser

Contribution Guideline

We accept bug reports and feedback via GitHub Issues.

  • We welcome contribution to SDK generators.
  • The AWSInterface projects follows the Apache 2.0 licence.

Git Commit Messages

Please follow this format for Git commit messages—"the defacto standard", according to a Reddit user.

Capitalized, short (50 chars or less) summary

More detailed explanatory text, if necessary.  Wrap it to about 72
characters or so.  In some contexts, the first line is treated as the
subject of an email and the rest of the text as the body.  The blank
line separating the summary from the body is critical (unless you omit
the body entirely); tools like rebase can get confused if you run the
two together.

Write your commit message in the imperative: "Fix bug" and not "Fixed bug"
or "Fixes bug."  This convention matches up with commit messages generated
by commands like git merge and git revert.

Further paragraphs come after blank lines.

- Bullet points are okay, too

- Typically a hyphen or asterisk is used for the bullet, followed by a
  single space, with blank lines in between, but conventions vary here

- Use a hanging indent

Open source projects used

About

Create and manage powerful backends with one click

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published