Skip to content

Commit

Permalink
Merge pull request #42 from techstartucalgary/cloud
Browse files Browse the repository at this point in the history
Cloud-computing
  • Loading branch information
usefhamed authored Nov 5, 2024
2 parents 312d638 + 97c6d56 commit f7ea117
Show file tree
Hide file tree
Showing 8 changed files with 313 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Amazon DynamoDB

## Overview

Amazon DynamoDB is a fully managed NoSQL database service that provides single-digit millisecond response times, making it ideal for high-traffic applications. DynamoDB supports both key-value and document data models, allowing for flexible and dynamic data structures.

## Data Model

- **Key-Value:** Optimized for handling large volumes of simple key-value data.
- **Document-Based:** Suitable for more complex, semi-structured data.

## Key Features

- **On-Demand and Provisioned Capacity:** Choose between automatic scaling or pre-allocated capacity for more predictable costs.
- **Global Tables:** Multi-region, fully replicated tables for fast, consistent access across the globe.
- **DynamoDB Streams:** Enable real-time processing of data changes.
- **Integration with AWS Lambda:** Allows for seamless, serverless processing triggered by DynamoDB changes.

## Use Cases

DynamoDB is ideal for:

- Applications needing high throughput and low-latency response times
- Real-time data processing and analytics
- Scalable applications like gaming, IoT, and e-commerce platforms

## Create a table in DynamoDB

You can create a table using:

- AWS Management Console
- AWS CLI
- AWS SDK

Checkout the link below for steps on how to get started:

- **[Create a table in DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)**

See the example below on how to create a table using AWS SDK for python(boto3):

```python
import boto3

# Get the service resource.
dynamodb = boto3.resource('dynamodb')

# Create the DynamoDB table.
table = dynamodb.create_table(
TableName='users',
KeySchema=[
{
'AttributeName': 'username',
'KeyType': 'HASH'
},
{
'AttributeName': 'last_name',
'KeyType': 'RANGE'
}
],
AttributeDefinitions=[
{
'AttributeName': 'username',
'AttributeType': 'S'
},
{
'AttributeName': 'last_name',
'AttributeType': 'S'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 5,
'WriteCapacityUnits': 5
}
)

# Wait until the table exists.
table.wait_until_exists()

# Print out some data about the table.
print(table.item_count)
```

## 📚 Further Reading

