From 11cb8c1eea1553477aaa09ae018fd3e87f8010f4 Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Tue, 8 Oct 2024 23:55:36 -0600 Subject: [PATCH 01/14] add cloud-computing Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 47 ++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/software/cloud-computing/README.md diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md new file mode 100644 index 0000000..7b151c9 --- /dev/null +++ b/src/software/cloud-computing/README.md @@ -0,0 +1,47 @@ +# 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**: Leverage 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. +- **Private Cloud**: Infrastructure is owned and used exclusively by a single organization. +- **Hybrid Cloud**: Combines public and private cloud environments. + +
+ +## 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, stor-age, and networking assets. Because it's you that's in there playing around at the hardware level, you—rather than the laaS provider-are responsible for the consequences of any bad configura-tions. The trade-off is that you get to closely configure every layer of your operating stack. + +**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. + +**Software as a Service** + +Software as a Service (SaaS) products offer services meant to be accessed by end users. 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. + +## 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 + +- **[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 From 88d172bb2a4983ba4e482fb9ca72f78a519aace6 Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Wed, 9 Oct 2024 00:00:25 -0600 Subject: [PATCH 02/14] edit cloud-computing Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index 7b151c9..19a4bf6 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -24,17 +24,14 @@ Cloud computing is the delivery of various computing services, such as servers, 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** 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, stor-age, and networking assets. Because it's you that's in there playing around at the hardware level, you—rather than the laaS provider-are responsible for the consequences of any bad configura-tions. The trade-off is that you get to closely configure every layer of your operating stack. -**Platform as a Service** - +**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. -**Software as a Service** - +**Software as a Service** Software as a Service (SaaS) products offer services meant to be accessed by end users. 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. ## Further Reading From 3fe5eea5340bd240dc4e53993d73cfd68758f484 Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Wed, 9 Oct 2024 00:03:20 -0600 Subject: [PATCH 03/14] edit cloud-computing Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index 19a4bf6..ff0c062 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -9,7 +9,7 @@ Cloud computing is the delivery of various computing services, such as servers, - **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**: Leverage advanced security features such as encryption and multi-factor authentication (MFA) to protect sensitive data. +- **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 From eaa66e720c69aeffad5499824b02bc735a183ccd Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Thu, 10 Oct 2024 23:59:39 -0600 Subject: [PATCH 04/14] add examples Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index ff0c062..9c22248 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -14,9 +14,10 @@ Cloud computing is the delivery of various computing services, such as servers, ## Types of Cloud Computing -- **Public Cloud**: Services are owned and operated by third-party cloud providers and delivered over the internet. -- **Private Cloud**: Infrastructure is owned and used exclusively by a single organization. +- **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. They 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.
@@ -27,13 +28,22 @@ Cloud services come in more than one flavor. Choosing the right one will depend **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, stor-age, and networking assets. Because it's you that's in there playing around at the hardware level, you—rather than the laaS provider-are responsible for the consequences of any bad configura-tions. 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. 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. +- **Example**: + - **Microsoft 365**: A suite of productivity software (Word, Excel, PowerPoint, etc.) accessed through the cloud, allowing users to collaborate and work from anywhere with just a web browser. + ## 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 cea1a3a2629604969265801be6ee57be258d0dd1 Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Fri, 11 Oct 2024 00:04:19 -0600 Subject: [PATCH 05/14] edit examples Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index 9c22248..757a679 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -39,10 +39,10 @@ This will often include the code that will run your application. - **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. 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. +Software as a Service (SaaS) products offer services meant to be accessed by end users. - **Example**: - - **Microsoft 365**: A suite of productivity software (Word, Excel, PowerPoint, etc.) accessed through the cloud, allowing users to collaborate and work from anywhere with just a web browser. + - 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. ## Further Reading From b83e497375e6b977603aa68776a614c64bd81bd6 Mon Sep 17 00:00:00 2001 From: Mehrnaz <113462468+mzafari2@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:16:37 -0600 Subject: [PATCH 06/14] edit README.md Signed-off-by: Mehrnaz <113462468+mzafari2@users.noreply.github.com> Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index 757a679..cb5fd2d 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -26,7 +26,7 @@ Cloud computing is the delivery of various computing services, such as servers, 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, stor-age, and networking assets. Because it's you that's in there playing around at the hardware level, you—rather than the laaS provider-are responsible for the consequences of any bad configura-tions. The trade-off is that you get to closely configure every layer of your operating stack. +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, stor-age, 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. From 6dbf8ed3c559b93db2c20dd1e6bf4e0abcbaa752 Mon Sep 17 00:00:00 2001 From: Mehrnaz <113462468+mzafari2@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:17:27 -0600 Subject: [PATCH 07/14] edit README.md Signed-off-by: Mehrnaz <113462468+mzafari2@users.noreply.github.com> Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index cb5fd2d..54a8943 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -26,7 +26,7 @@ Cloud computing is the delivery of various computing services, such as servers, 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, stor-age, 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. +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. From 824da880e11bef8d04cad96f1702789f96f03cfc Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:59:17 -0600 Subject: [PATCH 08/14] aws intro Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/AWS/README.MD | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/software/cloud-computing/AWS/README.MD diff --git a/src/software/cloud-computing/AWS/README.MD b/src/software/cloud-computing/AWS/README.MD new file mode 100644 index 0000000..daa9af3 --- /dev/null +++ b/src/software/cloud-computing/AWS/README.MD @@ -0,0 +1,25 @@ +# What is AWS? + +Amazon Web Services (AWS) is the world’s most comprehensive and broadly adopted cloud, offering over 200 fully featured services from data centers globally. Millions of customers are using AWS to lower costs, become more agile, and innovate faster. + +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. From 7fd2e1c757bf0ec2f28a718dfdada0d3f89d1c0b Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Thu, 17 Oct 2024 01:04:54 -0600 Subject: [PATCH 09/14] aws intro Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index 54a8943..e05915d 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -44,7 +44,7 @@ Software as a Service (SaaS) products offer services meant to be accessed by end - **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. -## Further Reading +## 📚 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 From d49b90acbfcdcd1e14a57910b8c03a0d937acec9 Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Thu, 17 Oct 2024 11:36:13 -0600 Subject: [PATCH 10/14] edit aws intro Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/AWS/README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/software/cloud-computing/AWS/README.MD b/src/software/cloud-computing/AWS/README.MD index daa9af3..68abc4d 100644 --- a/src/software/cloud-computing/AWS/README.MD +++ b/src/software/cloud-computing/AWS/README.MD @@ -1,6 +1,6 @@ # What is AWS? -Amazon Web Services (AWS) is the world’s most comprehensive and broadly adopted cloud, offering over 200 fully featured services from data centers globally. Millions of customers are using AWS to lower costs, become more agile, and innovate faster. +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. From 2fa2f868b9d166cbbb3191993f912612c207b440 Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:15:49 -0600 Subject: [PATCH 11/14] added srm Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 10 ++++++++++ .../cloud-computing/sharedResponsibility.png | Bin 0 -> 80354 bytes 2 files changed, 10 insertions(+) create mode 100644 src/software/cloud-computing/sharedResponsibility.png diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index e05915d..3f5edd0 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -42,13 +42,23 @@ This will often include the code that will run your application. 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 + +alt text + +_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 diff --git a/src/software/cloud-computing/sharedResponsibility.png b/src/software/cloud-computing/sharedResponsibility.png new file mode 100644 index 0000000000000000000000000000000000000000..ed621234bcf10d0b8a9522dc86f3fb55569f88bb GIT binary patch literal 80354 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

