Successful modern cloud application deployments are influenced by factors outside of technology choices. Cost, location, and even cloud provider architecture can determine the success of a deployment. Whether it's duplicating workloads across cloud service providers or running workloads suited to a particular provider, organizations look to multi-cloud deployments to stay agile and prevent vendor lock-in.
Finding the right cloud solution requires experimentation to understand each cloud ecosystem and the best practices. The good news is that cloud providers have free service tiers for many cloud resources. These resources are often always free under a certain usage threshold or free to use for a limited time, commonly 12 months after creating an account.
Having free access to resources frees you to experiment, try out new ideas, and implement different application deployment architectures. However, given the number of cloud providers and the range of services they provide, getting started can be intimidating. This article is a guide to popular cloud resources and how to use them.
Infrastructure as Code (IaC) is a broad term used to describe everything from shell scripts to templating languages based on JSON or YAML to build infrastructure declaratively. In contrast, Infrastructure as Software uses general programming languages to build cloud infrastructure. Programming languages have a number of advantages over JSON or YAML templates, such as the use of a software development tool chain that includes IDE's, code completion, error checking, and having
documentation available just by hovering. In addition, you can use test driven development and write unit and integration tests before your cloud resources are deployed in production. In this article we'll use Pulumi examples to show how to work with cloud resources across the major cloud providers.
Amazon offers a free tier composed of always free, 12 months free available to new customers, and short term trials. The following is a selection of always free resources with accompanying tutorials, examples, and blog posts to get you started.
Amazon DynamoDB: Amazon’s NoSQL key-value and document database with 25 GB of storage and 25 units of read and write each month.
- How to create an AWS DynamoDB data service with Pulumi
- Serverless REST APIs with DynamoDB
- Creating a DynampDB Table
AWS Lambda: Amazon’s function-as-a-service can run code for any application or backend service. Upload your code, and Lambda runs and scales your code with high availability with zero administration. Your code can trigger other AWS services or call the function a web or mobile app.
- AWS Lambda and Serverless Events
- Serverless App Using API Gateways and Lambda
- Controlling AWS Costs with Pulumi and AWS Lambda
- Scheduling Serverless
Amazon RDS: Amazon’s managed-database service — MySQL, MariaDB, PostgreSQL, Oracle Database (you must supply your own license), or SQL Server Express — can be run nonstop monthly as long as you use a Single-AZ db.t2.micro instance, along with 20 GB of SSD-backed database storage and 20 GB of backups.
- RDS Aurora Cluster
- RDS Instance
- Managing your MySQL databases with Pulumi
- RDS Postgres and Containerized Airflow
AWS Step Functions: AWS Step Functions orchestrates AWS Lambda functions and multiple AWS services by sequencing them into applications. The output of a step function is an input to the next, executing each step in order according to your business logic. Step Functions control sequencing, perform error handling and retry logic, and maintain state. Four thousand state transitions are free each month.
Similar to Amazon, Azure offers both an always free tier and 12 months free to new users. Azure also includes a $200 credit for 30 days after signing up. A list of free services and their terms are available. Let's take a look at how we can use some of these resources to build infrastructure.
Azure Active Directory: Azure AD identity service provides single sign-on and multi-factor authentication to protect your users. Up to 50,000 authentications per month are available free.
Azure App Service: Build, deploy, and scale web apps and APIs. Whether your application is .NET, .NET Core, Node.js, Java, Python, or PHP, in containers or running on Windows or Linux, you can deploy it on a fully managed platform that handles over 40 billion requests per day. Up to 10 web, mobile, or API apps can be created at no charge.
- Azure App Service with SQL Database and Application Insights
- Todo App Using Azure App Service with SQL Database and Integrated with Azure DevOps
Azure Cosmos DB: Cosmos DB is a managed NoSQL database service backed by open-source APIs for MongoDB and Cassandra. Up to 500 GB of storage and 400 request units per second are available for free each month.
- Azure Cosmos DB, an API Connection, and a Logic App
- How To Build Globally Distributed Applications with Azure Cosmos DB and Pulumi
- Azure Kubernetes Service (AKS) App Using CosmosDB
- Globally Distributed Serverless URL Shortener Using Azure Functions and Cosmos DB
Azure Functions: Functions are an event-driven serverless compute platform for solving complex orchestration problems. You can build and debug locally without additional setup, deploy and operate at scale in the cloud, and integrate services using triggers and bindings. Up to 1 million requests per month are free.
- Azure Functions
- Ten Pearls With Azure Functions in Pulumi
- Deploy a Function App with KEDA (Kubernetes-based Event-Driven Autoscaling)
Azure Kubernetes Service (AKS): Azure AKS deploys containerized applications with a fully managed Kubernetes service. AKS includes serverless Kubernetes and an integrated continuous integration and continuous delivery (CI/CD) experience.
- Azure Kubernetes Service (AKS) - Hello World!
- Azure Kubernetes Service (AKS) Cluster
- Create AKS Clusters with monitoring and logging using Pulumi-Azure open source SDKs
- Multiple Azure Kubernetes Service (AKS) Clusters
Google Cloud has a free tier with over 20 free services with monthly limits and provides a $300 credit with a new account. Services offered by Google Cloud run on the same infrastructure as their public services. The complete listing of services available on the free tier is available.
Google Compute Engine: Compute Engine provides predefined virtual machine configurations ranging from small general purpose instances to large memory-optimized or fast compute-optimized instances with up to 60 vCPUs. You can create a virtual machine that best fits your workloads.
- Web Server Virtual Machine Instance on GCE
- Nginx Server Using Compute Engine
- Google Cloud Network and Instance with ComponentResource
Google Cloud Functions: Cloud Functions connect and extend third-party services with code and go to production with end-to-end solutions and complex workflows. Cloud Functions automatically manages and scales underlying infrastructure with the size of workload without server management. The free tier provides two million invocations, both background and HTTP, are free each month. Five GB of outbound network data, 400,000 GB-seconds, and 200,000 GHz-seconds of compute time are included.
- Simple Serverless programming with Google Cloud Functions and Pulumi
- Google Cloud Functions in Python deployed with Go
- Google Cloud Functions in Python
- Google Cloud Functions in Python and Go Deployed with TypeScript
Google Cloud Run: Cloud Run lets you deploy containerized applications on a fully managed serverless platform. Use any container images, and your application automatically scales up or down based on traffic. You can set up triggers to receive events from 60+ Google Cloud sources, and each service gets an out-of-the-box stable HTTPS endpoint, with TLS termination.
- Google Cloud Run
- Google Cloud Run: Serverless Containers
- Docker Build and Push to GCR and Deploy to Google Cloud Run using separate projects
Google Cloud Google Kubernetes Engine: Secured and managed Kubernetes service with four-way auto scaling and multi-cluster support. GKE provides horizontal pod autoscaling based on CPU utilization or metrics. It automatically scales the node pool and clusters across multiple node pools based on changing workload requirements.
- Google Kubernetes Engine (GKE) Tutorial
- Google Kubernetes Engine (GKE) Cluster
- Google Kubernetes Engine (GKE) with a Canary Deployment
- Containerized Ruby on Rails App Delivery on GCP
As you can see, there are many opportunities to get you started on your multi-cloud journey. There are more examples available on GitHub.