- **[AWS DynamoDB](https://aws.amazon.com/dynamodb/)**
An overview of the service

- **[Getting started with DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html)**
A step by step Guide on how to start and manage your DynamoDB table

- **[Boto3 RDS Service Reference](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/dynamodb.html)**
Boto3 documentation for interacting with AWS DynamoDB using the AWS SDK for Python (Boto3).
44 changes: 44 additions & 0 deletions src/software/cloud-computing/AWS/Database Services/RDS/README.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Amazon Relational Database Service (RDS)

## Overview

Amazon RDS (Relational Database Service) is a fully managed service that simplifies the setup, operation, and scaling of relational databases in the cloud. RDS supports popular database engines, enabling users to choose the one that best fits their application’s needs.

## Supported Database Engines

Amazon RDS supports several database engines:

- MySQL
- PostgreSQL
- Oracle
- Microsoft SQL Server
- MariaDB
- Amazon Aurora (MySQL and PostgreSQL compatible)

## Key Features

- **Automated Backups:** Automatically managed, including point-in-time recovery.
- **Monitoring and Metrics:** Integration with Amazon CloudWatch for detailed insights.
- **High Availability with Multi-AZ:** Ensures reliability through automatic failover and replication.
- **Performance and Scaling:** Easily modify instance types or storage capacity without downtime.

## Use Cases

Amazon RDS is suitable for applications that require:

- Complex queries and transactions
- High data integrity with ACID compliance
- Enterprise applications needing strong data consistency

## Creating a DB instance

You can create an Amazon RDS DB instance using the AWS Management Console, the AWS CLI, or the RDS API.
To Read more about this, please refer to the documentation [here](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

## 📚 Further Reading

- **[AWS RDS](https://aws.amazon.com/rds/)**
An overview of the service

- **[Boto3 RDS Service Reference](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds.html#client)**
Boto3 documentation for interacting with AWS RDS using the AWS SDK for Python (Boto3).
33 changes: 33 additions & 0 deletions src/software/cloud-computing/AWS/Database Services/README.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# AWS Databases

## Overview of Cloud Databases

Cloud databases provide a modern solution for data storage and management. By hosting databases on the cloud, AWS allows businesses to focus on utilizing their data rather than managing database infrastructure. AWS databases offer a range of features that make them accessible, scalable, and efficient.

### Benefits of Cloud Databases

- **Scalability:** Cloud databases scale resources up or down easily to match demand, ensuring optimal performance.
- **Cost Efficiency:** Pay only for what you use with AWS’s flexible pricing model.
- **Reliability:** AWS databases provide high availability and redundancy for dependable uptime.
- **Managed Services:** AWS takes care of database maintenance, backups, patching, and updates.
- **Security:** AWS databases come with robust encryption, access control, and monitoring options.

### Types of Databases on AWS

AWS offers various database types, each offering features to specific workloads and application needs.

1. **Relational Databases**

- Structured with predefined schemas, relational databases are ideal for managing structured data and supporting complex transactions.
- **Example:** Amazon RDS (supports MySQL, PostgreSQL, and more).

2. **Non-Relational Databases (NoSQL)**
- Schema-less and designed to handle large volumes of unstructured or semi-structured data, NoSQL databases offer flexibility and speed.
- **Example:** Amazon DynamoDB, optimized for applications with high scalability and low-latency needs.

For detailed information on specific AWS database offerings, please refer to the subdirectories on [Amazon RDS](./RDS/README.md) and [DynamoDB](./DynamoDB/README.md).

## 📚 Further Reading

- **[AWS Database Services](https://aws.amazon.com/free/database/?gclid=Cj0KCQjw1Yy5BhD-ARIsAI0RbXa24yxekzxUIL2IxfomIdvleV5C2vz_6vw9aknU7JGhCQ_2H1VL2xgaAtJwEALw_wcB&trk=b54801f4-057b-4340-b0a5-1ee26130ff8f&sc_channel=ps&ef_id=Cj0KCQjw1Yy5BhD-ARIsAI0RbXa24yxekzxUIL2IxfomIdvleV5C2vz_6vw9aknU7JGhCQ_2H1VL2xgaAtJwEALw_wcB:G:s&s_kwcid=AL!4422!3!548725068184!e!!g!!aws%20database!11346198399!112250784918)**
An overview of Amazon Database Services, including Free Product Offers.
55 changes: 55 additions & 0 deletions src/software/cloud-computing/AWS/Lambda/README.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# AWS Lambda

<img src="../../images/lambda.png" alt="lambda logo" width="200"/>

## Overview

AWS Lambda is a serverless compute service that allows you to run code in response to events without managing servers. Simply upload your function code, and Lambda handles the patching, and infrastructure management.

## Functions

Lambda functions are triggered by events such as API calls, file uploads to `S3`, or messages from services like SNS. Functions are stateless by default, meaning they don’t retain information between executions. AWS also supports stateful workflows using services like `DynamoDB` or `Step Functions`.

## Benefits of Serverless:

- **No Server Management**: Focus on writing code without dealing with infrastructure.
- **Automatic Scaling**: Functions automatically scale to handle any level of traffic.
- **Cost-Efficient**: You only pay for the compute time when your code runs.

## Example: Writing an AWS Lambda Function in Python

The [AWS Lambda with Python documentation](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) includes the following example code snippet for writing a Lambda function in Python:

```python
import boto3
import botocore

def lambda_handler(event, context):
print(f'boto3 version: {boto3.__version__}')
print(f'botocore version: {botocore.__version__}')
```

In this example, the `boto3` library is used, which is the AWS SDK (Software Development Kit) for Python. This library allows your Python applications to interact with various AWS services, such as Lambda, S3, and EC2. The code also imports `botocore`, which is a low-level library that `boto3` relies on for making API requests to AWS services.

## Creating a Lambda Function

To create a Lambda function, you need a deployment package. The deployment package is a .zip file archive or container image that contains your function code and any external libraries used in the code. However, you do not need to include `boto3` in the dependencies, since it is already included in the AWS Lambda Python runtime environment.

## Installing boto3

If you're testing or developing your Lambda function locally, you will need to install the `boto3` library using pip. Run the following command:

```bash
pip install boto3
```

## 📚 Further Reading

- **[AWS Lambda Overview](https://aws.amazon.com/lambda/)**
Official AWS documentation on AWS Lambda, its use cases, and features.

- **[Boto3 Lambda Service Reference](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html)**
Boto3 documentation for interacting with AWS Lambda using the AWS SDK for Python (Boto3).

- **[Using AWS Lambda with Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)**
AWS documentation on how to develop AWS Lambda functions using Python.
25 changes: 25 additions & 0 deletions src/software/cloud-computing/AWS/README.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# What is AWS?

Amazon Web Services (AWS) is the most popular and widely used cloud platform, offering over 200 services from data centers around the world. Millions of customers use AWS to reduce costs, work more efficiently, and speed up innovation.

Since AWS is a popular choice for many projects, we'll start by walking through how to set up a free account. Then, we'll explore some of the most widely-used AWS services and see how they can help you achieve your project goals.

## Free Tier

AWS figures that the more comfortable you feel working with its services, the more likely you'll eventually start moving serious workloads to its cloud. So, AWS offers a generous Free Tier for the first 12 months after opening a new account. Under the Free Tier, you can freely experiment with light versions of most AWS services without being billed.

Once ready, you can click the link below to start setting up your account.
[Creating your AWS account](https://signin.aws.amazon.com/signup?request_type=register)

⚠️ Important: Don't let the word "free" here trick you!
It is always important to track your usage to make sure you are staying within the free tier limits. Once you pass the threshold, you will start getting charged instantly.
The first approach is to watch your email box for any alerts regarding passing the free tier.
Stay tuned for more tips!

## 📚 Further Reading

- **[What is AWS?](https://aws.amazon.com/what-is-aws/)**
An overview of Amazon Web Services, explaining the core features and benefits.

- **[AWS Free Tier](https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all)**
Learn about the services available for free when you sign up for an AWS account.
64 changes: 64 additions & 0 deletions src/software/cloud-computing/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Cloud Computing

Cloud computing is the delivery of various computing services, such as servers, storage, databases, and software, over the internet. It provides faster innovation, flexibility, and cost savings, as you only pay for the services you use, allowing you to lower your costs and scale based on your business needs.

## Benefits of Cloud Computing

- **Cost Efficiency**: Eliminate the upfront expense of hardware, software, and data centers by leveraging cloud infrastructure.
- **Speed**: Quickly deploy services with just a few clicks, reducing time to market.
- **Global Scale**: Scale services globally, delivering resources from the nearest location to ensure low latency and optimal performance.
- **Productivity**: Focus on core business objectives rather than managing physical servers and infrastructure.
- **Reliability**: Simplify data backup, disaster recovery, and business continuity through built-in redundancy.
- **Security**: Use advanced security features such as encryption and multi-factor authentication (MFA) to protect sensitive data.
- **Performance**: Improve performance by distributing workloads across multiple servers and geographic regions for speed and redundancy.

## Types of Cloud Computing

- **Public Cloud**: Services are owned and operated by third-party cloud providers and delivered over the internet. You pay for only for what you use(AKA Operating expense-OpEx).
- **Private Cloud**: Infrastructure is owned and used exclusively by a single organization. you pay for all the Infrastructure upfront (AKA Capital expense-CapEx).
- **Hybrid Cloud**: Combines public and private cloud environments.
- **Multi Cloud**: Use multiple public cloud providers.

</br>

## Cloud Platform Models

Cloud services come in more than one flavor. Choosing the right one will depend on your specific needs and how much fine control you'll need over the underlying gears and levers.

**Infrastructure as a Service**
Infrastructure as a Service (IaaS) products generally simulate the look and feel you'd get from managing physical resources. laaS products give you direct access to a provider's compute, storage, and networking assets. Because it's you that's in there playing around at the hardware level, rather than the laaS provider, you are responsible for the consequences of any bad configurations. The trade-off is that you get to closely configure every layer of your operating stack.

- **Example**:
- **Amazon Web Services (AWS) EC2**: Rent virtual servers to run applications with control over the OS and network settings.

**Platform as a Service**
Unlike laaS, Platform as a Service (PaaS) products simplify the process of building an application by hiding the complexity of the infrastructure that runs it. You're given an interface through which you define the behavior and environment you want for your application.
This will often include the code that will run your application.

- **Example**:
- **Google App Engine**: A fully managed environment for deploying web apps. Developers write code, and the platform handles scaling and other operational details.

**Software as a Service**
Software as a Service (SaaS) products offer services meant to be accessed by end users.

- **Example**:

- An easily recognizable illustration is **Google's Gmail service**, which allows users to manage their email by logging in to a browser interface or through an email client (like Microsoft Outlook) that's running locally.

## Shared Responsibilty Model

<img src="./images/sharedResponsibility.png" alt="alt text" width="500"/>

_Resource: [Microsoft's Shared Responsibility Model](https://learn.microsoft.com/en-us/azure/security/fundamentals/shared-responsibility)_

## 📚 Further Reading

- **[What is Cloud Computing?](https://azure.microsoft.com/en-us/resources/cloud-computing-dictionary/what-is-cloud-computing#:~:text=Simply%20put%2C%20cloud%20computing%20is,resources%2C%20and%20economies%20of%20scale.)**
From Microsoft Azure's Cloud Computing Dictionary

- **[Shared Responsibility in the Cloud](https://learn.microsoft.com/en-us/azure/security/fundamentals/shared-responsibility)**
From Microsoft Azure's Cloud Computing Dictionary

- **[AWS Certified Solutions Architect Study Guide: Associate SAA-C01 Exam](https://www.amazon.com/dp/111950421X)**
By Ben Piper and David Clinton
ISBN: 978-1119504215
Binary file added src/software/cloud-computing/images/lambda.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit f7ea117

Please sign in to comment.