$qB9i`B1! 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 E0CnQwe*gdg literal 0 HcmV?d00001 From 3e70d21a6c756215b3d06598dfe9b9540a9e18cb Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Thu, 17 Oct 2024 19:21:12 -0600 Subject: [PATCH 12/14] added images folder Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- src/software/cloud-computing/README.md | 4 ++-- .../{ => images}/sharedResponsibility.png | Bin 2 files changed, 2 insertions(+), 2 deletions(-) rename src/software/cloud-computing/{ => images}/sharedResponsibility.png (100%) diff --git a/src/software/cloud-computing/README.md b/src/software/cloud-computing/README.md index 3f5edd0..f012ad9 100644 --- a/src/software/cloud-computing/README.md +++ b/src/software/cloud-computing/README.md @@ -15,7 +15,7 @@ Cloud computing is the delivery of various computing services, such as servers, ## 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. They pay for all the Infrastructure upfront (AKA Capital expense-CapEx). +- **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. @@ -47,7 +47,7 @@ Software as a Service (SaaS) products offer services meant to be accessed by end ## Shared Responsibilty Model -alt text +alt text _Resource: [Microsoft's Shared Responsibility Model](https://learn.microsoft.com/en-us/azure/security/fundamentals/shared-responsibility)_ diff --git a/src/software/cloud-computing/sharedResponsibility.png b/src/software/cloud-computing/images/sharedResponsibility.png similarity index 100% rename from src/software/cloud-computing/sharedResponsibility.png rename to src/software/cloud-computing/images/sharedResponsibility.png From 55bd840b83c3037e7a4b9cfc6977809bc70e5472 Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Thu, 24 Oct 2024 00:39:05 -0600 Subject: [PATCH 13/14] added lambda Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- .../cloud-computing/AWS/Lambda/README.MD | 55 ++++++++++++++++++ .../cloud-computing/images/lambda.png | Bin 0 -> 25598 bytes 2 files changed, 55 insertions(+) create mode 100644 src/software/cloud-computing/AWS/Lambda/README.MD create mode 100644 src/software/cloud-computing/images/lambda.png diff --git a/src/software/cloud-computing/AWS/Lambda/README.MD b/src/software/cloud-computing/AWS/Lambda/README.MD new file mode 100644 index 0000000..59981b0 --- /dev/null +++ b/src/software/cloud-computing/AWS/Lambda/README.MD @@ -0,0 +1,55 @@ +# AWS Lambda + +lambda logo + +## 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. diff --git a/src/software/cloud-computing/images/lambda.png b/src/software/cloud-computing/images/lambda.png new file mode 100644 index 0000000000000000000000000000000000000000..690239f0cc0ede35021c10d69f9e188db45fcf9f GIT binary patch literal 25598 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 literal 0 HcmV?d00001 From 97c6d56d6e5ac311a7581586fc114aaf16224427 Mon Sep 17 00:00:00 2001 From: mzafari2 <113462468+mzafari2@users.noreply.github.com> Date: Thu, 31 Oct 2024 15:37:22 -0600 Subject: [PATCH 14/14] add aws database services Signed-off-by: mzafari2 <113462468+mzafari2@users.noreply.github.com> --- .../AWS/Database Services/DynamoDB/README.md | 92 +++++++++++++++++++ .../AWS/Database Services/RDS/README.MD | 44 +++++++++ .../AWS/Database Services/README.MD | 33 +++++++ 3 files changed, 169 insertions(+) create mode 100644 src/software/cloud-computing/AWS/Database Services/DynamoDB/README.md create mode 100644 src/software/cloud-computing/AWS/Database Services/RDS/README.MD create mode 100644 src/software/cloud-computing/AWS/Database Services/README.MD diff --git a/src/software/cloud-computing/AWS/Database Services/DynamoDB/README.md b/src/software/cloud-computing/AWS/Database Services/DynamoDB/README.md new file mode 100644 index 0000000..8a47d25 --- /dev/null +++ b/src/software/cloud-computing/AWS/Database Services/DynamoDB/README.md @@ -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). diff --git a/src/software/cloud-computing/AWS/Database Services/RDS/README.MD b/src/software/cloud-computing/AWS/Database Services/RDS/README.MD new file mode 100644 index 0000000..fbbbdf0 --- /dev/null +++ b/src/software/cloud-computing/AWS/Database Services/RDS/README.MD @@ -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). diff --git a/src/software/cloud-computing/AWS/Database Services/README.MD b/src/software/cloud-computing/AWS/Database Services/README.MD new file mode 100644 index 0000000..04baabb --- /dev/null +++ b/src/software/cloud-computing/AWS/Database Services/README.MD @@ -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.