From e646000176088ae001bec3df560d0eaafbb6b674 Mon Sep 17 00:00:00 2001 From: Inaki Fernandez Date: Mon, 21 Feb 2022 09:31:16 +0100 Subject: [PATCH] aws reorg Feb 21st --- docs/argocd.md | 2 +- docs/aws-architecture.md | 28 + docs/aws-backup.md | 17 + docs/aws-best-practices.md | 15 + docs/aws-certification.md | 12 + docs/aws-containers.md | 35 + docs/aws-data.md | 20 + docs/aws-databases.md | 59 + docs/aws-devops.md | 31 + docs/aws-iac.md | 29 + docs/aws-migrations.md | 7 + docs/aws-miscellaneous.md | 125 ++ docs/aws-monitoring.md | 35 + docs/aws-networking.md | 83 ++ docs/aws-newfeatures.md | 77 ++ docs/aws-pricing.md | 25 + docs/aws-samples-boilerplates.md | 5 + docs/aws-security.md | 93 ++ docs/aws-serverless.md | 44 + docs/aws-spain.md | 15 + docs/aws-storage.md | 27 + docs/aws-tools-scripts.md | 58 + docs/aws-training.md | 16 + docs/aws.md | 1017 ++--------------- docs/crunchydata.md | 705 ++++++++++++ docs/databases.md | 708 +----------- docs/devops.md | 12 +- docs/docker.md | 5 +- docs/edge-computing.md | 2 +- docs/elearning.md | 1 + docs/gitops.md | 11 + docs/grafana.md | 3 +- docs/images/devops_lifecycle.jfif | Bin 0 -> 90077 bytes .../devops_pipeline_vs_gitops_pipeline.png | Bin 0 -> 168562 bytes docs/images/tinahuang.jpg | Bin 0 -> 6432 bytes docs/images/traditional_ops_vs_gitops.png | Bin 0 -> 222381 bytes docs/index.md | 32 +- docs/introduction.md | 1 + docs/java_frameworks.md | 1 + docs/kubernetes-releases.md | 3 +- docs/kubernetes-troubleshooting.md | 3 + docs/kubernetes.md | 2 + docs/managed-kubernetes-in-public-cloud.md | 7 + docs/message-queue.md | 2 +- docs/mlops.md | 2 + docs/nosql.md | 2 + docs/other-awesome-lists.md | 3 +- docs/project-management-methodology.md | 1 + docs/python.md | 2 + docs/recruitment.md | 2 + docs/sre.md | 2 + docs/terraform.md | 3 + mkdocs.yml | 25 +- 53 files changed, 1760 insertions(+), 1655 deletions(-) create mode 100644 docs/aws-architecture.md create mode 100644 docs/aws-backup.md create mode 100644 docs/aws-best-practices.md create mode 100644 docs/aws-certification.md create mode 100644 docs/aws-containers.md create mode 100644 docs/aws-data.md create mode 100644 docs/aws-databases.md create mode 100644 docs/aws-devops.md create mode 100644 docs/aws-iac.md create mode 100644 docs/aws-migrations.md create mode 100644 docs/aws-miscellaneous.md create mode 100644 docs/aws-monitoring.md create mode 100644 docs/aws-networking.md create mode 100644 docs/aws-newfeatures.md create mode 100644 docs/aws-pricing.md create mode 100644 docs/aws-samples-boilerplates.md create mode 100644 docs/aws-security.md create mode 100644 docs/aws-serverless.md create mode 100644 docs/aws-spain.md create mode 100644 docs/aws-storage.md create mode 100644 docs/aws-tools-scripts.md create mode 100644 docs/aws-training.md create mode 100644 docs/crunchydata.md create mode 100644 docs/images/devops_lifecycle.jfif create mode 100644 docs/images/devops_pipeline_vs_gitops_pipeline.png create mode 100644 docs/images/tinahuang.jpg create mode 100644 docs/images/traditional_ops_vs_gitops.png diff --git a/docs/argocd.md b/docs/argocd.md index b63f57eb..57e7039d 100644 --- a/docs/argocd.md +++ b/docs/argocd.md @@ -54,7 +54,7 @@ - [blog.argoproj.io: Best Practices for Multi-tenancy in Argo CD](https://blog.argoproj.io/best-practices-for-multi-tenancy-in-argo-cd-273e25a047b0) - [argoproj.github.io: Argo Events - The Event-driven Workflow Automation Framework](https://argoproj.github.io/argo-events/) Argo Events is an event-driven workflow automation framework for Kubernetes which helps you trigger K8s objects, Argo Workflows, Serverless workloads, etc. on events from a variety of sources like webhooks, S3, schedules, messaging queues, etc. - +- [jijujacob27.medium.com: Sharded applications on Kubernetes using Helm, ArgoCD, and Argo-Rollouts](https://jijujacob27.medium.com/sharded-saas-applications-on-kubernetes-using-helm-argocd-and-argo-rollouts-a683c66f8646) ## Argo CD Tools - [argoproj-labs/argocd-autopilot: Argo-CD Autopilot](https://github.com/argoproj-labs/argocd-autopilot) The Argo-CD Autopilot is a tool which offers an opinionated way of installing Argo-CD and managing GitOps epositories. New users to GitOps and Argo CD are not often sure how they should structure their repos, add applications, promote apps across environments, and manage the Argo CD installation itself using GitOps. Argo Autopilot is a project that solves that diff --git a/docs/aws-architecture.md b/docs/aws-architecture.md new file mode 100644 index 00000000..a4655523 --- /dev/null +++ b/docs/aws-architecture.md @@ -0,0 +1,28 @@ +# AWS Architecture +- [Introduction](#introduction) +- [AWS Architecture Blog, Official Blog, AWS Labs, AWS Quick Start](#aws-architecture-blog-official-blog-aws-labs-aws-quick-start) +- [AWS Case Studies](#aws-case-studies) + +## Introduction +- [AWS Well Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html) + - [nops.io: Discover How to Compare Cloud Workloads for Risk Management on AWS](https://www.nops.io/workload-rule-violations-aws-well-architected/) The AWS Well-Architected Framework provides best practices guidance to optimize workloads based on the Framework’s five pillars — operational excellence, security, reliability, performance efficiency, and cost optimization. +- [AWS application-architecture](http://www.conceptdraw.com/examples/application-architecture) +- [Optimizing your AWS Infrastructure for Sustainability, Part I: Compute](https://aws.amazon.com/blogs/architecture/optimizing-your-aws-infrastructure-for-sustainability-part-i-compute/) +- [Optimizing your AWS Infrastructure for Sustainability, Part II: Storage](https://aws.amazon.com/blogs/architecture/optimizing-your-aws-infrastructure-for-sustainability-part-ii-storage/) +- [==AWS App2Container: Migrate your Applications to Containers at Scale==](https://aws.amazon.com/blogs/architecture/migrate-your-applications-to-containers-at-scale/) +- [dev.to: How Well-Architected Enables Junior Engineers](https://dev.to/aws-builders/how-well-architected-enables-junior-engineers-24j) +- [==This is My Architecture==](https://aws.amazon.com/architecture/this-is-my-architecture) Innovative cloud architectures from AWS partners and customers. **'This is My Architecture' is a video series that showcases innovative architectural solutions on the AWS Cloud by customers and partners.** Each episode examines the most interesting and technically creative elements of each cloud architecture. +- [==Creating a Multi-Region Application with AWS Services – Part 1, Compute, Networking, and Security==](https://aws.amazon.com/blogs/architecture/creating-a-multi-region-application-with-aws-services-part-1-compute-and-security/) +- [==Creating a Multi-Region Application with AWS Services – Part 2, Data and Replication==](https://aws.amazon.com/blogs/architecture/creating-a-multi-region-application-with-aws-services-part-2-data-and-replication/) + +## AWS Architecture Blog, Official Blog, AWS Labs, AWS Quick Start +- [AWS Architecture Blog](https://www.awsarchitectureblog.com) +- [AWS Official Blog](http://blogs.aws.amazon.com/) +- [AWS Labs GitHub](https://github.com/awslabs) +- [AWS Quick Start Reference Deployments](http://aws.amazon.com/es/quickstart/) + - [AWS Quick Start - GitHub](https://github.com/awslabs/aws-quickstart) +- [InfoWorld Review – Amazon Aurora Rocks MySQL](https://aws.amazon.com/blogs/aws/infoworld-review-amazon-aurora-rocks-mysql/) +- [AWS Cost Explorer Update – Access to EC2 Usage Data](https://aws.amazon.com/blogs/aws/aws-cost-explorer-update-access-to-ec2-usage-data/) + +## AWS Case Studies +- [Thomas Publishing Case Study](https://aws.amazon.com/solutions/case-studies/thomas-publishing/) After moving to AWS, we were able to shut down our largest data center, eliminating hundreds of thousands of dollars in associated real estate, facility operations, and power and cooling costs. diff --git a/docs/aws-backup.md b/docs/aws-backup.md new file mode 100644 index 00000000..2d0607b2 --- /dev/null +++ b/docs/aws-backup.md @@ -0,0 +1,17 @@ +# AWS Backup and Recovery. Design for failure. Disaster Recovery +- [Introduction](#introduction) +- [AWS Backup Service](#aws-backup-service) + +## Introduction +- [Quantum Taps AWS for Cloud-Powered Disaster Recovery](http://www.infostor.com/backup-and_recovery/quantum-taps-aws-for-cloud-powered-disaster-recovery.html) +- [Linkedin discussion: Need help on Backup and restore methods of EC2 using s3 services](https://www.linkedin.com/groups/49531/49531-6093375473969090562) +- [Design for failure lessons learnt from the Sydney AWS outage](https://www.hava.io/blog/design-for-failure-lessons-learnt-from-the-sydney-aws-outage) +- [Chaos Monkey](https://github.com/Netflix/SimianArmy/wiki/Chaos-Monkey) The Netflix Chaos Monkey tool allows you to proactively launch attack code against your infrastructure to cause failures and give you the chance to fix potential problems before they occur on their own. +- [Udemy - AWS: How to Architect with a Design for Failure Approach](https://www.udemy.com/how-to-architect-with-a-design-for-failure-approach/) +- [How to Restore Your Instance Data from a Backup using Snapshots on AWS EC2/EBS](https://www.cloudinsidr.com/content/how-to-restore-your-instance-data-from-a-backup-using-snapshots-on-aws-ec2ebs/) +- [Backup and archive to AWS Storage Gateway VTL with Veeam Backup & Replication v9](https://aws.amazon.com/es/about-aws/whats-new/2016/08/backup-and-archive-to-aws-storage-gateway-vtl-with-veeam-backup-and-replication-v9/) +- [Creating Disaster Recovery Mechanisms Using Amazon Route 53](https://aws.amazon.com/blogs/networking-and-content-delivery/creating-disaster-recovery-mechanisms-using-amazon-route-53/) + +## AWS Backup Service +- [AWS Backup Service](https://aws.amazon.com/backup) +- [medium: AWS Backup Service for Amazon RDS](https://medium.com/avmconsulting-blog/aws-backup-service-for-amazon-rds-3e6f5827aa66) diff --git a/docs/aws-best-practices.md b/docs/aws-best-practices.md new file mode 100644 index 00000000..af08b608 --- /dev/null +++ b/docs/aws-best-practices.md @@ -0,0 +1,15 @@ +# AWS Best Practices and Tips. AWS Performance. Handling AWS Failures and Outages +- [AWS Tips I Wish I'd Known Before I Started (Feb 2014)](https://wblinks.com/notes/aws-tips-i-wish-id-known-before-i-started/) A collection of random tips for Amazon Web Services (AWS) that I wish I'd been told a few years ago, based on what I've learned by building and deploying various applications on AWS. +- [Amazon AWS Tips and Gotchas – Part 1 (Feb 2016)](http://www.tekhead.org/blog/2016/02/amazon-aws-tips-and-gotchas-part-1/) +- [DZone: 5 Tips for Better AWS Performance](https://dzone.com/articles/5-tips-for-better-aws-performance) The Ngnix team has a nice list of tips for better performance when using the AWS services. Some of them are related to Ngnix, but others are completely usable for anyone. +- [How do I get started with AWS cloud computing?](https://aws.amazon.com/premiumsupport/knowledge-center/get-started-aws/) +- [DZone: Dude, Where's My Performance?](https://dzone.com/articles/dude-wheres-my-performance) +- [DZone: A Guide to Performance Challenges with AWS EC2: Part 1](https://blog.appdynamics.com/cloud/a-guide-to-performance-challenges-with-aws-ec2-part-1/) +- [DZone: A Guide to Performance Challenges With AWS EC2: Part 2](https://dzone.com/articles/a-guide-to-performance-challenges-with-aws-ec2-par-1) Using Amazon Web Services? Learn how to get your Elastic Compute Cloud instances to perform better than your competitors. +- [DZone: A Guide to Performance Challenges With AWS EC2: Part 3](https://dzone.com/articles/a-guide-to-performance-challenges-with-aws-ec2-par-2) In the second part of his guide covering performance challenges in AWS EC2, Saba Anees covers instances and the right applications for your workloads. +- [DZone: A Guide to Performance Challenges With AWS EC2: Part 4](https://dzone.com/articles/a-guide-to-performance-challenges-with-aws-ec2-par-3) In the final part of his series covering performance challenges with AWS EC2, Saba Anees goes over poor ELB performance and handling AWS failures and outages. +- [blog.datapath.io: Dynamic Web Accelerator for AWS Hosted Applications](http://blog.datapath.io/dynamic-web-accelerator-for-aws-hosted-applications) +- [The Truth About Downtime in the Cloud](http://cloud.netapp.com/blog/prepare-for-the-day-of-all-cloud) +- [thenewstack.io: Avoid the 5 Most Common Amazon Web Services Misconfigurations in Build-Time](https://thenewstack.io/avoid-the-5-most-common-amazon-web-services-misconfigurations-in-build-time/) +- [zarantech.com: Top 5 Pillars of AWS Well-Architected Structure](https://www.zarantech.com/blog/top-5-pillars-of-aws-well-architected-structure/) +- [foreseeti.com: How to become and stay AWS well architected in a smart way](https://foreseeti.com/how-to-become-and-stay-aws-well-architected-in-a-smart-way/) \ No newline at end of file diff --git a/docs/aws-certification.md b/docs/aws-certification.md new file mode 100644 index 00000000..5db91b6f --- /dev/null +++ b/docs/aws-certification.md @@ -0,0 +1,12 @@ +# AWS Certification +- [linkedin: Sharing My Top 10 resources to use while preparing for AWS Certification Exams](https://www.linkedin.com/pulse/sharing-my-top-10-resources-use-while-preparing-aws-exams-semaan/) +- [Schedule an Exam](https://aws.amazon.com/certification/certification-prep/testing) Find the testing option that works best for you +- [dev.to: How to become a Certified AWS Solution Architect in 2022](https://dev.to/javinpaul/how-to-become-a-certified-aws-solution-architect-in-2022-35ad) + +## Closed groups for AWS certified professionals +- [awscerts.slack.com](https://awscerts.slack.com) +- [Amazon AWS Certification Preparation Tips](http://walkintocloud.com/index.php/2016/06/04/amazon-aws-certification-preparation-tips/) +- [A curated list of AWS resources to prepare for the AWS Certifications](https://gist.github.com/leonardofed) +- [AWS Certified Solutions Architect Professional – Study Guide](https://blue-clouds.com/category/study-guide/) +- [aws.amazon.com: First AWS Certification Study Guide Now Available](https://aws.amazon.com/es/about-aws/whats-new/2016/10/first-aws-certification-study-guide-now-available/) +- [Tips on Passing AWS Certified Solutions Architect - Professional Level](https://www.linkedin.com/pulse/passed-aws-certified-solutions-architect-level-harshit-agarwal) diff --git a/docs/aws-containers.md b/docs/aws-containers.md new file mode 100644 index 00000000..60fcd536 --- /dev/null +++ b/docs/aws-containers.md @@ -0,0 +1,35 @@ +# AWS Containers +- [AWS ECS](#aws-ecs) +- [Rancher on AWS](#rancher-on-aws) +- [Amazon ECS optimized AMI](#amazon-ecs-optimized-ami) +- [AWS EC2 Container Registry ECR (Docker)](#aws-ec2-container-registry-ecr-docker) +- [Docker for AWS](#docker-for-aws) + +## AWS ECS +- [cloudonaut.io: Scaling Container Clusters on AWS: ECS and EKS](https://cloudonaut.io/scaling-container-clusters-on-aws-ecs-eks/) +- [medium: Creating CI/CD Pipeline for AWS ECS — Part I](https://medium.com/@harshvijaythakkar/creating-ci-cd-pipeline-for-aws-ecs-part-i-b2f61bb1522f) +- [clickittech.com: Amazon ECS vs EKS : The Best Container Orchestration Platform](https://www.clickittech.com/aws/amazon-ecs-vs-eks/) +- [dev.to: Sharing secrets to ECS in an AWS multi-account architecture](https://dev.to/aws-builders/sharing-secrets-to-ecs-in-an-aws-multi-account-architecture-5h1i) +- [cast.ai: AWS EKS vs. ECS vs. Fargate: Where to manage your Kubernetes?](https://cast.ai/blog/aws-eks-vs-ecs-vs-fargate-where-to-manage-your-kubernetes/) +- [neal-davis.medium.com: ECS vs EC2 vs Lambda](https://neal-davis.medium.com/ecs-vs-ec2-vs-lambda-36b8ca380dea) +- [faun.pub: Why We Moved From Lambda to ECS](https://faun.pub/why-we-moved-from-lambda-to-ecs-b84674f31869) + +## Rancher on AWS +- [aws-quickstart.github.io: Rancher on the AWS Cloud. Quick Start Reference Deployment](https://aws-quickstart.github.io/quickstart-eks-rancher/) + +## Amazon ECS optimized AMI +- [Amazon ECS-optimized AMI](http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html) + +## AWS EC2 Container Registry ECR (Docker) +- [A Better Dev/Test Experience: Docker and AWS](https://medium.com/aws-activate-startup-blog/a-better-dev-test-experience-docker-and-aws-291da5ab1238) +- [Amazon EC2 Container Registry Documentation](http://aws.amazon.com/es/documentation/ecr/) +- [Get started with Amazon EC2 Container Registry (Amazon ECR)](http://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_GetStarted.html) +- [Using Docker Machine with AWS](http://blog.scottlowe.org/2016/03/22/using-docker-machine-with-aws/) +- [Docker Datacenter on the AWS Cloud: Quick Start Reference Deployment](https://aws.amazon.com/es/about-aws/whats-new/2016/06/docker-datacenter-on-the-aws-cloud-quick-start-reference-deployment/) +- [ecrcp](https://github.com/bit-cloner/ecrcp) aims to mimic cp command in Linux systems as closely as possible in its implementation. Consider ecrcp to be the cp equivalent to copy container images from docker hub to ECR. +- [aws.plainenglish.io: How to Push a Docker Image to the AWS ECR](https://aws.plainenglish.io/how-to-push-an-image-to-aws-ecr-b2be848c2ef) +- [awslabs/amazon-ecr-credential-helper: Amazon ECR Docker Credential Helper](https://github.com/awslabs/amazon-ecr-credential-helper) Automatically gets credentials for Amazon ECR on docker push/docker pull + +## Docker for AWS +- [DZone: Getting Started With Docker for AWS and Scaling Nodes](https://dzone.com/articles/getting-started-with-docker-for-aws-and-scaling-no) This blog will explain how to get started with Docker for AWS and deploy a multi-host Swarm cluster on Amazon. +- [blog.couchbase.com: Getting Started with Docker for AWS and Scaling Nodes](http://blog.couchbase.com/2016/july/docker-for-aws-getting-started-scaling-nodes) diff --git a/docs/aws-data.md b/docs/aws-data.md new file mode 100644 index 00000000..4382deb0 --- /dev/null +++ b/docs/aws-data.md @@ -0,0 +1,20 @@ +# AWS Big Data +- [Introduction](#introduction) +- [AWS Data Lake](#aws-data-lake) +- [AWS Data Pipeline (aka Big Data Pipelines or Data Streams)](#aws-data-pipeline-aka-big-data-pipelines-or-data-streams) + +## Introduction +- [aws.amazon.com/big-data](http://aws.amazon.com/big-data) +- [blogs.aws.amazon.com/bigdata](http://blogs.aws.amazon.com/bigdata/) +- [Querying Amazon Kinesis Streams Directly with SQL and Spark Streaming](https://aws.amazon.com/blogs/big-data/querying-amazon-kinesis-streams-directly-with-sql-and-spark-streaming/) +- [Using Spark SQL for ETL](http://blogs.aws.amazon.com/bigdata/post/Tx2D93GZRHU3TES/Using-Spark-SQL-for-ETL) +- [whizlabs.com: AWS Kinesis vs Kafka Apache](https://www.whizlabs.com/blog/kinesis-vs-kafka/) + +## AWS Data Lake +- [Building a Data Lake on AWS](https://aws.amazon.com/big-data/data-lake-on-aws/) AWS provides a highly scalable, flexible, secure, and cost-effective solution for your organization to build a Data Lake – a data repository for both structured and unstructured data that is designed to be easily accessible for on-demand data analytics enabling you to answer questions as they arise. + +## AWS Data Pipeline (aka Big Data Pipelines or Data Streams) +- [AWS Data Pipeline](https://aws.amazon.com/datapipeline/) +- [AWS Data Pipeline Documentation](https://docs.aws.amazon.com/data-pipeline/index.html) +- [medium: No-Code Data Collect API on AWS](https://medium.com/@dima.statz_89242/no-code-data-collect-api-on-aws-d79e3681d204) A No-Code Data Collections mechanism for Big Data Pipelines on AWS. +- [AWS Big Data Blog: Category - AWS Data Pipeline](https://aws.amazon.com/blogs/big-data/category/analytics/aws-data-pipeline/) diff --git a/docs/aws-databases.md b/docs/aws-databases.md new file mode 100644 index 00000000..574a69d4 --- /dev/null +++ b/docs/aws-databases.md @@ -0,0 +1,59 @@ +# AWS RDS Databases +- [Introduction](#introduction) +- [AWS Database Migration Service DMS](#aws-database-migration-service-dms) +- [AWS RDS Proxy](#aws-rds-proxy) +- [AWS Schema Conversion Tool](#aws-schema-conversion-tool) +- [AWS Redshift](#aws-redshift) +- [AWS Data Mesh and Batch Data Processing](#aws-data-mesh-and-batch-data-processing) +- [AWS NoSQL DynamoDB](#aws-nosql-dynamodb) + +## Introduction +- [Tutorial: Restoring a DB Instance from a DB Snapshot](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.RestoringFromSnapshot.html) +- [Partitioning MySQL on RDS: "How We Partitioned Airbnb’s Main Database in Two Weeks"](https://medium.com/airbnb-engineering/how-we-partitioned-airbnb-s-main-database-in-two-weeks-55f7e006ff21) +- [Amazon RDS for SQL Server – Support for Windows Authentication](https://aws.amazon.com/blogs/aws/amazon-rds-for-sql-server-support-for-windows-authentication/) +- [Why Support of PostgreSQL 9.5 by Amazon RDS is Such Great News](http://blog.rubyroidlabs.com/2016/04/postgresql-9-5/) +- [AWS Tutorials: Create and Connect to a MySQL Database with Amazon RDS](https://aws.amazon.com/getting-started/tutorials/create-mysql-db/) +- [Migrating from MySQL (RDS) to Aurora with no downtime](http://cantrill.io/howto/aws/2016/06/06/migrating-from-mysql-to-aurora-with-almost-no-downtime.html) +- [Replicating Amazon Aurora DB Clusters Across AWS Regions](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Replication.CrossRegion.html) +- [Working with PostgreSQL, MySQL, and MariaDB Read Replicas - Amazon](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html) Use RDS PostgreSQL cross-region Read Replicas to get data close to customers. +- [Working with an Amazon RDS DB Instance in a VPC](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html) +- [Creating a DB Instance Running the Oracle Database Engine](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateOracleInstance.html) In RDS, create Oracle Standard Edition 2 DB instances with the License Included model. +- [Oracle Database on the AWS Cloud: Quick Start Reference Deployment](https://aws.amazon.com/about-aws/whats-new/2016/10/oracle-database-on-the-aws-cloud-quick-start-reference-deployment/) +- [besanttechnologies.com: AWS – Relational Database Service](https://www.besanttechnologies.com/amazon-web-services-relational-database) +- [Introducing the Aurora Storage Engine](https://aws.amazon.com/blogs/database/introducing-the-aurora-storage-engine/) +- [dzone: AWS Relational Database Service (RDS): PostgreSQL in Cloud](https://dzone.com/articles/aws-relational-database-service-rds-postgresql-in) Today, we will go into details of Amazon RDS. We also set up a PostgreSQL instance using this service and connect to it using a tool Azure Data Studio. +- [sysadminxpert.com: How to Enable Slow Query Logs in AWS RDS MySQL](https://sysadminxpert.com/how-to-enable-slow-query-logs-in-aws-rds-mysql/) +- [New – Create Microsoft SQL Server Instances of Amazon RDS on AWS Outposts](https://aws.amazon.com/blogs/aws/new-create-microsoft-sql-server-instances-of-amazon-rds-on-aws-outposts/) +- [percona.com: The Benefits of Amazon RDS for MySQL](https://www.percona.com/blog/2019/12/19/the-benefits-of-amazon-rds-for-mysql/) +- [medium: AWS Backup Service for Amazon RDS](https://medium.com/avmconsulting-blog/aws-backup-service-for-amazon-rds-3e6f5827aa66) +- [migops.com: Is Aurora PostgreSQL really faster and cheaper than RDS PostgreSQL – Benchmarking](https://www.migops.com/blog/2021/11/26/is-aurora-postgresql-really-faster-and-cheaper-than-rds-postgresql-benchmarking/) +- [==dashbird.io: [Infographic] AWS RDS from a Serverless perspective==](https://dashbird.io/blog/aws-relational-database-rds/) + +## AWS Database Migration Service DMS +- [AWS Database Migration Service](https://aws.amazon.com/blogs/aws/aws-database-migration-service/) +- [Whitepaper: Migrating Your Databases to AWS](https://aws.amazon.com/dms/learn-more/) +- [Replicate and transform data in Amazon Aurora PostgreSQL across multiple Regions using AWS DMS](https://aws.amazon.com/blogs/database/replicate-and-transform-data-in-amazon-aurora-postgresql-across-multiple-regions-using-aws-dms) +- [Amazon RDS for PostgreSQL Enhancements: Support for new minor versions, Logical Replication, and Amazon RDS PostgreSQL as a source for AWS DMS](https://aws.amazon.com/about-aws/whats-new/2016/09/amazon-rds-for-postgresql-enhancements-support-for-new-minor-versions-logical-replication-and-amazon-rds-postgresql-as-a-source-for-aws-dms/) +- [Migrating Oracle databases with near-zero downtime using AWS DMS](https://aws.amazon.com/blogs/database/migrating-oracle-databases-with-near-zero-downtime-using-aws-dms/) +- [Migrating a commercial database to open source with AWS SCT and AWS DMS](https://aws.amazon.com/blogs/database/migrating-a-commercial-database-to-open-source-with-aws-sct-and-aws-dms/) +- [revenuecat.com: Replicating a postgresql cluster to redshift](https://www.revenuecat.com/blog/replicating-a-postgresql-cluster-to-redshift) + +## AWS RDS Proxy +- [Amazon RDS Proxy – Now Generally Available](https://aws.amazon.com/es/blogs/aws/amazon-rds-proxy-now-generally-available/) A fully managed, highly available database proxy for Amazon Relational Database Service (RDS) that makes applications more scalable, more resilient to database failures, and more secure. + +## AWS Schema Conversion Tool +- [cloudacademy.com: Migrating Data to AWS Using the AWS Schema Conversion Tool: A Preview](http://cloudacademy.com/blog/migrating-data-to-aws/) +- [AWS Schema Conversion Tool now supports PostgreSQL as conversion target](http://aws.amazon.com/about-aws/whats-new/2016/01/aws-schema-conversion-tool-postgresql-support/) +- [Creating an AWS Schema Conversion Tool Project](http://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_SchemaConversionTool.Converting.CreateProject.html) Use SSL to connect to your source DB with the AWS Schema Conversion Tool. +- [AWS Schema Conversion Tool now supports conversions from Oracle DW and Teradata to Amazon Redshift, Embedded Code Conversion, and Cloud native Code Optimization](https://aws.amazon.com/es/about-aws/whats-new/2016/07/aws-schema-conversion-tool-now-supports-conversions-from-oracle-dw-and-teradata-to-amazon-redshift-embedded-code-conversion-and-cloud-native-code-optimization) + +## AWS Redshift +- [Tutorial: Tuning Table Design](http://docs.aws.amazon.com/redshift/latest/dg/tutorial-tuning-tables.html) In this tutorial, you will learn how to optimize the design of your tables. + +## AWS Data Mesh and Batch Data Processing +- [dev.to: Introduction to Data Mesh](https://dev.to/aws-builders/introduction-to-data-mesh-3f1b) +- [dev.to: Introduction to Batch Data Processing](https://dev.to/aws-builders/introduction-to-batch-data-processing-4k56) + +## AWS NoSQL DynamoDB +- [Easily model your app data in a NoSQL database with AWS Mobile Hub](https://aws.amazon.com/es/about-aws/whats-new/2016/06/easily-model-your-app-data-in-a-nosql-database-with-aws-mobile-hub/) +- [medium: An Ultimate Guide to AWS Serverless database — DynamoDB](https://medium.com/javascript-in-plain-english/an-ultimate-guide-to-aws-serverless-database-dynamodb-aa048a62f2da) AWS DynamoDb is a fully managed, NoSQL, Single digit latency, a serverless database that can handle any kind of online workloads. \ No newline at end of file diff --git a/docs/aws-devops.md b/docs/aws-devops.md new file mode 100644 index 00000000..b38493aa --- /dev/null +++ b/docs/aws-devops.md @@ -0,0 +1,31 @@ +# AWS DevOps. AWS CodePipeline +- [Introduction](#introduction) +- [Continuous Deployment with AWS](#continuous-deployment-with-aws) +- [AWS CodeDeploy](#aws-codedeploy) +- [Admiralty](#admiralty) + +## Introduction +- [AWS DevOps](https://aws.amazon.com/devops/) +- [AWS DevOps Blog](https://blogs.aws.amazon.com/application-management/) +- [Continuous Delivery for a PHP Application Using AWS CodePipeline, AWS Elastic Beanstalk, and Solano Labs](https://blogs.aws.amazon.com/application-management/post/TxYSRRBH57NP2P/Continuous-Delivery-for-a-PHP-Application-Using-AWS-CodePipeline-AWS-Elastic-Bea) +- [Building Continuous Deployment on AWS with AWS CodePipeline, Jenkins and AWS Elastic Beanstalk](https://blogs.aws.amazon.com/application-management/post/Tx34AXRMYLXG5OT/Building-Continuous-Deployment-on-AWS-with-AWS-CodePipeline-Jenkins-and-AWS-Elas) +- [blazemeter.com: Three Ways DevOps Benefit from AWS CodePipeline](https://blazemeter.com/blog/three-ways-devops-benefit-aws-codepipeline) +- [AWS Partner Network - CodePipeline Integrations](https://aws.amazon.com/es/codepipeline/product-integrations/) +- [**Multi-Region Infrastructure Deployment**](https://aws.amazon.com/solutions/multi-region-infrastructure-deployment/) This solution automatically provisions and configures AWS CodePipeline to automate the CI/CD pipeline for CloudFormation templates +- [k21academy.com: AWS DevOps Vs. Azure DevOps](https://k21academy.com/amazon-web-services/aws-devops-vs-azure-devops/?utm_source=linkedin&utm_medium=referral&utm_campaign=awsdevops17_dec20_aws_cloud_computing_for_interested_parties__users) +- [Amazon DevOps Guru](https://aws.amazon.com/devops-guru/) ML-powered cloud operations service to improve application availability + - [infoq.com: AWS Launches Amazon DevOps Guru](https://www.infoq.com/news/2021/01/aws-devops-guru/) +- [aws.plainenglish.io: AWS CodePipeline for Amazon ECS](https://aws.plainenglish.io/aws-codepipeline-for-amazon-ecs-part-2-a-blue-green-deployment-type-c162fd73be91) In this tutorial, I would like to explain to you how to create an AWS CodePipeline for ECS with a Blue/green deployment type. + +## Continuous Deployment with AWS +- [Continuous Deployment with AWS](https://aws.amazon.com/blogs/devops/tag/continuous-deployment/) + +## AWS CodeDeploy +- [AWS CodeDeploy: Deploying from a Development Account to a Production Account](http://blogs.aws.amazon.com/application-management/post/Tx3PE3JTSVJSFI7/AWS-CodeDeploy-Deploying-from-a-Development-Account-to-a-Production-Account) +- [Setting Up the Jenkins Plugin for AWS CodeDeploy](https://blogs.aws.amazon.com/application-management/post/TxMJROUIFQZ4HS/Setting-Up-the-Jenkins-Plugin-for-AWS-CodeDeploy) +- [adamtheautomator.com: Getting Started with AWS CodeDeploy](https://adamtheautomator.com/aws-codedeploy/) + +## Admiralty +- [admiralty.io](https://admiralty.io/) The simplest way to deploy applications to multiple Kubernetes clusters. +- [thenewstack.io: Making Kubernetes Serverless and Global with AWS Fargate on EKS and Admiralty](https://thenewstack.io/making-kubernetes-serverless-and-global-with-aws-fargate-on-eks-and-admiralty/) +- [admiralty.io: Multi-Region AWS Fargate on EKS](https://admiralty.io/docs/tutorials/fargate/) diff --git a/docs/aws-iac.md b/docs/aws-iac.md new file mode 100644 index 00000000..82fc0868 --- /dev/null +++ b/docs/aws-iac.md @@ -0,0 +1,29 @@ +# AWS IaC +- [AWS CloudFormation. Free Templates](#aws-cloudformation-free-templates) +- [Infrastructure Code Template Generators](#infrastructure-code-template-generators) + - [Former2 to generate IaC templates](#former2-to-generate-iac-templates) +- [Console Recorder for AWS](#console-recorder-for-aws) + +## AWS CloudFormation. Free Templates +- [AWS Cloud Formation Release History](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html) +- [All the AWS Resource Types Reference for AWS CloudFormation ](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) +- [Introducing Cloud Formation Guard - a new opensource CLI for infrastructure compliance](https://aws.amazon.com/about-aws/whats-new/2020/06/introducing-aws-cloudformation-guard-preview/) + - [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) Guard offers a policy-as-code domain-specific language (DSL) to write rules and validate JSON- and YAML-formatted data such as CloudFormation Templates, K8s configurations, and Terraform JSON plans/configurations against those rules. +- [cloudonaut.io: Getting Started with Free Templates for AWS CloudFormation](https://cloudonaut.io/getting-started-with-aws-cf-templates/) - [Free Templates for AWS CloudFormation](https://github.com/widdix/aws-cf-templates/) - [templates.cloudonaut.io](https://templates.cloudonaut.io/) +- [Use Git pre-commit hooks to avoid AWS CloudFormation errors](https://aws.amazon.com/es/blogs/infrastructure-and-automation/use-git-pre-commit-hooks-avoid-aws-cloudformation-errors/) +- [Introducing a Public Registry for AWS CloudFormation](https://aws.amazon.com/es/blogs/aws/introducing-a-public-registry-for-aws-cloudformation/) +- [cloudkatha.com: How to Setup S3 Bucket CORS Configuration using CloudFormation](https://cloudkatha.com/how-to-setup-s3-bucket-cors-configuration-using-cloudformation) +- [cloudkatha.com: How to Configure AWS SQS Dead Letter Queue using CloudFormation](https://cloudkatha.com/how-to-configure-aws-sqs-dead-letter-queue-using-cloudformation/) +- [cloudkatha.com: How to Create an S3 Bucket using CloudFormation](https://cloudkatha.com/how-to-create-an-s3-bucket-using-cloudformation/) +- [cloudkatha.com: How to use CloudFormation to Create SNS Topic and Subscription](https://cloudkatha.com/how-to-use-cloudformation-to-create-sns-topic-and-subscription/) +- [cloudkatha.com: How to Create IAM Role using CloudFormation](https://cloudkatha.com/how-to-create-iam-role-using-cloudformation/) + +## Infrastructure Code Template Generators +- [aws.amazon.com: Amazon EC2 announces Spot Blueprints, an infrastructure code template generator to get started with EC2 Spot Instances](https://aws.amazon.com/about-aws/whats-new/2020/12/amazon-ec2-announces-spot-blueprints-an-infrastructure-code-template-generator-to-get-started-with-ec2-spot-instances/) + +### Former2 to generate IaC templates +- [former2.com](https://former2.com/) +- [Accelerate infrastructure as code development with open source Former2](https://aws.amazon.com/blogs/opensource/accelerate-infrastructure-as-code-development-with-open-source-former2/) + +## Console Recorder for AWS +- [==onecloudplease.com: Console Recorder for AWS==](https://onecloudplease.com/project/console-recorder) **Records actions made in the AWS Management Console and outputs the equivalent CLI / SDK commands and CloudFormation / Terraform templates.** diff --git a/docs/aws-migrations.md b/docs/aws-migrations.md new file mode 100644 index 00000000..9f0e1665 --- /dev/null +++ b/docs/aws-migrations.md @@ -0,0 +1,7 @@ +# AWS Migrations +- [New AWS Competency – AWS Migration](https://aws.amazon.com/blogs/aws/new-aws-competency-aws-migration/) +- [Migrate Resources Between AWS Accounts](https://aws.amazon.com/blogs/architecture/migrate-resources-between-aws-accounts) +- [==Multi-Region Migration using AWS Application Migration Service==](https://aws.amazon.com/blogs/architecture/multi-region-migration-using-aws-application-migration-service/) I built my infrastructure in Region A, I want to now move it to Region B. + +## Migrating On Premise VM to AWS +- [youtube: Migrating On Premise VM to AWS | VM Import/Export | Create EC2 instance based on on-premises server](https://youtu.be/buzusNljpy4) \ No newline at end of file diff --git a/docs/aws-miscellaneous.md b/docs/aws-miscellaneous.md new file mode 100644 index 00000000..ab894c68 --- /dev/null +++ b/docs/aws-miscellaneous.md @@ -0,0 +1,125 @@ +# AWS Miscellaneous +- [AWS Application Discovery Service](#aws-application-discovery-service) +- [AWS Elastic Beanstalk](#aws-elastic-beanstalk) +- [AWS OpsWorks](#aws-opsworks) +- [AWS Cloud Control API](#aws-cloud-control-api) +- [VMware Cloud on AWS](#vmware-cloud-on-aws) + - [AWS Application Discovery Service Update. Agentless Discovery for VMware](#aws-application-discovery-service-update-agentless-discovery-for-vmware) +- [AWS for Windows](#aws-for-windows) +- [AWS IoT](#aws-iot) +- [AWS Elastic Transcoder. Video streaming](#aws-elastic-transcoder-video-streaming) +- [Amazon Alexa. Voice User Interface](#amazon-alexa-voice-user-interface) +- [AWS Partner Network (APN)](#aws-partner-network-apn) +- [AWS App Mesh](#aws-app-mesh) +- [Local Testing](#local-testing) + - [Localstack](#localstack) +- [AWS Service Quota Requests](#aws-service-quota-requests) +- [AWS Chaos Engineeering. AWS Fault Injection Simulator](#aws-chaos-engineeering-aws-fault-injection-simulator) +- [Superwerker](#superwerker) +- [AWS Amplify](#aws-amplify) +- [AWS App Runner](#aws-app-runner) +- [Development](#development) +- [Cloud Development Kit CDK](#cloud-development-kit-cdk) +- [AWS Cloud Endure](#aws-cloud-endure) +- [ECommerce](#ecommerce) +- [AWS Clients](#aws-clients) + +## AWS Application Discovery Service +- [AWS Application Discovery Service](http://docs.aws.amazon.com/application-discovery/latest/userguide/what-is-appdiscovery.html) + +## AWS Elastic Beanstalk +- [AWS Elastic Beanstalk Documentation](http://aws.amazon.com/documentation/elastic-beanstalk/) +- [Deploying a High-Availability PHP Application with an External Amazon RDS Database to Elastic Beanstalk](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-ha-tutorial.html) +- [Creating and Deploying PHP Applications on AWS Elastic Beanstalk](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_PHP_eb.html) +- [AWS Elastic Beanstalk Supports ASP.NET Core and Multi-App .NET Support](https://aws.amazon.com/about-aws/whats-new/2016/08/aws-elastic-beanstalk-supports-asp-net-core-and-multi-app-net-support/) +- [AWS Elastic Beanstalk Supports Application Load Balancer](https://aws.amazon.com/about-aws/whats-new/2016/08/aws-elastic-beanstalk-supports-application-load-balancer/) +- [Configuring an Application Load Balancer](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-applicationloadbalancer.html) +- [AWS Elastic Beanstalk Supports Nginx Proxy Server with Tomcat](https://aws.amazon.com/about-aws/whats-new/2016/08/aws-elastic-beanstalk-supports-nginx-proxy-server-with-tomcat/) + +## AWS OpsWorks +- [AWS OpsWorks](https://aws.amazon.com/opsworks/) +- [AWS OpsWorks - Chef Versions](http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-chef11.html) +- [youtube: AWS OpsWorks Overview and Demo](https://www.youtube.com/watch?v=cj_LoG6C2xk&list=PLR3sVanzLpJN6BiYS20K4BMPpiDGifbZy) +- [Use OpsWorks to create and manage instances that run CentOS 7](https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os-linux.html?adbsc=docs_20160709_63418706&adbid=UPDATE-c2382910-6157610151248490496&adbpl=li&adbpr=2382910#workinginstances-os-linux-centos) + +## AWS Cloud Control API +- [AWS Cloud Control API](https://aws.amazon.com/cloudcontrolapi/) **Manage AWS and third-party cloud infrastructure with consistent APIs** +- [AWS Cloud Control API, a Uniform API to Access AWS & Third-Party Services](https://aws.amazon.com/blogs/aws/announcing-aws-cloud-control-api) + +## VMware Cloud on AWS +- [VMware Cloud on AWS](https://aws.amazon.com/es/vmware/) The Only Way to Extend Your VMware Environment into AWS +- [infoworld.com: 4 no-bull insights into the AWS/VMware deal](http://www.infoworld.com/article/3131347/hybrid-cloud/4-no-bull-insights-into-the-awsvmware-deal.html) + +### AWS Application Discovery Service Update. Agentless Discovery for VMware +- [AWS Application Discovery Service Update – Agentless Discovery for VMware](https://aws.amazon.com/blogs/aws/aws-application-discovery-service-update-agentless-discovery-for-vmware/) + +## AWS for Windows +- [blog.rackspace.com: Patch and AMI Management for Windows on AWS](http://blog.rackspace.com/patch-and-ami-management-for-windows-on-aws) step-by-step guide about patch and AMI management for Windows on AWS + +## AWS IoT +- [aws.amazon.com/en/iot](https://aws.amazon.com/en/iot) +- [What Is AWS IoT?](http://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html) + +## AWS Elastic Transcoder. Video streaming +- [Settings that You Specify When You Create an Elastic Transcoder Job](http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/job-settings.html) + +## Amazon Alexa. Voice User Interface +- [New Alexa Skills Kit Template: Build a Trivia Skill in under an Hour](https://developer.amazon.com/public/community/post/TxDJWS16KUPVKO/New-Alexa-Skills-Kit-Template-Build-a-Trivia-Skill-in-under-an-Hour) + +## AWS Partner Network (APN) +- [AWS Partner Network](https://aws.amazon.com/partners/) + - [APN Technology Partners](https://aws.amazon.com/partners/technology/) + - [APN Consulting Partners](https://aws.amazon.com/partners/consulting/) +- [AWS Partner Network (APN) blog](https://aws.amazon.com/blogs/apn/) + - [Active Directory Single Sign-On (SSO) on AWS with Bitium](https://aws.amazon.com/blogs/apn/active-directory-single-sign-on-sso-on-aws-with-bitium) + - [How to Deploy a High Availability Web Service on AWS Using Spotinst](https://aws.amazon.com/blogs/apn/how-to-deploy-a-high-availability-web-service-on-aws-using-spotinst/) + +## AWS App Mesh +- [AWS App Mesh Workshop](https://www.appmeshworkshop.com/) +- [amazon.com: Leveraging App Mesh with Amazon EKS in a Multi-Account environment](https://aws.amazon.com/blogs/containers/leveraging-app-mesh-with-amazon-eks-in-a-multi-account-environment/) + +## Local Testing +- [Amazon EC2 Metadata Mock](https://github.com/aws/amazon-ec2-metadata-mock) + +### Localstack +- [localstack.cloud](https://localstack.cloud/) Develop and test your cloud apps offline. A fully functional local AWS cloud stack. Develop and test your cloud & Serverless apps offline! +- [github.com/localstack/localstack](https://github.com/localstack/localstack) + +## AWS Service Quota Requests +- [How can I troubleshoot errors using the AWS CLI to manage my service quota requests?](https://aws.amazon.com/es/premiumsupport/knowledge-center/troubleshoot-service-quotas-cli-commands/) +- [AWS API: get-service-quota](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/service-quotas/get-service-quota.html) + +## AWS Chaos Engineeering. AWS Fault Injection Simulator +- [techcrunch.com: AWS introduces new Chaos Engineering as a Service offering](https://techcrunch.com/2020/12/15/aws-introduces-new-chaos-engineering-as-a-service-offering/) + +## Superwerker +- [superwerker](https://aws.amazon.com/quickstart/architecture/superwerker/) Automates AWS Cloud deployments backed by decades of expertise and best practices + +## AWS Amplify +- [blog.logrocket.com: AWS Amplify and React Native: A tutorial](https://blog.logrocket.com/aws-amplify-and-react-native-a-tutorial/) +- [dev.to: 10 New AWS Amplify Features to Check Out](https://dev.to/aws/10-new-aws-amplify-features-to-check-out-4291) + +## AWS App Runner +- https://aws.amazon.com/apprunner/ +- [dev.to: AWS App Runner : How to deploy containerized applications using App Runner](https://dev.to/aws-builders/aws-app-runner-how-to-deploy-containerized-applications-using-app-runner-1f7c) AWS App Runner is an AWS service that provides a fast, simple and cost-effective way to deploy from source code or a container image directly to a scalable and secure web application in the AWS Cloud. You don’t need to learn new technologies, decide which compute service to use, or know how to provision and configure AWS resources. + +## Development +- [thenewstack.io: Remote Debugging in AWS: The Missing Link in Your Debugging Toolset](https://thenewstack.io/remote-debugging-in-aws-the-missing-link-in-your-debugging-toolset/) + +## Cloud Development Kit CDK +- [CDK](https://aws.amazon.com/cdk/) +- [bbvanexttechnologies.com: Cómo definir infraestructura como código en AWS con CDK](https://www.bbvanexttechnologies.com/como-definir-infraestructura-como-codigo-en-aws-con-cdk/) +- [itnext.io: AWS CDK for EKS — Handling Helm Charts](https://itnext.io/aws-cdk-for-eks-handling-helm-charts-aa002afedde4) +- [==freecodecamp.org: AWS CDK v2 Tutorial – How to Create a Three-Tier Serverless Application==](https://www.freecodecamp.org/news/aws-cdk-v2-three-tier-serverless-application/) + +## AWS Cloud Endure +- [AWS Cloud Endure Migration](https://aws.amazon.com/cloudendure-migration/) + +## ECommerce +- [Architecting a Highly Available Serverless, Microservices-Based Ecommerce Site](https://aws.amazon.com/blogs/architecture/architecting-a-highly-available-serverless-microservices-based-ecommerce-site/) + +## AWS Clients +- [Trainline.com dumps Oracle and Microsoft, gulps AWS Kool-Aid](http://www.theregister.co.uk/2016/07/13/trainline_dumps_oracle_microsoft_goes_full_aws_cto_interview/) +- [London DevOps - Trainline, A DevOps Journey - Chris Turvil](https://www.youtube.com/watch?v=IUvUmqu1MBQ) +- [aws.amazon.com: Trainline Case Study](https://aws.amazon.com/solutions/case-studies/trainline/) +- [treblle.com: How does Treblle scale on AWS without breaking the bank?](https://treblle.com/blog/how-does-treblle-scale-on-aws-without-breaking-the-bank) diff --git a/docs/aws-monitoring.md b/docs/aws-monitoring.md new file mode 100644 index 00000000..f843b61d --- /dev/null +++ b/docs/aws-monitoring.md @@ -0,0 +1,35 @@ +# AWS Monitoring and Logging +- [Introduction](#introduction) +- [Metrics](#metrics) +- [AWS Cloudwatch](#aws-cloudwatch) +- [AWS Cloud Map and HealthChecks](#aws-cloud-map-and-healthchecks) +- [AWS Managed Services for Prometheus and Grafana](#aws-managed-services-for-prometheus-and-grafana) +- [AWS and Splunk](#aws-and-splunk) + +## Introduction +- [github: Steps I used to install Nagios in the cloud](https://github.com/andrewpuch/nagios_setup) +- [github: ElectricEye](https://github.com/jonrau1/ElectricEye/blob/master/README.md) is a set of Python scripts (affectionately called Auditors) that continuously monitor your AWS infrastructure looking for configurations related to confidentiality, integrity and availability that do not align with AWS best practices. +- [medium: AWS Account Security Monitoring](https://medium.com/swlh/aws-account-security-monitoring-d7ca129d52ac) +- [==elastic.co: Elastic and AWS: Accelerating the cloud migration journey==](https://www.elastic.co/blog/elastic-and-aws-accelerate-your-cloud-migration-journey) + +## Metrics +- [logz.io: What are AWS EC2 Instances? A Tutorial for EC2 Metrics Shipping with Logz.io](https://logz.io/blog/aws-ec2-metrics/) +- [logz.io: A Guide to Monitoring AWS Lambda Metrics with Prometheus & Logz.io](https://logz.io/blog/aws-lambda-metrics-monitoring-guide/) + +## AWS Cloudwatch +- [threatstack.com: 50 Best AWS CloudWatch Tutorials](https://www.threatstack.com/blog/50-best-aws-cloudwatch-tutorials) +- [Amazon CloudWatch now monitors Prometheus metrics from Container environments](https://aws.amazon.com/about-aws/whats-new/2020/09/amazon-cloudwatch-monitors-prometheus-metrics-container-environments/) +- [Amazon CloudWatch Dashboards now supports sharing](https://aws.amazon.com/about-aws/whats-new/2020/09/amazon-cloudwatch-dashboards-supports-sharing/) +- [How BT uses Amazon CloudWatch to monitor millions of devices](https://aws.amazon.com/blogs/mt/how-bt-uses-amazon-cloudwatch-to-monitor-millions-of-devices/) +- [Extending and exploring alarm history in Amazon CloudWatch – part 2](https://aws.amazon.com/blogs/mt/extending-and-exploring-alarm-history-in-amazon-cloudwatch-part-2/) + +## AWS Cloud Map and HealthChecks +- [Custom Health Check: HealthCheckCustomConfig](https://docs.aws.amazon.com/cloud-map/latest/api/API_HealthCheckCustomConfig.html) Cloud Map will eventually mark the instance as unhealthy if it doesn't receive the health status in 30 seconds. Custom health checks are implemented as regular Route53 healthchecks that check S3 bucket keys (note http access instead of https). + +## AWS Managed Services for Prometheus and Grafana +- [Amazon Managed Service for Prometheus](https://aws.amazon.com/prometheus/) Highly available, secure, and managed monitoring for your containers +- [Amazon Managed Service for Grafana](https://aws.amazon.com/grafana/) Powerful, interactive data visualizations for builders, operators, and business leaders +- [infoq.com: AWS Introduces Amazon Managed Service for Grafana and Amazon Managed Service for Prometheus](https://www.infoq.com/news/2021/01/aws-grafana-prometheus/) + +## AWS and Splunk +- [blogs.splunk.com: AWS Agility + Splunk Visibility = Customer Success](http://blogs.splunk.com/2016/06/22/aws-video/) \ No newline at end of file diff --git a/docs/aws-networking.md b/docs/aws-networking.md new file mode 100644 index 00000000..e43c35f5 --- /dev/null +++ b/docs/aws-networking.md @@ -0,0 +1,83 @@ +# AWS Networking +- [Introduction](#introduction) +- [AWS Route 53](#aws-route-53) +- [AWS Elastic Load Balancing (ELB)](#aws-elastic-load-balancing-elb) +- [AWS Application Load Balancer (ALB)](#aws-application-load-balancer-alb) +- [Gateway Load Balancer (GWLB)](#gateway-load-balancer-gwlb) +- [NGINX](#nginx) +- [AWS Latency](#aws-latency) +- [AWS VPC](#aws-vpc) + - [AWS Client VPN](#aws-client-vpn) + - [Tailscale](#tailscale) +- [AWS CloudFront](#aws-cloudfront) +- [AWS API Gateway](#aws-api-gateway) + +## Introduction +- [AWS Networking for Developers](https://aws.amazon.com/es/blogs/apn/aws-networking-for-developers/) +- [Elastic Network Adapter](https://aws.amazon.com/blogs/aws/elastic-network-adapter-high-performance-network-interface-for-amazon-ec2) +- [AWS Cloud Networking – Zero to Hero](http://www.netdesignarena.com/index.php/2020/04/15/new-blog-series-aws-cloud-networking-zero-to-hero/) +- [cloudonaut.io: What Architects Need to Know About Networking on AWS](https://cloudonaut.io/what-architects-need-to-know-about-networking-on-aws/) +- [cloudonaut.io: Advanced AWS Networking: Pitfalls That You Should Avoid](https://cloudonaut.io/advanved-aws-networking-pitfalls-that-you-should-avoid/) +- [gprakash-sharma.medium.com: AWS Site-to-Site VPN with NAT](https://gprakash-sharma.medium.com/aws-site-to-site-vpn-with-nat-8bb99f4653ab) +- [Resolve DNS names of Network Load Balancer nodes to limit cross-Zone traffic](https://aws.amazon.com/blogs/networking-and-content-delivery/resolve-dns-names-of-network-load-balancer-nodes-to-limit-cross-zone-traffic) +- [github.com/seligman/aws-ip-ranges: AWS's ip-ranges.json](https://github.com/seligman/aws-ip-ranges) AWS adds an extra 5.5M IPv4 addresses. Tracking the history and size of AWS's ip-ranges.json file. AWS provides a data file showing the current IP ranges their services use, called ip-ranges.json. This repository tracks changes to that file, and based off a trigger on the SNS topic automatically produces this chart showing how what percentage of the Internet's IPv4 address space AWS is in control of. +- [medium: Building a Global Network with AWS Transit Gateway](https://medium.com/avmconsulting-blog/building-a-global-network-with-aws-transit-gateway-7ab0e5222f12) Connecting branch and corporate offices into the AWS cloud to build a global network is necessary to provide ubiquitous accessibility for users. This solution uses AWS Transit Gateway, AWS Direct Connect, and AWS Accelerated Site-to-Site VPN to build a modern, secure, scalable, and cost-efficient WAN on top of the AWS global network. + +## AWS Route 53 +- [How do I transfer a domain to AWS from another registrar?](https://aws.amazon.com/premiumsupport/knowledge-center/transfer-domain-to-aws/) + +## AWS Elastic Load Balancing (ELB) +- [AWS Summit Series 2016 | London: Deep Dive on Elastic Load Balancing](https://www.youtube.com/watch?v=HinwLb2lpLQ) +- [docs.aws.amazon.com: What Is Elastic Load Balancing?](http://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) +- [ably.com: Balancing act: the current limits of AWS network load balancers](https://ably.com/blog/limits-aws-network-load-balancers) +- [==luis-sena.medium.com: Automated AWS Load Balancer Warm-Up==](https://luis-sena.medium.com/automated-aws-load-balancer-warm-up-d0b4084c8bbc) Automate AWS load balancer to avoid issues with huge traffic spikes +- [==dashbird.io: AWS Elastic Load Balancing from a Serverless perspective==](https://dashbird.io/blog/aws-application-load-balancer/) Should you switch your AWS API Gateway out for an Application Load Balancer (ALB)? A cheat sheet for all you need to know about ALB: + - Pricing + - Regions + - Transformations + - Limits + - Permissions + - Health + +## AWS Application Load Balancer (ALB) +- [Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/) +- [aws blogs - New – AWS Application Load Balancer](https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/) +- [medium: 10 reasons why you should think about using an AWS Application Load Balancer](https://medium.com/ankercloud-engineering/10-reasons-why-you-should-think-about-using-an-aws-application-loadbalancer-945f57816c34) +- [Introducing the AWS Load Balancer Controller](https://aws.amazon.com/blogs/containers/introducing-aws-load-balancer-controller/) +- [Fine-tuning blue/green deployments on application load balancer](https://aws.amazon.com/blogs/devops/blue-green-deployments-with-application-load-balancer/) + +## Gateway Load Balancer (GWLB) +- [Centralized Traffic Inspection with Gateway Load Balancer on AWS](https://aws.amazon.com/blogs/apn/centralized-traffic-inspection-with-gateway-load-balancer-on-aws/) + +## NGINX +- [NGINX Plus on the AWS Cloud: Quick Start Reference Deployment](https://aws.amazon.com/about-aws/whats-new/2016/09/nginx-plus-on-the-aws-cloud-quick-start-reference-deployment/) + +## AWS Latency +- [Find the fastest region from your location](http://aws-latency.altaircp.com/) Check AWS response time from you browser. Sharing my mini-project, it measures response time from AWS services from different regions base on your location. let me know what you think. +- [Linkedin Discussion](https://www.linkedin.com/groups/49531/49531-6092152919937794052) +>1. Don't do just a single check, the first check will be a lot slower as DNS lookups will need to be done, etc. +>2. I'd recommend doing at least 3 checks getting an average. +- Run 6 checks (with a random 3-10 second delay between each one), the first can be ignored, the highest one is also ignored (as a likely outlier), then for the next 4 show the minimum, maximum and average (mean). +- [medium.com: Optimizing Latency and Bandwidth for AWS Traffic](https://medium.com/aws-activate-startup-blog/optimizing-latency-and-bandwidth-for-aws-traffic-cdfd18d0d0f7) + +## AWS VPC +- [AWS-VPC](https://en.wikipedia.org/wiki/Amazon_Virtual_Private_Cloud) +- [linuxjournal.com: AWS EC2 VPC CLI](http://www.linuxjournal.com/content/aws-ec2-vpc-cli) +- [Build a Modular and Scalable Amazon VPC Architecture with New Quick Start](https://aws.amazon.com/about-aws/whats-new/2016/07/build-a-modular-and-scalable-amazon-vpc-architecture-with-new-quick-start) Build a modular virtual network architecture with Amazon VPC in 5 minutes with our new Quick Start +- [Specifying the VPC for your Amazon RDS DB Instance](https://aws.amazon.com/about-aws/whats-new/2016/08/specifying-the-vpc-for-your-amazon-rds-db-instance/) You can now easily change the Amazon VPC used by your Amazon RDS DB instance! +- [awsfundamentals.blogspot.com: AWS Virtual Private Cloud - VPC](https://awsfundamentals.blogspot.com/2019/12/aws-vpc-fundamental.html) +- [Reduce Cost and Increase Security with Amazon VPC Endpoints](https://aws.amazon.com/blogs/architecture/reduce-cost-and-increase-security-with-amazon-vpc-endpoints/) +- [ealtili.medium.com: Deepdive to VPCs and Connections to VPC](https://ealtili.medium.com/deepdive-to-vpcs-and-connections-to-vpc-2de3fb164d7c) +- [Centralize access using VPC interface endpoints to access AWS services across multiple VPCs](https://aws.amazon.com/blogs/networking-and-content-delivery/centralize-access-using-vpc-interface-endpoints/) + +### AWS Client VPN +- [cloudonaut.io: AWS Client VPN: Connected with the Cloud](https://cloudonaut.io/aws-client-vpn-connected-with-the-cloud/) + +### Tailscale +- [tailscale.com: Connect to an AWS VPC using subnet routes](https://tailscale.com/kb/1021/install-aws/) + +## AWS CloudFront +- [Amazon CloudFront now supports HTTP/2](https://aws.amazon.com/about-aws/whats-new/2016/09/amazon-cloudfront-now-supports-http2/) + +## AWS API Gateway +- [alexdebrie.com: A Detailed Overview of AWS API Gateway](https://www.alexdebrie.com/posts/api-gateway-elements/) \ No newline at end of file diff --git a/docs/aws-newfeatures.md b/docs/aws-newfeatures.md new file mode 100644 index 00000000..5181b4bf --- /dev/null +++ b/docs/aws-newfeatures.md @@ -0,0 +1,77 @@ +# AWS New Features +- [AWS Config Rules – Dynamic Compliance Checking for Cloud Resources](https://aws.amazon.com/blogs/aws/aws-config-rules-dynamic-compliance-checking-for-cloud-resources/) +- [Amazon Inspector – Automated Security Assessment Service](https://aws.amazon.com/blogs/aws/amazon-inspector-automated-security-assessment-service) +- [Coming Soon – EC2 Dedicated Hosts](https://aws.amazon.com/blogs/aws/coming-soon-ec2-dedicated-hosts) +- [AWS Device Farm: Improve the quality of your web and mobile applications by testing across desktop browsers and real mobile devices hosted in the AWS Cloud](https://aws.amazon.com/device-farm) +- [AWS Mobile Hub – Build, Test, and Monitor Mobile Applications](https://aws.amazon.com/blogs/aws/aws-mobile-hub-build-test-and-monitor-mobile-applications) +- [EC2 Container Service Update – Container Registry, ECS CLI, AZ-Aware Scheduling, and More](https://aws.amazon.com/blogs/aws/ec2-container-service-update-container-registry-ecs-cli-az-aware-scheduling-and-more) +- [CloudWatch Dashboards – Create & Use Customized Metrics Views](https://aws.amazon.com/blogs/aws/cloudwatch-dashboards-create-use-customized-metrics-views) +- [AWS Lambda Update – Python, VPC, Increased Function Duration, Scheduling, and More](https://aws.amazon.com/blogs/aws/aws-lambda-update-python-vpc-increased-function-duration-scheduling-and-more) +- [AWS IoT – Cloud Services for Connected Devices](https://aws.amazon.com/blogs/aws/aws-iot-cloud-services-for-connected-devices) +- [Amazon EFS: Amazon Elastic File System – Shared File Storage for Amazon EC2](https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-shared-file-storage-for-amazon-ec2/) +- [New – Encrypted EBS Boot Volumes](https://aws.amazon.com/blogs/aws/new-encrypted-ebs-boot-volumes) + - [Amazon EBS Encryption](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +- [Now Add or Modify Request Headers Forwarded From Amazon CloudFront to Origin](https://aws.amazon.com/about-aws/whats-new/2015/12/now-add-or-modify-request-headers-forwarded-from-amazon-cloudfront-to-origin/) +- [AWS CloudFormation Adds Support for AWS WAF and AWS Directory Service for Microsoft Active Directory](https://aws.amazon.com/es/about-aws/whats-new/2015/12/aws-cloudformation-adds-support-for-aws-waf-and-aws-directory-service-for-microsoft-active-directory/) +- [Amazon WorkMail – Now Generally Available](https://aws.amazon.com/blogs/aws/amazon-workmail-now-generally-available/) +- [London Calling! An AWS Region is coming to the UK!](http://www.allthingsdistributed.com/2015/11/aws-announces-uk-region.html) +- [New – Scheduled Reserved Instances](https://aws.amazon.com/blogs/aws/new-scheduled-reserved-instances/) +- [AWS CloudShell - Command-Line Access to AWS Resources](https://aws.amazon.com/es/blogs/aws/aws-cloudshell-command-line-access-to-aws-resources/) +- [zdnet.com: AWS rolls out S3 Object Lambda to process data for multiple applications](https://www.zdnet.com/google-amp/article/aws-rolls-out-s3-object-lambda-to-process-data-for-multiple-applications/) The new capability allows you to share data across applications, without having to manage a proxy layer or create copies of the dataset. +- [github.com/hayao-k/cdk-ecr-image-scan-notify](https://github.com/hayao-k/cdk-ecr-image-scan-notify) +- [cloudonaut.io: Seamless EC2 monitoring with the Unified CloudWatch Agent](https://cloudonaut.io/seamless-ec2-monitoring-with-the-unified-cloudwatch-agent/) +- [amazon.com: Reduce Unwanted Traffic on Your Website with New AWS WAF Bot Control](https://aws.amazon.com/blogs/aws/reduce-unwanted-traffic-on-your-web-site-with-aws-bot-control/) +- [infoq.com: AWS Introduces EC2 Serial Console: Troubleshoot Boot and Networking Issues](https://www.infoq.com/news/2021/04/aws-ec2-serial-console/) +- [infoq.com: AWS Introduces a New Workflow Studio for AWS Step Functions](https://www.infoq.com/news/2021/06/step-functions-workflow-studio/) +- [New AWS Solutions Implementation: Tag Tamer](https://aws.amazon.com/about-aws/whats-new/2021/06/new-aws-solutions-implementation-tag-tamer/) Tag Tamer helps you apply tags to new and existing AWS resources. Using the pre-built web user interface ensures a consistent tagging implementation—providing improved cost allocations, automation, access controls, and organization. +- [Introducing new self-paced courses to improve Java and Python code quality with Amazon CodeGuru](https://aws.amazon.com/blogs/devops/new-self-paced-courses-to-improve-java-and-python-code-quality-with-amazon-codeguru/) +- [Automate preapproved operations with AWS Service Catalog service actions](https://aws.amazon.com/blogs/mt/automate-preapproved-operations-with-aws-service-catalog-service-actions/) Most of my enterprise customers have the need to allow their users to execute self-service operational tasks while restricting access to a minimum set of services. With AWS Service Catalog, you can provision pre-approved products, when combined with AWS Service Catalog service actions, you can provide simple predefined actions associated with the AWS Service Catalog products that their users can execute. +- [Amazon Virtual Private Cloud (VPC) customers can now assign IP prefixes to their EC2 instances](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-virtual-private-cloud-vpc-customers-can-assign-ip-prefixes-ec2-instances/) +- [Amazon RDS Proxy can now be created in a shared Virtual Private Cloud (VPC)](https://aws.amazon.com/about-aws/whats-new/2021/08/amazon-rds-proxy-created-shared-virtual-private-cloud-vpc/) +- [Amazon VPC CNI plugin increases pods per node limits](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-vpc-cni-plugin-increases-pods-per-node-limits/) +- [theregister.com: AWS to retire EC2-Classic – the network glue that helped start the IaaS rush](https://www.theregister.com/2021/07/29/amazon_web_services_ec2_classic_networking/) You've got a year to sort yourself out if you're still using it for some reason +- [AWS Security Hub adds 18 new controls to its Foundational Security Best Practices standard and 8 new partners for enhanced cloud security posture monitoring](https://aws.amazon.com/about-aws/whats-new/2021/08/aws-security-hub-adds-18-new-controls-foundational-security-best-practices-standard-8-new-partners-enhanced-cloud-security-posture-monitoring/) +- [EC2 VM Import/Export now supports migration of virtual machines with Unified Extensible Firmware Interface (UEFI) boot to AWS](https://aws.amazon.com/es/about-aws/whats-new/2021/08/ec2-vm-import-export-unified-extensible-firmware-interface-aws/) +- [Amazon Virtual Private Cloud (VPC) customers can now resize their prefix list](https://aws.amazon.com/about-aws/whats-new/2021/08/amazon-vpc-resize-prefix-list) +- [New for AWS CloudFormation – Quickly Retry Stack Operations from the Point of Failure](https://aws.amazon.com/es/blogs/aws/new-for-aws-cloudformation-quickly-retry-stack-operations-from-the-point-of-failure/) +- [AWS Site-to-Site VPN releases updated Download Configuration utility](https://aws.amazon.com/about-aws/whats-new/2021/09/aws-site-to-site-vpn-download-configuration-utility/) With this update, Site-to-Site VPN customers can generate configuration templates for compatible Customer Gateway (CGW) devices, making it easier to create VPN connections to AWS. +- [New for AWS Distro for OpenTelemetry – Tracing Support is Now Generally Available](https://aws.amazon.com/blogs/aws/new-for-aws-distro-for-opentelemetry-tracing-support-is-now-generally-available/) +- [Application Load Balancer now enables AWS PrivateLink and static IP addresses by direct integration with Network Load Balancer](https://aws.amazon.com/about-aws/whats-new/2021/09/application-load-balancer-aws-privatelink-static-ip-addresses-network-load-balancer/) +- [Amazon EC2 now offers Global View on the console to view all resources across regions together](https://aws.amazon.com/about-aws/whats-new/2021/09/amazon-ec2-global-view-console-regions/) +- [siliconangle.com: Amazon debuts fully managed, Prometheus-based container monitoring service](https://siliconangle.com/2021/09/29/amazon-debuts-fully-managed-prometheus-based-container-monitoring-service/) +- [aws.amazon.com: Amazon Managed Service for Prometheus Is Now Generally Available with Alert Manager and Ruler](https://aws.amazon.com/blogs/aws/amazon-managed-service-for-prometheus-is-now-generally-available-with-alert-manager-and-ruler/) +- [Now — AWS Step Functions Supports 200 AWS Services To Enable Easier Workflow Automation](https://aws.amazon.com/blogs/aws/now-aws-step-functions-supports-200-aws-services-to-enable-easier-workflow-automation/) +- [AWS Control Tower now supports nested organizational units](https://aws.amazon.com/about-aws/whats-new/2021/11/aws-control-tower-supports-nested-organizational-units/) +- [==Visualize all your Kubernetes clusters in one place with Amazon EKS Connector, now generally available==](https://aws.amazon.com/about-aws/whats-new/2021/11/visualize-kubernetes-clusters-one-place-amazon-eks-connector-generally-available/) +- [==venturebeat.com: Amazon’s AWS expands free ‘egress’ data transfer limits==](https://venturebeat.com/2021/11/25/amazons-aws-expands-free-egress-data-transfer-limits/) +- [linux.slashdot.org: AWS Embraces Fedora Linux for Its Cloud-Based 'Amazon Linux'](https://linux.slashdot.org/story/21/11/27/0328223/aws-embraces-fedora-linux-for-its-cloud-based-amazon-linux) +- [AWS announces the new **Amazon Inspector** for continual vulnerability management](https://aws.amazon.com/about-aws/whats-new/2021/11/amazon-inspector-continual-vulnerability-management/) +- [techcrunch.com: AWS to launch over 30 new Local Zones internationally starting in 2022](https://techcrunch.com/2021/12/02/aws-to-launch-over-30-new-local-zones-starting-in-2022/) +- [==venturebeat.com: 6 big Kubernetes container security launches at AWS re:Invent 2021==](https://venturebeat.com/2021/12/03/6-big-kubernetes-container-security-launches-at-aws-reinvent-2021/) +- [forbes.com: AWS re:Invent - A Roundup Of Container Services Announcements](https://www.forbes.com/sites/janakirammsv/2021/12/03/aws-reinventa-roundup-of-container-services-announcements/) +- [==aws.amazon.com/blogs: Top Announcements of AWS re:Invent 2021==](https://aws.amazon.com/blogs/aws/top-announcements-of-aws-reinvent-2021/) +- [infoq.com: Recap of AWS re:Invent 2021](https://www.infoq.com/news/2021/12/recap-reinvent-2021/) +- [infoq.com: AWS Launches Amazon Kinesis Data Streams On-Demand](https://www.infoq.com/news/2021/12/kinesis-data-streams-ondemand/) +- [theregister.com: The big AWS event: 120 announcements but nothing has changed](https://www.theregister.com/2021/12/09/the_big_aws_event_120/) Our wrap-up: Instant Glacier storage, Kubernetes at AWS, Adobe pops up despite Microsoft partnership, and more +- [aws.amazon.com: Share your Amazon CloudWatch Dashboards with anyone using AWS Single Sign-On](https://aws.amazon.com/blogs/mt/share-your-amazon-cloudwatch-dashboards-with-anyone-using-aws-single-sign-on/) +- [New – Amazon VPC Network Access Analyzer](https://aws.amazon.com/blogs/aws/new-amazon-vpc-network-access-analyzer/) +- [AWS Backup Adds Support for Amazon S3](https://aws.amazon.com/blogs/aws/preview-aws-backup-adds-support-for-amazon-s3/) +- [Migrate AWS Landing Zone solution to AWS Control Tower](https://aws.amazon.com/blogs/mt/migrate-aws-landing-zone-solution-to-aws-control-tower/) **AWS Control Tower creates your landing zone using AWS Organizations, thereby bringing together ongoing account management and governance, as well as implementation of best practices based on our experience of working with thousands of customers as they migrate to the cloud.** +- [infoq.com: Amazon RDS Introduces Readable Standby Instances in Multi-AZ Deployments](https://www.infoq.com/news/2022/01/aws-rds-readable-standby/) +- [Announcing Amazon Elastic File System Replication](https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-elastic-file-system-replication/) Amazon EFS Replication provides you with an easy way to keep an up-to-date copy of your file system in a second AWS Region or within the same Region. +- [infoq.com: Amazon Announces Elastic File System Replication for Multi-Region Deployments](https://www.infoq.com/news/2022/02/aws-efs-replication/) +- [medium.com/@fabrizio-cafolla: Dockerize Python for AWS Lambda — Deploy with GitHub Workflow](https://medium.com/@fabrizio-cafolla/dockerize-python-for-aws-lambda-deploy-with-github-workflow-9a930c1e86b1) +- [Announcing the general availability of AWS Backup for Amazon S3](https://aws.amazon.com/about-aws/whats-new/2022/02/general-availability-aws-backup-amazon-s3/) +- [thenewstack.io: HashiCorp Adds Consul and Vault to Cloud Platform for AWS](https://thenewstack.io/hashicorp-adds-consul-and-vault-to-cloud-platform-for-aws/) +- [Amazon EKS clusters now support user authentication with OIDC compatible identity providers](https://aws.amazon.com/about-aws/whats-new/2021/02/amazon-eks-clusters-support-user-authentication-oidc-compatible-identity-providers/) +- [Amazon Managed Service for Grafana (AMG) preview updated with new capabilities](https://aws.amazon.com/blogs/mt/amazon-managed-service-for-grafana-amg-preview-updated-with-new-capabilities/) +- [xataka.com: Hasta AWS se pasa al low-code: Workflow Studio es su primera herramienta de desarrollo de bajo código](https://www.xataka.com/pro/aws-se-pasa-al-low-code-workflow-studio-su-primera-herramienta-desarrollo-codigo) +- [Easily Manage Security Group Rules with the New Security Group Rule ID](https://aws.amazon.com/blogs/aws/easily-manage-security-group-rules-with-the-new-security-group-rule-id) +- [Amazon Virtual Private Cloud (VPC) customers can now assign IP prefixes to their EC2 instances](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-virtual-private-cloud-vpc-customers-can-assign-ip-prefixes-ec2-instances) +- [AWS Network Firewall – Nuevo Servicio Gestionado de Firewall para VPC](https://aws.amazon.com/es/blogs/aws-spanish/aws-network-firewall-nuevo-servicio-gestionado-de-firewall-para-vpc/) +- [Amazon EC2 Auto Scaling now lets you control which instances to terminate on scale-in](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-ec2-auto-scaling-now-lets-you-control-which-instances-to-terminate-on-scale-in/) +- [EC2-Classic Networking is Retiring – Here’s How to Prepare](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/) +- [Announcing General Availability of Amazon Redshift Cross-account Data Sharing](https://aws.amazon.com/about-aws/whats-new/2021/08/announcing-general-availability-amazon-redshift-cross-account-data-sharing/) +- [infoq.com: Amazon Introduces Cloudwatch Cross Account Alarms to Consolidate Management](https://www.infoq.com/news/2021/08/aws-cloudwatch-alarms/) +- [Monitor, Evaluate, and Demonstrate Backup Compliance with AWS Backup Audit Manager](https://aws.amazon.com/blogs/aws/monitor-evaluate-and-demonstrate-backup-compliance-with-aws-backup-audit-manager/) +- [Amazon Managed Grafana Is Now Generally Available with Many New Features](https://aws.amazon.com/blogs/aws/amazon-managed-grafana-is-now-generally-available-with-many-new-features) \ No newline at end of file diff --git a/docs/aws-pricing.md b/docs/aws-pricing.md new file mode 100644 index 00000000..87090f68 --- /dev/null +++ b/docs/aws-pricing.md @@ -0,0 +1,25 @@ +# AWS Pricing and Cost Optimization +- [Introduction](#introduction) +- [AWS Calculator](#aws-calculator) + +## Introduction +- [May 2020: EC2 Price Reduction – For EC2 Instance Saving Plans and Standard Reserved Instances](https://aws.amazon.com/es/blogs/aws/ec2-price-reduction-for-ec2-instance-saving-plans-and-standard-reserved-instances/) +- [ec2.shop: Compare AWS EC2 instance price from the CLI](https://ec2.shop/) +- [infoq.com: AWS Launches Low-Cost Burstable T4g Instances Powered by AWS Graviton2](https://www.infoq.com/news/2020/09/aws-ec2-t4g-instances/) +- [freecodecamp.org: How to Optimize your AWS Cloud Architecture Costs](https://www.freecodecamp.org/news/cost-optimization-in-aws/) +- [aws.amazon.com: Amazon S3 Glacier Price Reduction](https://aws.amazon.com/es/blogs/aws/amazon-s3-glacier-price-reduction/) +- [infoq.com: AWS Announces Lower Cost Storage Classes for Amazon Elastic File System](https://www.infoq.com/news/2021/03/aws-efs-one-zone-storage-classes/) +- [dzone: Understanding AWS Costs](https://dzone.com/articles/understanding-aws-costs) In this article, I'll provide a comprehensive guide on how to understand your AWS costs and needs. +- [thenewstack.io: 7 Tips for Cutting Down Your AWS Kubernetes Bill](https://thenewstack.io/7-tips-for-cutting-down-your-aws-kubernetes-bill/) +- [cast.ai: Keep your AWS Kubernetes costs in check with intelligent allocation (EKS)](https://cast.ai/blog/keep-your-aws-kubernetes-costs-in-check-with-intelligent-allocation) A guide to intelligently allocating Kubernetes costs with EKS +- [thenewstack.io: Cloud Bill Risks of AWS Reserved Instances and Savings Plans](https://thenewstack.io/cloud-bill-risks-of-aws-reserved-instances-and-savings-plans/) +- [dzone: A Guide on Estimating AWS EC2 Workloads for a Microservice Application](https://dzone.com/articles/a-guide-on-estimating-aws-ec2-workloads-for-a-micr) AWS EC2 instance costs can be a significant part of the cloud bill, so it's always a good idea to estimate the workloads using the AWS pricing calculator. +- [Visualize and gain insights into your AWS cost and usage with Cloud Intelligence Dashboards and CUDOS using Amazon QuickSight](https://aws.amazon.com/blogs/mt/visualize-and-gain-insights-into-your-aws-cost-and-usage-with-cloud-intelligence-dashboards-using-amazon-quicksight) +- [blog.cloud-mercato.com: AWS m6i: The why you should abandon your m5](https://blog.cloud-mercato.com/aws-m6i-the-why-you-should-abandon-your-m5/) +- [aws.amazon.com: Exploring Data Transfer Costs for AWS Managed Databases](https://aws.amazon.com/blogs/architecture/exploring-data-transfer-costs-for-aws-managed-databases) +- [==cloudkatha.com: How to Setup Budget in AWS to Keep your Bill in Check==](https://cloudkatha.com/how-to-setup-budget-in-aws-to-keep-your-bill-in-check/) + +## AWS Calculator +- [calculator.aws: AWS Total Cost of Ownership (TCO) Calculators](https://calculator.aws/) +- [Understanding your AWS Cost Datasets: A Cheat Sheet](https://aws.amazon.com/blogs/aws-cost-management/understanding-your-aws-cost-datasets-a-cheat-sheet/) +- [Announcing General Availability of AWS Cost Anomaly Detection](https://aws.amazon.com/blogs/aws-cost-management/announcing-general-availability-of-aws-cost-anomaly-detection/) diff --git a/docs/aws-samples-boilerplates.md b/docs/aws-samples-boilerplates.md new file mode 100644 index 00000000..87a298a3 --- /dev/null +++ b/docs/aws-samples-boilerplates.md @@ -0,0 +1,5 @@ +# AWS Samples (Boilerplates) +- [github.com/aws-samples 🌟](https://github.com/aws-samples) +- [github.com/aws-samples/aws-auto-inventory: AWS Automated Inventory 🌟](https://github.com/aws-samples/aws-auto-inventory) A command line tool that allows you to quickly and easily generate inventory reports of your AWS resources. +- [github.com/aws-samples/aws-waf-ops-dashboards](https://github.com/aws-samples/aws-waf-ops-dashboards) In this repository, we share code for building infrastructure to collect, enrich, and visualize AWS Web Application Firewall logs. Implementing this project in your AWS account will allow you to view and filter the logs through Kibana dashboards below, as well as customize views and dashboards to your needs. +- [github.com/aws-samples/aws-customer-playbook-framework 🌟](https://github.com/aws-samples/aws-customer-playbook-framework) This repository provides sample templates for security playbooks against various scenarios when using Amazon Web Services. diff --git a/docs/aws-security.md b/docs/aws-security.md new file mode 100644 index 00000000..5f3a5cbf --- /dev/null +++ b/docs/aws-security.md @@ -0,0 +1,93 @@ +# AWS Security +- [Introduction](#introduction) +- [Policy as Code with AWS CDK and Open Policy Agent](#policy-as-code-with-aws-cdk-and-open-policy-agent) +- [Payment Card Industry Data Security Standard compliance](#payment-card-industry-data-security-standard-compliance) +- [AWS IAM](#aws-iam) +- [AWS Organizations](#aws-organizations) +- [AWS Control Tower](#aws-control-tower) +- [AWS Firewalls](#aws-firewalls) +- [AWS WAF Web Application Firewall](#aws-waf-web-application-firewall) +- [AWS Secrets Manager](#aws-secrets-manager) +- [AWS Vault](#aws-vault) + +## Introduction +- [AWS Security Blog](http://blogs.aws.amazon.com/security) +- [AWS Security](https://aws.amazon.com/security/) +- [AWS Security docs](https://docs.aws.amazon.com/security/) +- [Tutorial: Configure Apache Web Server on Amazon Linux to use SSL/TLS](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-an-instance.html) +- [The Most Popular AWS Security Blog Posts in 2015](http://blogs.aws.amazon.com/security/post/Tx4QX7W51NDSLO/The-Most-Popular-AWS-Security-Blog-Posts-in-2015) +- [dzone: Private Subnets Are Broken on AWS](https://dzone.com/articles/private-subnets-are-broken-on-aws) +- [Amazon’s customer service backdoor](https://medium.com/@espringe/amazon-s-customer-service-backdoor-be375b3428c4#.qyixu5mu3) +- [Announcing Industry Best Practices for Securing AWS Resources](http://blogs.aws.amazon.com/security/post/Tx3PTTZB14FWPBA/Announcing-Industry-Best-Practices-for-Securing-AWS-Resources) +- [The Most Viewed AWS Security Blog Posts so Far in 2016](http://blogs.aws.amazon.com/security/post/Tx2N52FR8XGJVL3/The-Most-Viewed-AWS-Security-Blog-Posts-so-Far-in-2016) +- [Oracle Database Encryption Options on Amazon RDS](https://aws.amazon.com/es/blogs/apn/oracle-database-encryption-options-on-amazon-rds/) +- [Learn AWS Security Fundamentals with Free and Online Training](https://aws.amazon.com/about-aws/whats-new/2016/06/learn-aws-security-fundamentals-with-free-and-online-training) +- [How to Restrict Amazon S3 Bucket Access to a Specific IAM Role](http://blogs.aws.amazon.com/security/post/TxK5WUJK3DG9G8/How-to-Restrict-Amazon-S3-Bucket-Access-to-a-Specific-IAM-Role) +- [Updated Whitepaper Available: AWS Best Practices for DDoS Resiliency](http://blogs.aws.amazon.com/security/post/Tx6QAIBSQTJPHB/Updated-Whitepaper-Available-AWS-Best-Practices-for-DDoS-Resiliency) +- [AWS Security Blog: In Case You Missed These: AWS Security Blog Posts from June, July, and August 2016](http://blogs.aws.amazon.com/security/post/Tx3KVD6T490MM47/In-Case-You-Missed-These-AWS-Security-Blog-Posts-from-June-July-and-August) +- [Amazon Inspector Announces General Availability for Windows](https://aws.amazon.com/es/about-aws/whats-new/2016/08/amazon-inspector-announces-general-availability-for-windows/) +- [encrypt and decrypt data: Importing Key Material in AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) Use your own encryption keys with AWS Key Management Service. +- [Amazon s2n: AWS’s new Open Source implementation of the SSL/TLS network encryption protocols](http://blogs.aws.amazon.com/security/post/TxLEHNNDPUFDU9/Automated-Reasoning-and-Amazon-s2n) +- [dzone: 9 AWS Security Best Practices: Securing Your AWS Cloud](https://dzone.com/articles/9-aws-security-best-practices-securing-your-aws-cl) Working with Amazon facilities, it is necessary to implement AWS security best practices to ensure the safety of the data and the cloud. +- [Encrypt global data client-side with AWS KMS multi-Region keys](https://aws.amazon.com/blogs/security/encrypt-global-data-client-side-with-aws-kms-multi-region-keys/) Today, AWS Key Management Service (AWS KMS) is introducing multi-Region keys, a new capability that lets you replicate keys from one Amazon Web Services (AWS) Region into another. Multi-Region keys are designed to simplify management of client-side encryption when your encrypted data has to be copied into other Regions for disaster recovery or is replicated in Amazon DynamoDB global tables. +- [dzone: Removing the Bastion Host and Improving the Security in AWS](https://dzone.com/articles/removing-the-bastion-host-and-improving-the-securi) This article covers the security in AWS and overcoming the classic SSH/RDP jump with a better alternative for all OS. +- [acloudguru.com: How to audit and secure an AWS account](https://acloudguru.com/blog/engineering/how-to-audit-and-secure-an-aws-account) +- [yobyot.com: AWS multi-region KMS keys and Data Lifecycle Manager: better together](https://www.yobyot.com/aws/aws-multi-region-keys-and-ec2-data-lifecycle-manager/2021/08/18/) +- [try.jupiterone.com: The Absolute Minimum Every Developer Must Know about AWS Security](https://try.jupiterone.com/the-absolute-minimum-every-developer-must-know-about-aws-security) +- [==How to automate AWS account creation with SSO user assignment==](https://aws.amazon.com/blogs/security/how-to-automate-aws-account-creation-with-sso-user-assignment/) +- [Security practices in AWS multi-tenant SaaS environments](https://aws.amazon.com/blogs/security/security-practices-in-aws-multi-tenant-saas-environments/) Many good tips, from identity management to tenant isolation. + +## Policy as Code with AWS CDK and Open Policy Agent +- [Realize Policy-as-Code with AWS Cloud Development Kit through Open Policy Agent 🌟](https://aws.amazon.com/blogs/opensource/realize-policy-as-code-with-aws-cloud-development-kit-through-open-policy-agent/) + +## Payment Card Industry Data Security Standard compliance +- [PCI DSS Standardized Architecture on the AWS Cloud: Quick Start Reference Deployment](https://aws.amazon.com/about-aws/whats-new/2016/05/pci-dss-standardized-architecture-on-the-aws-cloud-quick-start-reference-deployment/) + +## AWS IAM +- [AWS Identity and Access Management - Getting Started](http://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) +- [AWS Identity and Access Management (IAM) best practices in 2016](http://blogs.aws.amazon.com/security/post/Tx2OB7YGHMB7WCM/Adhere-to-IAM-Best-Practices-in-2016) +- [How to Record and Govern Your IAM Resource Configurations Using AWS Config](http://blogs.aws.amazon.com/security/post/Tx14ADBJOCAT9NS/How-to-Record-and-Govern-Your-IAM-Resource-Configurations-Using-AWS-Config) +- [How to Use SAML to Automatically Direct Federated Users to a Specific AWS Management Console Page](http://blogs.aws.amazon.com/security/post/Tx2CGWIB8SBYW2J/How-to-Use-SAML-to-Automatically-Direct-Federated-Users-to-a-Specific-AWS-Manage) +- [New IAMCTL tool compares multiple IAM roles and policies](https://aws.amazon.com/es/blogs/security/new-iamctl-tool-compares-multiple-iam-roles-and-policies/) +- [Bring your own CLI to Session Manager with configurable shell profiles](https://aws.amazon.com/es/blogs/mt/bring-your-own-cli-session-manager-configurable-shell-profiles/) +- [keepler.io: Gestionando el control de accesos en nuestro data lake en AWS](https://keepler.io/2021/03/gestionando-el-control-de-accesos-en-nuestro-data-lake-en-aws/) +- [aws.amazon.com: IAM Access Analyzer now supports over 100 policy checks with actionable recommendations to help you author secure and functional policies](https://aws.amazon.com/about-aws/whats-new/2021/03/iam-access-analyzer-supports-over-100-policy-checks-with-actionable-recommendations/) +- [aws.amazon.com: IAM Access Analyzer Update – Policy Validation](https://aws.amazon.com/blogs/aws/iam-access-analyzer-update-policy-validation/) +- [netflixtechblog.com: ConsoleMe: A Central Control Plane for AWS Permissions and Access](https://netflixtechblog.com/consoleme-a-central-control-plane-for-aws-permissions-and-access-fd09afdd60a8) - [github.com/Netflix/consoleme](https://github.com/Netflix/consoleme) +- [cloudkatha.com: Difference between Root User and IAM User in AWS You Need to Know](https://cloudkatha.com/difference-between-root-user-and-iam-user-in-aws-you-need-to-know/) +- [ben11kehoe.medium.com: AWS Authentication: Principals (users and roles) in AWS IAM](https://ben11kehoe.medium.com/principals-in-aws-iam-38c4a3dc322a) this article uses the boto3, the AWS Python SDK, as an example, but other SDKs have analogous features. +- [infoq.com: Incorrect IAM Policy Raised Questions About AWS Access to S3 Data](https://www.infoq.com/news/2022/01/aws-iam-s3-access/) +- [==iann0036/iamlive==](https://github.com/iann0036/iamlive) Generate an IAM policy from AWS calls using client-side monitoring (CSM) or embedded proxy +- [==awsiam.info: AWS IAM Search==](https://www.awsiam.info) + +## AWS Organizations +- [Simplifying permissions management at scale using tags in AWS Organizations](https://aws.amazon.com/blogs/mt/simplifying-permissions-management-at-scale-using-tags-in-aws-organizations/) +- [Standardize compliance in AWS using DevOps and a Cloud Center of Excellence (CCOE) approach](https://aws.amazon.com/blogs/mt/standardize-compliance-in-aws-using-devops-and-a-cloud-center-of-excellence-ccoe-approach/) + +## AWS Control Tower +- [==AWS Control Tower==](https://aws.amazon.com/controltower/) The easiest way to set up and govern a secure multi-account AWS environment +- [==aws.amazon.com: New – AWS Control Tower Account Factory for Terraform==](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/) +- [hashicorp.com: HashiCorp Teams with AWS on New Control Tower Account Factory for Terraform](https://www.hashicorp.com/blog/hashicorp-teams-with-aws-on-new-control-tower-account-factory-for-terraform) AWS Control Tower Account Factory for HashiCorp Terraform (AFT), the evolution of Terraform Landing Zones, offers an easy way to set up and govern a secure, multi-account AWS environment. + +## AWS Firewalls +- [doit-intl.com: AWS Firewalls 101: How and when to use each one](https://blog.doit-intl.com/aws-firewalls-101-how-and-when-to-use-each-one-d4ad8087a6b3) +- [Automatically block suspicious traffic with AWS Network Firewall and Amazon GuardDuty](https://aws.amazon.com/es/blogs/security/automatically-block-suspicious-traffic-with-aws-network-firewall-and-amazon-guardduty) + +## AWS WAF Web Application Firewall +- [AWS WAF - Web Application Firewall](https://aws.amazon.com/waf/) +- [How to Automatically Update Your Security Groups for Amazon CloudFront and AWS WAF by Using AWS Lambda (boto3 python)](http://blogs.aws.amazon.com/security/post/Tx1LPI2H6Q6S5KC/How-to-Automatically-Update-Your-Security-Groups-for-Amazon-CloudFront-and-AWS-W) +- [How to Use AWS WAF to Block IP Addresses That Generate Bad Requests](http://blogs.aws.amazon.com/security/post/Tx223ZW25YRPRKV/How-to-Use-AWS-WAF-to-Block-IP-Addresses-That-Generate-Bad-Requests) +- [How to Reduce Security Threats and Operating Costs Using AWS WAF and Amazon CloudFront](http://blogs.aws.amazon.com/security/post/Tx1G747SE1R2ZWE/How-to-Reduce-Security-Threats-and-Operating-Costs-Using-AWS-WAF-and-Amazon-Clou) +- [AWS WAF sample rules](https://github.com/awslabs/aws-waf-sample) +- [medium: Blocking bots using AWS WAF](https://medium.com/cloud-techies/blocking-bots-using-aws-waf-d449e6d159ca) +- [medium: Protecting your Web Application or APIs using AWS WAF](https://medium.com/avmconsulting-blog/protecting-your-web-application-or-apis-using-aws-waf-1829ff79275a) + +## AWS Secrets Manager +- [How to replicate secrets in AWS Secrets Manager to multiple Regions](https://aws.amazon.com/blogs/security/how-to-replicate-secrets-aws-secrets-manager-multiple-regions/) +- [AWS Secrets Manager controller POC: an EKS operator for automatic rotation of secrets](https://aws.amazon.com/blogs/containers/aws-secrets-manager-controller-poc-an-eks-operator-for-automatic-rotation-of-secrets/) +- [k21academy.com: AWS Secrets Manager](https://k21academy.com/amazon-web-services/aws-solutions-architect/aws-secrets-manager/) + +## AWS Vault +- [AWS Vault](https://github.com/99designs/aws-vault) is a tool to securely store and access AWS credentials in a development environment. +- [AWS: Sourcing AWS CLI Credentials using a Custom AWS CLI Credential Provider and AWS Vault](https://thomas.geens.be/2020/05/24/aws-sourcing-aws-cli-credentials-using-a-custom-aws-cli-credential-provider-and-aws-vault/) + diff --git a/docs/aws-serverless.md b/docs/aws-serverless.md new file mode 100644 index 00000000..f30de7af --- /dev/null +++ b/docs/aws-serverless.md @@ -0,0 +1,44 @@ +# AWS Serverless +- [Introduction](#introduction) +- [AWS Fargate](#aws-fargate) + +## Introduction +- [you can use Python with AWS Lambda](http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html) +- [Build a Python Microservice with Amazon Web Services Lambda & API Gateway](http://www.giantflyingsaucer.com/blog/?p=5730) +- [AWS Lambda, Echo, and the Future of Cloud Automation](http://www.logicworks.net/blog/2016/01/aws-lambda-echo-cloud-automation/) A fantastic blog article by Logicworks on Lambda, the coming move to serverless architecture and even the possibility of using Amazon's Echo to launch entire AWS environments by using just your voice +- [Serverless: The Future of Software Architecture?](https://read.acloud.guru/serverless-the-future-of-software-architecture-d4473ffed864#.uk7setw47) +- [npmjs.com: Lambda load test](https://www.npmjs.com/package/lambda-load-test) +- [AWS Lambda Limits](http://docs.aws.amazon.com/lambda/latest/dg/limits.html) +- [blog.powerupcloud.com: AWS inventory details in CSV using lambda](http://blog.powerupcloud.com/2016/02/07/aws-inventory-details-in-csv-using-lambda) +- [How do I stop and start EC2 instances at regular intervals using AWS Lambda? (Video)](https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/) +- [Youtube channel: AWS Serverless](https://www.youtube.com/channel/UC_vJsnqdpuEoRseFmlkHMkA) +- [Using Amazon EFS for AWS Lambda in your serverless applications](https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/) +- [medium: AWS Serverless Application Lens — A Summary](https://medium.com/swlh/aws-serverless-application-lens-a-summary-4f740c4f376d) +- [blog.usejournal.com: Building a Serverless Back-end with AWS](https://blog.usejournal.com/building-a-serverless-back-end-with-aws-5bb3642a3f4) +- [dashbird.io: Deploying AWS Lambda with Docker Containers: I Gave it a Try and Here’s My Review](https://dashbird.io/blog/deploying-aws-lambda-with-docker/) +- [aws.amazon.com: Operating Lambda: Understanding event-driven architecture – Part 1](https://aws.amazon.com/blogs/compute/operating-lambda-understanding-event-driven-architecture-part-1/) +- [aws.amazon.com: Optimizing Lambda functions packaged as container images](https://aws.amazon.com/es/blogs/compute/optimizing-lambda-functions-packaged-as-container-images/) +- [Security Overview of AWS Lambda](https://d1.awsstatic.com/whitepapers/Overview-AWS-Lambda-Security.pdf) +- [cloudonaut.io: Serverless Hybrid Cloud: Accessing an API Gateway via VPN or Direct Connect](https://cloudonaut.io/serverless-hybrid-cloud-accessing-an-api-gateway-via-vpn-or-direct-connect/) +- [infoworld.com: Serverless computing with AWS Lambda, Part 1](https://www.infoworld.com/article/3210726/serverless-computing-with-aws-lambda.html) Get an overview of AWS Lambda's nanoservices architecture and execution model, then build your first Lambda function in Java +- [dashbird.io: 4 Tips for AWS Lambda Optimization for Production](https://dashbird.io/blog/optimizing-aws-lambda-for-production/) +- [AWS Step Functions](https://aws.amazon.com/step-functions/) +- [kothiyal-anuj.medium.com: Serverless Diary: The Ultimate Guide to **Caching in the Cloud**](https://kothiyal-anuj.medium.com/serverless-diary-the-ultimate-guide-to-caching-in-the-cloud-249f6a06915f) +- [medium: Going Serverless (on AWS)](https://medium.com/galvanize/going-serverless-on-aws-116a04a0defd) +- [Data Caching Across Microservices in a Serverless Architecture](https://aws.amazon.com/blogs/architecture/data-caching-across-microservices-in-a-serverless-architecture/) +- [Introducing AWS SAM Pipelines: Automatically generate deployment pipelines for serverless applications](https://aws.amazon.com/blogs/compute/introducing-aws-sam-pipelines-automatically-generate-deployment-pipelines-for-serverless-applications) +- [Simplify CI/CD configuration for serverless applications and your favorite CI/CD system — Public Preview](https://aws.amazon.com/about-aws/whats-new/2021/07/simplify-ci-cd-configuration-serverless-applications-your-favorite-ci-cd-system-public-preview/) +- [Building a Serverless Back-end with AWS](https://blog.usejournal.com/building-a-serverless-back-end-with-aws-5bb3642a3f4) +- [liavyona09.medium.com: Spice up Your Kubernetes Environment with AWS Lambda](https://liavyona09.medium.com/spice-up-your-kubernetes-environment-with-aws-lambda-a07d81347607) +- [Achieve up to 34% better price/performance with AWS Lambda Functions powered by AWS Graviton2 processor](https://aws.amazon.com/about-aws/whats-new/2021/09/better-price-performance-aws-lambda-functions-aws-graviton2-processor/) +- [==Deploying AWS Lambda layers automatically across multiple Regions==](https://aws.amazon.com/blogs/compute/deploying-aws-lambda-layers-automatically-across-multiple-regions/) Many developers import libraries and dependencies into their AWS Lambda functions. These dependencies can be zipped and uploaded as part of the build and deployment process but it’s often easier to use Lambda layers instead. +- [medium: Serverless enterprise-grade multi-tenancy using AWS | Tarek Becker](https://medium.com/@tarekbecker/serverless-enterprise-grade-multi-tenancy-using-aws-76ff5f4d0a23) +- [dev.to: Manage webhooks at scale with AWS Serverless](https://dev.to/aws-builders/manage-webhooks-at-scale-with-aws-serverless-fof) +- [Issues to Avoid When Implementing Serverless Architecture with AWS Lambda](https://aws.amazon.com/blogs/architecture/mistakes-to-avoid-when-implementing-serverless-architecture-with-lambda) +- [medium.com/@andrewjr350: Misunderstanding of Serverless (AWS)](https://medium.com/@andrewjr350/misunderstanding-of-serverless-aws-835c7076ea4c) +- [freecodecamp.org: How to Setup a Basic Serverless REST API with AWS Lambda and API Gateway](https://www.freecodecamp.org/news/how-to-setup-a-basic-serverless-backend-with-aws-lambda-and-api-gateway/) + +## AWS Fargate +- [Amazon EFS with Amazon ECS and AWS Fargate – Part 1](https://aws.amazon.com/es/blogs/containers/developers-guide-to-using-amazon-efs-with-amazon-ecs-and-aws-fargate-part-1/) +- [Deploy Machine Learning Pipeline on AWS Fargate](https://www.kdnuggets.com/2020/07/deploy-machine-learning-pipeline-aws-fargate.html) +- [deloitte.com: Fargate con EKS](https://www2.deloitte.com/es/es/blog/todo-tecnologia/2021/fargate-con-eks.html) ¿Es Fargate la solución de AWS con la que siempre soñamos para evitar manejar infraestructura con Kubernetes? Sí, pero… diff --git a/docs/aws-spain.md b/docs/aws-spain.md new file mode 100644 index 00000000..d319c49d --- /dev/null +++ b/docs/aws-spain.md @@ -0,0 +1,15 @@ +# Spain +- [AWS en España](https://aws.amazon.com/es/local/spain/) +- [xataka.com: Por qué Amazon ha elegido Aragón para instalar sus tres primeros centros de datos en España](https://www.xataka.com/servicios/que-amazon-ha-elegido-aragon-para-instalar-sus-tres-primeros-centros-datos-espana) +- [RESOURCE HUB: Eventos y webinars de AWS](https://emea-resources.awscloud.com/spain-events-webinars) +- [aboutamazon.es: AWS acelera la apertura de la Región AWS Europa (España) para apoyar la transformación digital de España](https://www.aboutamazon.es/innovaci%C3%B3n/aws-acelera-la-apertura-de-la-regi%C3%B3n-aws-europa-espa%C3%B1a-para-apoyar-la-transformaci%C3%B3n-digital-de-espa%C3%B1a) + +## Videos +
+ Click to expand! + +
+ + +
+
\ No newline at end of file diff --git a/docs/aws-storage.md b/docs/aws-storage.md new file mode 100644 index 00000000..cc5a9fc2 --- /dev/null +++ b/docs/aws-storage.md @@ -0,0 +1,27 @@ +# AWS Storage. S3 & EBS. AWS Storage Gateway +- [Introduction](#introduction) +- [Amazon EFS Elastic File System](#amazon-efs-elastic-file-system) +- [AWS Transfer](#aws-transfer) + +## Introduction +- [S3 FAQ](https://aws.amazon.com/s3/faqs/) +- [Making Requests to Amazon S3 over IPv6](http://docs.aws.amazon.com/AmazonS3/latest/dev/ipv6-access.html) Amazon Simple Storage Service (Amazon S3) supports the ability to access S3 buckets using the Internet Protocol version 6 (IPv6), in addition to the IPv4 protocol. +- [How to Build Sparse EBS Volumes for Fun and Easy Snapshotting](https://aws.amazon.com/blogs/apn/how-to-build-sparse-ebs-volumes-for-fun-and-easy-snapshotting/) +- [Getting Started with AWS Storage Gateway](http://docs.aws.amazon.com/storagegateway/latest/userguide/GettingStarted-common.html) +- [devopscube.com: How to Automate EBS Snapshot Creation, Retention and Deletion](https://devopscube.com/automate-ebs-snapshot-creation-deletion/) +- [cloudkatha.com: Is S3 Region Specific or Global? What do you think?](https://cloudkatha.com/is-s3-region-specific-or-global-what-do-you-think/) +- [cloudkatha.com: This is why S3 Bucket Names are unique Globally](https://cloudkatha.com/why-s3-bucket-names-are-unique-globally/) +- [cloudkatha.com: AWS S3 Storage Classes: Everything You Need to Know](https://cloudkatha.com/aws-s3-storage-classes-everything-you-need-to-know/) +- [A step-by-step guide to synchronize data between Amazon S3 buckets](https://aws.amazon.com/blogs/storage/a-step-by-step-guide-to-synchronize-data-between-amazon-s3-buckets) +- [percona.com: Performance of Various EBS Storage Types in AWS](https://www.percona.com/blog/performance-of-various-ebs-storage-types-in-aws/) +- [harness.io: Tutorial: [Artifact Servers] S3 – How to Provide Cross-Account Access Via Bucket Policies](https://harness.io/blog/devops/tutorial-s3-cross-account/) +- [Connect Amazon S3 File Gateway using AWS PrivateLink for Amazon S3](https://aws.amazon.com/es/blogs/architecture/connect-amazon-s3-file-gateway-using-aws-privatelink-for-amazon-s3/) +- [blog.min.io: Certificate-based Authentication for S3](https://blog.min.io/certificate-based-authentication-with-s3/) MinIO encrypts data when stored on disk and when transmitted over the network. +- [==acloudguru.com: S3 Glacier Instant Retrieval deep dive: Which S3 Storage Class is right for me?==](https://acloudguru.com/blog/engineering/s3-glacier-instant-retrieval-deep-dive-which-s3-storage-class-is-right-for-me) + +## Amazon EFS Elastic File System +- [EFS Elastic File System](https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-production-ready-in-three-regions) +- [Amazon Elastic File System triples read throughput](https://aws.amazon.com/about-aws/whats-new/2021/01/amazon-elastic-file-system-triples-read-throughput/) + +## AWS Transfer +- [infoq.com: AWS Transfer Family Introduces Support for EFS](https://www.infoq.com/news/2021/01/aws-transfer-ftp-efs/) diff --git a/docs/aws-tools-scripts.md b/docs/aws-tools-scripts.md new file mode 100644 index 00000000..fb88587c --- /dev/null +++ b/docs/aws-tools-scripts.md @@ -0,0 +1,58 @@ +# AWS Tools and Scripts +- [AWS Scripts](#aws-scripts) +- [Open Source at AWS](#open-source-at-aws) +- [AWS Tools](#aws-tools) +- [AWS Toolkits](#aws-toolkits) +- [AWS Management Tools Blog](#aws-management-tools-blog) +- [AWS CLI and AWS SDK](#aws-cli-and-aws-sdk) +- [Third Party Tools](#third-party-tools) + +## AWS Scripts +- [AWS IP inventory](https://github.com/okelet/awsipinventory) Tool to generate an inventory of all IP addresses in use in an account, one or multiple VPC, or one or multiple subnet. +- [dev.to: How to Copy a Security Group with Rules from one AWS Account to Another account](https://dev.to/dineshrathee12/how-to-copy-a-security-group-with-rules-from-one-aws-account-to-another-account-36mb) + - [CopySGFromOneAWSAccountToAnotherScript.py](https://github.com/dineshrathee12/CopySecurityGroupWithRulesFromOneAWSAccountToAnotherAWSAccount/blob/main/CopySGFromOneAWSAccountToAnotherScript.py) +- [github.com/awslabs/assisted-log-enabler-for-aws: Assisted Log Enabler - Find resources that are not logging, and turn them on](https://github.com/awslabs/assisted-log-enabler-for-aws) +- https://github.com/dannysteenman/aws-toolbox A collection of useful Shell & Python scripts that make your DevOps life easier in AWS. Furthermore you'll also find a list of links that point to awesome DevOps tools from other creators. +- [saml-to/assume-aws-role-action](https://github.com/saml-to/assume-aws-role-action) Assume AWS IAM Roles using SAML.to in GitHub Actions. This action enables workflows to obtain AWS Access Credentials for a desired IAM Role using AWS IAM SAML and a GitHub Actions Repository Token. + +## Open Source at AWS +- [OpenSource at AWS](https://aws.github.io/) + +## AWS Tools +- [==steampipe== 🌟](https://steampipe.io) Steampipe is an open source tool for querying cloud APIs in a universal way and reasoning about the data in SQL. + - [==Querying AWS at scale across APIs, Regions, and accounts==](https://aws.amazon.com/blogs/opensource/querying-aws-at-scale-across-apis-regions-and-accounts/) + +## AWS Toolkits +- [AWS Toolkits for Cloud9, JetBrains and VS Code now support interaction with over 200 new resource types 🌟](https://aws.amazon.com/about-aws/whats-new/2021/11/aws-toolkits-cloud9-jetbrains-vs-code/) + +## AWS Management Tools Blog +- [AWS Management Tools Blog](https://aws.amazon.com/blogs/mt/) +- [Metabadger](https://github.com/salesforce/metabadger) Prevent SSRF attacks on AWS EC2 via automated upgrades to the more secure Instance Metadata Service v2 (IMDSv2). + +## AWS CLI and AWS SDK +- [Amazon CLI Documentation](https://aws.amazon.com/cli) +- [AWS CLI Command Reference](http://docs.aws.amazon.com/cli/latest/index.html) +- [New usage examples have been added to the CLI for CodePipeline API Reference](http://docs.aws.amazon.com/cli/latest/reference/codepipeline/index.html) +- [ec2-ssh-yplan: A pair of command line utilities for finding and SSH-ing into your Amazon EC2 instances by tag (such as ‘Name’)](https://pypi.python.org/pypi/ec2-ssh-yplan/) +- List running instances using 'awscli': + +```bash +aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query 'Reservations[].Instances[].[InstanceID]' +``` + +- List all AWS instances in a table format using 'awscli': + +```bash +aws ec2 describe-instances --query 'Reservations[].Instances[].[Placement.AvailabilityZone, State.Name, InstanceID,InstanceType,Platform,Tags.Value,State.Code,Tags.Values]' --output table +``` + +- [Announcing the end of support for Python 2.7 in the AWS SDK for Python and AWS CLI v1](https://aws.amazon.com/blogs/developer/announcing-end-of-support-for-python-2-7-in-aws-sdk-for-python-and-aws-cli-v1/) +- [AWS SDK for Java](https://aws.amazon.com/sdk-for-java/) +- [medium: AWS CLI with jq and Bash](https://medium.com/circuitpeople/aws-cli-with-jq-and-bash-9d54e2eabaf1) The CLI is utilitarian, but a little jq sauce makes it beautiful + +## Third Party Tools +- [ec2-spot-converter](https://github.com/jcjorel/ec2-spot-converter) This tool converts existing EC2 instances back and forth from on-demand and 'persistent' Spot billing models while preserving instance attributes (Launch configuration, Tags..), network attributes (existing Private IP addresses, Elastic IP), storage (Volumes), Elastic Inference accelerators and Elastic GPUs. It also allows replacement of existing Spot instances with new "identical" ones to update the instance type and cpu options. +- [techcrunch.com: Vantage makes managing AWS easier](https://techcrunch.com/2021/01/12/vantage-makes-managing-aws-easier/) +- [vantage.sh](https://www.vantage.sh/) + + diff --git a/docs/aws-training.md b/docs/aws-training.md new file mode 100644 index 00000000..d1c3f4d0 --- /dev/null +++ b/docs/aws-training.md @@ -0,0 +1,16 @@ +# Training +- [New digital course and lab: AWS Cloud Development Kit (CDK) Primer](https://aws.amazon.com/about-aws/whats-new/2021/01/new-digital-course-and-lab-aws-cloud-development-kit-cdk-primer/) +- [acloudguru.com](https://acloudguru.com/) +- [twitch.tv/acloudguruofficial](https://www.twitch.tv/acloudguruofficial) +- [learn.cantrill.io 🌟](https://learn.cantrill.io/) + - [github.com/acantril/learn-cantrill-io-labs](https://github.com/acantril/learn-cantrill-io-labs) + - [linkedin.com/pulse: So, you think you're an associate level Solutions Architect?](https://www.linkedin.com/pulse/so-you-think-youre-associate-level-solutions-adrian-cantrill/) +- [analyticsindiamag.com: Free Online Resources To Get Started On Cloud Computing](https://analyticsindiamag.com/free-online-resources-to-get-started-on-cloud-computing/) +- [acloudguru.com: 10 fun hands-on projects to learn AWS](https://acloudguru.com/blog/engineering/10-fun-hands-on-projects-to-learn-aws) +- [portal.tutorialsdojo.com: AWS Digital Courses (free)](https://portal.tutorialsdojo.com/product-category/aws/aws-digital-courses-2/) +- [hashnode.tpschmidt.com: My Top 10 Free Learning Resources for AWS](https://hashnode.tpschmidt.com/my-top-10-free-learning-resources-for-aws) There's probably nothing you can't build on AWS, but starting your Cloud Journey looking at over 200 AWS Services needs guidance. +- [==explore.skillbuilder.aws/learn: AWS Skill Builder== 🌟](https://explore.skillbuilder.aws/learn) Your learning center to build in-demand cloud skills +- [aws.amazon.com: Exámenes prácticos gratuitos y 100% en español para que obtenga su certificación](https://aws.amazon.com/es/blogs/aws-spanish/examenes-practicos-gratuitos-y-100-en-espanol-para-que-obtenga-su-certificacion/) + +## eBooks +- [gocloudarchitects.com: AWS Certified Solutions Architect Associate Exam Guide](https://www.gocloudarchitects.com/free-csa-a-ebook/) diff --git a/docs/aws.md b/docs/aws.md index 055a7ecc..ece47aa8 100644 --- a/docs/aws.md +++ b/docs/aws.md @@ -4,145 +4,33 @@


- -- [Amazon Web Services](#amazon-web-services) -- [Blogs](#blogs) -- [AWS Free Resources](#aws-free-resources) - [Introduction](#introduction) - - [AWS Cloud Adoption Framework (AWS CAF)](#aws-cloud-adoption-framework-aws-caf) - - [AWS re:Post](#aws-repost) -- [AWS Toolkits](#aws-toolkits) -- [AWS Tools](#aws-tools) -- [eBooks](#ebooks) -- [Training](#training) -- [AWS Certification](#aws-certification) -- [AWS Pricing and Cost Optimization](#aws-pricing-and-cost-optimization) - - [AWS Calculator](#aws-calculator) -- [AWS on Twitter](#aws-on-twitter) -- [AWS Architecture](#aws-architecture) -- [AWS Youtube channel and Podcasts](#aws-youtube-channel-and-podcasts) -- [Closed groups for AWS certified professionals](#closed-groups-for-aws-certified-professionals) -- [AWS Architecture Blog, Official Blog, AWS Labs, AWS Quick Start](#aws-architecture-blog-official-blog-aws-labs-aws-quick-start) -- [AWS Case Studies](#aws-case-studies) -- [AWS tips. AWS Performance. Handling AWS Failures and Outages](#aws-tips-aws-performance-handling-aws-failures-and-outages) -- [AWS Clients](#aws-clients) -- [AWS New Features](#aws-new-features) -- [AWS Management Console](#aws-management-console) -- [AWS Management Tools Blog](#aws-management-tools-blog) -- [AWS Metrics](#aws-metrics) -- [AWS Cloudwatch](#aws-cloudwatch) -- [AWS Schema Conversion Tool](#aws-schema-conversion-tool) -- [AWS RDS Databases](#aws-rds-databases) - - [AWS DMS](#aws-dms) - - [AWS RDS Proxy](#aws-rds-proxy) -- [AWS Application Discovery Service](#aws-application-discovery-service) -- [AWS Migrations](#aws-migrations) - - [AWS Database Migration Service DMS](#aws-database-migration-service-dms) -- [AWS Redshift](#aws-redshift) -- [AWS Data Mesh and Batch Data Processing](#aws-data-mesh-and-batch-data-processing) -- [AWS DevOps. AWS CodePipeline](#aws-devops-aws-codepipeline) - - [AWS CodeDeploy](#aws-codedeploy) -- [AWS Elastic Beanstalk](#aws-elastic-beanstalk) -- [AWS OpsWorks](#aws-opsworks) -- [AWS Networking](#aws-networking) -- [AWS Route 53](#aws-route-53) -- [AWS Elastic Load Balancing (ELB)](#aws-elastic-load-balancing-elb) -- [AWS Application Load Balancer (ALB)](#aws-application-load-balancer-alb) -- [Gateway Load Balancer (GWLB)](#gateway-load-balancer-gwlb) -- [NGINX](#nginx) -- [AWS Latency](#aws-latency) -- [Amazon ECS optimized AMI](#amazon-ecs-optimized-ami) -- [AWS EC2 Container Registry ECR (Docker)](#aws-ec2-container-registry-ecr-docker) -- [Docker for AWS](#docker-for-aws) -- [AWS CLI and AWS SDK](#aws-cli-and-aws-sdk) -- [AWS Cloud Control API](#aws-cloud-control-api) -- [AWS VPC](#aws-vpc) - - [AWS Client VPN](#aws-client-vpn) - - [Tailscale](#tailscale) +- [AWS Application Services](#aws-application-services) - [AWS SQS. Amazon Simple Queue Service](#aws-sqs-amazon-simple-queue-service) - [SNS vs SQS](#sns-vs-sqs) -- [AWS Application Discovery Service Update. Agentless Discovery for VMware](#aws-application-discovery-service-update-agentless-discovery-for-vmware) -- [VMware Cloud on AWS](#vmware-cloud-on-aws) -- [AWS Developer Blog](#aws-developer-blog) -- [AWS Application Services](#aws-application-services) -- [AWS Serverless](#aws-serverless) -- [AWS API Gateway](#aws-api-gateway) -- [AWS CloudFormation. Free Templates](#aws-cloudformation-free-templates) -- [Infrastructure Code Template Generators](#infrastructure-code-template-generators) - - [Former2 to generate IaC templates](#former2-to-generate-iac-templates) - - [Console Recorder for AWS](#console-recorder-for-aws) -- [AWS for Windows](#aws-for-windows) -- [Continuous Deployment with AWS](#continuous-deployment-with-aws) -- [AWS Security](#aws-security) - - [Policy as Code with AWS CDK and Open Policy Agent](#policy-as-code-with-aws-cdk-and-open-policy-agent) - - [Payment Card Industry Data Security Standard compliance](#payment-card-industry-data-security-standard-compliance) - - [AWS IAM](#aws-iam) - - [AWS Organizations](#aws-organizations) - - [AWS CloudFront](#aws-cloudfront) - - [AWS Firewalls](#aws-firewalls) - - [AWS WAF Web Application Firewall](#aws-waf-web-application-firewall) - - [AWS Vault](#aws-vault) -- [AWS S3 & EBS. AWS Storage Gateway](#aws-s3--ebs-aws-storage-gateway) -- [Amazon EFS Elastic File System](#amazon-efs-elastic-file-system) -- [AWS Transfer](#aws-transfer) -- [AWS Fargate](#aws-fargate) - - [Admiralty](#admiralty) -- [AWS Backup and Recovery. Design for failure. Disaster Recovery](#aws-backup-and-recovery-design-for-failure-disaster-recovery) - - [AWS Backup Service](#aws-backup-service) -- [AWS Config Rules](#aws-config-rules) -- [AWS Big Data](#aws-big-data) - - [AWS Data Lake](#aws-data-lake) - - [AWS Data Pipeline (aka Big Data Pipelines or Data Streams)](#aws-data-pipeline-aka-big-data-pipelines-or-data-streams) -- [AWS NoSQL DynamoDB](#aws-nosql-dynamodb) -- [AWS IoT](#aws-iot) -- [AWS Elastic Transcoder. Video streaming](#aws-elastic-transcoder-video-streaming) -- [AWS and Splunk](#aws-and-splunk) -- [AWS Monitoring](#aws-monitoring) -- [Amazon Alexa. Voice User Interface](#amazon-alexa-voice-user-interface) -- [AWS Partner Network (APN)](#aws-partner-network-apn) +- [Blogs](#blogs) +- [AWS Free Resources](#aws-free-resources) - [AWS Startup Collection. For startups building on AWS](#aws-startup-collection-for-startups-building-on-aws) -- [AWS ECS](#aws-ecs) -- [Rancher on AWS](#rancher-on-aws) -- [AWS App Mesh](#aws-app-mesh) -- [AWS Fargate](#aws-fargate-1) -- [Interview Questions](#interview-questions) -- [Local Testing](#local-testing) - - [Localstack](#localstack) -- [Migrating On Premise VM to AWS](#migrating-on-premise-vm-to-aws) -- [AWS configuration files](#aws-configuration-files) -- [Open Source at AWS](#open-source-at-aws) -- [AWS Service Quota Requests](#aws-service-quota-requests) -- [Resource Hierarchies](#resource-hierarchies) -- [AWS Systems Manager Explorer](#aws-systems-manager-explorer) -- [AWS Systems Manager Incident Manager](#aws-systems-manager-incident-manager) -- [AWS Managed Services for Prometheus and Grafana](#aws-managed-services-for-prometheus-and-grafana) -- [AWS Chaos Engineeering. AWS Fault Injection Simulator](#aws-chaos-engineeering-aws-fault-injection-simulator) -- [Best Practices](#best-practices) -- [New Features](#new-features) -- [Superwerker](#superwerker) -- [AWS Samples (Boilerplates)](#aws-samples-boilerplates) -- [Third Party Tools](#third-party-tools) -- [AWS Amplify](#aws-amplify) -- [AWS Control Tower](#aws-control-tower) -- [AWS App Runner](#aws-app-runner) -- [Spain](#spain) -- [Scripts](#scripts) -- [Development](#development) -- [Cloud Development Kit CDK](#cloud-development-kit-cdk) -- [AWS Secrets Manager](#aws-secrets-manager) -- [AWS Cloud Map and HealthChecks](#aws-cloud-map-and-healthchecks) -- [AWS Cloud Endure](#aws-cloud-endure) +- [AWS on Twitter](#aws-on-twitter) +- [AWS Youtube channel and Podcasts](#aws-youtube-channel-and-podcasts) +- [AWS Developer Blog](#aws-developer-blog) - [AWS Patterns](#aws-patterns) +- [AWS configuration files](#aws-configuration-files) +- [AWS Config Rules](#aws-config-rules) +- [AWS Management Console](#aws-management-console) +- [Resource Hierarchies](#resource-hierarchies) - [AWS Tags](#aws-tags) -- [ECommerce](#ecommerce) +- [AWS Systems Manager Explorer](#aws-systems-manager-explorer) + - [AWS Systems Manager Incident Manager](#aws-systems-manager-incident-manager) +- [AWS Cloud Adoption Framework (AWS CAF)](#aws-cloud-adoption-framework-aws-caf) +- [AWS re:Post](#aws-repost) +- [AWS Interview Questions](#aws-interview-questions) - [Bunch of Images](#bunch-of-images) - [Videos](#videos) - [Tweets](#tweets) - - -## Amazon Web Services +## Introduction - [AWS Cloud Products](https://aws.amazon.com/products/) - [AWS Local Zones locations](https://aws.amazon.com/about-aws/global-infrastructure/localzones/locations/) - [status.aws.amazon.com: Service Health Dashboard](https://status.aws.amazon.com) @@ -167,30 +55,6 @@ - [AWS Activate](https://aws.amazon.com/activate) AWS Activate offers startups free tools, resources, and more to quickly get started on AWS. Build and scale with up to $100,000 in AWS Activate credits - [aws/containers-roadmap: AWS Containers Roadmap](https://github.com/aws/containers-roadmap) This is the public roadmap for AWS container services (ECS, ECR, Fargate, and EKS). - [dashbird.io: Get started and keep using AWS for free](https://dashbird.io/blog/use-aws-free/) - -## Blogs -- [Jayendra's Blog 🌟🌟](https://jayendrapatil.com/) -- [aws.plainenglish.io](https://aws.plainenglish.io/) -- [AWStip.com](https://awstip.com) Community of passionate AWS builders. - -## AWS Free Resources -- https://aws.amazon.com/architecture -- https://aws.amazon.com/whitepapers -- https://docs.aws.amazon.com -- https://www.aws.training -- https://aws.amazon.com/solutions/case-studies -- https://www.youtube.com/user/amazonWebServices -- https://forums.aws.amazon.com -- https://aws.amazon.com/blogs -- https://www.slideshare.net/AmazonWebServices -- https://www.twitch.tv/aws -- [Everything AWS | Search and discover 6K+ quality AWS repositories](https://app.polymersearch.com/discover/aws) -- [workshops.aws: AWS Workshops](https://workshops.aws/) This website lists workshops created by the teams at Amazon Web Services (AWS). Workshops are hands-on events designed to teach or introduce practical skills, techniques, or concepts which you can use to solve business problems. -You can filter by topic using the toolbar above. -- [AWS Courses created by AWS experts](https://www.amazon.com/b/?node=14297978011) -- [dev.to: Many free and useful AWS official Dev and User guides!](https://dev.to/aws-builders/many-free-and-useful-aws-official-dev-and-user-guides-54ci) - -## Introduction - [dzone: AWS Basics](https://dzone.com/articles/aws-basics) - [dzone: AWS Elastic Compute Cloud (EC2) Basics](https://dzone.com/articles/aws-elastic-compute-cloud-ec2-basics) We will learn about IP Addresses and also connect to public EC2 instances externally using SSH. Let's have a look at public and private IP behavior first. - [dzone: AWS Basics: Bastion Hosts and NAT](https://dzone.com/articles/aws-basics-bastian-hosts-and-nat) In this post, we will set up Bastion Host and NAT instances in our VPC. We will learn why we need those and some of the options available to us. @@ -217,65 +81,44 @@ You can filter by topic using the toolbar above. - [==amazon.qwiklabs.com/catalog==](https://amazon.qwiklabs.com/catalog) **One of the best ways to learn AWS services is to use them. If you want to grow your skills this year check out these AWS quicklabs. Free and paid quests to get you started and gaining experience.** - [==freecodecamp.org/news/tag/aws==](https://www.freecodecamp.org/news/tag/aws/) Are you looking to get into cloud? Check out all the amazing free content available on freecodecamp under the AWS tag. -### AWS Cloud Adoption Framework (AWS CAF) -- [==AWS Cloud Adoption Framework (AWS CAF)==](https://aws.amazon.com/professional-services/CAF/) The AWS Cloud Adoption Framework (AWS CAF) leverages AWS experience and best practices to help you digitally transform and accelerate your business outcomes through innovative use of AWS. AWS CAF identifies specific organizational capabilities that underpin successful cloud transformations. These capabilities provide best practice guidance that helps you improve your cloud readiness. AWS CAF groups its capabilities in six perspectives: Business, People, Governance, Platform, Security, and Operations. Each perspective comprises a set of capabilities that functionally related stakeholders own or manage in the cloud transformation journey. Use the AWS CAF to identify and prioritize transformation opportunities, evaluate and improve your cloud readiness, and iteratively evolve your transformation roadmap. -- [AWS Cloud Adoption Framework (CAF) 3.0 is Now Available](https://aws.amazon.com/blogs/aws/aws-cloud-adoption-framework-caf-3-0-is-now-available/) +## AWS Application Services +- [k21academy.com: AWS Application Services: Lambda, SES, SNS, SQS, SWF](https://k21academy.com/amazon-web-services/aws-solutions-architect/aws-application-services/) -### AWS re:Post -- [==repost.aws== 🌟](https://repost.aws) -- [AWS re:Post – A Reimagined Q&A Experience for the AWS Community](https://aws.amazon.com/blogs/aws/aws-repost-a-reimagined-qa-experience-for-the-aws-community/) -- [infoq.com: Amazon Introduces re:Post, a "Stack Overflow" for AWS](https://www.infoq.com/news/2021/12/amazon-repost-questions-answers/) +## AWS SQS. Amazon Simple Queue Service +- [Limits in Amazon SQS](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-limits.html) +- [Amazon SQS FAQs](https://aws.amazon.com/sqs/faqs/) -## AWS Toolkits -- [AWS Toolkits for Cloud9, JetBrains and VS Code now support interaction with over 200 new resource types 🌟](https://aws.amazon.com/about-aws/whats-new/2021/11/aws-toolkits-cloud9-jetbrains-vs-code/) +### SNS vs SQS +- [==dev.to: When to SNS or SQS==](https://dev.to/aws-builders/when-to-sns-or-sqs-2aji) -## AWS Tools -- [==steampipe== 🌟](https://steampipe.io) Steampipe is an open source tool for querying cloud APIs in a universal way and reasoning about the data in SQL. - - [==Querying AWS at scale across APIs, Regions, and accounts==](https://aws.amazon.com/blogs/opensource/querying-aws-at-scale-across-apis-regions-and-accounts/) +## Blogs +- [Jayendra's Blog 🌟🌟](https://jayendrapatil.com/) +- [aws.plainenglish.io](https://aws.plainenglish.io/) +- [AWStip.com](https://awstip.com) Community of passionate AWS builders. -## eBooks -- [gocloudarchitects.com: AWS Certified Solutions Architect Associate Exam Guide](https://www.gocloudarchitects.com/free-csa-a-ebook/) +## AWS Free Resources +- https://aws.amazon.com/architecture +- https://aws.amazon.com/whitepapers +- https://docs.aws.amazon.com +- https://www.aws.training +- https://aws.amazon.com/solutions/case-studies +- https://www.youtube.com/user/amazonWebServices +- https://forums.aws.amazon.com +- https://aws.amazon.com/blogs +- https://www.slideshare.net/AmazonWebServices +- https://www.twitch.tv/aws +- [Everything AWS | Search and discover 6K+ quality AWS repositories](https://app.polymersearch.com/discover/aws) +- [workshops.aws: AWS Workshops](https://workshops.aws/) This website lists workshops created by the teams at Amazon Web Services (AWS). Workshops are hands-on events designed to teach or introduce practical skills, techniques, or concepts which you can use to solve business problems. +You can filter by topic using the toolbar above. +- [AWS Courses created by AWS experts](https://www.amazon.com/b/?node=14297978011) +- [dev.to: Many free and useful AWS official Dev and User guides!](https://dev.to/aws-builders/many-free-and-useful-aws-official-dev-and-user-guides-54ci) -## Training -- [New digital course and lab: AWS Cloud Development Kit (CDK) Primer](https://aws.amazon.com/about-aws/whats-new/2021/01/new-digital-course-and-lab-aws-cloud-development-kit-cdk-primer/) -- [acloudguru.com](https://acloudguru.com/) -- [twitch.tv/acloudguruofficial](https://www.twitch.tv/acloudguruofficial) -- [learn.cantrill.io 🌟](https://learn.cantrill.io/) - - [github.com/acantril/learn-cantrill-io-labs](https://github.com/acantril/learn-cantrill-io-labs) - - [linkedin.com/pulse: So, you think you're an associate level Solutions Architect?](https://www.linkedin.com/pulse/so-you-think-youre-associate-level-solutions-adrian-cantrill/) -- [analyticsindiamag.com: Free Online Resources To Get Started On Cloud Computing](https://analyticsindiamag.com/free-online-resources-to-get-started-on-cloud-computing/) -- [acloudguru.com: 10 fun hands-on projects to learn AWS](https://acloudguru.com/blog/engineering/10-fun-hands-on-projects-to-learn-aws) -- [portal.tutorialsdojo.com: AWS Digital Courses (free)](https://portal.tutorialsdojo.com/product-category/aws/aws-digital-courses-2/) -- [hashnode.tpschmidt.com: My Top 10 Free Learning Resources for AWS](https://hashnode.tpschmidt.com/my-top-10-free-learning-resources-for-aws) There's probably nothing you can't build on AWS, but starting your Cloud Journey looking at over 200 AWS Services needs guidance. -- [==explore.skillbuilder.aws/learn: AWS Skill Builder== 🌟](https://explore.skillbuilder.aws/learn) Your learning center to build in-demand cloud skills -- [aws.amazon.com: Exámenes prácticos gratuitos y 100% en español para que obtenga su certificación](https://aws.amazon.com/es/blogs/aws-spanish/examenes-practicos-gratuitos-y-100-en-espanol-para-que-obtenga-su-certificacion/) - -## AWS Certification -- [linkedin: Sharing My Top 10 resources to use while preparing for AWS Certification Exams](https://www.linkedin.com/pulse/sharing-my-top-10-resources-use-while-preparing-aws-exams-semaan/) -- [Schedule an Exam](https://aws.amazon.com/certification/certification-prep/testing) Find the testing option that works best for you -- [dev.to: How to become a Certified AWS Solution Architect in 2022](https://dev.to/javinpaul/how-to-become-a-certified-aws-solution-architect-in-2022-35ad) - -## AWS Pricing and Cost Optimization -- [May 2020: EC2 Price Reduction – For EC2 Instance Saving Plans and Standard Reserved Instances](https://aws.amazon.com/es/blogs/aws/ec2-price-reduction-for-ec2-instance-saving-plans-and-standard-reserved-instances/) -- [ec2.shop: Compare AWS EC2 instance price from the CLI](https://ec2.shop/) -- [infoq.com: AWS Launches Low-Cost Burstable T4g Instances Powered by AWS Graviton2](https://www.infoq.com/news/2020/09/aws-ec2-t4g-instances/) -- [freecodecamp.org: How to Optimize your AWS Cloud Architecture Costs](https://www.freecodecamp.org/news/cost-optimization-in-aws/) -- [aws.amazon.com: Amazon S3 Glacier Price Reduction](https://aws.amazon.com/es/blogs/aws/amazon-s3-glacier-price-reduction/) -- [infoq.com: AWS Announces Lower Cost Storage Classes for Amazon Elastic File System](https://www.infoq.com/news/2021/03/aws-efs-one-zone-storage-classes/) -- [dzone: Understanding AWS Costs](https://dzone.com/articles/understanding-aws-costs) In this article, I'll provide a comprehensive guide on how to understand your AWS costs and needs. -- [thenewstack.io: 7 Tips for Cutting Down Your AWS Kubernetes Bill](https://thenewstack.io/7-tips-for-cutting-down-your-aws-kubernetes-bill/) -- [cast.ai: Keep your AWS Kubernetes costs in check with intelligent allocation (EKS)](https://cast.ai/blog/keep-your-aws-kubernetes-costs-in-check-with-intelligent-allocation) A guide to intelligently allocating Kubernetes costs with EKS -- [thenewstack.io: Cloud Bill Risks of AWS Reserved Instances and Savings Plans](https://thenewstack.io/cloud-bill-risks-of-aws-reserved-instances-and-savings-plans/) -- [dzone: A Guide on Estimating AWS EC2 Workloads for a Microservice Application](https://dzone.com/articles/a-guide-on-estimating-aws-ec2-workloads-for-a-micr) AWS EC2 instance costs can be a significant part of the cloud bill, so it's always a good idea to estimate the workloads using the AWS pricing calculator. -- [Visualize and gain insights into your AWS cost and usage with Cloud Intelligence Dashboards and CUDOS using Amazon QuickSight](https://aws.amazon.com/blogs/mt/visualize-and-gain-insights-into-your-aws-cost-and-usage-with-cloud-intelligence-dashboards-using-amazon-quicksight) -- [blog.cloud-mercato.com: AWS m6i: The why you should abandon your m5](https://blog.cloud-mercato.com/aws-m6i-the-why-you-should-abandon-your-m5/) -- [aws.amazon.com: Exploring Data Transfer Costs for AWS Managed Databases](https://aws.amazon.com/blogs/architecture/exploring-data-transfer-costs-for-aws-managed-databases) -- [==cloudkatha.com: How to Setup Budget in AWS to Keep your Bill in Check==](https://cloudkatha.com/how-to-setup-budget-in-aws-to-keep-your-bill-in-check/) - -### AWS Calculator -- [calculator.aws: AWS Total Cost of Ownership (TCO) Calculators](https://calculator.aws/) -- [Understanding your AWS Cost Datasets: A Cheat Sheet](https://aws.amazon.com/blogs/aws-cost-management/understanding-your-aws-cost-datasets-a-cheat-sheet/) -- [Announcing General Availability of AWS Cost Anomaly Detection](https://aws.amazon.com/blogs/aws-cost-management/announcing-general-availability-of-aws-cost-anomaly-detection/) +## AWS Startup Collection. For startups building on AWS +- [bitmovin: Improving Video Quality on the Web](https://medium.com/aws-activate-startup-blog/bitmovin-improving-video-quality-on-the-web-8670039c4334) +- [What Startups Should Know about Amazon VPC — Part 1](https://medium.com/aws-activate-startup-blog/what-startups-should-know-about-amazon-vpc-part-1-bebe94b7f228) +- [Scaling on AWS (Part 3): >500K Users](https://medium.com/aws-activate-startup-blog/scaling-on-aws-part-3-500k-users-3750b227b761) +- [medium.com: Building a Serverless Dynamic DNS System with AWS](https://medium.com/aws-activate-startup-blog/building-a-serverless-dynamic-dns-system-with-aws-a32256f0a1d8#.qq54pucbd) +- [medium.com: The Top 10 AWS Startup Blog Posts of 2015](https://medium.com/aws-activate-startup-blog/the-top-10-aws-startup-blog-posts-of-2015-d2975e3778bb) ## AWS on Twitter - [twitter.com/awscloud](https://twitter.com/awscloud) @@ -284,18 +127,6 @@ You can filter by topic using the toolbar above. - [twitter.com/AWSstartups](https://twitter.com/AWSstartups) - [twitter.com/AWS_Partners](https://twitter.com/AWS_Partners) -## AWS Architecture -- [AWS Well Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html) - - [nops.io: Discover How to Compare Cloud Workloads for Risk Management on AWS](https://www.nops.io/workload-rule-violations-aws-well-architected/) The AWS Well-Architected Framework provides best practices guidance to optimize workloads based on the Framework’s five pillars — operational excellence, security, reliability, performance efficiency, and cost optimization. -- [AWS application-architecture](http://www.conceptdraw.com/examples/application-architecture) -- [Optimizing your AWS Infrastructure for Sustainability, Part I: Compute](https://aws.amazon.com/blogs/architecture/optimizing-your-aws-infrastructure-for-sustainability-part-i-compute/) -- [Optimizing your AWS Infrastructure for Sustainability, Part II: Storage](https://aws.amazon.com/blogs/architecture/optimizing-your-aws-infrastructure-for-sustainability-part-ii-storage/) -- [==AWS App2Container: Migrate your Applications to Containers at Scale==](https://aws.amazon.com/blogs/architecture/migrate-your-applications-to-containers-at-scale/) -- [dev.to: How Well-Architected Enables Junior Engineers](https://dev.to/aws-builders/how-well-architected-enables-junior-engineers-24j) -- [==This is My Architecture==](https://aws.amazon.com/architecture/this-is-my-architecture) Innovative cloud architectures from AWS partners and customers. **'This is My Architecture' is a video series that showcases innovative architectural solutions on the AWS Cloud by customers and partners.** Each episode examines the most interesting and technically creative elements of each cloud architecture. -- [==Creating a Multi-Region Application with AWS Services – Part 1, Compute, Networking, and Security==](https://aws.amazon.com/blogs/architecture/creating-a-multi-region-application-with-aws-services-part-1-compute-and-security/) -- [==Creating a Multi-Region Application with AWS Services – Part 2, Data and Replication==](https://aws.amazon.com/blogs/architecture/creating-a-multi-region-application-with-aws-services-part-2-data-and-replication/) - ## AWS Youtube channel and Podcasts - [Amazon Web Services Youtube](https://www.youtube.com/user/AmazonWebServices) - [AWS Tutorial Series](https://www.youtube.com/user/awstutorialseries) @@ -304,740 +135,50 @@ You can filter by topic using the toolbar above. - [AWS Techchat](https://aws.amazon.com/podcasts/aws-techchat) - [Stitcher AWS Podcasts](http://www.stitcher.com/podcast/amazon-web-services/aws-podcast) -## Closed groups for AWS certified professionals -- [awscerts.slack.com](https://awscerts.slack.com) -- [Amazon AWS Certification Preparation Tips](http://walkintocloud.com/index.php/2016/06/04/amazon-aws-certification-preparation-tips/) -- [A curated list of AWS resources to prepare for the AWS Certifications](https://gist.github.com/leonardofed) -- [AWS Certified Solutions Architect Professional – Study Guide](https://blue-clouds.com/category/study-guide/) -- [aws.amazon.com: First AWS Certification Study Guide Now Available](https://aws.amazon.com/es/about-aws/whats-new/2016/10/first-aws-certification-study-guide-now-available/) -- [Tips on Passing AWS Certified Solutions Architect - Professional Level](https://www.linkedin.com/pulse/passed-aws-certified-solutions-architect-level-harshit-agarwal) - -## AWS Architecture Blog, Official Blog, AWS Labs, AWS Quick Start -- [AWS Architecture Blog](https://www.awsarchitectureblog.com) -- [AWS Official Blog](http://blogs.aws.amazon.com/) -- [AWS Labs GitHub](https://github.com/awslabs) -- [AWS Quick Start Reference Deployments](http://aws.amazon.com/es/quickstart/) - - [AWS Quick Start - GitHub](https://github.com/awslabs/aws-quickstart) -- [InfoWorld Review – Amazon Aurora Rocks MySQL](https://aws.amazon.com/blogs/aws/infoworld-review-amazon-aurora-rocks-mysql/) -- [AWS Cost Explorer Update – Access to EC2 Usage Data](https://aws.amazon.com/blogs/aws/aws-cost-explorer-update-access-to-ec2-usage-data/) - -## AWS Case Studies -- [Thomas Publishing Case Study](https://aws.amazon.com/solutions/case-studies/thomas-publishing/) After moving to AWS, we were able to shut down our largest data center, eliminating hundreds of thousands of dollars in associated real estate, facility operations, and power and cooling costs. - -## AWS tips. AWS Performance. Handling AWS Failures and Outages -- [AWS Tips I Wish I'd Known Before I Started (Feb 2014)](https://wblinks.com/notes/aws-tips-i-wish-id-known-before-i-started/) A collection of random tips for Amazon Web Services (AWS) that I wish I'd been told a few years ago, based on what I've learned by building and deploying various applications on AWS. -- [Amazon AWS Tips and Gotchas – Part 1 (Feb 2016)](http://www.tekhead.org/blog/2016/02/amazon-aws-tips-and-gotchas-part-1/) -- [DZone: 5 Tips for Better AWS Performance](https://dzone.com/articles/5-tips-for-better-aws-performance) The Ngnix team has a nice list of tips for better performance when using the AWS services. Some of them are related to Ngnix, but others are completely usable for anyone. -- [How do I get started with AWS cloud computing?](https://aws.amazon.com/premiumsupport/knowledge-center/get-started-aws/) -- [DZone: Dude, Where's My Performance?](https://dzone.com/articles/dude-wheres-my-performance) -- [DZone: A Guide to Performance Challenges with AWS EC2: Part 1](https://blog.appdynamics.com/cloud/a-guide-to-performance-challenges-with-aws-ec2-part-1/) -- [DZone: A Guide to Performance Challenges With AWS EC2: Part 2](https://dzone.com/articles/a-guide-to-performance-challenges-with-aws-ec2-par-1) Using Amazon Web Services? Learn how to get your Elastic Compute Cloud instances to perform better than your competitors. -- [DZone: A Guide to Performance Challenges With AWS EC2: Part 3](https://dzone.com/articles/a-guide-to-performance-challenges-with-aws-ec2-par-2) In the second part of his guide covering performance challenges in AWS EC2, Saba Anees covers instances and the right applications for your workloads. -- [DZone: A Guide to Performance Challenges With AWS EC2: Part 4](https://dzone.com/articles/a-guide-to-performance-challenges-with-aws-ec2-par-3) In the final part of his series covering performance challenges with AWS EC2, Saba Anees goes over poor ELB performance and handling AWS failures and outages. -- [blog.datapath.io: Dynamic Web Accelerator for AWS Hosted Applications](http://blog.datapath.io/dynamic-web-accelerator-for-aws-hosted-applications) -- [The Truth About Downtime in the Cloud](http://cloud.netapp.com/blog/prepare-for-the-day-of-all-cloud) - -## AWS Clients -- [Trainline.com dumps Oracle and Microsoft, gulps AWS Kool-Aid](http://www.theregister.co.uk/2016/07/13/trainline_dumps_oracle_microsoft_goes_full_aws_cto_interview/) -- [London DevOps - Trainline, A DevOps Journey - Chris Turvil](https://www.youtube.com/watch?v=IUvUmqu1MBQ) -- [aws.amazon.com: Trainline Case Study](https://aws.amazon.com/solutions/case-studies/trainline/) -- [treblle.com: How does Treblle scale on AWS without breaking the bank?](https://treblle.com/blog/how-does-treblle-scale-on-aws-without-breaking-the-bank) - -## AWS New Features -- [AWS Config Rules – Dynamic Compliance Checking for Cloud Resources](https://aws.amazon.com/blogs/aws/aws-config-rules-dynamic-compliance-checking-for-cloud-resources/) -- [Amazon Inspector – Automated Security Assessment Service](https://aws.amazon.com/blogs/aws/amazon-inspector-automated-security-assessment-service) -- [Coming Soon – EC2 Dedicated Hosts](https://aws.amazon.com/blogs/aws/coming-soon-ec2-dedicated-hosts) -- [AWS Device Farm: Improve the quality of your web and mobile applications by testing across desktop browsers and real mobile devices hosted in the AWS Cloud](https://aws.amazon.com/device-farm) -- [AWS Mobile Hub – Build, Test, and Monitor Mobile Applications](https://aws.amazon.com/blogs/aws/aws-mobile-hub-build-test-and-monitor-mobile-applications) -- [EC2 Container Service Update – Container Registry, ECS CLI, AZ-Aware Scheduling, and More](https://aws.amazon.com/blogs/aws/ec2-container-service-update-container-registry-ecs-cli-az-aware-scheduling-and-more) -- [CloudWatch Dashboards – Create & Use Customized Metrics Views](https://aws.amazon.com/blogs/aws/cloudwatch-dashboards-create-use-customized-metrics-views) -- [AWS Lambda Update – Python, VPC, Increased Function Duration, Scheduling, and More](https://aws.amazon.com/blogs/aws/aws-lambda-update-python-vpc-increased-function-duration-scheduling-and-more) -- [AWS IoT – Cloud Services for Connected Devices](https://aws.amazon.com/blogs/aws/aws-iot-cloud-services-for-connected-devices) -- [Amazon EFS: Amazon Elastic File System – Shared File Storage for Amazon EC2](https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-shared-file-storage-for-amazon-ec2/) -- [New – Encrypted EBS Boot Volumes](https://aws.amazon.com/blogs/aws/new-encrypted-ebs-boot-volumes) - - [Amazon EBS Encryption](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -- [Now Add or Modify Request Headers Forwarded From Amazon CloudFront to Origin](https://aws.amazon.com/about-aws/whats-new/2015/12/now-add-or-modify-request-headers-forwarded-from-amazon-cloudfront-to-origin/) -- [AWS CloudFormation Adds Support for AWS WAF and AWS Directory Service for Microsoft Active Directory](https://aws.amazon.com/es/about-aws/whats-new/2015/12/aws-cloudformation-adds-support-for-aws-waf-and-aws-directory-service-for-microsoft-active-directory/) -- [Amazon WorkMail – Now Generally Available](https://aws.amazon.com/blogs/aws/amazon-workmail-now-generally-available/) -- [London Calling! An AWS Region is coming to the UK!](http://www.allthingsdistributed.com/2015/11/aws-announces-uk-region.html) -- [New – Scheduled Reserved Instances](https://aws.amazon.com/blogs/aws/new-scheduled-reserved-instances/) -- [AWS CloudShell - Command-Line Access to AWS Resources](https://aws.amazon.com/es/blogs/aws/aws-cloudshell-command-line-access-to-aws-resources/) -- [zdnet.com: AWS rolls out S3 Object Lambda to process data for multiple applications](https://www.zdnet.com/google-amp/article/aws-rolls-out-s3-object-lambda-to-process-data-for-multiple-applications/) The new capability allows you to share data across applications, without having to manage a proxy layer or create copies of the dataset. -- [github.com/hayao-k/cdk-ecr-image-scan-notify](https://github.com/hayao-k/cdk-ecr-image-scan-notify) -- [cloudonaut.io: Seamless EC2 monitoring with the Unified CloudWatch Agent](https://cloudonaut.io/seamless-ec2-monitoring-with-the-unified-cloudwatch-agent/) -- [amazon.com: Reduce Unwanted Traffic on Your Website with New AWS WAF Bot Control](https://aws.amazon.com/blogs/aws/reduce-unwanted-traffic-on-your-web-site-with-aws-bot-control/) -- [infoq.com: AWS Introduces EC2 Serial Console: Troubleshoot Boot and Networking Issues](https://www.infoq.com/news/2021/04/aws-ec2-serial-console/) -- [infoq.com: AWS Introduces a New Workflow Studio for AWS Step Functions](https://www.infoq.com/news/2021/06/step-functions-workflow-studio/) -- [New AWS Solutions Implementation: Tag Tamer](https://aws.amazon.com/about-aws/whats-new/2021/06/new-aws-solutions-implementation-tag-tamer/) Tag Tamer helps you apply tags to new and existing AWS resources. Using the pre-built web user interface ensures a consistent tagging implementation—providing improved cost allocations, automation, access controls, and organization. -- [Introducing new self-paced courses to improve Java and Python code quality with Amazon CodeGuru](https://aws.amazon.com/blogs/devops/new-self-paced-courses-to-improve-java-and-python-code-quality-with-amazon-codeguru/) -- [Automate preapproved operations with AWS Service Catalog service actions](https://aws.amazon.com/blogs/mt/automate-preapproved-operations-with-aws-service-catalog-service-actions/) Most of my enterprise customers have the need to allow their users to execute self-service operational tasks while restricting access to a minimum set of services. With AWS Service Catalog, you can provision pre-approved products, when combined with AWS Service Catalog service actions, you can provide simple predefined actions associated with the AWS Service Catalog products that their users can execute. -- [Amazon Virtual Private Cloud (VPC) customers can now assign IP prefixes to their EC2 instances](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-virtual-private-cloud-vpc-customers-can-assign-ip-prefixes-ec2-instances/) -- [Amazon RDS Proxy can now be created in a shared Virtual Private Cloud (VPC)](https://aws.amazon.com/about-aws/whats-new/2021/08/amazon-rds-proxy-created-shared-virtual-private-cloud-vpc/) -- [Amazon VPC CNI plugin increases pods per node limits](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-vpc-cni-plugin-increases-pods-per-node-limits/) -- [theregister.com: AWS to retire EC2-Classic – the network glue that helped start the IaaS rush](https://www.theregister.com/2021/07/29/amazon_web_services_ec2_classic_networking/) You've got a year to sort yourself out if you're still using it for some reason -- [AWS Security Hub adds 18 new controls to its Foundational Security Best Practices standard and 8 new partners for enhanced cloud security posture monitoring](https://aws.amazon.com/about-aws/whats-new/2021/08/aws-security-hub-adds-18-new-controls-foundational-security-best-practices-standard-8-new-partners-enhanced-cloud-security-posture-monitoring/) -- [EC2 VM Import/Export now supports migration of virtual machines with Unified Extensible Firmware Interface (UEFI) boot to AWS](https://aws.amazon.com/es/about-aws/whats-new/2021/08/ec2-vm-import-export-unified-extensible-firmware-interface-aws/) -- [Amazon Virtual Private Cloud (VPC) customers can now resize their prefix list](https://aws.amazon.com/about-aws/whats-new/2021/08/amazon-vpc-resize-prefix-list) -- [New for AWS CloudFormation – Quickly Retry Stack Operations from the Point of Failure](https://aws.amazon.com/es/blogs/aws/new-for-aws-cloudformation-quickly-retry-stack-operations-from-the-point-of-failure/) -- [AWS Site-to-Site VPN releases updated Download Configuration utility](https://aws.amazon.com/about-aws/whats-new/2021/09/aws-site-to-site-vpn-download-configuration-utility/) With this update, Site-to-Site VPN customers can generate configuration templates for compatible Customer Gateway (CGW) devices, making it easier to create VPN connections to AWS. -- [New for AWS Distro for OpenTelemetry – Tracing Support is Now Generally Available](https://aws.amazon.com/blogs/aws/new-for-aws-distro-for-opentelemetry-tracing-support-is-now-generally-available/) -- [Application Load Balancer now enables AWS PrivateLink and static IP addresses by direct integration with Network Load Balancer](https://aws.amazon.com/about-aws/whats-new/2021/09/application-load-balancer-aws-privatelink-static-ip-addresses-network-load-balancer/) -- [Amazon EC2 now offers Global View on the console to view all resources across regions together](https://aws.amazon.com/about-aws/whats-new/2021/09/amazon-ec2-global-view-console-regions/) -- [siliconangle.com: Amazon debuts fully managed, Prometheus-based container monitoring service](https://siliconangle.com/2021/09/29/amazon-debuts-fully-managed-prometheus-based-container-monitoring-service/) -- [aws.amazon.com: Amazon Managed Service for Prometheus Is Now Generally Available with Alert Manager and Ruler](https://aws.amazon.com/blogs/aws/amazon-managed-service-for-prometheus-is-now-generally-available-with-alert-manager-and-ruler/) -- [Now — AWS Step Functions Supports 200 AWS Services To Enable Easier Workflow Automation](https://aws.amazon.com/blogs/aws/now-aws-step-functions-supports-200-aws-services-to-enable-easier-workflow-automation/) -- [AWS Control Tower now supports nested organizational units](https://aws.amazon.com/about-aws/whats-new/2021/11/aws-control-tower-supports-nested-organizational-units/) -- [==Visualize all your Kubernetes clusters in one place with Amazon EKS Connector, now generally available==](https://aws.amazon.com/about-aws/whats-new/2021/11/visualize-kubernetes-clusters-one-place-amazon-eks-connector-generally-available/) -- [==venturebeat.com: Amazon’s AWS expands free ‘egress’ data transfer limits==](https://venturebeat.com/2021/11/25/amazons-aws-expands-free-egress-data-transfer-limits/) -- [linux.slashdot.org: AWS Embraces Fedora Linux for Its Cloud-Based 'Amazon Linux'](https://linux.slashdot.org/story/21/11/27/0328223/aws-embraces-fedora-linux-for-its-cloud-based-amazon-linux) -- [AWS announces the new **Amazon Inspector** for continual vulnerability management](https://aws.amazon.com/about-aws/whats-new/2021/11/amazon-inspector-continual-vulnerability-management/) -- [techcrunch.com: AWS to launch over 30 new Local Zones internationally starting in 2022](https://techcrunch.com/2021/12/02/aws-to-launch-over-30-new-local-zones-starting-in-2022/) -- [==venturebeat.com: 6 big Kubernetes container security launches at AWS re:Invent 2021==](https://venturebeat.com/2021/12/03/6-big-kubernetes-container-security-launches-at-aws-reinvent-2021/) -- [forbes.com: AWS re:Invent - A Roundup Of Container Services Announcements](https://www.forbes.com/sites/janakirammsv/2021/12/03/aws-reinventa-roundup-of-container-services-announcements/) -- [==aws.amazon.com/blogs: Top Announcements of AWS re:Invent 2021==](https://aws.amazon.com/blogs/aws/top-announcements-of-aws-reinvent-2021/) -- [infoq.com: Recap of AWS re:Invent 2021](https://www.infoq.com/news/2021/12/recap-reinvent-2021/) -- [infoq.com: AWS Launches Amazon Kinesis Data Streams On-Demand](https://www.infoq.com/news/2021/12/kinesis-data-streams-ondemand/) -- [theregister.com: The big AWS event: 120 announcements but nothing has changed](https://www.theregister.com/2021/12/09/the_big_aws_event_120/) Our wrap-up: Instant Glacier storage, Kubernetes at AWS, Adobe pops up despite Microsoft partnership, and more -- [aws.amazon.com: Share your Amazon CloudWatch Dashboards with anyone using AWS Single Sign-On](https://aws.amazon.com/blogs/mt/share-your-amazon-cloudwatch-dashboards-with-anyone-using-aws-single-sign-on/) -- [New – Amazon VPC Network Access Analyzer](https://aws.amazon.com/blogs/aws/new-amazon-vpc-network-access-analyzer/) -- [AWS Backup Adds Support for Amazon S3](https://aws.amazon.com/blogs/aws/preview-aws-backup-adds-support-for-amazon-s3/) -- [Migrate AWS Landing Zone solution to AWS Control Tower](https://aws.amazon.com/blogs/mt/migrate-aws-landing-zone-solution-to-aws-control-tower/) **AWS Control Tower creates your landing zone using AWS Organizations, thereby bringing together ongoing account management and governance, as well as implementation of best practices based on our experience of working with thousands of customers as they migrate to the cloud.** -- [infoq.com: Amazon RDS Introduces Readable Standby Instances in Multi-AZ Deployments](https://www.infoq.com/news/2022/01/aws-rds-readable-standby/) -- [Announcing Amazon Elastic File System Replication](https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-elastic-file-system-replication/) Amazon EFS Replication provides you with an easy way to keep an up-to-date copy of your file system in a second AWS Region or within the same Region. -- [infoq.com: Amazon Announces Elastic File System Replication for Multi-Region Deployments](https://www.infoq.com/news/2022/02/aws-efs-replication/) -- [medium.com/@fabrizio-cafolla: Dockerize Python for AWS Lambda — Deploy with GitHub Workflow](https://medium.com/@fabrizio-cafolla/dockerize-python-for-aws-lambda-deploy-with-github-workflow-9a930c1e86b1) - -## AWS Management Console -- [Working with the AWS Management Console](http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/getting-started.html) - -## AWS Management Tools Blog -- [AWS Management Tools Blog](https://aws.amazon.com/blogs/mt/) -- [Metabadger](https://github.com/salesforce/metabadger) Prevent SSRF attacks on AWS EC2 via automated upgrades to the more secure Instance Metadata Service v2 (IMDSv2). - -## AWS Metrics -- [logz.io: What are AWS EC2 Instances? A Tutorial for EC2 Metrics Shipping with Logz.io](https://logz.io/blog/aws-ec2-metrics/) -- [logz.io: A Guide to Monitoring AWS Lambda Metrics with Prometheus & Logz.io](https://logz.io/blog/aws-lambda-metrics-monitoring-guide/) - -## AWS Cloudwatch -- [threatstack.com: 50 Best AWS CloudWatch Tutorials](https://www.threatstack.com/blog/50-best-aws-cloudwatch-tutorials) -- [Amazon CloudWatch now monitors Prometheus metrics from Container environments](https://aws.amazon.com/about-aws/whats-new/2020/09/amazon-cloudwatch-monitors-prometheus-metrics-container-environments/) -- [Amazon CloudWatch Dashboards now supports sharing](https://aws.amazon.com/about-aws/whats-new/2020/09/amazon-cloudwatch-dashboards-supports-sharing/) -- [How BT uses Amazon CloudWatch to monitor millions of devices](https://aws.amazon.com/blogs/mt/how-bt-uses-amazon-cloudwatch-to-monitor-millions-of-devices/) -- [Extending and exploring alarm history in Amazon CloudWatch – part 2](https://aws.amazon.com/blogs/mt/extending-and-exploring-alarm-history-in-amazon-cloudwatch-part-2/) - -## AWS Schema Conversion Tool -- [cloudacademy.com: Migrating Data to AWS Using the AWS Schema Conversion Tool: A Preview](http://cloudacademy.com/blog/migrating-data-to-aws/) -- [AWS Schema Conversion Tool now supports PostgreSQL as conversion target](http://aws.amazon.com/about-aws/whats-new/2016/01/aws-schema-conversion-tool-postgresql-support/) -- [Creating an AWS Schema Conversion Tool Project](http://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_SchemaConversionTool.Converting.CreateProject.html) Use SSL to connect to your source DB with the AWS Schema Conversion Tool. -- [AWS Schema Conversion Tool now supports conversions from Oracle DW and Teradata to Amazon Redshift, Embedded Code Conversion, and Cloud native Code Optimization](https://aws.amazon.com/es/about-aws/whats-new/2016/07/aws-schema-conversion-tool-now-supports-conversions-from-oracle-dw-and-teradata-to-amazon-redshift-embedded-code-conversion-and-cloud-native-code-optimization) - -## AWS RDS Databases -- [Tutorial: Restoring a DB Instance from a DB Snapshot](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.RestoringFromSnapshot.html) -- [Partitioning MySQL on RDS: "How We Partitioned Airbnb’s Main Database in Two Weeks"](https://medium.com/airbnb-engineering/how-we-partitioned-airbnb-s-main-database-in-two-weeks-55f7e006ff21) -- [Amazon RDS for SQL Server – Support for Windows Authentication](https://aws.amazon.com/blogs/aws/amazon-rds-for-sql-server-support-for-windows-authentication/) -- [Why Support of PostgreSQL 9.5 by Amazon RDS is Such Great News](http://blog.rubyroidlabs.com/2016/04/postgresql-9-5/) -- [AWS Tutorials: Create and Connect to a MySQL Database with Amazon RDS](https://aws.amazon.com/getting-started/tutorials/create-mysql-db/) -- [Migrating from MySQL (RDS) to Aurora with no downtime](http://cantrill.io/howto/aws/2016/06/06/migrating-from-mysql-to-aurora-with-almost-no-downtime.html) -- [Replicating Amazon Aurora DB Clusters Across AWS Regions](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Replication.CrossRegion.html) -- [Working with PostgreSQL, MySQL, and MariaDB Read Replicas - Amazon](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html) Use RDS PostgreSQL cross-region Read Replicas to get data close to customers. -- [Working with an Amazon RDS DB Instance in a VPC](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html) -- [Creating a DB Instance Running the Oracle Database Engine](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateOracleInstance.html) In RDS, create Oracle Standard Edition 2 DB instances with the License Included model. -- [Oracle Database on the AWS Cloud: Quick Start Reference Deployment](https://aws.amazon.com/about-aws/whats-new/2016/10/oracle-database-on-the-aws-cloud-quick-start-reference-deployment/) -- [besanttechnologies.com: AWS – Relational Database Service](https://www.besanttechnologies.com/amazon-web-services-relational-database) -- [Introducing the Aurora Storage Engine](https://aws.amazon.com/blogs/database/introducing-the-aurora-storage-engine/) -- [dzone: AWS Relational Database Service (RDS): PostgreSQL in Cloud](https://dzone.com/articles/aws-relational-database-service-rds-postgresql-in) Today, we will go into details of Amazon RDS. We also set up a PostgreSQL instance using this service and connect to it using a tool Azure Data Studio. -- [sysadminxpert.com: How to Enable Slow Query Logs in AWS RDS MySQL](https://sysadminxpert.com/how-to-enable-slow-query-logs-in-aws-rds-mysql/) -- [New – Create Microsoft SQL Server Instances of Amazon RDS on AWS Outposts](https://aws.amazon.com/blogs/aws/new-create-microsoft-sql-server-instances-of-amazon-rds-on-aws-outposts/) -- [percona.com: The Benefits of Amazon RDS for MySQL](https://www.percona.com/blog/2019/12/19/the-benefits-of-amazon-rds-for-mysql/) -- [medium: AWS Backup Service for Amazon RDS](https://medium.com/avmconsulting-blog/aws-backup-service-for-amazon-rds-3e6f5827aa66) -- [migops.com: Is Aurora PostgreSQL really faster and cheaper than RDS PostgreSQL – Benchmarking](https://www.migops.com/blog/2021/11/26/is-aurora-postgresql-really-faster-and-cheaper-than-rds-postgresql-benchmarking/) -- [==dashbird.io: [Infographic] AWS RDS from a Serverless perspective==](https://dashbird.io/blog/aws-relational-database-rds/) - -### AWS DMS -- [Amazon RDS for PostgreSQL Enhancements: Support for new minor versions, Logical Replication, and Amazon RDS PostgreSQL as a source for AWS DMS](https://aws.amazon.com/about-aws/whats-new/2016/09/amazon-rds-for-postgresql-enhancements-support-for-new-minor-versions-logical-replication-and-amazon-rds-postgresql-as-a-source-for-aws-dms/) -- [Migrating Oracle databases with near-zero downtime using AWS DMS](https://aws.amazon.com/blogs/database/migrating-oracle-databases-with-near-zero-downtime-using-aws-dms/) -- [Migrating a commercial database to open source with AWS SCT and AWS DMS](https://aws.amazon.com/blogs/database/migrating-a-commercial-database-to-open-source-with-aws-sct-and-aws-dms/) -- [revenuecat.com: Replicating a postgresql cluster to redshift](https://www.revenuecat.com/blog/replicating-a-postgresql-cluster-to-redshift) - -### AWS RDS Proxy -- [Amazon RDS Proxy – Now Generally Available](https://aws.amazon.com/es/blogs/aws/amazon-rds-proxy-now-generally-available/) A fully managed, highly available database proxy for Amazon Relational Database Service (RDS) that makes applications more scalable, more resilient to database failures, and more secure. - -## AWS Application Discovery Service -- [AWS Application Discovery Service](http://docs.aws.amazon.com/application-discovery/latest/userguide/what-is-appdiscovery.html) - -## AWS Migrations -- [New AWS Competency – AWS Migration](https://aws.amazon.com/blogs/aws/new-aws-competency-aws-migration/) -- [Migrate Resources Between AWS Accounts](https://aws.amazon.com/blogs/architecture/migrate-resources-between-aws-accounts) -- [==Multi-Region Migration using AWS Application Migration Service==](https://aws.amazon.com/blogs/architecture/multi-region-migration-using-aws-application-migration-service/) I built my infrastructure in Region A, I want to now move it to Region B. - -### AWS Database Migration Service DMS -- [AWS Database Migration Service](https://aws.amazon.com/es/blogs/aws/aws-database-migration-service/) -- [Whitepaper: Migrating Your Databases to AWS](https://aws.amazon.com/es/dms/learn-more/) -- [Replicate and transform data in Amazon Aurora PostgreSQL across multiple Regions using AWS DMS](https://aws.amazon.com/blogs/database/replicate-and-transform-data-in-amazon-aurora-postgresql-across-multiple-regions-using-aws-dms) - -## AWS Redshift -- [Tutorial: Tuning Table Design](http://docs.aws.amazon.com/redshift/latest/dg/tutorial-tuning-tables.html) In this tutorial, you will learn how to optimize the design of your tables. - -## AWS Data Mesh and Batch Data Processing -- [dev.to: Introduction to Data Mesh](https://dev.to/aws-builders/introduction-to-data-mesh-3f1b) -- [dev.to: Introduction to Batch Data Processing](https://dev.to/aws-builders/introduction-to-batch-data-processing-4k56) - -## AWS DevOps. AWS CodePipeline -- [AWS DevOps](https://aws.amazon.com/devops/) -- [AWS DevOps Blog](https://blogs.aws.amazon.com/application-management/) -- [Continuous Delivery for a PHP Application Using AWS CodePipeline, AWS Elastic Beanstalk, and Solano Labs](https://blogs.aws.amazon.com/application-management/post/TxYSRRBH57NP2P/Continuous-Delivery-for-a-PHP-Application-Using-AWS-CodePipeline-AWS-Elastic-Bea) -- [Building Continuous Deployment on AWS with AWS CodePipeline, Jenkins and AWS Elastic Beanstalk](https://blogs.aws.amazon.com/application-management/post/Tx34AXRMYLXG5OT/Building-Continuous-Deployment-on-AWS-with-AWS-CodePipeline-Jenkins-and-AWS-Elas) -- [blazemeter.com: Three Ways DevOps Benefit from AWS CodePipeline](https://blazemeter.com/blog/three-ways-devops-benefit-aws-codepipeline) -- [AWS Partner Network - CodePipeline Integrations](https://aws.amazon.com/es/codepipeline/product-integrations/) -- [**Multi-Region Infrastructure Deployment**](https://aws.amazon.com/solutions/multi-region-infrastructure-deployment/) This solution automatically provisions and configures AWS CodePipeline to automate the CI/CD pipeline for CloudFormation templates -- [k21academy.com: AWS DevOps Vs. Azure DevOps](https://k21academy.com/amazon-web-services/aws-devops-vs-azure-devops/?utm_source=linkedin&utm_medium=referral&utm_campaign=awsdevops17_dec20_aws_cloud_computing_for_interested_parties__users) -- [Amazon DevOps Guru](https://aws.amazon.com/devops-guru/) ML-powered cloud operations service to improve application availability - - [infoq.com: AWS Launches Amazon DevOps Guru](https://www.infoq.com/news/2021/01/aws-devops-guru/) -- [aws.plainenglish.io: AWS CodePipeline for Amazon ECS](https://aws.plainenglish.io/aws-codepipeline-for-amazon-ecs-part-2-a-blue-green-deployment-type-c162fd73be91) In this tutorial, I would like to explain to you how to create an AWS CodePipeline for ECS with a Blue/green deployment type. - -### AWS CodeDeploy -- [AWS CodeDeploy: Deploying from a Development Account to a Production Account](http://blogs.aws.amazon.com/application-management/post/Tx3PE3JTSVJSFI7/AWS-CodeDeploy-Deploying-from-a-Development-Account-to-a-Production-Account) -- [Setting Up the Jenkins Plugin for AWS CodeDeploy](https://blogs.aws.amazon.com/application-management/post/TxMJROUIFQZ4HS/Setting-Up-the-Jenkins-Plugin-for-AWS-CodeDeploy) -- [adamtheautomator.com: Getting Started with AWS CodeDeploy](https://adamtheautomator.com/aws-codedeploy/) - -## AWS Elastic Beanstalk -- [AWS Elastic Beanstalk Documentation](http://aws.amazon.com/documentation/elastic-beanstalk/) -- [Deploying a High-Availability PHP Application with an External Amazon RDS Database to Elastic Beanstalk](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-ha-tutorial.html) -- [Creating and Deploying PHP Applications on AWS Elastic Beanstalk](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_PHP_eb.html) -- [AWS Elastic Beanstalk Supports ASP.NET Core and Multi-App .NET Support](https://aws.amazon.com/about-aws/whats-new/2016/08/aws-elastic-beanstalk-supports-asp-net-core-and-multi-app-net-support/) -- [AWS Elastic Beanstalk Supports Application Load Balancer](https://aws.amazon.com/about-aws/whats-new/2016/08/aws-elastic-beanstalk-supports-application-load-balancer/) -- [Configuring an Application Load Balancer](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-applicationloadbalancer.html) -- [AWS Elastic Beanstalk Supports Nginx Proxy Server with Tomcat](https://aws.amazon.com/about-aws/whats-new/2016/08/aws-elastic-beanstalk-supports-nginx-proxy-server-with-tomcat/) - -## AWS OpsWorks -- [AWS OpsWorks](https://aws.amazon.com/opsworks/) -- [AWS OpsWorks - Chef Versions](http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-chef11.html) -- [youtube: AWS OpsWorks Overview and Demo](https://www.youtube.com/watch?v=cj_LoG6C2xk&list=PLR3sVanzLpJN6BiYS20K4BMPpiDGifbZy) -- [Use OpsWorks to create and manage instances that run CentOS 7](https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os-linux.html?adbsc=docs_20160709_63418706&adbid=UPDATE-c2382910-6157610151248490496&adbpl=li&adbpr=2382910#workinginstances-os-linux-centos) - -## AWS Networking -- [AWS Networking for Developers](https://aws.amazon.com/es/blogs/apn/aws-networking-for-developers/) -- [Elastic Network Adapter](https://aws.amazon.com/blogs/aws/elastic-network-adapter-high-performance-network-interface-for-amazon-ec2) -- [AWS Cloud Networking – Zero to Hero](http://www.netdesignarena.com/index.php/2020/04/15/new-blog-series-aws-cloud-networking-zero-to-hero/) -- [cloudonaut.io: What Architects Need to Know About Networking on AWS](https://cloudonaut.io/what-architects-need-to-know-about-networking-on-aws/) -- [cloudonaut.io: Advanced AWS Networking: Pitfalls That You Should Avoid](https://cloudonaut.io/advanved-aws-networking-pitfalls-that-you-should-avoid/) -- [gprakash-sharma.medium.com: AWS Site-to-Site VPN with NAT](https://gprakash-sharma.medium.com/aws-site-to-site-vpn-with-nat-8bb99f4653ab) -- [Resolve DNS names of Network Load Balancer nodes to limit cross-Zone traffic](https://aws.amazon.com/blogs/networking-and-content-delivery/resolve-dns-names-of-network-load-balancer-nodes-to-limit-cross-zone-traffic) -- [github.com/seligman/aws-ip-ranges: AWS's ip-ranges.json](https://github.com/seligman/aws-ip-ranges) AWS adds an extra 5.5M IPv4 addresses. Tracking the history and size of AWS's ip-ranges.json file. AWS provides a data file showing the current IP ranges their services use, called ip-ranges.json. This repository tracks changes to that file, and based off a trigger on the SNS topic automatically produces this chart showing how what percentage of the Internet's IPv4 address space AWS is in control of. -- [medium: Building a Global Network with AWS Transit Gateway](https://medium.com/avmconsulting-blog/building-a-global-network-with-aws-transit-gateway-7ab0e5222f12) Connecting branch and corporate offices into the AWS cloud to build a global network is necessary to provide ubiquitous accessibility for users. This solution uses AWS Transit Gateway, AWS Direct Connect, and AWS Accelerated Site-to-Site VPN to build a modern, secure, scalable, and cost-efficient WAN on top of the AWS global network. - -## AWS Route 53 -- [How do I transfer a domain to AWS from another registrar?](https://aws.amazon.com/premiumsupport/knowledge-center/transfer-domain-to-aws/) - -## AWS Elastic Load Balancing (ELB) -- [AWS Summit Series 2016 | London: Deep Dive on Elastic Load Balancing](https://www.youtube.com/watch?v=HinwLb2lpLQ) -- [docs.aws.amazon.com: What Is Elastic Load Balancing?](http://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) -- [ably.com: Balancing act: the current limits of AWS network load balancers](https://ably.com/blog/limits-aws-network-load-balancers) -- [==luis-sena.medium.com: Automated AWS Load Balancer Warm-Up==](https://luis-sena.medium.com/automated-aws-load-balancer-warm-up-d0b4084c8bbc) Automate AWS load balancer to avoid issues with huge traffic spikes -- [==dashbird.io: AWS Elastic Load Balancing from a Serverless perspective==](https://dashbird.io/blog/aws-application-load-balancer/) Should you switch your AWS API Gateway out for an Application Load Balancer (ALB)? A cheat sheet for all you need to know about ALB: - - Pricing - - Regions - - Transformations - - Limits - - Permissions - - Health - -## AWS Application Load Balancer (ALB) -- [Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/) -- [aws blogs - New – AWS Application Load Balancer](https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/) -- [medium: 10 reasons why you should think about using an AWS Application Load Balancer](https://medium.com/ankercloud-engineering/10-reasons-why-you-should-think-about-using-an-aws-application-loadbalancer-945f57816c34) -- [Introducing the AWS Load Balancer Controller](https://aws.amazon.com/blogs/containers/introducing-aws-load-balancer-controller/) -- [Fine-tuning blue/green deployments on application load balancer](https://aws.amazon.com/blogs/devops/blue-green-deployments-with-application-load-balancer/) - -## Gateway Load Balancer (GWLB) -- [Centralized Traffic Inspection with Gateway Load Balancer on AWS](https://aws.amazon.com/blogs/apn/centralized-traffic-inspection-with-gateway-load-balancer-on-aws/) - -## NGINX -- [NGINX Plus on the AWS Cloud: Quick Start Reference Deployment](https://aws.amazon.com/about-aws/whats-new/2016/09/nginx-plus-on-the-aws-cloud-quick-start-reference-deployment/) - -## AWS Latency -- [Find the fastest region from your location](http://aws-latency.altaircp.com/) Check AWS response time from you browser. Sharing my mini-project, it measures response time from AWS services from different regions base on your location. let me know what you think. -- [Linkedin Discussion](https://www.linkedin.com/groups/49531/49531-6092152919937794052) ->1. Don't do just a single check, the first check will be a lot slower as DNS lookups will need to be done, etc. ->2. I'd recommend doing at least 3 checks getting an average. -- Run 6 checks (with a random 3-10 second delay between each one), the first can be ignored, the highest one is also ignored (as a likely outlier), then for the next 4 show the minimum, maximum and average (mean). -- [medium.com: Optimizing Latency and Bandwidth for AWS Traffic](https://medium.com/aws-activate-startup-blog/optimizing-latency-and-bandwidth-for-aws-traffic-cdfd18d0d0f7) - -## Amazon ECS optimized AMI -- [Amazon ECS-optimized AMI](http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html) - -## AWS EC2 Container Registry ECR (Docker) -- [A Better Dev/Test Experience: Docker and AWS](https://medium.com/aws-activate-startup-blog/a-better-dev-test-experience-docker-and-aws-291da5ab1238) -- [Amazon EC2 Container Registry Documentation](http://aws.amazon.com/es/documentation/ecr/) -- [Get started with Amazon EC2 Container Registry (Amazon ECR)](http://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_GetStarted.html) -- [Using Docker Machine with AWS](http://blog.scottlowe.org/2016/03/22/using-docker-machine-with-aws/) -- [Docker Datacenter on the AWS Cloud: Quick Start Reference Deployment](https://aws.amazon.com/es/about-aws/whats-new/2016/06/docker-datacenter-on-the-aws-cloud-quick-start-reference-deployment/) -- [ecrcp](https://github.com/bit-cloner/ecrcp) aims to mimic cp command in Linux systems as closely as possible in its implementation. Consider ecrcp to be the cp equivalent to copy container images from docker hub to ECR. -- [aws.plainenglish.io: How to Push a Docker Image to the AWS ECR](https://aws.plainenglish.io/how-to-push-an-image-to-aws-ecr-b2be848c2ef) -- [awslabs/amazon-ecr-credential-helper: Amazon ECR Docker Credential Helper](https://github.com/awslabs/amazon-ecr-credential-helper) Automatically gets credentials for Amazon ECR on docker push/docker pull - -## Docker for AWS -- [DZone: Getting Started With Docker for AWS and Scaling Nodes](https://dzone.com/articles/getting-started-with-docker-for-aws-and-scaling-no) This blog will explain how to get started with Docker for AWS and deploy a multi-host Swarm cluster on Amazon. -- [blog.couchbase.com: Getting Started with Docker for AWS and Scaling Nodes](http://blog.couchbase.com/2016/july/docker-for-aws-getting-started-scaling-nodes) - -## AWS CLI and AWS SDK -- [Amazon CLI Documentation](https://aws.amazon.com/cli) -- [AWS CLI Command Reference](http://docs.aws.amazon.com/cli/latest/index.html) -- [New usage examples have been added to the CLI for CodePipeline API Reference](http://docs.aws.amazon.com/cli/latest/reference/codepipeline/index.html) -- [ec2-ssh-yplan: A pair of command line utilities for finding and SSH-ing into your Amazon EC2 instances by tag (such as ‘Name’)](https://pypi.python.org/pypi/ec2-ssh-yplan/) -- List running instances using 'awscli': - -```bash -aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query 'Reservations[].Instances[].[InstanceID]' -``` - -- List all AWS instances in a table format using 'awscli': - -```bash -aws ec2 describe-instances --query 'Reservations[].Instances[].[Placement.AvailabilityZone, State.Name, InstanceID,InstanceType,Platform,Tags.Value,State.Code,Tags.Values]' --output table -``` - -- [Announcing the end of support for Python 2.7 in the AWS SDK for Python and AWS CLI v1](https://aws.amazon.com/blogs/developer/announcing-end-of-support-for-python-2-7-in-aws-sdk-for-python-and-aws-cli-v1/) -- [AWS SDK for Java](https://aws.amazon.com/sdk-for-java/) -- [medium: AWS CLI with jq and Bash](https://medium.com/circuitpeople/aws-cli-with-jq-and-bash-9d54e2eabaf1) The CLI is utilitarian, but a little jq sauce makes it beautiful - -## AWS Cloud Control API -- [AWS Cloud Control API](https://aws.amazon.com/cloudcontrolapi/) **Manage AWS and third-party cloud infrastructure with consistent APIs** -- [AWS Cloud Control API, a Uniform API to Access AWS & Third-Party Services](https://aws.amazon.com/blogs/aws/announcing-aws-cloud-control-api) - -## AWS VPC -- [AWS-VPC](https://en.wikipedia.org/wiki/Amazon_Virtual_Private_Cloud) -- [linuxjournal.com: AWS EC2 VPC CLI](http://www.linuxjournal.com/content/aws-ec2-vpc-cli) -- [Build a Modular and Scalable Amazon VPC Architecture with New Quick Start](https://aws.amazon.com/about-aws/whats-new/2016/07/build-a-modular-and-scalable-amazon-vpc-architecture-with-new-quick-start) Build a modular virtual network architecture with Amazon VPC in 5 minutes with our new Quick Start -- [Specifying the VPC for your Amazon RDS DB Instance](https://aws.amazon.com/about-aws/whats-new/2016/08/specifying-the-vpc-for-your-amazon-rds-db-instance/) You can now easily change the Amazon VPC used by your Amazon RDS DB instance! -- [awsfundamentals.blogspot.com: AWS Virtual Private Cloud - VPC](https://awsfundamentals.blogspot.com/2019/12/aws-vpc-fundamental.html) -- [Reduce Cost and Increase Security with Amazon VPC Endpoints](https://aws.amazon.com/blogs/architecture/reduce-cost-and-increase-security-with-amazon-vpc-endpoints/) -- [ealtili.medium.com: Deepdive to VPCs and Connections to VPC](https://ealtili.medium.com/deepdive-to-vpcs-and-connections-to-vpc-2de3fb164d7c) -- [Centralize access using VPC interface endpoints to access AWS services across multiple VPCs](https://aws.amazon.com/blogs/networking-and-content-delivery/centralize-access-using-vpc-interface-endpoints/) - -### AWS Client VPN -- [cloudonaut.io: AWS Client VPN: Connected with the Cloud](https://cloudonaut.io/aws-client-vpn-connected-with-the-cloud/) - -### Tailscale -- [tailscale.com: Connect to an AWS VPC using subnet routes](https://tailscale.com/kb/1021/install-aws/) - -## AWS SQS. Amazon Simple Queue Service -- [Limits in Amazon SQS](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-limits.html) -- [Amazon SQS FAQs](https://aws.amazon.com/sqs/faqs/) - -### SNS vs SQS -- [==dev.to: When to SNS or SQS==](https://dev.to/aws-builders/when-to-sns-or-sqs-2aji) - -## AWS Application Discovery Service Update. Agentless Discovery for VMware -- [AWS Application Discovery Service Update – Agentless Discovery for VMware](https://aws.amazon.com/es/blogs/aws/aws-application-discovery-service-update-agentless-discovery-for-vmware/) - -## VMware Cloud on AWS -- [VMware Cloud on AWS](https://aws.amazon.com/es/vmware/) The Only Way to Extend Your VMware Environment into AWS -- [infoworld.com: 4 no-bull insights into the AWS/VMware deal](http://www.infoworld.com/article/3131347/hybrid-cloud/4-no-bull-insights-into-the-awsvmware-deal.html) - ## AWS Developer Blog - [The AWS Developer Blog now includes Python & GoLang](https://aws.amazon.com/blogs/developer/) - [Create an API Using the Swagger Specification and the API Gateway Extensions](http://docs.aws.amazon.com/apigateway/latest/developerguide/create-api-using-import-export-api.html) -## AWS Application Services -- [k21academy.com: AWS Application Services: Lambda, SES, SNS, SQS, SWF](https://k21academy.com/amazon-web-services/aws-solutions-architect/aws-application-services/) - -## AWS Serverless -- [martinfowler.com: Serverless Architectures](http://martinfowler.com/articles/serverless.html) -- [you can use Python with AWS Lambda](http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html) -- [Build a Python Microservice with Amazon Web Services Lambda & API Gateway](http://www.giantflyingsaucer.com/blog/?p=5730) -- [AWS Lambda, Echo, and the Future of Cloud Automation](http://www.logicworks.net/blog/2016/01/aws-lambda-echo-cloud-automation/) A fantastic blog article by Logicworks on Lambda, the coming move to serverless architecture and even the possibility of using Amazon's Echo to launch entire AWS environments by using just your voice -- [Serverless: The Future of Software Architecture?](https://read.acloud.guru/serverless-the-future-of-software-architecture-d4473ffed864#.uk7setw47) -- [npmjs.com: Lambda load test](https://www.npmjs.com/package/lambda-load-test) -- [AWS Lambda Limits](http://docs.aws.amazon.com/lambda/latest/dg/limits.html) -- [blog.powerupcloud.com: AWS inventory details in CSV using lambda](http://blog.powerupcloud.com/2016/02/07/aws-inventory-details-in-csv-using-lambda) -- [How do I stop and start EC2 instances at regular intervals using AWS Lambda? (Video)](https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/) -- [Youtube channel: AWS Serverless](https://www.youtube.com/channel/UC_vJsnqdpuEoRseFmlkHMkA) -- [Using Amazon EFS for AWS Lambda in your serverless applications](https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/) -- [medium: AWS Serverless Application Lens — A Summary](https://medium.com/swlh/aws-serverless-application-lens-a-summary-4f740c4f376d) -- [blog.usejournal.com: Building a Serverless Back-end with AWS](https://blog.usejournal.com/building-a-serverless-back-end-with-aws-5bb3642a3f4) -- [dashbird.io: Deploying AWS Lambda with Docker Containers: I Gave it a Try and Here’s My Review](https://dashbird.io/blog/deploying-aws-lambda-with-docker/) -- [aws.amazon.com: Operating Lambda: Understanding event-driven architecture – Part 1](https://aws.amazon.com/blogs/compute/operating-lambda-understanding-event-driven-architecture-part-1/) -- [aws.amazon.com: Optimizing Lambda functions packaged as container images](https://aws.amazon.com/es/blogs/compute/optimizing-lambda-functions-packaged-as-container-images/) -- [Security Overview of AWS Lambda](https://d1.awsstatic.com/whitepapers/Overview-AWS-Lambda-Security.pdf) -- [cloudonaut.io: Serverless Hybrid Cloud: Accessing an API Gateway via VPN or Direct Connect](https://cloudonaut.io/serverless-hybrid-cloud-accessing-an-api-gateway-via-vpn-or-direct-connect/) -- [infoworld.com: Serverless computing with AWS Lambda, Part 1](https://www.infoworld.com/article/3210726/serverless-computing-with-aws-lambda.html) Get an overview of AWS Lambda's nanoservices architecture and execution model, then build your first Lambda function in Java -- [dashbird.io: 4 Tips for AWS Lambda Optimization for Production](https://dashbird.io/blog/optimizing-aws-lambda-for-production/) -- [AWS Step Functions](https://aws.amazon.com/step-functions/) -- [kothiyal-anuj.medium.com: Serverless Diary: The Ultimate Guide to **Caching in the Cloud**](https://kothiyal-anuj.medium.com/serverless-diary-the-ultimate-guide-to-caching-in-the-cloud-249f6a06915f) -- [medium: Going Serverless (on AWS)](https://medium.com/galvanize/going-serverless-on-aws-116a04a0defd) -- [Data Caching Across Microservices in a Serverless Architecture](https://aws.amazon.com/blogs/architecture/data-caching-across-microservices-in-a-serverless-architecture/) -- [Introducing AWS SAM Pipelines: Automatically generate deployment pipelines for serverless applications](https://aws.amazon.com/blogs/compute/introducing-aws-sam-pipelines-automatically-generate-deployment-pipelines-for-serverless-applications) -- [Simplify CI/CD configuration for serverless applications and your favorite CI/CD system — Public Preview](https://aws.amazon.com/about-aws/whats-new/2021/07/simplify-ci-cd-configuration-serverless-applications-your-favorite-ci-cd-system-public-preview/) -- [Building a Serverless Back-end with AWS](https://blog.usejournal.com/building-a-serverless-back-end-with-aws-5bb3642a3f4) -- [liavyona09.medium.com: Spice up Your Kubernetes Environment with AWS Lambda](https://liavyona09.medium.com/spice-up-your-kubernetes-environment-with-aws-lambda-a07d81347607) -- [Achieve up to 34% better price/performance with AWS Lambda Functions powered by AWS Graviton2 processor](https://aws.amazon.com/about-aws/whats-new/2021/09/better-price-performance-aws-lambda-functions-aws-graviton2-processor/) -- [==Deploying AWS Lambda layers automatically across multiple Regions==](https://aws.amazon.com/blogs/compute/deploying-aws-lambda-layers-automatically-across-multiple-regions/) Many developers import libraries and dependencies into their AWS Lambda functions. These dependencies can be zipped and uploaded as part of the build and deployment process but it’s often easier to use Lambda layers instead. -- [medium: Serverless enterprise-grade multi-tenancy using AWS | Tarek Becker](https://medium.com/@tarekbecker/serverless-enterprise-grade-multi-tenancy-using-aws-76ff5f4d0a23) -- [dev.to: Manage webhooks at scale with AWS Serverless](https://dev.to/aws-builders/manage-webhooks-at-scale-with-aws-serverless-fof) -- [Issues to Avoid When Implementing Serverless Architecture with AWS Lambda](https://aws.amazon.com/blogs/architecture/mistakes-to-avoid-when-implementing-serverless-architecture-with-lambda) -- [medium.com/@andrewjr350: Misunderstanding of Serverless (AWS)](https://medium.com/@andrewjr350/misunderstanding-of-serverless-aws-835c7076ea4c) -- [freecodecamp.org: How to Setup a Basic Serverless REST API with AWS Lambda and API Gateway](https://www.freecodecamp.org/news/how-to-setup-a-basic-serverless-backend-with-aws-lambda-and-api-gateway/) - -## AWS API Gateway -- [alexdebrie.com: A Detailed Overview of AWS API Gateway](https://www.alexdebrie.com/posts/api-gateway-elements/) - -## AWS CloudFormation. Free Templates -- [AWS Cloud Formation Release History](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html) -- [All the AWS Resource Types Reference for AWS CloudFormation ](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) -- [Introducing Cloud Formation Guard - a new opensource CLI for infrastructure compliance](https://aws.amazon.com/about-aws/whats-new/2020/06/introducing-aws-cloudformation-guard-preview/) - - [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) Guard offers a policy-as-code domain-specific language (DSL) to write rules and validate JSON- and YAML-formatted data such as CloudFormation Templates, K8s configurations, and Terraform JSON plans/configurations against those rules. -- [cloudonaut.io: Getting Started with Free Templates for AWS CloudFormation](https://cloudonaut.io/getting-started-with-aws-cf-templates/) - [Free Templates for AWS CloudFormation](https://github.com/widdix/aws-cf-templates/) - [templates.cloudonaut.io](https://templates.cloudonaut.io/) -- [Use Git pre-commit hooks to avoid AWS CloudFormation errors](https://aws.amazon.com/es/blogs/infrastructure-and-automation/use-git-pre-commit-hooks-avoid-aws-cloudformation-errors/) -- [Introducing a Public Registry for AWS CloudFormation](https://aws.amazon.com/es/blogs/aws/introducing-a-public-registry-for-aws-cloudformation/) -- [cloudkatha.com: How to Setup S3 Bucket CORS Configuration using CloudFormation](https://cloudkatha.com/how-to-setup-s3-bucket-cors-configuration-using-cloudformation) -- [cloudkatha.com: How to Configure AWS SQS Dead Letter Queue using CloudFormation](https://cloudkatha.com/how-to-configure-aws-sqs-dead-letter-queue-using-cloudformation/) -- [cloudkatha.com: How to Create an S3 Bucket using CloudFormation](https://cloudkatha.com/how-to-create-an-s3-bucket-using-cloudformation/) -- [cloudkatha.com: How to use CloudFormation to Create SNS Topic and Subscription](https://cloudkatha.com/how-to-use-cloudformation-to-create-sns-topic-and-subscription/) -- [cloudkatha.com: How to Create IAM Role using CloudFormation](https://cloudkatha.com/how-to-create-iam-role-using-cloudformation/) - -## Infrastructure Code Template Generators -- [aws.amazon.com: Amazon EC2 announces Spot Blueprints, an infrastructure code template generator to get started with EC2 Spot Instances](https://aws.amazon.com/about-aws/whats-new/2020/12/amazon-ec2-announces-spot-blueprints-an-infrastructure-code-template-generator-to-get-started-with-ec2-spot-instances/) - -### Former2 to generate IaC templates -- [former2.com](https://former2.com/) -- [Accelerate infrastructure as code development with open source Former2](https://aws.amazon.com/blogs/opensource/accelerate-infrastructure-as-code-development-with-open-source-former2/) - -### Console Recorder for AWS -- [==onecloudplease.com: Console Recorder for AWS==](https://onecloudplease.com/project/console-recorder) Records actions made in the AWS Management Console and outputs the equivalent CLI / SDK commands and CloudFormation / Terraform templates. - -## AWS for Windows -- [blog.rackspace.com: Patch and AMI Management for Windows on AWS](http://blog.rackspace.com/patch-and-ami-management-for-windows-on-aws) step-by-step guide about patch and AMI management for Windows on AWS - -## Continuous Deployment with AWS -- [Continuous Deployment with AWS](https://aws.amazon.com/blogs/devops/tag/continuous-deployment/) - -## AWS Security -- [AWS Security Blog](http://blogs.aws.amazon.com/security) -- [AWS Security](https://aws.amazon.com/security/) -- [AWS Security docs](https://docs.aws.amazon.com/security/) -- [Tutorial: Configure Apache Web Server on Amazon Linux to use SSL/TLS](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-an-instance.html) -- [The Most Popular AWS Security Blog Posts in 2015](http://blogs.aws.amazon.com/security/post/Tx4QX7W51NDSLO/The-Most-Popular-AWS-Security-Blog-Posts-in-2015) -- [dzone: Private Subnets Are Broken on AWS](https://dzone.com/articles/private-subnets-are-broken-on-aws) -- [Amazon’s customer service backdoor](https://medium.com/@espringe/amazon-s-customer-service-backdoor-be375b3428c4#.qyixu5mu3) -- [Announcing Industry Best Practices for Securing AWS Resources](http://blogs.aws.amazon.com/security/post/Tx3PTTZB14FWPBA/Announcing-Industry-Best-Practices-for-Securing-AWS-Resources) -- [The Most Viewed AWS Security Blog Posts so Far in 2016](http://blogs.aws.amazon.com/security/post/Tx2N52FR8XGJVL3/The-Most-Viewed-AWS-Security-Blog-Posts-so-Far-in-2016) -- [Oracle Database Encryption Options on Amazon RDS](https://aws.amazon.com/es/blogs/apn/oracle-database-encryption-options-on-amazon-rds/) -- [Learn AWS Security Fundamentals with Free and Online Training](https://aws.amazon.com/about-aws/whats-new/2016/06/learn-aws-security-fundamentals-with-free-and-online-training) -- [How to Restrict Amazon S3 Bucket Access to a Specific IAM Role](http://blogs.aws.amazon.com/security/post/TxK5WUJK3DG9G8/How-to-Restrict-Amazon-S3-Bucket-Access-to-a-Specific-IAM-Role) -- [Updated Whitepaper Available: AWS Best Practices for DDoS Resiliency](http://blogs.aws.amazon.com/security/post/Tx6QAIBSQTJPHB/Updated-Whitepaper-Available-AWS-Best-Practices-for-DDoS-Resiliency) -- [AWS Security Blog: In Case You Missed These: AWS Security Blog Posts from June, July, and August 2016](http://blogs.aws.amazon.com/security/post/Tx3KVD6T490MM47/In-Case-You-Missed-These-AWS-Security-Blog-Posts-from-June-July-and-August) -- [Amazon Inspector Announces General Availability for Windows](https://aws.amazon.com/es/about-aws/whats-new/2016/08/amazon-inspector-announces-general-availability-for-windows/) -- [encrypt and decrypt data: Importing Key Material in AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) Use your own encryption keys with AWS Key Management Service. -- [Amazon s2n: AWS’s new Open Source implementation of the SSL/TLS network encryption protocols](http://blogs.aws.amazon.com/security/post/TxLEHNNDPUFDU9/Automated-Reasoning-and-Amazon-s2n) -- [dzone: 9 AWS Security Best Practices: Securing Your AWS Cloud](https://dzone.com/articles/9-aws-security-best-practices-securing-your-aws-cl) Working with Amazon facilities, it is necessary to implement AWS security best practices to ensure the safety of the data and the cloud. -- [Encrypt global data client-side with AWS KMS multi-Region keys](https://aws.amazon.com/blogs/security/encrypt-global-data-client-side-with-aws-kms-multi-region-keys/) Today, AWS Key Management Service (AWS KMS) is introducing multi-Region keys, a new capability that lets you replicate keys from one Amazon Web Services (AWS) Region into another. Multi-Region keys are designed to simplify management of client-side encryption when your encrypted data has to be copied into other Regions for disaster recovery or is replicated in Amazon DynamoDB global tables. -- [dzone: Removing the Bastion Host and Improving the Security in AWS](https://dzone.com/articles/removing-the-bastion-host-and-improving-the-securi) This article covers the security in AWS and overcoming the classic SSH/RDP jump with a better alternative for all OS. -- [acloudguru.com: How to audit and secure an AWS account](https://acloudguru.com/blog/engineering/how-to-audit-and-secure-an-aws-account) -- [yobyot.com: AWS multi-region KMS keys and Data Lifecycle Manager: better together](https://www.yobyot.com/aws/aws-multi-region-keys-and-ec2-data-lifecycle-manager/2021/08/18/) -- [try.jupiterone.com: The Absolute Minimum Every Developer Must Know about AWS Security](https://try.jupiterone.com/the-absolute-minimum-every-developer-must-know-about-aws-security) -- [==How to automate AWS account creation with SSO user assignment==](https://aws.amazon.com/blogs/security/how-to-automate-aws-account-creation-with-sso-user-assignment/) -- [Security practices in AWS multi-tenant SaaS environments](https://aws.amazon.com/blogs/security/security-practices-in-aws-multi-tenant-saas-environments/) Many good tips, from identity management to tenant isolation. - -### Policy as Code with AWS CDK and Open Policy Agent -- [Realize Policy-as-Code with AWS Cloud Development Kit through Open Policy Agent 🌟](https://aws.amazon.com/blogs/opensource/realize-policy-as-code-with-aws-cloud-development-kit-through-open-policy-agent/) - -### Payment Card Industry Data Security Standard compliance -- [PCI DSS Standardized Architecture on the AWS Cloud: Quick Start Reference Deployment](https://aws.amazon.com/about-aws/whats-new/2016/05/pci-dss-standardized-architecture-on-the-aws-cloud-quick-start-reference-deployment/) - -### AWS IAM -- [AWS Identity and Access Management - Getting Started](http://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) -- [AWS Identity and Access Management (IAM) best practices in 2016](http://blogs.aws.amazon.com/security/post/Tx2OB7YGHMB7WCM/Adhere-to-IAM-Best-Practices-in-2016) -- [How to Record and Govern Your IAM Resource Configurations Using AWS Config](http://blogs.aws.amazon.com/security/post/Tx14ADBJOCAT9NS/How-to-Record-and-Govern-Your-IAM-Resource-Configurations-Using-AWS-Config) -- [How to Use SAML to Automatically Direct Federated Users to a Specific AWS Management Console Page](http://blogs.aws.amazon.com/security/post/Tx2CGWIB8SBYW2J/How-to-Use-SAML-to-Automatically-Direct-Federated-Users-to-a-Specific-AWS-Manage) -- [New IAMCTL tool compares multiple IAM roles and policies](https://aws.amazon.com/es/blogs/security/new-iamctl-tool-compares-multiple-iam-roles-and-policies/) -- [Bring your own CLI to Session Manager with configurable shell profiles](https://aws.amazon.com/es/blogs/mt/bring-your-own-cli-session-manager-configurable-shell-profiles/) -- [keepler.io: Gestionando el control de accesos en nuestro data lake en AWS](https://keepler.io/2021/03/gestionando-el-control-de-accesos-en-nuestro-data-lake-en-aws/) -- [aws.amazon.com: IAM Access Analyzer now supports over 100 policy checks with actionable recommendations to help you author secure and functional policies](https://aws.amazon.com/about-aws/whats-new/2021/03/iam-access-analyzer-supports-over-100-policy-checks-with-actionable-recommendations/) -- [aws.amazon.com: IAM Access Analyzer Update – Policy Validation](https://aws.amazon.com/blogs/aws/iam-access-analyzer-update-policy-validation/) -- [netflixtechblog.com: ConsoleMe: A Central Control Plane for AWS Permissions and Access](https://netflixtechblog.com/consoleme-a-central-control-plane-for-aws-permissions-and-access-fd09afdd60a8) - [github.com/Netflix/consoleme](https://github.com/Netflix/consoleme) -- [cloudkatha.com: Difference between Root User and IAM User in AWS You Need to Know](https://cloudkatha.com/difference-between-root-user-and-iam-user-in-aws-you-need-to-know/) -- [ben11kehoe.medium.com: AWS Authentication: Principals (users and roles) in AWS IAM](https://ben11kehoe.medium.com/principals-in-aws-iam-38c4a3dc322a) this article uses the boto3, the AWS Python SDK, as an example, but other SDKs have analogous features. -- [infoq.com: Incorrect IAM Policy Raised Questions About AWS Access to S3 Data](https://www.infoq.com/news/2022/01/aws-iam-s3-access/) -- [==iann0036/iamlive==](https://github.com/iann0036/iamlive) Generate an IAM policy from AWS calls using client-side monitoring (CSM) or embedded proxy -- [==awsiam.info: AWS IAM Search==](https://www.awsiam.info) - -### AWS Organizations -- [Simplifying permissions management at scale using tags in AWS Organizations](https://aws.amazon.com/blogs/mt/simplifying-permissions-management-at-scale-using-tags-in-aws-organizations/) -- [Standardize compliance in AWS using DevOps and a Cloud Center of Excellence (CCOE) approach](https://aws.amazon.com/blogs/mt/standardize-compliance-in-aws-using-devops-and-a-cloud-center-of-excellence-ccoe-approach/) - -### AWS CloudFront -- [Amazon CloudFront now supports HTTP/2](https://aws.amazon.com/about-aws/whats-new/2016/09/amazon-cloudfront-now-supports-http2/) - -### AWS Firewalls -- [doit-intl.com: AWS Firewalls 101: How and when to use each one](https://blog.doit-intl.com/aws-firewalls-101-how-and-when-to-use-each-one-d4ad8087a6b3) -- [Automatically block suspicious traffic with AWS Network Firewall and Amazon GuardDuty](https://aws.amazon.com/es/blogs/security/automatically-block-suspicious-traffic-with-aws-network-firewall-and-amazon-guardduty) - -### AWS WAF Web Application Firewall -- [AWS WAF - Web Application Firewall](https://aws.amazon.com/waf/) -- [How to Automatically Update Your Security Groups for Amazon CloudFront and AWS WAF by Using AWS Lambda (boto3 python)](http://blogs.aws.amazon.com/security/post/Tx1LPI2H6Q6S5KC/How-to-Automatically-Update-Your-Security-Groups-for-Amazon-CloudFront-and-AWS-W) -- [How to Use AWS WAF to Block IP Addresses That Generate Bad Requests](http://blogs.aws.amazon.com/security/post/Tx223ZW25YRPRKV/How-to-Use-AWS-WAF-to-Block-IP-Addresses-That-Generate-Bad-Requests) -- [How to Reduce Security Threats and Operating Costs Using AWS WAF and Amazon CloudFront](http://blogs.aws.amazon.com/security/post/Tx1G747SE1R2ZWE/How-to-Reduce-Security-Threats-and-Operating-Costs-Using-AWS-WAF-and-Amazon-Clou) -- [AWS WAF sample rules](https://github.com/awslabs/aws-waf-sample) -- [medium: Blocking bots using AWS WAF](https://medium.com/cloud-techies/blocking-bots-using-aws-waf-d449e6d159ca) -- [medium: Protecting your Web Application or APIs using AWS WAF](https://medium.com/avmconsulting-blog/protecting-your-web-application-or-apis-using-aws-waf-1829ff79275a) - -### AWS Vault -- [AWS Vault](https://github.com/99designs/aws-vault) is a tool to securely store and access AWS credentials in a development environment. -- [AWS: Sourcing AWS CLI Credentials using a Custom AWS CLI Credential Provider and AWS Vault](https://thomas.geens.be/2020/05/24/aws-sourcing-aws-cli-credentials-using-a-custom-aws-cli-credential-provider-and-aws-vault/) - -## AWS S3 & EBS. AWS Storage Gateway -- [S3 FAQ](https://aws.amazon.com/s3/faqs/) -- [Making Requests to Amazon S3 over IPv6](http://docs.aws.amazon.com/AmazonS3/latest/dev/ipv6-access.html) Amazon Simple Storage Service (Amazon S3) supports the ability to access S3 buckets using the Internet Protocol version 6 (IPv6), in addition to the IPv4 protocol. -- [How to Build Sparse EBS Volumes for Fun and Easy Snapshotting](https://aws.amazon.com/blogs/apn/how-to-build-sparse-ebs-volumes-for-fun-and-easy-snapshotting/) -- [Getting Started with AWS Storage Gateway](http://docs.aws.amazon.com/storagegateway/latest/userguide/GettingStarted-common.html) -- [devopscube.com: How to Automate EBS Snapshot Creation, Retention and Deletion](https://devopscube.com/automate-ebs-snapshot-creation-deletion/) -- [cloudkatha.com: Is S3 Region Specific or Global? What do you think?](https://cloudkatha.com/is-s3-region-specific-or-global-what-do-you-think/) -- [cloudkatha.com: This is why S3 Bucket Names are unique Globally](https://cloudkatha.com/why-s3-bucket-names-are-unique-globally/) -- [cloudkatha.com: AWS S3 Storage Classes: Everything You Need to Know](https://cloudkatha.com/aws-s3-storage-classes-everything-you-need-to-know/) -- [A step-by-step guide to synchronize data between Amazon S3 buckets](https://aws.amazon.com/blogs/storage/a-step-by-step-guide-to-synchronize-data-between-amazon-s3-buckets) -- [percona.com: Performance of Various EBS Storage Types in AWS](https://www.percona.com/blog/performance-of-various-ebs-storage-types-in-aws/) -- [harness.io: Tutorial: [Artifact Servers] S3 – How to Provide Cross-Account Access Via Bucket Policies](https://harness.io/blog/devops/tutorial-s3-cross-account/) -- [Connect Amazon S3 File Gateway using AWS PrivateLink for Amazon S3](https://aws.amazon.com/es/blogs/architecture/connect-amazon-s3-file-gateway-using-aws-privatelink-for-amazon-s3/) -- [blog.min.io: Certificate-based Authentication for S3](https://blog.min.io/certificate-based-authentication-with-s3/) MinIO encrypts data when stored on disk and when transmitted over the network. -- [==acloudguru.com: S3 Glacier Instant Retrieval deep dive: Which S3 Storage Class is right for me?==](https://acloudguru.com/blog/engineering/s3-glacier-instant-retrieval-deep-dive-which-s3-storage-class-is-right-for-me) - -## Amazon EFS Elastic File System -- [EFS Elastic File System](https://aws.amazon.com/blogs/aws/amazon-elastic-file-system-production-ready-in-three-regions) -- [Amazon Elastic File System triples read throughput](https://aws.amazon.com/about-aws/whats-new/2021/01/amazon-elastic-file-system-triples-read-throughput/) - -## AWS Transfer -- [infoq.com: AWS Transfer Family Introduces Support for EFS](https://www.infoq.com/news/2021/01/aws-transfer-ftp-efs/) - -## AWS Fargate -- [Amazon EFS with Amazon ECS and AWS Fargate – Part 1](https://aws.amazon.com/es/blogs/containers/developers-guide-to-using-amazon-efs-with-amazon-ecs-and-aws-fargate-part-1/) - -### Admiralty -- [admiralty.io](https://admiralty.io/) The simplest way to deploy applications to multiple Kubernetes clusters. -- [thenewstack.io: Making Kubernetes Serverless and Global with AWS Fargate on EKS and Admiralty](https://thenewstack.io/making-kubernetes-serverless-and-global-with-aws-fargate-on-eks-and-admiralty/) - - [admiralty.io: Multi-Region AWS Fargate on EKS](https://admiralty.io/docs/tutorials/fargate/) - -## AWS Backup and Recovery. Design for failure. Disaster Recovery -- [Quantum Taps AWS for Cloud-Powered Disaster Recovery](http://www.infostor.com/backup-and_recovery/quantum-taps-aws-for-cloud-powered-disaster-recovery.html) -- [Linkedin discussion: Need help on Backup and restore methods of EC2 using s3 services](https://www.linkedin.com/groups/49531/49531-6093375473969090562) -- [Design for failure lessons learnt from the Sydney AWS outage](https://www.hava.io/blog/design-for-failure-lessons-learnt-from-the-sydney-aws-outage) -- [Chaos Monkey](https://github.com/Netflix/SimianArmy/wiki/Chaos-Monkey) The Netflix Chaos Monkey tool allows you to proactively launch attack code against your infrastructure to cause failures and give you the chance to fix potential problems before they occur on their own. -- [Udemy - AWS: How to Architect with a Design for Failure Approach](https://www.udemy.com/how-to-architect-with-a-design-for-failure-approach/) -- [How to Restore Your Instance Data from a Backup using Snapshots on AWS EC2/EBS](https://www.cloudinsidr.com/content/how-to-restore-your-instance-data-from-a-backup-using-snapshots-on-aws-ec2ebs/) -- [Backup and archive to AWS Storage Gateway VTL with Veeam Backup & Replication v9](https://aws.amazon.com/es/about-aws/whats-new/2016/08/backup-and-archive-to-aws-storage-gateway-vtl-with-veeam-backup-and-replication-v9/) -- [Creating Disaster Recovery Mechanisms Using Amazon Route 53](https://aws.amazon.com/blogs/networking-and-content-delivery/creating-disaster-recovery-mechanisms-using-amazon-route-53/) - -### AWS Backup Service -- [AWS Backup Service](https://aws.amazon.com/backup) -- [medium: AWS Backup Service for Amazon RDS](https://medium.com/avmconsulting-blog/aws-backup-service-for-amazon-rds-3e6f5827aa66) - -## AWS Config Rules -- [AWS Config Rules now available in 4 new regions: US West (Oregon), EU (Ireland), EU (Frankfurt) and Asia Pacific (Tokyo)](https://aws.amazon.com/es/about-aws/whats-new/2016/04/aws-config-rules-now-available-in-4-new-regions-us-west-oregon-eu-ireland-eu-frankfurt-and-asia-pacific-tokyo/) - -## AWS Big Data -- [aws.amazon.com/big-data](http://aws.amazon.com/big-data) -- [blogs.aws.amazon.com/bigdata](http://blogs.aws.amazon.com/bigdata/) -- [Querying Amazon Kinesis Streams Directly with SQL and Spark Streaming](https://aws.amazon.com/blogs/big-data/querying-amazon-kinesis-streams-directly-with-sql-and-spark-streaming/) -- [Using Spark SQL for ETL](http://blogs.aws.amazon.com/bigdata/post/Tx2D93GZRHU3TES/Using-Spark-SQL-for-ETL) -- [whizlabs.com: AWS Kinesis vs Kafka Apache](https://www.whizlabs.com/blog/kinesis-vs-kafka/) - -### AWS Data Lake -- [Building a Data Lake on AWS](https://aws.amazon.com/big-data/data-lake-on-aws/) AWS provides a highly scalable, flexible, secure, and cost-effective solution for your organization to build a Data Lake – a data repository for both structured and unstructured data that is designed to be easily accessible for on-demand data analytics enabling you to answer questions as they arise. - -### AWS Data Pipeline (aka Big Data Pipelines or Data Streams) -- [AWS Data Pipeline](https://aws.amazon.com/datapipeline/) -- [AWS Data Pipeline Documentation](https://docs.aws.amazon.com/data-pipeline/index.html) -- [medium: No-Code Data Collect API on AWS](https://medium.com/@dima.statz_89242/no-code-data-collect-api-on-aws-d79e3681d204) A No-Code Data Collections mechanism for Big Data Pipelines on AWS. -- [AWS Big Data Blog: Category - AWS Data Pipeline](https://aws.amazon.com/blogs/big-data/category/analytics/aws-data-pipeline/) - -## AWS NoSQL DynamoDB -- [Easily model your app data in a NoSQL database with AWS Mobile Hub](https://aws.amazon.com/es/about-aws/whats-new/2016/06/easily-model-your-app-data-in-a-nosql-database-with-aws-mobile-hub/) -- [medium: An Ultimate Guide to AWS Serverless database — DynamoDB](https://medium.com/javascript-in-plain-english/an-ultimate-guide-to-aws-serverless-database-dynamodb-aa048a62f2da) AWS DynamoDb is a fully managed, NoSQL, Single digit latency, a serverless database that can handle any kind of online workloads. - -## AWS IoT -- [aws.amazon.com/en/iot](https://aws.amazon.com/en/iot) -- [What Is AWS IoT?](http://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html) - -## AWS Elastic Transcoder. Video streaming -- [Settings that You Specify When You Create an Elastic Transcoder Job](http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/job-settings.html) - -## AWS and Splunk -- [blogs.splunk.com: AWS Agility + Splunk Visibility = Customer Success](http://blogs.splunk.com/2016/06/22/aws-video/) - -## AWS Monitoring -- [github: Steps I used to install Nagios in the cloud](https://github.com/andrewpuch/nagios_setup) -- [github: ElectricEye](https://github.com/jonrau1/ElectricEye/blob/master/README.md) is a set of Python scripts (affectionately called Auditors) that continuously monitor your AWS infrastructure looking for configurations related to confidentiality, integrity and availability that do not align with AWS best practices. -- [medium: AWS Account Security Monitoring](https://medium.com/swlh/aws-account-security-monitoring-d7ca129d52ac) -- [==elastic.co: Elastic and AWS: Accelerating the cloud migration journey==](https://www.elastic.co/blog/elastic-and-aws-accelerate-your-cloud-migration-journey) - -## Amazon Alexa. Voice User Interface -- [New Alexa Skills Kit Template: Build a Trivia Skill in under an Hour](https://developer.amazon.com/public/community/post/TxDJWS16KUPVKO/New-Alexa-Skills-Kit-Template-Build-a-Trivia-Skill-in-under-an-Hour) - -## AWS Partner Network (APN) -- [AWS Partner Network](https://aws.amazon.com/partners/) - - [APN Technology Partners](https://aws.amazon.com/partners/technology/) - - [APN Consulting Partners](https://aws.amazon.com/partners/consulting/) -- [AWS Partner Network (APN) blog](https://aws.amazon.com/blogs/apn/) - - [Active Directory Single Sign-On (SSO) on AWS with Bitium](https://aws.amazon.com/blogs/apn/active-directory-single-sign-on-sso-on-aws-with-bitium) - - [How to Deploy a High Availability Web Service on AWS Using Spotinst](https://aws.amazon.com/blogs/apn/how-to-deploy-a-high-availability-web-service-on-aws-using-spotinst/) - -## AWS Startup Collection. For startups building on AWS -- [bitmovin: Improving Video Quality on the Web](https://medium.com/aws-activate-startup-blog/bitmovin-improving-video-quality-on-the-web-8670039c4334) -- [What Startups Should Know about Amazon VPC — Part 1](https://medium.com/aws-activate-startup-blog/what-startups-should-know-about-amazon-vpc-part-1-bebe94b7f228) -- [Scaling on AWS (Part 3): >500K Users](https://medium.com/aws-activate-startup-blog/scaling-on-aws-part-3-500k-users-3750b227b761) -- [medium.com: Building a Serverless Dynamic DNS System with AWS](https://medium.com/aws-activate-startup-blog/building-a-serverless-dynamic-dns-system-with-aws-a32256f0a1d8#.qq54pucbd) -- [medium.com: The Top 10 AWS Startup Blog Posts of 2015](https://medium.com/aws-activate-startup-blog/the-top-10-aws-startup-blog-posts-of-2015-d2975e3778bb) - -## AWS ECS -- [cloudonaut.io: Scaling Container Clusters on AWS: ECS and EKS](https://cloudonaut.io/scaling-container-clusters-on-aws-ecs-eks/) -- [medium: Creating CI/CD Pipeline for AWS ECS — Part I](https://medium.com/@harshvijaythakkar/creating-ci-cd-pipeline-for-aws-ecs-part-i-b2f61bb1522f) -- [clickittech.com: Amazon ECS vs EKS : The Best Container Orchestration Platform](https://www.clickittech.com/aws/amazon-ecs-vs-eks/) -- [dev.to: Sharing secrets to ECS in an AWS multi-account architecture](https://dev.to/aws-builders/sharing-secrets-to-ecs-in-an-aws-multi-account-architecture-5h1i) -- [cast.ai: AWS EKS vs. ECS vs. Fargate: Where to manage your Kubernetes?](https://cast.ai/blog/aws-eks-vs-ecs-vs-fargate-where-to-manage-your-kubernetes/) -- [neal-davis.medium.com: ECS vs EC2 vs Lambda](https://neal-davis.medium.com/ecs-vs-ec2-vs-lambda-36b8ca380dea) - -## Rancher on AWS -- [aws-quickstart.github.io: Rancher on the AWS Cloud. Quick Start Reference Deployment](https://aws-quickstart.github.io/quickstart-eks-rancher/) - -## AWS App Mesh -- [AWS App Mesh Workshop](https://www.appmeshworkshop.com/) -- [amazon.com: Leveraging App Mesh with Amazon EKS in a Multi-Account environment](https://aws.amazon.com/blogs/containers/leveraging-app-mesh-with-amazon-eks-in-a-multi-account-environment/) - -## AWS Fargate -- [Deploy Machine Learning Pipeline on AWS Fargate](https://www.kdnuggets.com/2020/07/deploy-machine-learning-pipeline-aws-fargate.html) -- [deloitte.com: Fargate con EKS](https://www2.deloitte.com/es/es/blog/todo-tecnologia/2021/fargate-con-eks.html) ¿Es Fargate la solución de AWS con la que siempre soñamos para evitar manejar infraestructura con Kubernetes? Sí, pero… - -## Interview Questions -- [intellipaat.com: Top Amazon AWS Interview Questions – Most Asked](https://intellipaat.com/blog/interview-question/amazon-aws-interview-questions/) -- [Frequently Asked AWS Interview Questions](https://www.interviewbit.com/aws-interview-questions/) -- [TGB - AWS Interview Questions and Answers - Frequently asked](https://www.techgeekbuzz.com/top-aws-interview-questions-and-answers/) - -## Local Testing -- [Amazon EC2 Metadata Mock](https://github.com/aws/amazon-ec2-metadata-mock) - -### Localstack -- [localstack.cloud](https://localstack.cloud/) Develop and test your cloud apps offline. A fully functional local AWS cloud stack. Develop and test your cloud & Serverless apps offline! -- [github.com/localstack/localstack](https://github.com/localstack/localstack) - -## Migrating On Premise VM to AWS -- [youtube: Migrating On Premise VM to AWS | VM Import/Export | Create EC2 instance based on on-premises server](https://youtu.be/buzusNljpy4) +## AWS Patterns +- [medium: Top 4 AWS Patterns of Highly Available API](https://medium.com/greenm/top-4-aws-patterns-of-highly-available-api-d34599bfbb96) We want to tell you about a few common patterns that can be used to build highly available APIs on top of AWS infrastructure. We will highlight each of them and briefly describe the pros and cons. ## AWS configuration files - [medium: AWS configuration files, explained](https://medium.com/@ben11kehoe/aws-configuration-files-explained-9a7ea7a5b42e) -## Open Source at AWS -- [OpenSource at AWS](https://aws.github.io/) +## AWS Config Rules +- [AWS Config Rules now available in 4 new regions: US West (Oregon), EU (Ireland), EU (Frankfurt) and Asia Pacific (Tokyo)](https://aws.amazon.com/about-aws/whats-new/2016/04/aws-config-rules-now-available-in-4-new-regions-us-west-oregon-eu-ireland-eu-frankfurt-and-asia-pacific-tokyo/) -## AWS Service Quota Requests -- [How can I troubleshoot errors using the AWS CLI to manage my service quota requests?](https://aws.amazon.com/es/premiumsupport/knowledge-center/troubleshoot-service-quotas-cli-commands/) -- [AWS API: get-service-quota](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/service-quotas/get-service-quota.html) +## AWS Management Console +- [Working with the AWS Management Console](http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/getting-started.html) ## Resource Hierarchies - [AWS, Azure, GCP: Resource Hierarchies](https://levelup.gitconnected.com/aws-azure-gcp-resource-hierarchies-25b829127511) -## AWS Systems Manager Explorer -- [Multi-account AWS Trusted Advisor summaries now available in AWS Systems Manager Explorer](https://aws.amazon.com/blogs/mt/multi-account-aws-trusted-advisor-summaries-now-available-aws-systems-manager-explorer/) - -## AWS Systems Manager Incident Manager -- [How to automate incident response to security events with AWS Systems Manager Incident Manager](https://aws.amazon.com/blogs/security/how-to-automate-incident-response-to-security-events-with-aws-systems-manager-incident-manager/) - -## AWS Managed Services for Prometheus and Grafana -- [Amazon Managed Service for Prometheus](https://aws.amazon.com/prometheus/) Highly available, secure, and managed monitoring for your containers -- [Amazon Managed Service for Grafana](https://aws.amazon.com/grafana/) Powerful, interactive data visualizations for builders, operators, and business leaders -- [infoq.com: AWS Introduces Amazon Managed Service for Grafana and Amazon Managed Service for Prometheus](https://www.infoq.com/news/2021/01/aws-grafana-prometheus/) - -## AWS Chaos Engineeering. AWS Fault Injection Simulator -- [techcrunch.com: AWS introduces new Chaos Engineering as a Service offering](https://techcrunch.com/2020/12/15/aws-introduces-new-chaos-engineering-as-a-service-offering/) - -## Best Practices -- [thenewstack.io: Avoid the 5 Most Common Amazon Web Services Misconfigurations in Build-Time](https://thenewstack.io/avoid-the-5-most-common-amazon-web-services-misconfigurations-in-build-time/) -- [zarantech.com: Top 5 Pillars of AWS Well-Architected Structure](https://www.zarantech.com/blog/top-5-pillars-of-aws-well-architected-structure/) -- [foreseeti.com: How to become and stay AWS well architected in a smart way](https://foreseeti.com/how-to-become-and-stay-aws-well-architected-in-a-smart-way/) - -## New Features -- [thenewstack.io: HashiCorp Adds Consul and Vault to Cloud Platform for AWS](https://thenewstack.io/hashicorp-adds-consul-and-vault-to-cloud-platform-for-aws/) -- [Amazon EKS clusters now support user authentication with OIDC compatible identity providers](https://aws.amazon.com/about-aws/whats-new/2021/02/amazon-eks-clusters-support-user-authentication-oidc-compatible-identity-providers/) -- [Amazon Managed Service for Grafana (AMG) preview updated with new capabilities](https://aws.amazon.com/blogs/mt/amazon-managed-service-for-grafana-amg-preview-updated-with-new-capabilities/) -- [xataka.com: Hasta AWS se pasa al low-code: Workflow Studio es su primera herramienta de desarrollo de bajo código](https://www.xataka.com/pro/aws-se-pasa-al-low-code-workflow-studio-su-primera-herramienta-desarrollo-codigo) -- [Easily Manage Security Group Rules with the New Security Group Rule ID](https://aws.amazon.com/blogs/aws/easily-manage-security-group-rules-with-the-new-security-group-rule-id) -- [Amazon Virtual Private Cloud (VPC) customers can now assign IP prefixes to their EC2 instances](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-virtual-private-cloud-vpc-customers-can-assign-ip-prefixes-ec2-instances) -- [AWS Network Firewall – Nuevo Servicio Gestionado de Firewall para VPC](https://aws.amazon.com/es/blogs/aws-spanish/aws-network-firewall-nuevo-servicio-gestionado-de-firewall-para-vpc/) -- [Amazon EC2 Auto Scaling now lets you control which instances to terminate on scale-in](https://aws.amazon.com/about-aws/whats-new/2021/07/amazon-ec2-auto-scaling-now-lets-you-control-which-instances-to-terminate-on-scale-in/) -- [EC2-Classic Networking is Retiring – Here’s How to Prepare](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/) -- [Announcing General Availability of Amazon Redshift Cross-account Data Sharing](https://aws.amazon.com/about-aws/whats-new/2021/08/announcing-general-availability-amazon-redshift-cross-account-data-sharing/) -- [infoq.com: Amazon Introduces Cloudwatch Cross Account Alarms to Consolidate Management](https://www.infoq.com/news/2021/08/aws-cloudwatch-alarms/) -- [Monitor, Evaluate, and Demonstrate Backup Compliance with AWS Backup Audit Manager](https://aws.amazon.com/blogs/aws/monitor-evaluate-and-demonstrate-backup-compliance-with-aws-backup-audit-manager/) -- [Amazon Managed Grafana Is Now Generally Available with Many New Features](https://aws.amazon.com/blogs/aws/amazon-managed-grafana-is-now-generally-available-with-many-new-features) - -## Superwerker -- [superwerker](https://aws.amazon.com/quickstart/architecture/superwerker/) Automates AWS Cloud deployments backed by decades of expertise and best practices - -## AWS Samples (Boilerplates) -- [github.com/aws-samples 🌟](https://github.com/aws-samples) -- [github.com/aws-samples/aws-auto-inventory: AWS Automated Inventory 🌟](https://github.com/aws-samples/aws-auto-inventory) A command line tool that allows you to quickly and easily generate inventory reports of your AWS resources. -- [github.com/aws-samples/aws-waf-ops-dashboards](https://github.com/aws-samples/aws-waf-ops-dashboards) In this repository, we share code for building infrastructure to collect, enrich, and visualize AWS Web Application Firewall logs. Implementing this project in your AWS account will allow you to view and filter the logs through Kibana dashboards below, as well as customize views and dashboards to your needs. -- [github.com/aws-samples/aws-customer-playbook-framework 🌟](https://github.com/aws-samples/aws-customer-playbook-framework) This repository provides sample templates for security playbooks against various scenarios when using Amazon Web Services. - -## Third Party Tools -- [ec2-spot-converter](https://github.com/jcjorel/ec2-spot-converter) This tool converts existing EC2 instances back and forth from on-demand and 'persistent' Spot billing models while preserving instance attributes (Launch configuration, Tags..), network attributes (existing Private IP addresses, Elastic IP), storage (Volumes), Elastic Inference accelerators and Elastic GPUs. It also allows replacement of existing Spot instances with new "identical" ones to update the instance type and cpu options. -- [techcrunch.com: Vantage makes managing AWS easier](https://techcrunch.com/2021/01/12/vantage-makes-managing-aws-easier/) -- [vantage.sh](https://www.vantage.sh/) - -## AWS Amplify -- [blog.logrocket.com: AWS Amplify and React Native: A tutorial](https://blog.logrocket.com/aws-amplify-and-react-native-a-tutorial/) -- [dev.to: 10 New AWS Amplify Features to Check Out](https://dev.to/aws/10-new-aws-amplify-features-to-check-out-4291) - -## AWS Control Tower -- [==AWS Control Tower==](https://aws.amazon.com/controltower/) The easiest way to set up and govern a secure multi-account AWS environment -- [==aws.amazon.com: New – AWS Control Tower Account Factory for Terraform==](https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/) -- [hashicorp.com: HashiCorp Teams with AWS on New Control Tower Account Factory for Terraform](https://www.hashicorp.com/blog/hashicorp-teams-with-aws-on-new-control-tower-account-factory-for-terraform) AWS Control Tower Account Factory for HashiCorp Terraform (AFT), the evolution of Terraform Landing Zones, offers an easy way to set up and govern a secure, multi-account AWS environment. - -## AWS App Runner -- https://aws.amazon.com/apprunner/ -- [dev.to: AWS App Runner : How to deploy containerized applications using App Runner](https://dev.to/aws-builders/aws-app-runner-how-to-deploy-containerized-applications-using-app-runner-1f7c) AWS App Runner is an AWS service that provides a fast, simple and cost-effective way to deploy from source code or a container image directly to a scalable and secure web application in the AWS Cloud. You don’t need to learn new technologies, decide which compute service to use, or know how to provision and configure AWS resources. - -## Spain -- [AWS en España](https://aws.amazon.com/es/local/spain/) -- [xataka.com: Por qué Amazon ha elegido Aragón para instalar sus tres primeros centros de datos en España](https://www.xataka.com/servicios/que-amazon-ha-elegido-aragon-para-instalar-sus-tres-primeros-centros-datos-espana) -- [RESOURCE HUB: Eventos y webinars de AWS](https://emea-resources.awscloud.com/spain-events-webinars) -- [aboutamazon.es: AWS acelera la apertura de la Región AWS Europa (España) para apoyar la transformación digital de España](https://www.aboutamazon.es/innovaci%C3%B3n/aws-acelera-la-apertura-de-la-regi%C3%B3n-aws-europa-espa%C3%B1a-para-apoyar-la-transformaci%C3%B3n-digital-de-espa%C3%B1a) - -## Scripts -- [AWS IP inventory](https://github.com/okelet/awsipinventory) Tool to generate an inventory of all IP addresses in use in an account, one or multiple VPC, or one or multiple subnet. -- [dev.to: How to Copy a Security Group with Rules from one AWS Account to Another account](https://dev.to/dineshrathee12/how-to-copy-a-security-group-with-rules-from-one-aws-account-to-another-account-36mb) - - [CopySGFromOneAWSAccountToAnotherScript.py](https://github.com/dineshrathee12/CopySecurityGroupWithRulesFromOneAWSAccountToAnotherAWSAccount/blob/main/CopySGFromOneAWSAccountToAnotherScript.py) -- [github.com/awslabs/assisted-log-enabler-for-aws: Assisted Log Enabler - Find resources that are not logging, and turn them on](https://github.com/awslabs/assisted-log-enabler-for-aws) -- https://github.com/dannysteenman/aws-toolbox A collection of useful Shell & Python scripts that make your DevOps life easier in AWS. Furthermore you'll also find a list of links that point to awesome DevOps tools from other creators. -- [saml-to/assume-aws-role-action](https://github.com/saml-to/assume-aws-role-action) Assume AWS IAM Roles using SAML.to in GitHub Actions. This action enables workflows to obtain AWS Access Credentials for a desired IAM Role using AWS IAM SAML and a GitHub Actions Repository Token. - -## Development -- [thenewstack.io: Remote Debugging in AWS: The Missing Link in Your Debugging Toolset](https://thenewstack.io/remote-debugging-in-aws-the-missing-link-in-your-debugging-toolset/) - -## Cloud Development Kit CDK -- [CDK](https://aws.amazon.com/cdk/) -- [bbvanexttechnologies.com: Cómo definir infraestructura como código en AWS con CDK](https://www.bbvanexttechnologies.com/como-definir-infraestructura-como-codigo-en-aws-con-cdk/) -- [itnext.io: AWS CDK for EKS — Handling Helm Charts](https://itnext.io/aws-cdk-for-eks-handling-helm-charts-aa002afedde4) -- [==freecodecamp.org: AWS CDK v2 Tutorial – How to Create a Three-Tier Serverless Application==](https://www.freecodecamp.org/news/aws-cdk-v2-three-tier-serverless-application/) - -## AWS Secrets Manager -- [How to replicate secrets in AWS Secrets Manager to multiple Regions](https://aws.amazon.com/blogs/security/how-to-replicate-secrets-aws-secrets-manager-multiple-regions/) -- [AWS Secrets Manager controller POC: an EKS operator for automatic rotation of secrets](https://aws.amazon.com/blogs/containers/aws-secrets-manager-controller-poc-an-eks-operator-for-automatic-rotation-of-secrets/) -- [k21academy.com: AWS Secrets Manager](https://k21academy.com/amazon-web-services/aws-solutions-architect/aws-secrets-manager/) - -## AWS Cloud Map and HealthChecks -- [Custom Health Check: HealthCheckCustomConfig](https://docs.aws.amazon.com/cloud-map/latest/api/API_HealthCheckCustomConfig.html) Cloud Map will eventually mark the instance as unhealthy if it doesn't receive the health status in 30 seconds. Custom health checks are implemented as regular Route53 healthchecks that check S3 bucket keys (note http access instead of https). - -## AWS Cloud Endure -- [AWS Cloud Endure Migration](https://aws.amazon.com/cloudendure-migration/) - -## AWS Patterns -- [medium: Top 4 AWS Patterns of Highly Available API](https://medium.com/greenm/top-4-aws-patterns-of-highly-available-api-d34599bfbb96) We want to tell you about a few common patterns that can be used to build highly available APIs on top of AWS infrastructure. We will highlight each of them and briefly describe the pros and cons. - ## AWS Tags - [bridgecrew.io: Best practices for AWS tagging with Yor](https://bridgecrew.io/blog/best-practices-for-aws-tagging-with-yor/) -## ECommerce -- [Architecting a Highly Available Serverless, Microservices-Based Ecommerce Site](https://aws.amazon.com/blogs/architecture/architecting-a-highly-available-serverless-microservices-based-ecommerce-site/) +## AWS Systems Manager Explorer +- [Multi-account AWS Trusted Advisor summaries now available in AWS Systems Manager Explorer](https://aws.amazon.com/blogs/mt/multi-account-aws-trusted-advisor-summaries-now-available-aws-systems-manager-explorer/) + +### AWS Systems Manager Incident Manager +- [How to automate incident response to security events with AWS Systems Manager Incident Manager](https://aws.amazon.com/blogs/security/how-to-automate-incident-response-to-security-events-with-aws-systems-manager-incident-manager/) + +## AWS Cloud Adoption Framework (AWS CAF) +- [==AWS Cloud Adoption Framework (AWS CAF)==](https://aws.amazon.com/professional-services/CAF/) The AWS Cloud Adoption Framework (AWS CAF) leverages AWS experience and best practices to help you digitally transform and accelerate your business outcomes through innovative use of AWS. AWS CAF identifies specific organizational capabilities that underpin successful cloud transformations. These capabilities provide best practice guidance that helps you improve your cloud readiness. AWS CAF groups its capabilities in six perspectives: Business, People, Governance, Platform, Security, and Operations. Each perspective comprises a set of capabilities that functionally related stakeholders own or manage in the cloud transformation journey. Use the AWS CAF to identify and prioritize transformation opportunities, evaluate and improve your cloud readiness, and iteratively evolve your transformation roadmap. +- [AWS Cloud Adoption Framework (CAF) 3.0 is Now Available](https://aws.amazon.com/blogs/aws/aws-cloud-adoption-framework-caf-3-0-is-now-available/) + +## AWS re:Post +- [==repost.aws== 🌟](https://repost.aws) +- [AWS re:Post – A Reimagined Q&A Experience for the AWS Community](https://aws.amazon.com/blogs/aws/aws-repost-a-reimagined-qa-experience-for-the-aws-community/) +- [infoq.com: Amazon Introduces re:Post, a "Stack Overflow" for AWS](https://www.infoq.com/news/2021/12/amazon-repost-questions-answers/) + +## AWS Interview Questions +- [intellipaat.com: Top Amazon AWS Interview Questions – Most Asked](https://intellipaat.com/blog/interview-question/amazon-aws-interview-questions/) +- [Frequently Asked AWS Interview Questions](https://www.interviewbit.com/aws-interview-questions/) +- [TGB - AWS Interview Questions and Answers - Frequently asked](https://www.techgeekbuzz.com/top-aws-interview-questions-and-answers/) + + + --- ## Bunch of Images @@ -1059,8 +200,6 @@ aws ec2 describe-instances --query 'Reservations[].Instances[].[Placement.Availa
- -
@@ -1101,5 +240,7 @@ aws ec2 describe-instances --query 'Reservations[].Instances[].[Placement.Availa

I don't know who did this...but It made my day 😂 AWS moving workloads out of Exadata #HappyWednesday #CloudHumor pic.twitter.com/vq1CSCyr8b

— Guillermo Ruiz (@IaaSgeek) February 2, 2022

My personal holy grail of database solutions: 𝗗𝘆𝗻𝗮𝗺𝗼𝗗𝗕 ⚡️

Sadly, I couldn't fit all the features & must-knows into a single infographic.
There are just too many 💛 pic.twitter.com/UkLcvH19Cp

— Tobias Schmidt (@tpschmidt_) February 16, 2022
+ +

Today we announced the completion of 16 #AWS Local Zones in the US and plans for 32 more to be built globally. Local Zones offer ultra-low latency at the edge of the cloud—awesome for gaming, streaming, ML, more!https://t.co/CFHmBI8zrK

— Adam Selipsky (@aselipsky) February 17, 2022
diff --git a/docs/crunchydata.md b/docs/crunchydata.md new file mode 100644 index 00000000..7fc9ae82 --- /dev/null +++ b/docs/crunchydata.md @@ -0,0 +1,705 @@ +# Crunchy Data PostgreSQL Operator +- [Introduction](#introduction) +- [Crunchy Data Developer Portal](#crunchy-data-developer-portal) +- [Crunchy Data Postgres Operator in OpenShift 4. Overview & Proof of Concept](#crunchy-data-postgres-operator-in-openshift-4-overview--proof-of-concept) + - [Crunchydata Postgres Operator 3.5](#crunchydata-postgres-operator-35) + - [Crunchydata Postgres Operator 4.0.1](#crunchydata-postgres-operator-401) + - [Crunchydata Postgres Operator 4.0.1 Community Edition](#crunchydata-postgres-operator-401-community-edition) + - [Service Accounts](#service-accounts) + - [Roles assigned to Service Accounts](#roles-assigned-to-service-accounts) + - [Security Context Constraints (SCC)](#security-context-constraints-scc) + - [SCC Recommendations](#scc-recommendations) + - [Add a SCC to a Project](#add-a-scc-to-a-project) + - [Workflow1 without custom Service Account and without DeploymentConfig](#workflow1-without-custom-service-account-and-without-deploymentconfig) + - [Workflow2 with custom Service Account and without DeploymentConfig](#workflow2-with-custom-service-account-and-without-deploymentconfig) + - [Workflow3 with custom service Account and DeploymentConfig](#workflow3-with-custom-service-account-and-deploymentconfig) + - [Environment setup. Port Forward and WSL](#environment-setup-port-forward-and-wsl) + - [Cluster Deployment and Operation with pgo](#cluster-deployment-and-operation-with-pgo) + - [Psql access from postgres operator POD](#psql-access-from-postgres-operator-pod) + - [List Databases with psql](#list-databases-with-psql) + - [Access from another POD within the cluster with psql client](#access-from-another-pod-within-the-cluster-with-psql-client) + - [Access from another POD within the cluster with Pgadmin4 of Crunchy containers Community Edition](#access-from-another-pod-within-the-cluster-with-pgadmin4-of-crunchy-containers-community-edition) + - [Debugging Crunchydata Postgres Operator 4.0.1 Community Edition](#debugging-crunchydata-postgres-operator-401-community-edition) + - [Certified Crunchydata Postgres Operator (OLM/OperatorHub). Manual Setup](#certified-crunchydata-postgres-operator-olmoperatorhub-manual-setup) + +## Introduction +* [crunchydata.com](https://www.crunchydata.com/) +* [redhat.com: Overview - Crunchy Data PostgreSQL on Red Hat OpenShift Container Storage 🌟](https://www.redhat.com/en/resources/crunchy-data-postgresql-overview) +* [learn.crunchydata.com 🌟](https://learn.crunchydata.com/) +* [github.com/CrunchyData](https://github.com/CrunchyData) +* [github.com/CrunchyData/postgres-operator](https://github.com/CrunchyData/postgres-operator) +* [Documentation: Crunchy Data Container Suite 🌟](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/) +* [crunchydata blog: Deploying Active-Active PostgreSQL on Kubernetes](https://info.crunchydata.com/blog/active-active-on-kubernetes) +* [crunchydata blog: What's New in Crunchy PostgreSQL Operator 4.0](https://info.crunchydata.com/blog/crunchy-postgres-kubernetes-operator-4.0) +* [slideshare.net: Deploying PostgreSQL on Kubernetes](https://www.slideshare.net/vyruss000/deploying-postgresql-on-kubernetes) +* [slideshare.net: Operating PostgreSQL at Scale with Kubernetes](https://www.slideshare.net/jkatz05/operating-postgresql-at-scale-with-kubernetes-137132067) +* [Youtube: Demo of Crunchy Data Postgres Operator v1.0.0 (2017)](https://www.youtube.com/watch?v=HX10WWTRiTY) +* [Youtube: Crunchy PostgreSQL Operator for Kubernetes 3.4 Overview (2018)](https://www.youtube.com/watch?v=gaXlrlz7GVc) +* [Youtube: OpenShift Meetup Tokyo #05 - Operator and Operator Lifecycle Manager on OpenShift (2019, openshift 4.1)](https://www.youtube.com/watch?v=X4vuktlK0Tg) +* [info.crunchydata.com: Monitoring PostgreSQL clusters in kubernetes](https://info.crunchydata.com/blog/monitoring-postgresql-clusters-in-kubernetes) +* [info.crunchydata.com: Deploy High-Availability PostgreSQL Clusters on Kubernetes by Example](https://info.crunchydata.com/blog/deploy-high-availability-postgresql-on-kubernetes) +* [info.crunchydata.com: Migrating from Oracle to PostgreSQL: Tips and Tricks](https://info.crunchydata.com/blog/migrating-from-oracle-to-postgresql-questions-and-considerations) +* [info.crunchydata.com: Scheduled PostgreSQL Backups and Retention Policies with Kubernetes](https://info.crunchydata.com/blog/schedule-postgresql-backups-and-retention-with-kubernetes) +* [info.crunchydata.com: Guard Against Transaction Loss with PostgreSQL Synchronous Replication](https://info.crunchydata.com/blog/synchronous-replication-in-the-postgresql-operator-for-kubernetes-guarding-against-transactions-loss) +* [info.crunchydata.com: Crunchy PostgreSQL for Kubernetes 4.3 Released](https://info.crunchydata.com/news/crunchy-postgresql-for-kuberenetes-4.3) Crunchy #PostgreSQL for #Kubernetes 4.3 released! Now supports multi-Kubernetes deployments, easier customization + installation, TLS, pgAdmin 4, improved pgBouncer support, and much more! +* [info.crunchydata.com: Deploy pgAdmin4 with PostgreSQL on Kubernetes](https://info.crunchydata.com/blog/deploy-pgadmin4-with-postgresql-on-kubernetes) +* [info.crunchydata.com: Multi-Kubernetes Cluster PostgreSQL Deployments](https://info.crunchydata.com/blog/multi-kubernetes-cluster-postgresql-deployments) +* [info.crunchydata.com: Quickly Document Your Postgres Database Using psql Meta-Commands](https://info.crunchydata.com/blog/d-meta) +* [info.crunchydata.com: Fast CSV and JSON Ingestion in PostgreSQL with COPY](https://info.crunchydata.com/blog/fast-csv-and-json-ingestion-in-postgresql-with-copy) +* [info.crunchydata.com: Composite Primary Keys, PostgreSQL and Django](https://info.crunchydata.com/blog/composite-primary-keys-postgresql-and-django) +* [info.crunchydata.com: Getting Started with PostgreSQL Operator 4.3 in OpenShift](https://info.crunchydata.com/blog/getting-started-with-postgresql-operator-4.3-in-openshift) +* [info.crunchydata.com: Introducing the Postgres Prometheus Adapter](https://info.crunchydata.com/blog/using-postgres-to-back-prometheus-for-your-postgresql-monitoring-1) +* [info.crunchydata.com: Getting Started with PostgreSQL Operator 4.3 in OpenShift](https://info.crunchydata.com/blog/getting-started-with-postgresql-operator-4.3-in-openshift) +* [info.crunchydata.com: Deploying Active-Active PostgreSQL on Kubernetes](https://info.crunchydata.com/blog/active-active-on-kubernetes) +* [opensource.com: Scaling PostgreSQL with Kubernetes Operators 🌟](https://opensource.com/article/19/2/scaling-postgresql-kubernetes-operators) Operators let users create standardized interfaces for managing stateful applications, like PostgreSQL, across Kubernetes-enabled cloud environments. +* [info.crunchydata.com: Setup ora2pg for Oracle to Postgres Migration](https://info.crunchydata.com/blog/setup-ora2pg-for-oracle-to-postgres-migration) +* [info.crunchydata.com: pgBackRest - Performing Backups on a Standby Cluster](https://info.crunchydata.com/blog/pgbackrest-performing-backups-on-a-standby-cluster) +* [thenewstack.io: Advanced Kubernetes Namespace Management with the PostgreSQL Operator 🌟](https://thenewstack.io/advanced-kubernetes-namespace-management-with-the-postgresql-operator/) +* [postgresql.org: Crunchy PostgreSQL Operator 4.5: Enhanced Monitoring, Custom Annotations, PostgreSQL 13 🌟](https://www.postgresql.org/about/news/crunchy-postgresql-operator-45-enhanced-monitoring-custom-annotations-postgresql-13-2086/) +* [info.crunchydata.com: How to Setup PostgreSQL Monitoring in Kubernetes](https://info.crunchydata.com/blog/setup-postgresql-monitoring-in-kubernetes) +* [redhat.com: Crunchy Data PostgreSQL on Red Hat OpenShift Container Storage (Overview) 🌟](https://www.redhat.com/en/resources/crunchy-data-postgresql-overview) +* [info.crunchydata.com: PostgreSQL Monitoring for Application Developers: The DBA Fundamentals](https://info.crunchydata.com/blog/postgresql-monitoring-for-application-developers-dba-stats) +* [youtube: OCB: High Availability PostgreSQL and more on OpenShift - Jonathan Katz (Crunchy Data) 🌟](https://www.youtube.com/watch?v=9jbR9lZuSU0) Learn how the PostgreSQL Operator from Crunchy Data makes it easy to deploy high availability Postgres clusters on OpenShift. Beyond that, we'll look at how the Operator pattern makes it possible to run your own open source database-as-a-service and cover the essential features: provisioning, HA, disaster recovery, monitoring, and how to do it all securely! +* [info.crunchydata.com: Tuning Your Postgres Database for High Write Loads](https://info.crunchydata.com/blog/tuning-your-postgres-database-for-high-write-loads) +* [info.crunchydata.com: Using the PostgreSQL Operator with Rook Ceph Storage](https://info.crunchydata.com/blog/crunchy-postgresql-operator-with-rook-ceph-storage) +* [info.crunchydata.com: Multi-Kubernetes Cluster PostgreSQL Deployments](https://info.crunchydata.com/blog/multi-kubernetes-cluster-postgresql-deployments) +* [developer.ibm.com: Deploy a Crunchy PostgreSQL for Kubernetes Operator to an OpenShift cluster 🌟](https://developer.ibm.com/technologies/databases/tutorials/deploy-a-crunchy-posgresql-kubernetes-operator-red-hat-marketplace-openshift/) Follow these steps to deploy a supported Crunchy PostgreSQL for Kubernetes operator from Red Hat Marketplace to an OpenShift cluster +* [info.crunchydata.com: An Easy Recipe for Creating a PostgreSQL Cluster with Docker Swarm](https://info.crunchydata.com/blog/an-easy-recipe-for-creating-a-postgresql-cluster-with-docker-swarm) +* [info.crunchydata.com: Deploying the PostgreSQL Operator on GKE](https://info.crunchydata.com/blog/install-postgres-operator-kubernetes-on-gke-ansible) +* [info.crunchydata.com: Using GitOps to Self-Manage Postgres in Kubernetes 🌟](https://info.crunchydata.com/blog/gitops-postgres-kubernetes) +* [info.crunchydata.com: Kubernetes Pod Tolerations and Postgres Deployment Strategies](https://info.crunchydata.com/blog/kubernetes-pod-tolerations-and-postgresql-deployment-strategies) +* [blog.crunchydata.com: Helm, GitOps and the Postgres Operator](https://blog.crunchydata.com/blog/gitops-postgres-kubernetes-helm) +* [blog.crunchydata.com: Crunchy Postgres Operator 4.6.0 🌟](https://blog.crunchydata.com/blog/crunchy-postgres-operator-4.6.0) +* [blog.crunchydata.com: Deploy PostgreSQL With TLS in Kubernetes](https://blog.crunchydata.com/blog/set-up-tls-for-postgresql-in-kubernetes) +* [blog.crunchydata.com: Announcing Google Cloud Storage (GCS) Support for pgBackRest](https://blog.crunchydata.com/blog/announcing-google-cloud-storage-gcs-support-for-pgbackrest) +* [youtube: Install and use Crunchy PostgreSQLfor OpenShift operator for simple todo app on OpenShift 🌟](https://www.youtube.com/watch?v=9wuUXi6Qbis&ab_channel=MichaelBornholdtNielsen) +* [blog.crunchydata.com: Query Optimization in Postgres with pg_stat_statements](https://blog.crunchydata.com/blog/tentative-smarter-query-optimization-in-postgres-starts-with-pg_stat_statements) +* [blog.crunchydata.com: Kubernetes Pod Tolerations and Postgres Deployment Strategies 🌟](https://blog.crunchydata.com/blog/kubernetes-pod-tolerations-and-postgresql-deployment-strategies) +* [blog.crunchydata.com: Active-Active PostgreSQL Federation on Kubernetes](https://blog.crunchydata.com/blog/active-active-postgres-federation-on-kubernetes) +* [blog.crunchydata.com: Multi-Kubernetes Cluster PostgreSQL Deployments](https://blog.crunchydata.com/blog/multi-kubernetes-cluster-postgresql-deployments) +* [blog.crunchydata.com: Next Generation Crunchy Postgres for Kubernetes 5.0 Released](https://blog.crunchydata.com/news/next-generation-crunchy-postgres-for-kubernetes-released) +* [blog.crunchydata.com: pgBackRest Point-In-Time Recovery Using Crunchy PostgreSQL Operator](https://blog.crunchydata.com/blog/pgbackrest-point-in-time-recovery-using-crunchy-postgresql-operator) +* [blog.crunchydata.com: Using Cert Manager to Deploy TLS for Postgres on Kubernetes](https://blog.crunchydata.com/blog/using-cert-manager-to-deploy-tls-for-postgres-on-kubernetes) +* [dzone: PostgreSQL HA and Kubernetes](https://dzone.com/articles/postgresql-ha-and-kubernetes) I share my thoughts about how to set up a PostgreSQL Database in Kubernetes with some level of high availability, introducing 3 different architectural styles to do so. +* [blog.crunchydata.com: Can't Resize your Postgres Kubernetes Volume? No Problem!](https://blog.crunchydata.com/blog/resize-postgres-kubernetes-volume-instance-sets) +* [blog.crunchydata.com: Your Guide to Connection Management in Postgres 🌟](https://blog.crunchydata.com/blog/your-guide-to-connection-management-in-postgres) +* [==blog.crunchydata.com: PostgreSQL 14 on Kubernetes (with examples!)==](https://blog.crunchydata.com/blog/postgresql-14-on-kubernetes) +* [blog.crunchydata.com: Kubernetes + Postgres Cluster From Scratch on Rocky 8](https://blog.crunchydata.com/blog/kube-cluster-from-scratch-on-rocky-8) + +## Crunchy Data Developer Portal +- [Announcing the Crunchy Data Developer Portal](https://info.crunchydata.com/blog/announcing-the-crunchy-data-developer-portal) +- [Crunchy Data Developer Portal](https://www.crunchydata.com/developers) Self-service tools for developers and data scientists to easily get productive with PostgreSQL and Crunchy Data products. + +## Crunchy Data Postgres Operator in OpenShift 4. Overview & Proof of Concept +- In earlier days, Red Hat recommended running PostgreSQL database outside the Kubernetes cluster. Now, with [Kubernetes Operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) technology, you can run stateful database applications on Kubernetes. +- [Crunchy PostgreSQL Operator](https://github.com/CrunchyData/postgres-operator) extends Kubernetes to give you the power to easily  create, configure and manage PostgreSQL clusters at scale.  When combined with the [Crunchy PostgreSQL Container Suite](https://github.com/CrunchyData/crunchy-containers), the Crunchy PostgreSQL Operator provides an open source software solution for PostgreSQL scaling, high-availability, disaster recovery, monitoring, and more.  All of this capability comes with the repeatability and automation that comes from Operators on Kubernetes. +- Crunchy PostgreSQL Operator is open source and developed in close collaboration with users to support enterprise deployments of cloud agnostic PostgreSQL-as-a-Service capability. This release comes after extensive feedback from our customers and the community to ensure the scalability and security that sysadmins, DBAs, and developers have come to rely on. +- [Crunchy PostgreSQL and Openshift](https://www.openshift.com/blog/leveraging-the-crunchy-postgresql) +- Crunchy Postgres Solutions: + 1. **[Postgres Operator Community Edition](https://github.com/CrunchyData/postgres-operator):** + - ‘pgo’ CLI tool + - Not certified by Red Hat + - The Operator can be deployed by multiple methods including: + - [The PostgreSQL Operator Installer with kubectl](https://access.crunchydata.com/documentation/postgres-operator/4.3.0/installation/postgres-operator/) + - [Install Operator Using Bash (the one used in this overview)](https://access.crunchydata.com/documentation/postgres-operator/4.3.0/installation/other/bash/) + - [Ansible playbook installation](https://access.crunchydata.com/documentation/postgres-operator/4.3.0/installation/other/ansible/) + - CLI installation using OLM **(Deprecated)**: new CatalogSource added via “pgo.catalogsource.yaml”. + - Openshift Console installation using OLM (OperatorHub): + - New CatalogSource requirement. + - CLI settings required. + 2. **Certified Crunchydata Postgres Operator (OLM/OperatorHub):** + - Openshift Console installation using OLM (OperatorHub): One-click deployment and Web based operation + - **No ‘pgo’ CLI tool?** (compatibility issues: unable to find in github the version that matches the server API - Sept 2019) + - Certified by Red Hat + - Provided by CrunchyData + 3. Other non-certified installations (unsupported by Red Hat): with or without OLM, CLI, etc. +- **[Crunchy Containers Community Edition](https://github.com/CrunchyData/crunchy-containers):** + - Installation: + 1. [Installation guide](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/installation-guide/installation-guide/) + 2. [Pgadmin4 install](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/examples/administration/pgadmin4/) (easy) + - Not certified by Red Hat + +
+![crunchdydata in operatorhub](images/crunchydata_operator_hub.png) +
+ +### Crunchydata Postgres Operator 3.5 +- Release date: Januay 2019 +- pgBackRest Architecture Enhancements +- pgBackRest Point-In-Time-Recovery +- Fast Failover +- Archive Storage Configuration +- Preferred Failover Node Label +- pgo-scheduler + +
+![crunchydata operator 3.5](images/crunchydata_operator_3_5.png) +
+ +### Crunchydata Postgres Operator 4.0.1 +- Release date: June 2019 +- **Namespace Deployment Options:** Ability to deploy the operator its own namespace but manage PostgreSQL clusters in multiple namespace. The new namespace management features lets users create multi-tenant PostgreSQL environments that add further isolation and security to their deployments. +- **Further Enhancements to pgBackRest Integration:** Perform pgBackRest backups to **Amazon S3**. This allows  users to create an automated, geographically distributed, and hybrid cloud disaster recovery strategy. +- Integrated PostgreSQL **Benchmarking** +- **Ansible** Playbook Based Installation +- **Operator Lifecycle Management (OLM):** The OLM project is a component of the Operator Framework, an open source toolkit to manage Operators, in an effective, automated, and scalable way. OLM concepts were included into Crunchy PostgreSQL Operator to assist in the deployment on Kubernetes using OLM integration. + +
+![crunchdydata operator 4.0.1](images/crunchydata_operator_4_0_1.png) +
+ +### Crunchydata Postgres Operator 4.0.1 Community Edition +#### Service Accounts +- Service accounts give us flexibility to control access to API without sharing user’s credentials. +- Service Accounts are also used by pods and other non-human actors to perform various actions and are a central vehicle by which their access to resources is managed. **By default, three service accounts are created in each project:** + 1. **Builder:** Used by build pods and assigned the **system:image-builder** role, which grants push capability into the internal registry to any image stream in the project. + 2. **Deployer:** Used by deploy pods and assigned the **system:deployer role**, which allows modifying replication controllers in the project. + 3. **Default:** Used by all other pods by default. +- You can see them by running the following command: + +``` +oc get serviceaccounts +oc get sa +``` + +- **Running a Pod with a Different Service Account.** You can run a pod with a service account other than the default: + - Edit the deployment configuration: ```$ oc edit dc/``` + - Add the serviceAccount and serviceAccountName parameters to the spec field, and specify the service account you want to use: + +``` +spec: + securityContext: {} + serviceAccount: + serviceAccountName: +``` + +- Refs: + - [ref1](https://docs.openshift.com/container-platform/4.1/authentication/using-service-accounts-in-applications.html) + - [ref2](https://docs.okd.io/latest/dev_guide/deployments/basic_deployment_operations.html#run-pod-with-different-service-account) + - [ref3](https://dzone.com/articles/understanding-openshift-security-context-constrain) + +- Each service account is represented by the ServiceAccount resource and is associated with two additional secrets for access to the OpenShift API and the internal registry: + +``` +$ oc describe serviceaccounts/default +Name: default +Namespace: pgouser1 +Labels: +Annotations: +Image pull secrets: default-dockercfg-nrhwt +Mountable secrets: default-token-vm8b5 + default-dockercfg-nrhwt +Tokens: default-token-p6rhz + default-token-vm8b5 +Events: + +``` + +- The service account can be created and deleted with a simple command: + - ```oc create sa myserviceaccount``` + - ```oc delete sa/myserviceaccount``` +- Every service account is also a member of two groups: + - **system:serviceaccounts**, which includes all service accounts in the cluster + - **system:serviceaccounts:**, which includes all service accounts in the project + +#### Roles assigned to Service Accounts +- When you create a pod, if you do not specify a service account, it is automatically assigned the **default service account** in the same namespace. If you get the raw json or yaml for a pod you have created (e.g. ```oc get pods/podname -o yaml```), you can see the **spec.serviceAccountName** field has been automatically set. +- You can grant privileges to groups of service accounts, which will effectively grant those privileges to all accounts in the group: + +``` +$ oc adm policy add-role-to-group view system:serviceaccounts -n myproject +role "view" added: "system:serviceaccounts" +``` + +- For example, to grant view privileges to all service accounts in the cluster in the project myproject: + +``` +$ oc adm policy remove-role-from-group view system:serviceaccounts –n myproject +role "view" removed: "system:serviceaccounts" +``` + +#### Security Context Constraints (SCC) +- **Security Context Constraints (SCCs)** control what actions pods can perform and what resources they can access. +- SCCs combine a set of security configurations into a single policy object that can be applied to pods. +- These security configurations include, but are not limited to, Linux Capabilities, Seccomp Profiles, User and Group ID Ranges, and types of mounts. +- OpenShift ships with several SCCs: + - The most constrained is the **restricted SCC**, and the least constrained is the **privileged SCC**: + - ```oc edit scc restricted``` + - ```oc edit scc privileged``` + - The other SCCs provide intermediate levels of constraint for various use cases. + - **The restricted SCC is granted to all authenticated users by default.** + - **The default SCC for most pods should be the restricted SCC.** +- If required, a cluster administrator may **allow certain pods to run with different SCCs**. Pods should be run with the most restrictive SCC possible. **Pods inherit their SCC from the Service Account used to run the pod**. With the default project template, new projects get a **Service Account named default** that is used to run pods. This default service account is only granted the ability to run the restricted SCC. + +
+![crunchdydata scc1](images/crunchydata_scc1.png) ![crunchdydata scc2](images/crunchydata_scc2.png) +
+ +##### SCC Recommendations +- Use OpenShift's Security Context Constraint feature, which has been contributed to Kubernetes as [Pod Security Policies (PSP)](https://kubernetes.io/docs/concepts/policy/pod-security-policy/). PSPs are still beta in Kubernetes 1.10, 1.11, 1.12, 1.13, 1.14, 1.15 . +- **Use the restricted SCC as the default** +- For pods that require additional access, use the SCC that grants the least amount of additional privileges or create a custom SCC +- Remediation: Apply the SCC with the least privilege required +- Audit: + - To show all available SCCs: ```oc describe scc``` + - To audit a single pod: + +``` +oc describe pod | grep openshift.io\/scc +openshift.io/scc: restricted +``` + +
+![crunchdydata scc3](images/crunchydata_scc3.png) +
+ +- **Problem:** Default SCC is “restricted” SCC -> Crunchydata Postgres Cluster PODs are not rolled out + - ```oc get rs```: + +
+ ![crunchdydata restricted scc](images/crunchydata_restricted_scc.png) +
+ + - ```oc describe rs mycluster5-lgyb-84b58f5dd9```: Warning **FailedCreate** 3m24s (x17 over 7m30s) **replicaset-controller Error creating: pods "mycluster5-lgyb-84b58f5dd9-" is forbidden: unable to validate against any security context constraint: [fsGroup: Invalid value: []int64{26}: 26 is not an allowed group]** + +#### Add a SCC to a Project +- SCCs are not granted directly to a project. Instead, you add a service account to an SCC and either specify the service account name on your pod or, when unspecified, run as the **default** service account. +- **To add a SCC to a user:** ```oc adm policy add-scc-to-group ``` +- **To add a SCC to all service accounts in a namespace:** + ```oc adm policy add-scc-to-group system:serviceaccounts:``` +- If you are currently in the project to which the service account belongs, you can use the -z flag and just specify the **serviceaccount_name**: + ```oc adm policy add-scc-to-user -z ``` +- Examples: + - ```oc describe scc anyuid``` + - ```oc adm policy add-scc-to-group anyuid system:serviceaccounts:pgouser1``` + - ‘default’ serviceAccount: + + ``` + oc adm policy add-scc-to-user anyuid system:serviceaccounts:pgouser1:default + ``` + + - User registered in Identity Provider: + + ``` + oc adm policy add-scc-to-user anyuid myuser + ``` + + - Custom serviceAccount: + + ``` + oc adm policy add-scc-to-user anyuid system:serviceaccounts:pgouser1:my-sa + ``` + +- Refs: + - [ref1](https://docs.openshift.com/container-platform/3.6/admin_guide/manage_scc.html) + - [ref2](https://docs.openshift.com/container-platform/3.6/admin_guide/manage_scc.html#add-scc-to-user-group-project) + - [ref3 🌟](https://dzone.com/articles/understanding-openshift-security-context-constrain) + +##### Workflow1 without custom Service Account and without DeploymentConfig + +
+![crunchdydata scc workflow1](images/crunchydata_scc_workflow1.png) +
+ +##### Workflow2 with custom Service Account and without DeploymentConfig + +
+![crunchdydata scc workflow2](images/crunchydata_scc_workflow2.png) +
+ +- Create a custom ServiceAccount and add a role to it within a Project: + 1. ```oc project pgouser1``` + 2. ```oc get scc``` + 3. ```oc create serviceaccount my-sa –n pgouser1``` + 4. ```oc describe sa my-sa``` + 5. ```oc get scc``` + 6. ```oc adm policy add-scc-to-user anyuid system:serviceaccount:pgouser1:my-sa``` + 7. ```oc policy add-role-to-user edit system:serviceaccount:pgouser1:my-sa``` + 8. Alternative to step #6: + +``` +oc edit scc anyuid +``` + +``` +users: +- system:serviceaccount:pgouser1:my-sa +``` + +- Other commands of interest: + - ```oc get role``` + - ```oc describe role pgo-role``` + - ```oc edit role pgo-role``` + +- References: + - [ref1](https://blog.openshift.com/understanding-service-accounts-sccs/) + - [ref2](https://docs.openshift.com/container-platform/4.1/authentication/understanding-and-creating-service-accounts.html) + - [ref3](https://docs.openshift.com/container-platform/4.1/authentication/managing-security-context-constraints.html#role-based-access-to-ssc_configuring-internal-oauth) + +##### Workflow3 with custom service Account and DeploymentConfig + +
+![crunchdydata scc workflow3](images/crunchydata_scc_workflow3.png) +
+ +#### Environment setup. Port Forward and WSL +- Deployment method used in this presentation: [Install Operator Using Bash](https://access.crunchydata.com/documentation/postgres-operator/4.3.0/installation/other/bash/) +- Config files setup by installer are saved in: + - “pgo” Project -> Deployments + - “pgo” Project -> Deployment Configs (empty, openshift feature not provided by CrunchyData) + - “pgo” Project -> Secrets + - “pgo” Project -> Config Maps +- References: + - [ref1](https://access.crunchydata.com/documentation/postgres-operator/latest/operatorcli/pgo-overview/) + - [ref2](https://crunchydata.github.io/postgres-operator/latest/operatorcli/common-pgo-cli-operations/) +- WSL (Windows Subystem for Linux): **alog/olog/clog** functions must be adapted to be run in WSL's Ubuntu: + +``` +vim $HOME/.bashrc +``` + +``` +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth +# append to the history file, don't overwrite it +shopt -s histappend +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then +if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion +elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion +fi +fi +######################################### +# CRUNCHYDATA POSTGRES OPERATOR SETTINGS: +######################################### +# operator env vars +export PATH=$PATH:$HOME/odev/bin +export PGO_APISERVER_URL=https://127.0.0.1:18443 +#export PGO_APISERVER_URL=https://172.25.212.138:8443 +export PGO_CA_CERT=$HOME/odev/src/github.com/crunchydata/postgres-operator/conf/postgres-operator/server.crt +export PGO_CLIENT_CERT=$HOME/odev/src/github.com/crunchydata/postgres-operator/conf/postgres-operator/server.crt +export PGO_CLIENT_KEY=$HOME/odev/src/github.com/crunchydata/postgres-operator/conf/postgres-operator/server.key +#alias setip='export PGO_APISERVER_URL=https://`kubectl get service postgres-operator -o=jsonpath="{.spec.clusterIP}"`:18443' +#alias alog='kubectl logs `kubectl get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c apiserver' +#alias olog='kubectl logs `kubectl get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c operator' +# +export CCP_IMAGE_TAG=rhel7-11.1-2.3.0 +export CCP_IMAGE_PREFIX=registry.connect.redhat.com/crunchydata +export PGO_CMD=oc +export PGO_BASEOS=rhel7 +export PGO_VERSION=4.0.1 +export PGO_NAMESPACE=pgo +export PGO_IMAGE_TAG=rhel7-4.0.1 +export PGO_IMAGE_PREFIX=registry.connect.redhat.com/crunchydata +export GOPATH=$HOME/odev +export GOBIN=$GOPATH/bin +export PATH=$PATH:$GOBIN +# NAMESPACE is the list of namespaces the Operator will watch +export NAMESPACE=pgouser1,pgouser2 +# PGO_OPERATOR_NAMESPACE is the namespace the Operator is deployed into +export PGO_OPERATOR_NAMESPACE=pgo +# PGO_CMD values are either kubectl or oc, use oc if Openshift +export PGO_CMD=kubectl +# the directory location of the Operator scripts +export PGOROOT=$GOPATH/src/github.com/crunchydata/postgres-operator +# the version of the Operator you run is set by these vars +export PGO_IMAGE_PREFIX=crunchydata +export PGO_BASEOS=centos7 +export PGO_VERSION=4.0.1 +export PGO_IMAGE_TAG=$PGO_BASEOS-$PGO_VERSION +# for the pgo CLI to authenticate with using TLS +export PGO_CA_CERT=$PGOROOT/conf/postgres-operator/server.crt +export PGO_CLIENT_CERT=$PGOROOT/conf/postgres-operator/server.crt +export PGO_CLIENT_KEY=$PGOROOT/conf/postgres-operator/server.key +# common bash functions for working with the Operator +function setip() { +export PGO_APISERVER_URL=https://`$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get service postgres-operator -o=jsonpath="{.spec.clusterIP}"`:18443 +export CO_APISERVER_URL=https://`$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get service postgres-operator -o=jsonpath="{.spec.clusterIP}"`:18443 +} +function alog() { +$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" logs `$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c apiserver +} +function olog () { +$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" logs `$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c operator +} +function slog () { +$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" logs `$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c scheduler +} +#export DOCKER_HOST=tcp://localhost:2375 +# crunchy containers: https://github.com/CrunchyData/crunchy-containers/tree/2.4.1 +export GOPATH=$HOME/cdev # set path to your new Go workspace +export GOBIN=$GOPATH/bin # set bin path +export PATH=$PATH:$GOBIN # add Go bin path to your overall path +export CCP_BASEOS=centos7 # centos7 for Centos, rhel7 for Redhat +export CCP_PGVERSION=10 # The PostgreSQL major version +export CCP_PG_FULLVERSION=10.9 +export CCP_VERSION=2.4.1 +export CCP_IMAGE_PREFIX=crunchydata # Prefix to put before all the container image names +export CCP_IMAGE_TAG=$CCP_BASEOS-$CCP_PG_FULLVERSION-$CCP_VERSION # Used to tag the images +export CCPROOT=$GOPATH/src/github.com/crunchydata/crunchy-containers # The base of the clone github repo +export CCP_SECURITY_CONTEXT="" +export CCP_CLI=oc # kubectl for K8s, oc for OpenShift +export CCP_NAMESPACE=crunchy-containers # Change this to whatever namespace/openshift project name you want to use +export CCP_SECURITY_CONTEXT='"fsGroup":26' +export CCP_STORAGE_CLASS=gp2 +export CCP_STORAGE_MODE=ReadWriteOnce +export CCP_STORAGE_CAPACITY=400M +``` +
+ +- **port-forward** to reach postgres-operator POD with ‘pgo’ tool (18443 port defined in previous .bashrc): + +``` +oc project pgo +oc get pod +oc port-forward postgres-operator-844d8f9777-8d5k5 -n pgo 18443:8443 +``` + +#### Cluster Deployment and Operation with pgo + +``` +pgo create cluster mycluster --pgpool -n pgouser1 --resources-config=small --replica-count=1 +pgo show cluster --all -n pgouser1 +pgo backup mycluster --backup-type=pgbackrest –n pgouser1 +pgo failover mycluster --query –n pgouser1 +pgo failover mycluster --target=mycluster-olvhy –n pgouser1 +pgo test mycluster -n pgouser1 +pgo create cluster somefastpg -n pgouser1 --node-label=speed=fast +pgo create cluster abouncer --pgbouncer (sidecar pgbouncer added to this PG cluster) +pgo create cluster apgpool --pgpool +pgo status cluster mycluster –n pgouser1 +pgo ls mycluster –n pgouser1 +pgo reload mycluster –n pgouser1 +pgo scale mycluster –n pgouser1 +``` + +PGO USER allows you to manage users and passwords across a set of clusters: + +``` +pgo user –-selector=name=mycluster --expired=300 –-update-password –n pgouser1 +pgo user –-change-password=bob –n pgouser1 --selector=name=mycluster --password=newpass +``` + +#### Psql access from postgres operator POD + +``` +oc project pgo +oc get pods +oc rsh postgres-operator-844d8f9777-ppjv9 +export PGPASSWORD=password +psql -h mycluster-pgpool.pgouser1 -U testuser -l +psql -h mycluster-pgpool.pgouser1 -U postgres -c "CREATE DATABASE testdb" +psql -h mycluster-pgpool.pgouser1 -U postgres testdb -c "CREATE TABLE test (ID CHAR(4) NOT NULL, name TEXT NOT NULL, PRIMARY KEY (id))" +psql -h mycluster-pgpool.pgouser1 -U postgres testdb -c "INSERT INTO test (id,name) VALUES (1, 'user01')" +psql -h mycluster-pgpool.pgouser1 -U postgres testdb -c "select * from test" +``` + +#### List Databases with psql + +``` +postgres=# \l + List of databases + Name | Owner | Encoding | Collate | Ctype | Access privileges +-----------+----------+----------+------------+------------+----------------------- + postgres | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | + template0 | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/postgres + + | | | | | postgres=CTc/postgres + template1 | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/postgres + + | | | | | postgres=CTc/postgres + userdb | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | =Tc/postgres + + | | | | | postgres=CTc/postgres+ + | | | | | testuser=CTc/postgres+ + | | | | | user1=CTc/postgres +(4 rows) +``` + +#### Access from another POD within the cluster with psql client +For example with [this psql client](https://hub.docker.com/r/centos/postgresql-10-centos7) + +``` +oc rsh postgresql-10-centos7-1-pjh46 +sh-4.2$ psql -p 5432 -h mycluster-pgpool.pgouser1 -U postgres postgres +psql (10.6, server 11.3) +WARNING: psql major version 10, server major version 11. + Some psql features might not work. +Type "help" for help. + +postgres=# +``` + +#### Access from another POD within the cluster with Pgadmin4 of Crunchy containers Community Edition +- [crunchy-pgadmin4](https://access.crunchydata.com/documentation/crunchy-postgres-containers/4.3.0/container-specifications/crunchy-pgadmin4/) +- [pgAdmin 4](https://access.crunchydata.com/documentation/crunchy-postgres-containers/4.3.0/examples/administration/pgadmin4/) + +
+![crunchdydata pgadmin](images/crunchydata_pgadmin.png) +
+ +#### Debugging Crunchydata Postgres Operator 4.0.1 Community Edition +- Debug level logging in turned on by default when deploying the Operator. +- Sample bash functions are supplied in examples/envs.sh to view the Operator logs. +- You can view the Operator REST API logs with the **alog** bash function. +- You can view the Operator core logic logs with the **olog** bash function. +- You can view the Scheduler logs with the **slog** bash function. +- You can enable the pgo CLI debugging with the following flag: + ``` + $ pgo version --debug + ``` +- You can set the REST API URL as follows after a deployment if you are developing on your local host by executing the **setip** bash function. +- “alog”, “olog”, “slog” and “setip” are defined in $HOME/.bashrc + + +### Certified Crunchydata Postgres Operator (OLM/OperatorHub). Manual Setup +- We will set this up manually: + - StorageClass changed to “gp2” in YAML file (AWS) + - ‘pgo’ tool compatibility issues + +
+![crunchdydata operatorhub install2](images/crunchydata_operatorhub_install1.png) + +![crunchdydata operatorhub install2](images/crunchydata_operatorhub_install2.png) +
+ +- NO PODs are deployed -> configuration needed: + +
+![crunchdydata operatorhub install3](images/crunchydata_operatorhub_install3.png) + +![crunchdydata operatorhub install4](images/crunchydata_operatorhub_install4.png) +
+ +- Replica Sets: where PODs should be launched + +
+![crunchdydata operatorhub install5](images/crunchydata_operatorhub_install5.png) +
+ +- ReplicaSets (environment) and Deployment: + +
+![crunchdydata operatorhub install6](images/crunchydata_operatorhub_install6.png) + +![crunchdydata operatorhub install7](images/crunchydata_operatorhub_install7.png) +
+ +- Error detected. Solution: + +``` +oc adm policy add-scc-to-user anyuid system:serviceaccount:pgophub:default +``` + +
+![crunchdydata operatorhub install8](images/crunchydata_operatorhub_install8.png) +
+ +- We see now a new POD being created: + +
+![crunchdydata operatorhub install9](images/crunchydata_operatorhub_install9.png) +
+ +- New errors: “secrets” need to be setup: + +
+![crunchdydata operatorhub install10](images/crunchydata_operatorhub_install10.png) + +![crunchdydata operatorhub install11](images/crunchydata_operatorhub_install11.png) + +![crunchdydata operatorhub install12](images/crunchydata_operatorhub_install12.png) +
+ +- New errors: 3 “secrets” need to be setup manually -> POD is started successfully and we have psql access. + +
+![crunchdydata operatorhub install13](images/crunchydata_operatorhub_install13.png) ![crunchdydata operatorhub install14](images/crunchydata_operatorhub_install14.png) + +![crunchdydata operatorhub install15](images/crunchydata_operatorhub_install15.png) + +![crunchdydata operatorhub install16](images/crunchydata_operatorhub_install16.png) +
\ No newline at end of file diff --git a/docs/databases.md b/docs/databases.md index 660276a2..ed46c929 100644 --- a/docs/databases.md +++ b/docs/databases.md @@ -18,27 +18,6 @@ - [Spilo PostgreSQL Operator](#spilo-postgresql-operator) - [Zalando PostgreSQL Operator](#zalando-postgresql-operator) - [Crunchy Data PostgreSQL Operator](#crunchy-data-postgresql-operator) - - [Crunchy Data Developer Portal](#crunchy-data-developer-portal) - - [Crunchy Data Postgres Operator in OpenShift 4. Overview & Proof of Concept](#crunchy-data-postgres-operator-in-openshift-4-overview--proof-of-concept) - - [Crunchydata Postgres Operator 3.5](#crunchydata-postgres-operator-35) - - [Crunchydata Postgres Operator 4.0.1](#crunchydata-postgres-operator-401) - - [Crunchydata Postgres Operator 4.0.1 Community Edition](#crunchydata-postgres-operator-401-community-edition) - - [Service Accounts](#service-accounts) - - [Roles assigned to Service Accounts](#roles-assigned-to-service-accounts) - - [Security Context Constraints (SCC)](#security-context-constraints-scc) - - [SCC Recommendations](#scc-recommendations) - - [Add a SCC to a Project](#add-a-scc-to-a-project) - - [Workflow1 without custom Service Account and without DeploymentConfig](#workflow1-without-custom-service-account-and-without-deploymentconfig) - - [Workflow2 with custom Service Account and without DeploymentConfig](#workflow2-with-custom-service-account-and-without-deploymentconfig) - - [Workflow3 with custom service Account and DeploymentConfig](#workflow3-with-custom-service-account-and-deploymentconfig) - - [Environment setup. Port Forward and WSL](#environment-setup-port-forward-and-wsl) - - [Cluster Deployment and Operation with pgo](#cluster-deployment-and-operation-with-pgo) - - [Psql access from postgres operator POD](#psql-access-from-postgres-operator-pod) - - [List Databases with psql](#list-databases-with-psql) - - [Access from another POD within the cluster with psql client](#access-from-another-pod-within-the-cluster-with-psql-client) - - [Access from another POD within the cluster with Pgadmin4 of Crunchy containers Community Edition](#access-from-another-pod-within-the-cluster-with-pgadmin4-of-crunchy-containers-community-edition) - - [Debugging Crunchydata Postgres Operator 4.0.1 Community Edition](#debugging-crunchydata-postgres-operator-401-community-edition) - - [Certified Crunchydata Postgres Operator (OLM/OperatorHub). Manual Setup](#certified-crunchydata-postgres-operator-olmoperatorhub-manual-setup) - [Oracle 12c on OpenShift Container Platform](#oracle-12c-on-openshift-container-platform) - [Oracle Database Operator for Kubernetes](#oracle-database-operator-for-kubernetes) - [SQL Server](#sql-server) @@ -91,6 +70,7 @@ * [venturebeat.com: The rise of Kubernetes and its impact on enterprise databases](https://venturebeat.com/2021/11/03/the-rise-of-kubernetes-and-its-impact-on-enterprise-databases/) * [vladmihalcea.com: Single-Primary Database Replication](https://vladmihalcea.com/single-primary-database-replication/) * [treblle.com: How does Treblle scale on AWS without breaking the bank?](https://treblle.com/blog/how-does-treblle-scale-on-aws-without-breaking-the-bank) A completely scalable intake solution that didn't require a database because all the data was stored on S3. +* [intellipaat.com: Difference between DBMS and RDBMS](https://intellipaat.com/blog/dbms-vs-rdbms-difference/) DBMS and RDBMS sound very similar, but can be confusing to those who are completely new to the database domain. Both of them are based on the technology of storing data. However, we will dive into this DBMS vs RDBMS blog to learn the difference between them. ## How to choose the right database for your service * [medium.com: How to choose the right database for your service 🌟](https://medium.com/wix-engineering/how-to-choose-the-right-database-for-your-service-97b1670c5632) @@ -157,7 +137,7 @@ ## Cockroach Cloud Native Database * [Wikipedia: CockroachDB](https://en.wikipedia.org/wiki/Cockroach_Labs) is a project that is designed to store copies of data in multiple locations in order to deliver speedy access. It is described as a scalable, consistently-replicated, transactional datastore. -* [Cockroach](https://www.cockroachlabs.com/docs/stable/orchestration.html) +* [==Cockroach==](https://www.cockroachlabs.com/docs/stable/orchestration.html) ## Operator Lifecycle Manager (OLM) - [itnext.io: Operator Lifecycle Manager](https://itnext.io/wth-is-a-operator-lifecycle-manager-873cf1661b04) @@ -172,686 +152,7 @@ * [vitobotta.com: Postgres on Kubernetes with the Zalando operator](https://vitobotta.com/2020/02/05/postgres-kubernetes-zalando-operator/) ## Crunchy Data PostgreSQL Operator -* [crunchydata.com](https://www.crunchydata.com/) -* [redhat.com: Overview - Crunchy Data PostgreSQL on Red Hat OpenShift Container Storage 🌟](https://www.redhat.com/en/resources/crunchy-data-postgresql-overview) -* [learn.crunchydata.com 🌟](https://learn.crunchydata.com/) -* [github.com/CrunchyData](https://github.com/CrunchyData) -* [github.com/CrunchyData/postgres-operator](https://github.com/CrunchyData/postgres-operator) -* [Documentation: Crunchy Data Container Suite 🌟](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/) -* [crunchydata blog: Deploying Active-Active PostgreSQL on Kubernetes](https://info.crunchydata.com/blog/active-active-on-kubernetes) -* [crunchydata blog: What's New in Crunchy PostgreSQL Operator 4.0](https://info.crunchydata.com/blog/crunchy-postgres-kubernetes-operator-4.0) -* [slideshare.net: Deploying PostgreSQL on Kubernetes](https://www.slideshare.net/vyruss000/deploying-postgresql-on-kubernetes) -* [slideshare.net: Operating PostgreSQL at Scale with Kubernetes](https://www.slideshare.net/jkatz05/operating-postgresql-at-scale-with-kubernetes-137132067) -* [Youtube: Demo of Crunchy Data Postgres Operator v1.0.0 (2017)](https://www.youtube.com/watch?v=HX10WWTRiTY) -* [Youtube: Crunchy PostgreSQL Operator for Kubernetes 3.4 Overview (2018)](https://www.youtube.com/watch?v=gaXlrlz7GVc) -* [Youtube: OpenShift Meetup Tokyo #05 - Operator and Operator Lifecycle Manager on OpenShift (2019, openshift 4.1)](https://www.youtube.com/watch?v=X4vuktlK0Tg) -* [info.crunchydata.com: Monitoring PostgreSQL clusters in kubernetes](https://info.crunchydata.com/blog/monitoring-postgresql-clusters-in-kubernetes) -* [info.crunchydata.com: Deploy High-Availability PostgreSQL Clusters on Kubernetes by Example](https://info.crunchydata.com/blog/deploy-high-availability-postgresql-on-kubernetes) -* [info.crunchydata.com: Migrating from Oracle to PostgreSQL: Tips and Tricks](https://info.crunchydata.com/blog/migrating-from-oracle-to-postgresql-questions-and-considerations) -* [info.crunchydata.com: Scheduled PostgreSQL Backups and Retention Policies with Kubernetes](https://info.crunchydata.com/blog/schedule-postgresql-backups-and-retention-with-kubernetes) -* [info.crunchydata.com: Guard Against Transaction Loss with PostgreSQL Synchronous Replication](https://info.crunchydata.com/blog/synchronous-replication-in-the-postgresql-operator-for-kubernetes-guarding-against-transactions-loss) -* [info.crunchydata.com: Crunchy PostgreSQL for Kubernetes 4.3 Released](https://info.crunchydata.com/news/crunchy-postgresql-for-kuberenetes-4.3) Crunchy #PostgreSQL for #Kubernetes 4.3 released! Now supports multi-Kubernetes deployments, easier customization + installation, TLS, pgAdmin 4, improved pgBouncer support, and much more! -* [info.crunchydata.com: Deploy pgAdmin4 with PostgreSQL on Kubernetes](https://info.crunchydata.com/blog/deploy-pgadmin4-with-postgresql-on-kubernetes) -* [info.crunchydata.com: Multi-Kubernetes Cluster PostgreSQL Deployments](https://info.crunchydata.com/blog/multi-kubernetes-cluster-postgresql-deployments) -* [info.crunchydata.com: Quickly Document Your Postgres Database Using psql Meta-Commands](https://info.crunchydata.com/blog/d-meta) -* [info.crunchydata.com: Fast CSV and JSON Ingestion in PostgreSQL with COPY](https://info.crunchydata.com/blog/fast-csv-and-json-ingestion-in-postgresql-with-copy) -* [info.crunchydata.com: Composite Primary Keys, PostgreSQL and Django](https://info.crunchydata.com/blog/composite-primary-keys-postgresql-and-django) -* [info.crunchydata.com: Getting Started with PostgreSQL Operator 4.3 in OpenShift](https://info.crunchydata.com/blog/getting-started-with-postgresql-operator-4.3-in-openshift) -* [info.crunchydata.com: Introducing the Postgres Prometheus Adapter](https://info.crunchydata.com/blog/using-postgres-to-back-prometheus-for-your-postgresql-monitoring-1) -* [info.crunchydata.com: Getting Started with PostgreSQL Operator 4.3 in OpenShift](https://info.crunchydata.com/blog/getting-started-with-postgresql-operator-4.3-in-openshift) -* [info.crunchydata.com: Deploying Active-Active PostgreSQL on Kubernetes](https://info.crunchydata.com/blog/active-active-on-kubernetes) -* [opensource.com: Scaling PostgreSQL with Kubernetes Operators 🌟](https://opensource.com/article/19/2/scaling-postgresql-kubernetes-operators) Operators let users create standardized interfaces for managing stateful applications, like PostgreSQL, across Kubernetes-enabled cloud environments. -* [info.crunchydata.com: Setup ora2pg for Oracle to Postgres Migration](https://info.crunchydata.com/blog/setup-ora2pg-for-oracle-to-postgres-migration) -* [info.crunchydata.com: pgBackRest - Performing Backups on a Standby Cluster](https://info.crunchydata.com/blog/pgbackrest-performing-backups-on-a-standby-cluster) -* [thenewstack.io: Advanced Kubernetes Namespace Management with the PostgreSQL Operator 🌟](https://thenewstack.io/advanced-kubernetes-namespace-management-with-the-postgresql-operator/) -* [postgresql.org: Crunchy PostgreSQL Operator 4.5: Enhanced Monitoring, Custom Annotations, PostgreSQL 13 🌟](https://www.postgresql.org/about/news/crunchy-postgresql-operator-45-enhanced-monitoring-custom-annotations-postgresql-13-2086/) -* [info.crunchydata.com: How to Setup PostgreSQL Monitoring in Kubernetes](https://info.crunchydata.com/blog/setup-postgresql-monitoring-in-kubernetes) -* [redhat.com: Crunchy Data PostgreSQL on Red Hat OpenShift Container Storage (Overview) 🌟](https://www.redhat.com/en/resources/crunchy-data-postgresql-overview) -* [info.crunchydata.com: PostgreSQL Monitoring for Application Developers: The DBA Fundamentals](https://info.crunchydata.com/blog/postgresql-monitoring-for-application-developers-dba-stats) -* [youtube: OCB: High Availability PostgreSQL and more on OpenShift - Jonathan Katz (Crunchy Data) 🌟](https://www.youtube.com/watch?v=9jbR9lZuSU0) Learn how the PostgreSQL Operator from Crunchy Data makes it easy to deploy high availability Postgres clusters on OpenShift. Beyond that, we'll look at how the Operator pattern makes it possible to run your own open source database-as-a-service and cover the essential features: provisioning, HA, disaster recovery, monitoring, and how to do it all securely! -* [info.crunchydata.com: Tuning Your Postgres Database for High Write Loads](https://info.crunchydata.com/blog/tuning-your-postgres-database-for-high-write-loads) -* [info.crunchydata.com: Using the PostgreSQL Operator with Rook Ceph Storage](https://info.crunchydata.com/blog/crunchy-postgresql-operator-with-rook-ceph-storage) -* [info.crunchydata.com: Multi-Kubernetes Cluster PostgreSQL Deployments](https://info.crunchydata.com/blog/multi-kubernetes-cluster-postgresql-deployments) -* [developer.ibm.com: Deploy a Crunchy PostgreSQL for Kubernetes Operator to an OpenShift cluster 🌟](https://developer.ibm.com/technologies/databases/tutorials/deploy-a-crunchy-posgresql-kubernetes-operator-red-hat-marketplace-openshift/) Follow these steps to deploy a supported Crunchy PostgreSQL for Kubernetes operator from Red Hat Marketplace to an OpenShift cluster -* [info.crunchydata.com: An Easy Recipe for Creating a PostgreSQL Cluster with Docker Swarm](https://info.crunchydata.com/blog/an-easy-recipe-for-creating-a-postgresql-cluster-with-docker-swarm) -* [info.crunchydata.com: Deploying the PostgreSQL Operator on GKE](https://info.crunchydata.com/blog/install-postgres-operator-kubernetes-on-gke-ansible) -* [info.crunchydata.com: Using GitOps to Self-Manage Postgres in Kubernetes 🌟](https://info.crunchydata.com/blog/gitops-postgres-kubernetes) -* [info.crunchydata.com: Kubernetes Pod Tolerations and Postgres Deployment Strategies](https://info.crunchydata.com/blog/kubernetes-pod-tolerations-and-postgresql-deployment-strategies) -* [blog.crunchydata.com: Helm, GitOps and the Postgres Operator](https://blog.crunchydata.com/blog/gitops-postgres-kubernetes-helm) -* [blog.crunchydata.com: Crunchy Postgres Operator 4.6.0 🌟](https://blog.crunchydata.com/blog/crunchy-postgres-operator-4.6.0) -* [blog.crunchydata.com: Deploy PostgreSQL With TLS in Kubernetes](https://blog.crunchydata.com/blog/set-up-tls-for-postgresql-in-kubernetes) -* [blog.crunchydata.com: Announcing Google Cloud Storage (GCS) Support for pgBackRest](https://blog.crunchydata.com/blog/announcing-google-cloud-storage-gcs-support-for-pgbackrest) -* [youtube: Install and use Crunchy PostgreSQLfor OpenShift operator for simple todo app on OpenShift 🌟](https://www.youtube.com/watch?v=9wuUXi6Qbis&ab_channel=MichaelBornholdtNielsen) -* [blog.crunchydata.com: Query Optimization in Postgres with pg_stat_statements](https://blog.crunchydata.com/blog/tentative-smarter-query-optimization-in-postgres-starts-with-pg_stat_statements) -* [blog.crunchydata.com: Kubernetes Pod Tolerations and Postgres Deployment Strategies 🌟](https://blog.crunchydata.com/blog/kubernetes-pod-tolerations-and-postgresql-deployment-strategies) -* [blog.crunchydata.com: Active-Active PostgreSQL Federation on Kubernetes](https://blog.crunchydata.com/blog/active-active-postgres-federation-on-kubernetes) -* [blog.crunchydata.com: Multi-Kubernetes Cluster PostgreSQL Deployments](https://blog.crunchydata.com/blog/multi-kubernetes-cluster-postgresql-deployments) -* [blog.crunchydata.com: Next Generation Crunchy Postgres for Kubernetes 5.0 Released](https://blog.crunchydata.com/news/next-generation-crunchy-postgres-for-kubernetes-released) -* [blog.crunchydata.com: pgBackRest Point-In-Time Recovery Using Crunchy PostgreSQL Operator](https://blog.crunchydata.com/blog/pgbackrest-point-in-time-recovery-using-crunchy-postgresql-operator) -* [blog.crunchydata.com: Using Cert Manager to Deploy TLS for Postgres on Kubernetes](https://blog.crunchydata.com/blog/using-cert-manager-to-deploy-tls-for-postgres-on-kubernetes) -* [dzone: PostgreSQL HA and Kubernetes](https://dzone.com/articles/postgresql-ha-and-kubernetes) I share my thoughts about how to set up a PostgreSQL Database in Kubernetes with some level of high availability, introducing 3 different architectural styles to do so. -* [blog.crunchydata.com: Can't Resize your Postgres Kubernetes Volume? No Problem!](https://blog.crunchydata.com/blog/resize-postgres-kubernetes-volume-instance-sets) -* [blog.crunchydata.com: Your Guide to Connection Management in Postgres 🌟](https://blog.crunchydata.com/blog/your-guide-to-connection-management-in-postgres) -* [==blog.crunchydata.com: PostgreSQL 14 on Kubernetes (with examples!)==](https://blog.crunchydata.com/blog/postgresql-14-on-kubernetes) -* [blog.crunchydata.com: Kubernetes + Postgres Cluster From Scratch on Rocky 8](https://blog.crunchydata.com/blog/kube-cluster-from-scratch-on-rocky-8) - -### Crunchy Data Developer Portal -- [Announcing the Crunchy Data Developer Portal](https://info.crunchydata.com/blog/announcing-the-crunchy-data-developer-portal) -- [Crunchy Data Developer Portal](https://www.crunchydata.com/developers) Self-service tools for developers and data scientists to easily get productive with PostgreSQL and Crunchy Data products. - -### Crunchy Data Postgres Operator in OpenShift 4. Overview & Proof of Concept -- In earlier days, Red Hat recommended running PostgreSQL database outside the Kubernetes cluster. Now, with [Kubernetes Operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) technology, you can run stateful database applications on Kubernetes. -- [Crunchy PostgreSQL Operator](https://github.com/CrunchyData/postgres-operator) extends Kubernetes to give you the power to easily  create, configure and manage PostgreSQL clusters at scale.  When combined with the [Crunchy PostgreSQL Container Suite](https://github.com/CrunchyData/crunchy-containers), the Crunchy PostgreSQL Operator provides an open source software solution for PostgreSQL scaling, high-availability, disaster recovery, monitoring, and more.  All of this capability comes with the repeatability and automation that comes from Operators on Kubernetes. -- Crunchy PostgreSQL Operator is open source and developed in close collaboration with users to support enterprise deployments of cloud agnostic PostgreSQL-as-a-Service capability. This release comes after extensive feedback from our customers and the community to ensure the scalability and security that sysadmins, DBAs, and developers have come to rely on. -- [Crunchy PostgreSQL and Openshift](https://www.openshift.com/blog/leveraging-the-crunchy-postgresql) -- Crunchy Postgres Solutions: - 1. **[Postgres Operator Community Edition](https://github.com/CrunchyData/postgres-operator):** - - ‘pgo’ CLI tool - - Not certified by Red Hat - - The Operator can be deployed by multiple methods including: - - [The PostgreSQL Operator Installer with kubectl](https://access.crunchydata.com/documentation/postgres-operator/4.3.0/installation/postgres-operator/) - - [Install Operator Using Bash (the one used in this overview)](https://access.crunchydata.com/documentation/postgres-operator/4.3.0/installation/other/bash/) - - [Ansible playbook installation](https://access.crunchydata.com/documentation/postgres-operator/4.3.0/installation/other/ansible/) - - CLI installation using OLM **(Deprecated)**: new CatalogSource added via “pgo.catalogsource.yaml”. - - Openshift Console installation using OLM (OperatorHub): - - New CatalogSource requirement. - - CLI settings required. - 2. **Certified Crunchydata Postgres Operator (OLM/OperatorHub):** - - Openshift Console installation using OLM (OperatorHub): One-click deployment and Web based operation - - **No ‘pgo’ CLI tool?** (compatibility issues: unable to find in github the version that matches the server API - Sept 2019) - - Certified by Red Hat - - Provided by CrunchyData - 3. Other non-certified installations (unsupported by Red Hat): with or without OLM, CLI, etc. -- **[Crunchy Containers Community Edition](https://github.com/CrunchyData/crunchy-containers):** - - Installation: - 1. [Installation guide](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/installation-guide/installation-guide/) - 2. [Pgadmin4 install](https://access.crunchydata.com/documentation/crunchy-postgres-containers/latest/examples/administration/pgadmin4/) (easy) - - Not certified by Red Hat - -
-![crunchdydata in operatorhub](images/crunchydata_operator_hub.png) -
- -#### Crunchydata Postgres Operator 3.5 -- Release date: Januay 2019 -- pgBackRest Architecture Enhancements -- pgBackRest Point-In-Time-Recovery -- Fast Failover -- Archive Storage Configuration -- Preferred Failover Node Label -- pgo-scheduler - -
-![crunchydata operator 3.5](images/crunchydata_operator_3_5.png) -
- -#### Crunchydata Postgres Operator 4.0.1 -- Release date: June 2019 -- **Namespace Deployment Options:** Ability to deploy the operator its own namespace but manage PostgreSQL clusters in multiple namespace. The new namespace management features lets users create multi-tenant PostgreSQL environments that add further isolation and security to their deployments. -- **Further Enhancements to pgBackRest Integration:** Perform pgBackRest backups to **Amazon S3**. This allows  users to create an automated, geographically distributed, and hybrid cloud disaster recovery strategy. -- Integrated PostgreSQL **Benchmarking** -- **Ansible** Playbook Based Installation -- **Operator Lifecycle Management (OLM):** The OLM project is a component of the Operator Framework, an open source toolkit to manage Operators, in an effective, automated, and scalable way. OLM concepts were included into Crunchy PostgreSQL Operator to assist in the deployment on Kubernetes using OLM integration. - -
-![crunchdydata operator 4.0.1](images/crunchydata_operator_4_0_1.png) -
- -#### Crunchydata Postgres Operator 4.0.1 Community Edition -##### Service Accounts -- Service accounts give us flexibility to control access to API without sharing user’s credentials. -- Service Accounts are also used by pods and other non-human actors to perform various actions and are a central vehicle by which their access to resources is managed. **By default, three service accounts are created in each project:** - 1. **Builder:** Used by build pods and assigned the **system:image-builder** role, which grants push capability into the internal registry to any image stream in the project. - 2. **Deployer:** Used by deploy pods and assigned the **system:deployer role**, which allows modifying replication controllers in the project. - 3. **Default:** Used by all other pods by default. -- You can see them by running the following command: - -``` -oc get serviceaccounts -oc get sa -``` - -- **Running a Pod with a Different Service Account.** You can run a pod with a service account other than the default: - - Edit the deployment configuration: ```$ oc edit dc/``` - - Add the serviceAccount and serviceAccountName parameters to the spec field, and specify the service account you want to use: - -``` -spec: - securityContext: {} - serviceAccount: - serviceAccountName: -``` - -- Refs: - - [ref1](https://docs.openshift.com/container-platform/4.1/authentication/using-service-accounts-in-applications.html) - - [ref2](https://docs.okd.io/latest/dev_guide/deployments/basic_deployment_operations.html#run-pod-with-different-service-account) - - [ref3](https://dzone.com/articles/understanding-openshift-security-context-constrain) - -- Each service account is represented by the ServiceAccount resource and is associated with two additional secrets for access to the OpenShift API and the internal registry: - -``` -$ oc describe serviceaccounts/default -Name: default -Namespace: pgouser1 -Labels: -Annotations: -Image pull secrets: default-dockercfg-nrhwt -Mountable secrets: default-token-vm8b5 - default-dockercfg-nrhwt -Tokens: default-token-p6rhz - default-token-vm8b5 -Events: - -``` - -- The service account can be created and deleted with a simple command: - - ```oc create sa myserviceaccount``` - - ```oc delete sa/myserviceaccount``` -- Every service account is also a member of two groups: - - **system:serviceaccounts**, which includes all service accounts in the cluster - - **system:serviceaccounts:**, which includes all service accounts in the project - -##### Roles assigned to Service Accounts -- When you create a pod, if you do not specify a service account, it is automatically assigned the **default service account** in the same namespace. If you get the raw json or yaml for a pod you have created (e.g. ```oc get pods/podname -o yaml```), you can see the **spec.serviceAccountName** field has been automatically set. -- You can grant privileges to groups of service accounts, which will effectively grant those privileges to all accounts in the group: - -``` -$ oc adm policy add-role-to-group view system:serviceaccounts -n myproject -role "view" added: "system:serviceaccounts" -``` - -- For example, to grant view privileges to all service accounts in the cluster in the project myproject: - -``` -$ oc adm policy remove-role-from-group view system:serviceaccounts –n myproject -role "view" removed: "system:serviceaccounts" -``` - -##### Security Context Constraints (SCC) -- **Security Context Constraints (SCCs)** control what actions pods can perform and what resources they can access. -- SCCs combine a set of security configurations into a single policy object that can be applied to pods. -- These security configurations include, but are not limited to, Linux Capabilities, Seccomp Profiles, User and Group ID Ranges, and types of mounts. -- OpenShift ships with several SCCs: - - The most constrained is the **restricted SCC**, and the least constrained is the **privileged SCC**: - - ```oc edit scc restricted``` - - ```oc edit scc privileged``` - - The other SCCs provide intermediate levels of constraint for various use cases. - - **The restricted SCC is granted to all authenticated users by default.** - - **The default SCC for most pods should be the restricted SCC.** -- If required, a cluster administrator may **allow certain pods to run with different SCCs**. Pods should be run with the most restrictive SCC possible. **Pods inherit their SCC from the Service Account used to run the pod**. With the default project template, new projects get a **Service Account named default** that is used to run pods. This default service account is only granted the ability to run the restricted SCC. - -
-![crunchdydata scc1](images/crunchydata_scc1.png) ![crunchdydata scc2](images/crunchydata_scc2.png) -
- -###### SCC Recommendations -- Use OpenShift's Security Context Constraint feature, which has been contributed to Kubernetes as [Pod Security Policies (PSP)](https://kubernetes.io/docs/concepts/policy/pod-security-policy/). PSPs are still beta in Kubernetes 1.10, 1.11, 1.12, 1.13, 1.14, 1.15 . -- **Use the restricted SCC as the default** -- For pods that require additional access, use the SCC that grants the least amount of additional privileges or create a custom SCC -- Remediation: Apply the SCC with the least privilege required -- Audit: - - To show all available SCCs: ```oc describe scc``` - - To audit a single pod: - -``` -oc describe pod | grep openshift.io\/scc -openshift.io/scc: restricted -``` - -
-![crunchdydata scc3](images/crunchydata_scc3.png) -
- -- **Problem:** Default SCC is “restricted” SCC -> Crunchydata Postgres Cluster PODs are not rolled out - - ```oc get rs```: - -
- ![crunchdydata restricted scc](images/crunchydata_restricted_scc.png) -
- - - ```oc describe rs mycluster5-lgyb-84b58f5dd9```: Warning **FailedCreate** 3m24s (x17 over 7m30s) **replicaset-controller Error creating: pods "mycluster5-lgyb-84b58f5dd9-" is forbidden: unable to validate against any security context constraint: [fsGroup: Invalid value: []int64{26}: 26 is not an allowed group]** - -##### Add a SCC to a Project -- SCCs are not granted directly to a project. Instead, you add a service account to an SCC and either specify the service account name on your pod or, when unspecified, run as the **default** service account. -- **To add a SCC to a user:** ```oc adm policy add-scc-to-group ``` -- **To add a SCC to all service accounts in a namespace:** - ```oc adm policy add-scc-to-group system:serviceaccounts:``` -- If you are currently in the project to which the service account belongs, you can use the -z flag and just specify the **serviceaccount_name**: - ```oc adm policy add-scc-to-user -z ``` -- Examples: - - ```oc describe scc anyuid``` - - ```oc adm policy add-scc-to-group anyuid system:serviceaccounts:pgouser1``` - - ‘default’ serviceAccount: - - ``` - oc adm policy add-scc-to-user anyuid system:serviceaccounts:pgouser1:default - ``` - - - User registered in Identity Provider: - - ``` - oc adm policy add-scc-to-user anyuid myuser - ``` - - - Custom serviceAccount: - - ``` - oc adm policy add-scc-to-user anyuid system:serviceaccounts:pgouser1:my-sa - ``` - -- Refs: - - [ref1](https://docs.openshift.com/container-platform/3.6/admin_guide/manage_scc.html) - - [ref2](https://docs.openshift.com/container-platform/3.6/admin_guide/manage_scc.html#add-scc-to-user-group-project) - - [ref3 🌟](https://dzone.com/articles/understanding-openshift-security-context-constrain) - -###### Workflow1 without custom Service Account and without DeploymentConfig - -
-![crunchdydata scc workflow1](images/crunchydata_scc_workflow1.png) -
- -###### Workflow2 with custom Service Account and without DeploymentConfig - -
-![crunchdydata scc workflow2](images/crunchydata_scc_workflow2.png) -
- -- Create a custom ServiceAccount and add a role to it within a Project: - 1. ```oc project pgouser1``` - 2. ```oc get scc``` - 3. ```oc create serviceaccount my-sa –n pgouser1``` - 4. ```oc describe sa my-sa``` - 5. ```oc get scc``` - 6. ```oc adm policy add-scc-to-user anyuid system:serviceaccount:pgouser1:my-sa``` - 7. ```oc policy add-role-to-user edit system:serviceaccount:pgouser1:my-sa``` - 8. Alternative to step #6: - -``` -oc edit scc anyuid -``` - -``` -users: -- system:serviceaccount:pgouser1:my-sa -``` - -- Other commands of interest: - - ```oc get role``` - - ```oc describe role pgo-role``` - - ```oc edit role pgo-role``` - -- References: - - [ref1](https://blog.openshift.com/understanding-service-accounts-sccs/) - - [ref2](https://docs.openshift.com/container-platform/4.1/authentication/understanding-and-creating-service-accounts.html) - - [ref3](https://docs.openshift.com/container-platform/4.1/authentication/managing-security-context-constraints.html#role-based-access-to-ssc_configuring-internal-oauth) - -###### Workflow3 with custom service Account and DeploymentConfig - -
-![crunchdydata scc workflow3](images/crunchydata_scc_workflow3.png) -
- -##### Environment setup. Port Forward and WSL -- Deployment method used in this presentation: [Install Operator Using Bash](https://access.crunchydata.com/documentation/postgres-operator/4.3.0/installation/other/bash/) -- Config files setup by installer are saved in: - - “pgo” Project -> Deployments - - “pgo” Project -> Deployment Configs (empty, openshift feature not provided by CrunchyData) - - “pgo” Project -> Secrets - - “pgo” Project -> Config Maps -- References: - - [ref1](https://access.crunchydata.com/documentation/postgres-operator/latest/operatorcli/pgo-overview/) - - [ref2](https://crunchydata.github.io/postgres-operator/latest/operatorcli/common-pgo-cli-operations/) -- WSL (Windows Subystem for Linux): **alog/olog/clog** functions must be adapted to be run in WSL's Ubuntu: - -``` -vim $HOME/.bashrc -``` - -``` -# ~/.bashrc: executed by bash(1) for non-login shells. -# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) -# for examples -# If not running interactively, don't do anything -case $- in - *i*) ;; - *) return;; -esac -# don't put duplicate lines or lines starting with space in the history. -# See bash(1) for more options -HISTCONTROL=ignoreboth -# append to the history file, don't overwrite it -shopt -s histappend -# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) -HISTSIZE=1000 -HISTFILESIZE=2000 -# check the window size after each command and, if necessary, -# update the values of LINES and COLUMNS. -shopt -s checkwinsize -# If set, the pattern "**" used in a pathname expansion context will -# match all files and zero or more directories and subdirectories. -#shopt -s globstar -# make less more friendly for non-text input files, see lesspipe(1) -[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" -# set variable identifying the chroot you work in (used in the prompt below) -if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then - debian_chroot=$(cat /etc/debian_chroot) -fi -# set a fancy prompt (non-color, unless we know we "want" color) -case "$TERM" in - xterm-color|*-256color) color_prompt=yes;; -esac -# uncomment for a colored prompt, if the terminal has the capability; turned -# off by default to not distract the user: the focus in a terminal window -# should be on the output of commands, not on the prompt -#force_color_prompt=yes -if [ -n "$force_color_prompt" ]; then - if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then - # We have color support; assume it's compliant with Ecma-48 - # (ISO/IEC-6429). (Lack of such support is extremely rare, and such - # a case would tend to support setf rather than setaf.) - color_prompt=yes - else - color_prompt= - fi -fi -if [ "$color_prompt" = yes ]; then - PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' -else - PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' -fi -unset color_prompt force_color_prompt -# If this is an xterm set the title to user@host:dir -case "$TERM" in -xterm*|rxvt*) - PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" - ;; -*) - ;; -esac -# enable color support of ls and also add handy aliases -if [ -x /usr/bin/dircolors ]; then - test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" - alias ls='ls --color=auto' - #alias dir='dir --color=auto' - #alias vdir='vdir --color=auto' - alias grep='grep --color=auto' - alias fgrep='fgrep --color=auto' - alias egrep='egrep --color=auto' -fi -# colored GCC warnings and errors -#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' -# some more ls aliases -alias ll='ls -alF' -alias la='ls -A' -alias l='ls -CF' -# Add an "alert" alias for long running commands. Use like so: -# sleep 10; alert -alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' -# Alias definitions. -# You may want to put all your additions into a separate file like -# ~/.bash_aliases, instead of adding them here directly. -# See /usr/share/doc/bash-doc/examples in the bash-doc package. -if [ -f ~/.bash_aliases ]; then - . ~/.bash_aliases -fi -# enable programmable completion features (you don't need to enable -# this, if it's already enabled in /etc/bash.bashrc and /etc/profile -# sources /etc/bash.bashrc). -if ! shopt -oq posix; then -if [ -f /usr/share/bash-completion/bash_completion ]; then - . /usr/share/bash-completion/bash_completion -elif [ -f /etc/bash_completion ]; then - . /etc/bash_completion -fi -fi -######################################### -# CRUNCHYDATA POSTGRES OPERATOR SETTINGS: -######################################### -# operator env vars -export PATH=$PATH:$HOME/odev/bin -export PGO_APISERVER_URL=https://127.0.0.1:18443 -#export PGO_APISERVER_URL=https://172.25.212.138:8443 -export PGO_CA_CERT=$HOME/odev/src/github.com/crunchydata/postgres-operator/conf/postgres-operator/server.crt -export PGO_CLIENT_CERT=$HOME/odev/src/github.com/crunchydata/postgres-operator/conf/postgres-operator/server.crt -export PGO_CLIENT_KEY=$HOME/odev/src/github.com/crunchydata/postgres-operator/conf/postgres-operator/server.key -#alias setip='export PGO_APISERVER_URL=https://`kubectl get service postgres-operator -o=jsonpath="{.spec.clusterIP}"`:18443' -#alias alog='kubectl logs `kubectl get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c apiserver' -#alias olog='kubectl logs `kubectl get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c operator' -# -export CCP_IMAGE_TAG=rhel7-11.1-2.3.0 -export CCP_IMAGE_PREFIX=registry.connect.redhat.com/crunchydata -export PGO_CMD=oc -export PGO_BASEOS=rhel7 -export PGO_VERSION=4.0.1 -export PGO_NAMESPACE=pgo -export PGO_IMAGE_TAG=rhel7-4.0.1 -export PGO_IMAGE_PREFIX=registry.connect.redhat.com/crunchydata -export GOPATH=$HOME/odev -export GOBIN=$GOPATH/bin -export PATH=$PATH:$GOBIN -# NAMESPACE is the list of namespaces the Operator will watch -export NAMESPACE=pgouser1,pgouser2 -# PGO_OPERATOR_NAMESPACE is the namespace the Operator is deployed into -export PGO_OPERATOR_NAMESPACE=pgo -# PGO_CMD values are either kubectl or oc, use oc if Openshift -export PGO_CMD=kubectl -# the directory location of the Operator scripts -export PGOROOT=$GOPATH/src/github.com/crunchydata/postgres-operator -# the version of the Operator you run is set by these vars -export PGO_IMAGE_PREFIX=crunchydata -export PGO_BASEOS=centos7 -export PGO_VERSION=4.0.1 -export PGO_IMAGE_TAG=$PGO_BASEOS-$PGO_VERSION -# for the pgo CLI to authenticate with using TLS -export PGO_CA_CERT=$PGOROOT/conf/postgres-operator/server.crt -export PGO_CLIENT_CERT=$PGOROOT/conf/postgres-operator/server.crt -export PGO_CLIENT_KEY=$PGOROOT/conf/postgres-operator/server.key -# common bash functions for working with the Operator -function setip() { -export PGO_APISERVER_URL=https://`$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get service postgres-operator -o=jsonpath="{.spec.clusterIP}"`:18443 -export CO_APISERVER_URL=https://`$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get service postgres-operator -o=jsonpath="{.spec.clusterIP}"`:18443 -} -function alog() { -$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" logs `$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c apiserver -} -function olog () { -$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" logs `$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c operator -} -function slog () { -$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" logs `$PGO_CMD -n "$PGO_OPERATOR_NAMESPACE" get pod --selector=name=postgres-operator -o jsonpath="{.items[0].metadata.name}"` -c scheduler -} -#export DOCKER_HOST=tcp://localhost:2375 -# crunchy containers: https://github.com/CrunchyData/crunchy-containers/tree/2.4.1 -export GOPATH=$HOME/cdev # set path to your new Go workspace -export GOBIN=$GOPATH/bin # set bin path -export PATH=$PATH:$GOBIN # add Go bin path to your overall path -export CCP_BASEOS=centos7 # centos7 for Centos, rhel7 for Redhat -export CCP_PGVERSION=10 # The PostgreSQL major version -export CCP_PG_FULLVERSION=10.9 -export CCP_VERSION=2.4.1 -export CCP_IMAGE_PREFIX=crunchydata # Prefix to put before all the container image names -export CCP_IMAGE_TAG=$CCP_BASEOS-$CCP_PG_FULLVERSION-$CCP_VERSION # Used to tag the images -export CCPROOT=$GOPATH/src/github.com/crunchydata/crunchy-containers # The base of the clone github repo -export CCP_SECURITY_CONTEXT="" -export CCP_CLI=oc # kubectl for K8s, oc for OpenShift -export CCP_NAMESPACE=crunchy-containers # Change this to whatever namespace/openshift project name you want to use -export CCP_SECURITY_CONTEXT='"fsGroup":26' -export CCP_STORAGE_CLASS=gp2 -export CCP_STORAGE_MODE=ReadWriteOnce -export CCP_STORAGE_CAPACITY=400M -``` -
- -- **port-forward** to reach postgres-operator POD with ‘pgo’ tool (18443 port defined in previous .bashrc): - -``` -oc project pgo -oc get pod -oc port-forward postgres-operator-844d8f9777-8d5k5 -n pgo 18443:8443 -``` - -##### Cluster Deployment and Operation with pgo - -``` -pgo create cluster mycluster --pgpool -n pgouser1 --resources-config=small --replica-count=1 -pgo show cluster --all -n pgouser1 -pgo backup mycluster --backup-type=pgbackrest –n pgouser1 -pgo failover mycluster --query –n pgouser1 -pgo failover mycluster --target=mycluster-olvhy –n pgouser1 -pgo test mycluster -n pgouser1 -pgo create cluster somefastpg -n pgouser1 --node-label=speed=fast -pgo create cluster abouncer --pgbouncer (sidecar pgbouncer added to this PG cluster) -pgo create cluster apgpool --pgpool -pgo status cluster mycluster –n pgouser1 -pgo ls mycluster –n pgouser1 -pgo reload mycluster –n pgouser1 -pgo scale mycluster –n pgouser1 -``` - -PGO USER allows you to manage users and passwords across a set of clusters: - -``` -pgo user –-selector=name=mycluster --expired=300 –-update-password –n pgouser1 -pgo user –-change-password=bob –n pgouser1 --selector=name=mycluster --password=newpass -``` - -##### Psql access from postgres operator POD - -``` -oc project pgo -oc get pods -oc rsh postgres-operator-844d8f9777-ppjv9 -export PGPASSWORD=password -psql -h mycluster-pgpool.pgouser1 -U testuser -l -psql -h mycluster-pgpool.pgouser1 -U postgres -c "CREATE DATABASE testdb" -psql -h mycluster-pgpool.pgouser1 -U postgres testdb -c "CREATE TABLE test (ID CHAR(4) NOT NULL, name TEXT NOT NULL, PRIMARY KEY (id))" -psql -h mycluster-pgpool.pgouser1 -U postgres testdb -c "INSERT INTO test (id,name) VALUES (1, 'user01')" -psql -h mycluster-pgpool.pgouser1 -U postgres testdb -c "select * from test" -``` - -##### List Databases with psql - -``` -postgres=# \l - List of databases - Name | Owner | Encoding | Collate | Ctype | Access privileges ------------+----------+----------+------------+------------+----------------------- - postgres | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | - template0 | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/postgres + - | | | | | postgres=CTc/postgres - template1 | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/postgres + - | | | | | postgres=CTc/postgres - userdb | postgres | UTF8 | en_US.UTF8 | en_US.UTF8 | =Tc/postgres + - | | | | | postgres=CTc/postgres+ - | | | | | testuser=CTc/postgres+ - | | | | | user1=CTc/postgres -(4 rows) -``` - -##### Access from another POD within the cluster with psql client -For example with [this psql client](https://hub.docker.com/r/centos/postgresql-10-centos7) - -``` -oc rsh postgresql-10-centos7-1-pjh46 -sh-4.2$ psql -p 5432 -h mycluster-pgpool.pgouser1 -U postgres postgres -psql (10.6, server 11.3) -WARNING: psql major version 10, server major version 11. - Some psql features might not work. -Type "help" for help. - -postgres=# -``` - -##### Access from another POD within the cluster with Pgadmin4 of Crunchy containers Community Edition -- [crunchy-pgadmin4](https://access.crunchydata.com/documentation/crunchy-postgres-containers/4.3.0/container-specifications/crunchy-pgadmin4/) -- [pgAdmin 4](https://access.crunchydata.com/documentation/crunchy-postgres-containers/4.3.0/examples/administration/pgadmin4/) - -
-![crunchdydata pgadmin](images/crunchydata_pgadmin.png) -
- -##### Debugging Crunchydata Postgres Operator 4.0.1 Community Edition -- Debug level logging in turned on by default when deploying the Operator. -- Sample bash functions are supplied in examples/envs.sh to view the Operator logs. -- You can view the Operator REST API logs with the **alog** bash function. -- You can view the Operator core logic logs with the **olog** bash function. -- You can view the Scheduler logs with the **slog** bash function. -- You can enable the pgo CLI debugging with the following flag: - ``` - $ pgo version --debug - ``` -- You can set the REST API URL as follows after a deployment if you are developing on your local host by executing the **setip** bash function. -- “alog”, “olog”, “slog” and “setip” are defined in $HOME/.bashrc - - -#### Certified Crunchydata Postgres Operator (OLM/OperatorHub). Manual Setup -- We will set this up manually: - - StorageClass changed to “gp2” in YAML file (AWS) - - ‘pgo’ tool compatibility issues - -
-![crunchdydata operatorhub install2](images/crunchydata_operatorhub_install1.png) - -![crunchdydata operatorhub install2](images/crunchydata_operatorhub_install2.png) -
- -- NO PODs are deployed -> configuration needed: - -
-![crunchdydata operatorhub install3](images/crunchydata_operatorhub_install3.png) - -![crunchdydata operatorhub install4](images/crunchydata_operatorhub_install4.png) -
- -- Replica Sets: where PODs should be launched - -
-![crunchdydata operatorhub install5](images/crunchydata_operatorhub_install5.png) -
- -- ReplicaSets (environment) and Deployment: - -
-![crunchdydata operatorhub install6](images/crunchydata_operatorhub_install6.png) - -![crunchdydata operatorhub install7](images/crunchydata_operatorhub_install7.png) -
- -- Error detected. Solution: - -``` -oc adm policy add-scc-to-user anyuid system:serviceaccount:pgophub:default -``` - -
-![crunchdydata operatorhub install8](images/crunchydata_operatorhub_install8.png) -
- -- We see now a new POD being created: - -
-![crunchdydata operatorhub install9](images/crunchydata_operatorhub_install9.png) -
- -- New errors: “secrets” need to be setup: - -
-![crunchdydata operatorhub install10](images/crunchydata_operatorhub_install10.png) - -![crunchdydata operatorhub install11](images/crunchydata_operatorhub_install11.png) - -![crunchdydata operatorhub install12](images/crunchydata_operatorhub_install12.png) -
- -- New errors: 3 “secrets” need to be setup manually -> POD is started successfully and we have psql access. - -
-![crunchdydata operatorhub install13](images/crunchydata_operatorhub_install13.png) ![crunchdydata operatorhub install14](images/crunchydata_operatorhub_install14.png) - -![crunchdydata operatorhub install15](images/crunchydata_operatorhub_install15.png) - -![crunchdydata operatorhub install16](images/crunchydata_operatorhub_install16.png) -
+- [Crunchy Data PostgreSQL Operator](crunchydata.md) ## Oracle 12c on OpenShift Container Platform - [medium: Running Oracle 12c on OpenShift Container Platform](https://medium.com/@pittar/running-oracle-12c-on-openshift-container-platform-ca471a9f7057) Oracle is now offering an Oracle 12c image on Docker Hub for dev/test purposes (license still required for Prod). @@ -963,6 +264,9 @@ oc adm policy add-scc-to-user anyuid system:serviceaccount:pgophub:default ??? note "Click to expand!"
+ + +
diff --git a/docs/devops.md b/docs/devops.md index 982335f6..eaf53ac1 100644 --- a/docs/devops.md +++ b/docs/devops.md @@ -2,7 +2,8 @@ - [Introduction to Digital Business Transformation](#introduction-to-digital-business-transformation) - [Automation Glossary](#automation-glossary) - [Blogs](#blogs) - - [Automation anxiety](#automation-anxiety) +- [Training](#training) +- [Automation anxiety](#automation-anxiety) - [State of DevOps. Google's DevOps Research and Assessment (DORA)](#state-of-devops-googles-devops-research-and-assessment-dora) - [Interview Questions](#interview-questions) - [AIOps](#aiops) @@ -57,8 +58,13 @@ - [devopsdigest.com](https://www.devopsdigest.com/) - [Top 15 DevOps blogs to read and follow](https://searchitoperations.techtarget.com/feature/Top-15-DevOps-blogs-to-read-and-follow) - [devopstips.net](https://devopstips.net/) +- [devopslearners.com](https://devopslearners.com) -### Automation anxiety +## Training +* [==Techworld with Nana: Learn DevOps topics easily==](https://www.techworld-with-nana.com) + * [==techworld-with-nana.com/devops-bootcamp==](https://www.techworld-with-nana.com/devops-bootcamp) + +## Automation anxiety {== - Sysadmins and engineers may have personal fears about adopting automation, as much of their typical day revolves around the manual tasks and processes that automation promises to eliminate. Automation anxiety is the fear that if these tasks can be handled by automated tools, there will no longer be any reason to keep a person in that role. Nobody likes being automated out of a job. @@ -426,6 +432,8 @@ Resolve your software incidents 10x faster ![8 devops trends](images/8_devops_trends.png) + [![devops lifecycle](images/devops_lifecycle.jfif)](https://twitter.com/tfortricks_ind) + diff --git a/docs/docker.md b/docs/docker.md index c6cf35ea..e2821a02 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -5,7 +5,7 @@ - [Awesome Lists](#awesome-lists) - [Docker VS Kubernetes](#docker-vs-kubernetes) - [Docker Patterns and Antipatterns](#docker-patterns-and-antipatterns) -- [Security](#security) +- [Docker Security](#docker-security) - [How To Build a Smaller Docker Image](#how-to-build-a-smaller-docker-image) - [Reducing Build Time](#reducing-build-time) - [Modify containers without rebuilding](#modify-containers-without-rebuilding) @@ -153,12 +153,13 @@ - Confusing images used for deployment with those used for development. - Building different images per environment. -## Security +## Docker Security - [thehackernews.com: Docker Images Containing Cryptojacking Malware Distributed via Docker Hub](https://thehackernews.com/2020/06/cryptocurrency-docker-image.html) - [acloudguru.com: 10 Docker Security Best Practices to Cut Container Chaos](https://acloudguru.com/blog/engineering/10-docker-security-best-practices-to-cut-container-chaos) - [brianchristner.io: How to use Docker Security Scan Locally](https://brianchristner.io/how-to-use-docker-scan/) Docker included a new command called `docker scan` that scans local images against the Snyk security engine, providing you with security visibility into your local Dockerfiles and images. - [snyk.io: 10 Docker Security Best Practices 🌟](https://snyk.io/blog/10-docker-image-security-best-practices/) - [cheatsheetseries.owasp.org: Docker Security Cheat Sheet 🌟🌟](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html) +- [==augmentedmind.de: Docker optimization guide: the 12 best tips to optimize Docker image security==](https://www.augmentedmind.de/2022/02/20/optimize-docker-image-security/) ## How To Build a Smaller Docker Image * [developers.redhat.com: Keep it small: a closer look at Docker image sizing](https://developers.redhat.com/blog/2016/03/09/more-about-docker-images-size/) diff --git a/docs/edge-computing.md b/docs/edge-computing.md index 13cb1008..ed933262 100644 --- a/docs/edge-computing.md +++ b/docs/edge-computing.md @@ -7,4 +7,4 @@ - [opensource.com: Why KubeEdge is my favorite open source project of 2020 🌟](https://opensource.com/article/21/1/kubeedge) KubeEdge is a workload framework for edge computing. - [thenewstack.io: Cloudian CTO: Kubernetes, Standardization Key to Edge](https://thenewstack.io/cloudian-cto-kubernetes-standardization-key-to-edge/) - [cncf.io: Hosted Edge vs Cloud: the battle for latency and security 🌟](https://www.cncf.io/blog/2021/12/08/hosted-edge-vs-cloud-the-battle-for-latency-and-security) - \ No newline at end of file +- [==developers.redhat.com: Bring your Kubernetes workloads to the edge==](https://developers.redhat.com/articles/2021/11/22/bring-your-kubernetes-workloads-edge) \ No newline at end of file diff --git a/docs/elearning.md b/docs/elearning.md index b7fae1d8..3997ee34 100644 --- a/docs/elearning.md +++ b/docs/elearning.md @@ -32,6 +32,7 @@ * [Cloud DevJam](https://www.techgig.com/googlecloud) Cloud DevJam is an interactive cloud-learning platform that allows enterprise IT professionals to learn and upskill on Google Cloud.​They can start their learning journey by choosing from various cloud learning modules. These modules provide them with the latest in Google Cloud technologies. One of these is the Network and Security learning track. * [hashicorp.com: HashiCorp Learning Resources Reference Guide 🌟](https://www.hashicorp.com/blog/hashicorp-learning-resources-reference-guide) Read this curated list of HashiCorp learning resources to help practitioners and organizations better understand the cloud operating model. * [harvard.edu: CS50: Introduction to Computer Science (free)](https://pll.harvard.edu/course/cs50-introduction-computer-science) An introduction to the intellectual enterprises of computer science and the art of programming. +* [==Techworld with Nana: Learn DevOps topics easily==](https://www.techworld-with-nana.com) ## Spanish E-learning - [open-bootcamp.com](http://open-bootcamp.com) diff --git a/docs/gitops.md b/docs/gitops.md index 729795fd..8411ba68 100644 --- a/docs/gitops.md +++ b/docs/gitops.md @@ -21,6 +21,7 @@ - [AWS Kubernetes](#aws-kubernetes) - [Weave Kubernetes Platform](#weave-kubernetes-platform) - [Ubuntu Charmed Kubernetes](#ubuntu-charmed-kubernetes) +- [Images](#images) - [Tweets](#tweets) - [Videos](#videos) @@ -126,6 +127,7 @@ - [codefresh.io: The pains of GitOps 1.0](https://codefresh.io/about-gitops/pains-gitops-1-0/) - [==thenewstack.io: Can You GitOps Your APIs?==](https://thenewstack.io/can-you-gitops-your-apis/) - [weave.works: GitOps takes DevOps teams to higher levels of maturity](https://www.weave.works/blog/gitops-takes-devops-teams-to-higher-levels-of-maturity) +- [==linkedin.com pulse: WTH is GitOps? | Pavan Belagatti==](https://www.linkedin.com/pulse/wth-gitops-pavan-belagatti/)
[![gitops in a nutshell](images/GitOps-in-a-nutshell.png)](https://www.unifiedguru.com/gitops-and-the-cloud-operating-model-vmware-cloud-community/) @@ -252,6 +254,15 @@ * [Charmed Kubernetes](https://ubuntu.com/kubernetes/features) * [Kubernetes GitOps with Azure Arc and Charmed Kubernetes](https://ubuntu.com/blog/gitops-with-azure-arc-and-charmed-kubernetes) +## Images +??? note "Click to expand!" + +
+ [![traditional devops vs gitops](images/traditional_ops_vs_gitops.png)](https://www.linkedin.com/pulse/wth-gitops-pavan-belagatti/) + + [![devops pipeline vs gitops pipeline](images/devops_pipeline_vs_gitops_pipeline.png)](https://www.linkedin.com/pulse/wth-gitops-pavan-belagatti/) +
+ ## Tweets
Click to expand! diff --git a/docs/grafana.md b/docs/grafana.md index d3869bd6..31c15fcc 100644 --- a/docs/grafana.md +++ b/docs/grafana.md @@ -66,4 +66,5 @@ Message Streams like Kafka/Red Hat AMQ Streams|Other|[9777](https://grafana.com/ ## Grafana Loki - [Grafana Loki](https://grafana.com/oss/loki/) - [itnext.io: Logging in Kubernetes with Loki and the PLG Stack](https://itnext.io/logging-in-kubernetes-with-loki-and-the-plg-stack-93b27c90ec34) Loki is a new log aggregation system from Grafana Labs. It is designed to be cost-effective and easy to operate. In this article, you learn more about Loki and how to use the PLG Stack (Promtail, Loki, Grafana) for logging in Kubernetes. -- [medium.com/devopsturkiye: Deploy Grafana Loki and Promtail using ArgoCD](https://medium.com/devopsturkiye/deploy-grafana-loki-and-promtail-using-argocd-416b2fd4539f) \ No newline at end of file +- [medium.com/devopsturkiye: Deploy Grafana Loki and Promtail using ArgoCD](https://medium.com/devopsturkiye/deploy-grafana-loki-and-promtail-using-argocd-416b2fd4539f) +- [faun.pub: Manage Grafana Loki alerting and recording rules using GitOps](https://faun.pub/manage-grafana-lokis-alerting-and-recording-rules-using-gitops-c26d06d772c6) \ No newline at end of file diff --git a/docs/images/devops_lifecycle.jfif b/docs/images/devops_lifecycle.jfif new file mode 100644 index 0000000000000000000000000000000000000000..04acf744a2e444b746c96403b326f931e2371875 GIT binary patch literal 90077 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 literal 0 HcmV?d00001 diff --git a/docs/images/devops_pipeline_vs_gitops_pipeline.png b/docs/images/devops_pipeline_vs_gitops_pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f0045d0e5cee231527117909b2801dcd9e8fb5 GIT binary patch literal 168562 zcmZ6yc|26_|Ho|&Q)C$=NeGRd2HC^d9n_H+lHD0wwh$7s4iZh4AmmX~k#E`&UIeeK${ zyLazi=^b7PkACF3^KENuYi4F9(e{ke>DY(9(Np4_Y(lYEVPRo$adF}I1=M+$n->Eg zerb+ds180FY!)o>HSVqdoWa|;%+k)EJF)sZeILJye&l#8q?DSSDco7j#ibvG*{R^U z-1vR-yKnme-OGdJ+;f*&>)7(2>U~#VaOHfWqORT@Xgp!LQQhd!xsFjvO1)8BJg=eu zH_$$KJj5=YBctfACJC@7%qEv5FIG!S^@9YULBc=aePu-lzOd zez2tR;JI+D^?Y2zK|eEk@Y7%knW^LP^>@ytA?3q!hMo$D<-LypbDDVQJhd9Z=u4Yn zDCi_p){Je#&lUk@AB4=SxGx_ys@3m(G;#ncrzO{SdrTnYiBDb<{$ILz6)zFg!P_nE z8^i8iRlI=vH=B%DUV1r+ojsuWZe)ETdE3RvXiM&nUbXR-i>9iR5cTqBs}bynCJSmP zAKs)TU?RGw7e5xZIdNGzVwg>b>>XM0e9A4MtQcwRo@?k=GpJ{6a;nst5A<-ABJ748 z?jLMmW)7R!(^^H4FKPbmlc6!WmLphq6&NsLm;a-*456u1$iT#q{`vEQslxaSB@?Of z5f>HBI0UKkUoFGEo1~Wq_xJ@I#xUc0O-EnHI`W25sl5k1s>Sb|55Jas7417-xF1*W zw80V%E?vxQ(uMfqa(Jwp`|SkeKjT5etTIWg6{@SIoG|L*<6(M|5}XD zpal24LJ?_%ocvX_0;gx%Bt^XQU0{?#M_$kDerpg+4fUM#%tnht@g_;}Lya9~d9J^~ zi<2b{7_y-oX6fye@N=X1y zuu>V$qw)}fS?}EiouGBwoaH28l;%b$g*YZ1+V!#;Bu#?=Tb-b{v>iq)_j=n=Jr)kW zt4hl^vYpGpCtr}?I{t({#`jDIIOC{heW+$=20}(6z>eyFFtUEbal}4qwI7;wS8}e# zxgzSy{44F0<<d5HzZ+-6poH9RiR7= zG9-yw)XoRGhH&kx^f8VIlfkT*DwEYsyYCuY3~D8g#2A2>%`+wfOVE8j!Jd2R^0G{ZM@r?l2mflnBjYGx@|W;IU(sPnl|wik)!9z2ozwPvl-aP;_}nix$+e& zaUM(8c-W*-CYmK2u%i}7md-!A5R}%AomPGt6_4WD2FHLuaQ`5Agp~N%hbcFtZXoMHUShMy?a)qRIN^72Ma4`Bob32%J?07bV5@%qgsM7sqHy^(0 zyNM3IoBN##b@YLT;?(3Awp=gB=1DNal3|Z0$d}asrxeAjUv5@};F$(j0-RawTbt?- zZJQIWos=yba|cdDIjf&iY66jB!$S_%Fuy?ANTjDVOlVqBsUJ9}*W%6x4Vxc$+kw6? zNx(JBoby;sh(}wd1a_fG2#MP1!Oy_Pmko|3;BZqW6*v%ej2L7DGacQ)NqfSe1)h9)(ak@QyEpsRx65_`vH!ACe zru*qka$9E+HH8bFS+b*DOo}MZV>X%7I=x`X)a{>9ma*erB(mq`Ez+4Vrf3_jXejynoR9fsHi z3VHF#bqQnoC9ku$x$Js+J|*BLqC3<5LKV}%?U>#95KEmR;P_snQe?E!WH47wDxoH$ zU@q&Vn;gHQdbwvRN>`@@4!JNkKSe#l`7}wHg1-mjxVyp zD>$b408@L?fS=nxhx{L>A_EfYPvw_Cy*a?(SJ)rI_(yegOo>Q0r#=#yO-r8$yn?dK zL@N-);*T(}9g32@@35oT`>oswB&OD4OO3$Gs7vTdUjb*@z{SZa%7^yxZ1MDR5@wob z)%~{oq`BcP)W(TQ)BMt8eh6jCfoJ%ATlc4 z`>tsc)K#t*urM)l6G--mWf102c%RX6c%#h9lFnBR%vTGCnaI~p@#`^0;nEYlf%eG2 zE#&g-_#S9;$|MCnKpTrPqIUY7{il)d9_~OX=^g=|_;l~uIr%G-EV9Hhu;j*{;Uos- zUPv*nBZ%@_WSXot zYOUv+Kt-{S*jysY{#A=8^+#X|~xS5p^y!1-= zvSeyFVsh+;-OW_7oP4KK8pd$=b7@w?)brF(1%601U+h7X$WUZq zQAHK{4W#Ste15#i^9P_NFIUntJB-M%!f{v5MGNGY?BWnee=1=HA5^?wE3WnGm_e80 zKbAfO`AXb6mPw#a;qsguS`{4j?s&JA#;R(|xNOI5Epy94u^mt4}@s)@H%{=^) z(@DI^{ewaUevzWKi)N}vnf=sNs$`EhPlTnDbNks)wot1vN-(oP1y19kSvq?4K5kN3 z;6po}M%(7SuzM){!tLI0(1W>CJIneqktM{E2z)AcA4y7rcxecc+c_Cb#ke)cI|kah zTAEe&HMVYImd8i-WcMx!9mSh?nZG0r?2w`!-d@VParDyZcPwL0xAEO{8{6AqtZ?eh zXPU2eY%~O+5$u_P!ej0hwXfY}73Tae>X+u}bY(A2g}N7UfWrRa_*}T#t<>mA&wpeu z@n)UyH#{5&HuBkDaXQWzENJkRfwg)YH<}w%TyUulJ_u4U6LqbIh`SG3=_POM3io$_9Uk#3f?j|9Kn{KZ`*wJ zGG*N?1>F$wrl4CnR*7g|!H^Zt$T;{t@DK=-=|Had(jORQ`#R4K^?fgII;T zSe(^@43AL0)UZ=A%I1uT~1#}`%`@h{KrJmvt*&VYwwlW@yP)#)f#$FU-HYzQbj%Zf;g9>C}Y_Rli@*) z7O>+_CkZITSpMP|mSH(_-}?&c!$k!jo%h?dRFvL`mD?}Z7~f$5~sQzKSRJMdz{+`!2uYi3qw&J-=;yR@X4-0l0l>ts>UTC zTvXcYx-Bfz2-YRB*Xy9Wk(U+MeCPdF!DkCasGV1HIjx@x_&IUcCE=xoiF`I@=5WCn z*Iw&Zj^*Zbcb3cQ(Cw2Rp(ANS;9n) zVnbqf8MxnE_5eFdM;b2{wcQ0~p$(eZ(r5a0ifHVSo;Of75S+-anlc)>U~7HcDzatr zIYYlwB}aU605Y+q+dP%w5TWv~*H(})R)w7@KAuj39EB2RGE8DO!q#7>_?90c$=M{L zj>5UStl94{KdZ8uRZo8dwmG^Zt0Bj(bJ_rbnsuog7@5g;PS!r@xFm~bI zK?tS*^YObs0_NL70w_H_dJI?r%65B8Sq{@h+1LL(iS*@S>8$^KMd)-&NK$m-UTOT%81~adxMee%*Y* zJF*#-$L{ee0SPa5onPs7>p2S?`W!#~+Ur8)$iXo+ zXhkQu5|PuVYb>=R82g?;J&ofFR5KE}V4aq25g$G$w-`4xGLC=bAk(PPtyr*=M9$OU zWzf8JRy~x6_cYYK1H^Bj4HMS{>fTj7+z&yZKTC1g7)U$thJQ?ci_k0-He_i#=bmk$ zEv7ja&d(pafpxgS^C4(xCn|b2p@2!61x8%8Ris_+xwu*0FF~TRpUMuVRsAaKPj^_2 z4^6;HgJzt5SX+(O9f6Nu@qb(JpqxZT^t2eGcyE|aSXE3x6m6N8>&);vXv8#)+pT)9 zimzgEMWyHATr>|fuQJGhz(8|i9du%FEBu#c03su^qYj`6JRb0jDJ)>}%i*K=s^_)l zEt*ucfpp$zwLEhXaU1yeV9tz_oXUAmtzE;6@l1l-K*TGL+moYG!bR(31&9&HkbxLl zx((kYP}UXpQ}2FV@JpSj@F0|fJT>qb0r4~x6OXO?fjy2~nV=#opRRPa+fV1p8p8oI z*PLs6ibD`ube>DZ)pFeEN*P{|celpsd3-%8nu?M1pL1)AduP{j6Kcd5{AWtAb-kGY8c5AR}FFB`ixfo(k%Fkg_Qq9Xl;O+YZg$jl>6 zuj2@W)Pnsn+}f;dknjj9oZJ+pBxA^T!Q_Sw{tqs0u5ZfG&5SRWycn8-%X&IAjvVuEyS3Z7EjWaCNGd&kZq>Rf z!G;np%2H8BoP?T+^gppWD+<`qb?*9l?I(g=Q8qXNtaKueT?BNbel|gvw=4XL;vT{$ zK&s>uQRkvc^7Q_*k`8()8{5o$ezMfA3m{*YBu;2w3)9}h9-Lmk@+~T_q=1J_^+U+> z!$qGrDTC<8RHX(}`ay^3__{TQ$S9~uZ*>8pIqLps2Fqj!Z*3@5;@a$a6p4~5-Jg1w z;j9T0tMeC}7}`#bPr?cE;hIs7zYnM9)y~S}h>r$6@q+A(XU{7v*2-1J)&SFv8-OU{ zu8H_$SyO@0aRtz{pMO3w9cm>}dlcVgK7wtt=(l#WJUu8)9RjHe}7rOpLweCK9oGt&P8XziUw&xuO2}?lZvNr5);~GYdzdW&*Le3z!Q2%ew}H@Qrz)Hss`4J z!Oau^sL;(PvIy#Z$8N#4wZ2{GT%D}u1+$g_Q~2SCrEnc+3IJQCD;R6@6=3ckACK zaEpK!Y@n16cFFOoL!9oehmipQRT*5?={ca&Dx9cdfqyx=`7BCai5*G6O?!(rw`0%j z?j#LZU{fR!a>O}26tdc0fa0FKU_VtvlYWM43?Bu+1q>GQ1Qb=p2_x7CrANjnFW865 z+OAHG_#hYv0WkJ6^C2^=UliA_2Lp7LN1^_!|y+ zFVxBY2aK_!<~Q{GPQBU%ZQjlUMWr@fl91tTuGy#|&1wB=qg!78pzUX-#+)KfYtXBP zyIDqFC`bC0ezTRTCQ(N<$V0)lv(umyAMD}TYo@FsoeO0UpIf_W zON9ur6gdd9qn{u6)N-KzZmi$`M?EP4X90H{O>%Uz-1D&$pwmwUNZ|tslZ;*H+u)J| zjJ9+M1Qb+5FR$tR-1@0@G!$lPqE#Unfx1Fm{3JQz@%D_na957;-7~#1hA?4!*6zWO z$I^3^Q;M9{bEg|ve*$XWsI16x!lRdy4Rv^bCSYXzhi9nl?quKy7U};XV;T^l^mmdlqPXRD z`{>2ae_i)M?0GDZYR*->x*66Eu;5p`fwk34%k$-52s*uDs@CKQIjB*0oS*hWb3b48 zr#v1g`7@IdTwp#=(0d7(*!qIrDBh%g9_-1(MLu6I%esDjtEC&j0MnrlZ0O;=eZx9- zRWX&-Olfrd32y5pLdJ_C&}$j{HD&(uDU`;2{(>bvig*I1N#840yn$mfqId4=PeME) z*x`Ao4&ATwFw|Ob7hqtnG<6A(6yKSwMx^}%nWUqfL3~>GzSZz0qAkP26*zy3(tuIQ z40E&|^!NoSZaSex+<@PB3>(oh^7KH;DXPZ@Dd7V06^p(RN*s&&JU%%K+lgZ$G5AS8 zjcGSd(6SyOuN)ITNM-GUa=!7imtRjq8!CdZdkN<-*&CZvS5^VeaIhkze5G)XQXaEE z)hh__R>?{qsKKWE0JaYl#t9Zk zUf5rw{ieJfAAfG1M)J$6tPufS*vrH<2IVXP<|}4NJ8B4rCp}6c$U}dC<_W6D(tA%^ z_+Rm6%dwW53ID4FfQME<+5T`$f<$f;SD+_mSCTNq=K#?eiNJX8^R@xuV0v_amcJZF zq#uK{j9NkPWaG9@5Bs(cDlB9f@lzcm9hD{kmKlLE5fX5z973n*U~-f;ccX;G5e&D~ zc-OZwjzNWdin;p3ROEGSLj~x3Z_(cGY2a1KL`NRIi%LAi45_BOCE&)iGe8TBmH%kY zf%ZMzEymf@jz3;4IkyX4OyU+RXu76x7tl>FK`94fV>_P0tL3Jy@!0B7v?*uhIH60?2z2mt8Nk&fRG1PN5blJdk(WiZDSR*cj)w}u^lhSN!wx7Br_ z;ujjfOde4ivT(YEBjjLhiTd=VpxpnEvMpUs5l-#eQOcbm$6ctqlFo$A&$M<5ucA;v zQy(F`taNf@xks&1AfX0n8iK6zUL6wxwrIo#a(V!3AB=X6!~c1RTI98r9i9I@>T!s8 zJB}<*^j#xi^sj@#mXHK85M_{EKcl5WO*GBlZT-jpR$>=$;2Qxw)7X;V`8;=7>x+0L5iPC2z zCYtOTd?Jq>=;OV-3yr>+s)yRZ{5q?B%{mrTVl-{L%aI;%sFPq75KB~GcsL!|!ZCTV zUBiNTjn6Y&2s|-Wfy-}rKd-JtqJ}OcJaEJ84buj-gl^gQsI@+h&1R6z^i0O1ZTKLq zC6{}%(S3WAOyKYn0zrs0woXOmdJ#(*E3C23N9(@J9rIS%qwamX=AUs13p^3sWx9@l z3R=t1J^ySXO}Z`C{LEd>yStxu}@`KrQvN#=8uv7b!(7@dk2cFra(w_HTB9(l&h6goJV9BIhZ@cYt9Kt=Sk> z6{-V)Ja)Bkx&-+N+LfRP95vd$Hdme~`*?mOzYIrfl@QwWPkFypG#Aw3D^UhfJ8yl( z0JQ}oXbQ*CFhXDP`9cM4eeK~wyRFNUt5H!3H-PnH78x(fNmYuzKSN06~lMy*NIEp^zermk+ zuDL|@QK;JNDbI*MKQ#k#+n>i%@I;X1@Zk?lp> zx6|6kag{jQ_M)V8L>T~yV&>P403Qzj2AHWBWAw~y2~usrc*dV?k(L*vhoh47{`By` zgq$fyA6N56l2&?z#*2MGux zAox$7=}6va77)0WbhgV#9+~U!w}}2FT7e5ayyRP67CBMKW$o^AZMStuq`X+ct|t+p zq2%c`LK8`bKOlYrrHOUz(WKvMq&8?#bNT9qaq*7iyo0JhD4@fu2r)XP%k(^-g5d`j zBT=T=^eyF1q;6hvV!d9}z9?^kgLe8o^$yk(g`J@FbFDuYq2cyoWf`BWC-Y$;S>Wm9 zOEs>L3?()3z5KahuK-D59ZO1j+vr%kjewD}RY0J3o$Q~D8W6O~NFc>h5D+()$2TaB z(RdBZr#IdX+c2=N0hf|r`xHU2qR)DyO(gUlrXU?Ek)ENL_FIVY*UP|odN@W8-;0>S zQV-WX89B7W#DJ93M7n}05GiHhO={V5QlBu&3r{GYoFDT}MH{%b8=CWv1+9*(Fp{!t z&Os6^aFip^am*O-74T;%@3C&a5jVE=aJSGk&?f)erlQu>LXgUjM|q<+&Bw5+uT8|S zF|Bl-0!fY|s^Nl~_HK4j@Rk`<ETU4Vd7g~6B+$XfuUl0htctV}MWlMgS0 zn3HX>6Q!q^ML?u2HN;Xq_o|gStGM7gMmyp~tcLeuql2ixu#HTTAaB zv}3TwA>9B*U9tWHqx$QIL7<~qP|*!8(UqS@pZmXpX+d0q4jY(Ue-L)cg>~@Br41A; zSZ)F0ZWq>iBvSs*H}pS)-KTEsHKBR-JfkcYA*)VQim-pcpj&n15S?Dp)~ zV%1Hlmz_A>0KwCVs8P7EAhlCYHEo8wZ99Ksvpn6s`UaPsR-|#u8W_|=UOysiV9+}F%sdp>&%3k&Mwr>k&WN!(8llF8MG@`3pj)+?G93(So~;i+|vg zPw8HRe>76n`CK=$EV~md()2gY1JZam+kc2?C4R0OrOej%w^J-17_p(mM=wcQ`B_WZ z?sv^Y@g@goyn(jc<|7n4FtaimC@Y_ax1AJ+{Fl`arq^*0+$^mf!Qe*Y;oUwcn#Cjn z6aUYr{|VYruOob->Vj-v+`c!-TW7GJw)6!Opq&r3av@mI!`V-$$?$#0oup@Xn+Hii zIj4q>^qMBcM_)A6H5UH8kzR7v5eze@p3AU|Y2m1$cW;~rDh0X{UxAS*mD5_$_I9d= z8W<5&U;u17&+?=yR^1)HRDIWu*WYkwk0z0oQg=%LZ{q8uqVd2LIyMjNgei^85v~JM znUG60=@UIzCJ4T}h>d^am$~oW@Gg+m^HNUaq8mKR61SVu##H8Qz*K1Kl*?^VNkX` zMyQyi)PJinHKGHm>77YeBFgSw&8HwHBBQO(h{}f!UahF<7Wm)-q#=A#K%&xkWU9r^ z^pj&o-WOPsp^qwQ=3SLtoE#x9&^_vHs5u0NxR3@Y-|iU4+Zr;xT0 zUR^YdnhT0FiM+BJv#AZiuH{<_^lp~US zQBiL%E!ly`qsRV_@u{89C3lnjgzAT6%5Yvs>n3~0iYP7D49h33aaj*H9MPmpj#eb^ zIzplv-OdBye3&%}0qV}2u^&L0Fm`YvT802vY1afRm>->)O+m!EKAp=nk)OddI?|d| z*?BKeJ@kbI>OzFqugMdg45X!qkzHb7OSC5Hbwk96Xy`hP#;PRg(@dlxFpt z`Sb~a7>4O}R3Uw0NL+9f`|?$qk9AFnRWuGyN#}W7MSnB_g5VV>QMSOh=akAk%tm0i`xjc6!7X`B3z~aq6nxuWRfCWteadhFI zX^)P`VPb@1Eslvkc5VpK*!JzsdOtsT zLjdZzXt+}Z1XjImnqbyGjcO(phQ1-pl!>yOD8tEBmjYKIcqF1b(_+KN#BS@)CXMCT zyxI@yLM=X>-F&lay52oGc$2%0f3%l3!5HzfGAqTePjofXz%P|I)}2Mcyd zO!&E3{(((Z5&xQ;qMs;Wair32TmWU5{YQ0G_Tx(;V9=U_tT>r}!!g~L?lpZ%$3nxA zK7rRj+0wDZyuJj`obImpU1<5@%f{W-%^o*G6KYbo^cIWMf zNRlC*&To@w(oJ?p7*oP^fW+Kh1vn|9mm%UYUrW}A#tS}U<%HZN)1_>_PF3R6nxp9m zc^L-=4E^Y~4(BY* zVVWcfS$)N;_+lyDlO>dv)tBhkRn4?W@DIft`a)~oFQo;D5*||Z4ZN6g`fc@Lg8UZz z#blM|x3=215-}=S>KSB`hSo}7lziiGASZyzj)rn97jkZd^ZjTa@9HcAXpMglKx?MT z(dl|zf0&YJL0jR(W*BS*a8Zt=AMLyxBV|_R9s_A4SOJ*SV`HFpmUf5^6n+uo!vd$M zwDO$Qg=VprR#(v4iK6I-)dWz-q`R*s)Pyx6mKth>d#$DJ=S(X=POnSk_E-yNplfLn z77#NbHV`OK2)X6mf`OGJa zz-0>1ix4eoCM5D}+cna_>UNWXv4nE$xQwD-H7v!s@*80${VrH$oRt)T54K- zbxPAr%$coMLla2L?(Fz(|L{2$Y3-%>EbN@_A>jf)*+3s4A=_*1bnz6vgGoa0;Vr%W z1!{GvSHSp(l2P!k_ump%4NNsI73^kS;{(Gk3Jgi9(=*qkhYPnili|9r}iKr>;xGqz8%KIqZTZY~=742vnqC2pGeL(s( z60ahh9II&WW;yhE^p8FP%eB8i`=D~H7fwZxoOhFW@KHPEx-;Ddjv$D_RE&V)#Gexf zp)|o~8=ogXun(8GI5lmQX$M1AW;wSXla?z%EY zqeM23wNsWS&`skmmWv;XKF^P-{m@N)7Mr(}P4rWcS}4+Y{roRBeH$%tP5-SDU6v@Y*a1{r0V zPu}hYd05xL`&}`=L-FiEsI@`MV8j&>3w?IdmSH<9FfEoY(^<^Jcch53ZaG$Q`K6lp zx$}aWiwk1>2{@OVSutb$bsVMq<$?_6M&b}q58t);vuXx*i`|mW;I!sqc<>bkKgk?! zr|c`+@NBft&(1}*=kyY3++uR?cnqyzdPr1H1m1MiX34~nPBRhh0OF&xyxA35KmdE2 zkjtcG6h+hjl`R-(7UJpY2?Xv@x~18wZEk^b5)#bo9p%=AYTg4B9E|??V!vHhcJ_1yuKICK*UrxX z!&4qL{psf#=9Jl+E~>>1Z+HP(1zD|a{m)X}^Bxy4DAONur(52?8^z|t z^Mj)xYC=^Zy4vB(vOw@Y8dY8*apQZ`|J~}(7dE(7VEp zSJ%>70SeE6>QZUyXj51h(CVMWSN*-tDJD`d^%L?6u47=W&X^Y$dGwaGoE?12iC`YT z3d}_v+fJ=Jbi38X)CuvHw5mk~k*(m`hw(Jr|7WQI3gdXPSHR1R4o5J(Wd%yUJy#~5 z87nqNZ^X^WD7W*sr`~$)>0P_EXC;>EA-F}+|6d#bS-4NXQFFn#p6pW}lc&o_mNkUGZ!|%|9O)6X0y4}S zeHVEFJO)Z?WT3!Hs&mD1UF>#Y_~(bRd6_Ym)VeTRJ+~^N9UL41j`hqAqW@ zqrFLTC5n$M#_U~+ji-;?L@fWlOHO4?4Nip0a!kz@?oi(P7Q4oxTP>c7zRh^(+LG;5 zgs=K=x%jAlirm`mzh7q(S`6mg`5xgQfG2TMSzP~I{xM11Y4|G7*~QNn=H3S@x;{E> z4u^mYo?RaQU-vZi#BH{0qx&Fce?CBf5*U={?~AC^CIZ}1zm)fi`^FpE9}iEnniCo2 zqK0ZOw5XuUjWtmG-_E{Zm}53r)mx3rAJo#)G8w@NllMW8jZLUPy#T(sf#>?di6BGa zd_Sh7aH^Uze_ zZ?wOh!!K<`FMy|bpcer`P3-=4Hq6fkAUSBg$j!SNG?=3}6}Q)_4XYE+EAo9lZN zkG8j13>j~uiB3m&!Kt5y|DWwOvdVB}f_q{(k9h3s95!;#MdO2tO{qqCZMsn@;ih0) zE;xeoZXE^x9VkK|tKrm9N}iib3fjVP<*m^UrL1P7N+vP@!Tfq@4zGReTq0iKdGg;^ z71Dc215+t__ikQhU_;6WyF>RpTlvAyrW`L>ea#jolE3yUU8UhtRjW(?`$90CY*4^z zr?_QUfU^~>>>irF0Wl)YZ8P%Ul*2kpEl z6w!w|#041k!3Gj6omyswjAva5Vw!RckjkhCDkhZ zt6N-xPZK+j58~PL<^Su#fb=o@jciH$QU_@O96vZPv$eVwN=5D44E~O;K;WBawKtiT zHinH|Bp`k~)wugWu?tSkov{I!;6=*c{)C0NNaP2;lI@PAatQE!$5;-#$qD z=Mfu3(o)@d5hDowzd7zd8!3}b&TNQ;d20@i5#)T{{JxR2&RT_AU`>*$hzKIv!mjnF z|J!8`X9|7+(*AolJ+GsaC$Hs6+%Sfj^!G#TVc%Op=so%9D<2eM3(Pyd#}uv&$oubi z;>01B3VILc#g-Q_$$0kQB*6vtjf8U(h+I_p*yiLnMG_Swqy16?Lqu^q>?ZKvoBghr z5p`6xOB?E5=#CPvsCjD(e0?@*M=}PV?C=pZp}M>7W!e25BL)@`%yHvH6gh_ZuoV+t zKK=f4Cp!#}^*k8=2ikmoPR|DJc+hAGXMSkGSKazo?ypn>0@KdkOf**i&En!=VLX7k z`BdIx)aOQgHZYGvDyF*TTQtlDY2C=hv%mDfvu87(z5U;bBNJ^PydTA1zxo!8g?B%h z0OzmPJ(s~QkP>Cr1Jwfrx$ou5W)`mTmizmCE0*Dob0wk=U6u3E$>c2?gO&j~s6$x0 z70=%1c@1sYvm#0T40Vf0|O^D z56j4S`*`>G!$AWSzFq6h&CS>OPx|=8KI9*Ty;)gVFJHdwXrEV7(iq^>bM1ThTj6${ zjd`EbJx!Tgbo|c8oE%2U!SRd8(*RUE;WyNC;~pjMN7Zf+S)>^)UV%SgR-Yrx6vw8T3Y&6 z3c2icYuNjbzt(?u>g)aZByaGuKfC;AX_uK!%$J!oc;02Hg1n+$fe)y zXMbX;`}?_m21j_Dl6#iEWAgt_)|D}u5`u6?O zkKQ-GE}!eT^rj_b!Qf~0Z;tONr(G|8@HO};uIp#?PZ6^{8ocxo%E4d%W{BA#f_T1SsdXAo_BVR6db^ZJj@r4u{8yjb67;U=i z?bg5NS1qkxdU^YrMAY%Sgnj?X@%qe}-ElmgVr8c-Ey?{KnfL0esf~_JPmhngI6J>& zF!)>|*8fS|m;AHy6HT(L=EuVykhf??#%b^OUcO4sC|j9zVH4*SA2ujNIEUcOcDdB! zMa+3>qVl_obwv!U%kn)CuIpy82G!!=(B>?KR^vGJ=J!v7_}fQ67aea~Sy`zek!o-? z{u7kiGtSif{QG`Oxq8Ol#M6O+q=ZY6L9ewV*Jtt+oxgmX zzVAIKv#(I<{NA_J?6?a*29@>CZhYPr)p+=QJ)0?RD7JrRhv4bCFg$(#-0O!gW@pz+ z-vwm4Qzq?BM}8aa{*l-jIDP-aoBO^?WWjfZ(4VN5WZle!-^U@BT+qcej=cF z4KJ$3?L3LPD9;SJr#{6(iu#^AKi@9QiT}{t>EFuC9335fUwY||*Y-c1or%>MsLw$C z8H12{uk+`(yLMU%t)gRMp50ifyHy+guF%&tdZqiiJelJ5r!}<>@?>>M2e5xx`jJ|=v-UA3>KKs`%eVsQdy1KEOqf1A9pJ}M8L$*-i zg)d+3O+3585h*YC)}rL%JGY34yxb(P5J`U^Zd9vGt=l!+H#(mAt9jinWh)*i^?bY# za-gF{l zo`?i@d{yMRIHxi(JstUFrq#3e%H0}GtE`dHnOLu#xs8pH+x3r6UM;Op0*zr4(Cd^a z839Sz_!mNR-oG3e1Y(@K z>6@Dw!pbFDVPEE+rhYl+6CNI3_T=pPR1Sl&aQ4Q|kI%|L9TUXL`cu}nntAmoEFZ#x1cZ5EffR0Lx!f?Q|8KYr*g z^10Y1;p%*GHW$~A060wkYv0Wg5L};^KH1q`88bG27IfGC%f=jVL${6C&si@^m)YKA zcyACJ^Lbb^-iuz9e)C?Sb+7jumAkEDdyxUhxqd^3kJ4a?5+}~d0kRHq?Vkdt(YA5V zN+$YNIq|7ohCM?iN?AooR$5w%&h{82y}P@*mv?#ikplH1)^?h_2Q_NXeofL3J$LqZ zs(9SY=3C|oiMwH;4u~&0_arqX^?~;PL(^AAMb)-#(_KnRT1a;{hzPexDBUF;LwAF8 zO6Pz`cXxMp58XX<&dj%;Z>^VK{9!E^_CBv8&r4)0C3?oRy8mpo@%s82u~`nv|M!ta zNUMIHzSQro7HkYIF#qQTIWK&;R8dh08^n~6!exvXMF&n42iQt9E;+m6CZ0;2v5b_F zk+v0csp7)I%E%hS%;G98bxpC2iK3!wlPcCbdIkoL(IHJFReb#D*Muk)oyEm_Lxr+W z@$+n9s1XqnSGYL-iJ1-#K0ZE#wDykJAw2U}d%rR7BnCo9#+EAdL~wC%sw~(hTrWHG!%5+Nz#yayqCP^=)A|==RWWJ;*F=0Bxn@{gaKBbC8c$u^e-dS$+ z+rXU^E41v{n4Q(p(a_M-o1LAd*?iX*wc&TM-kvAh`CUPQjg`p8FO;LrrS-3$AyVot z@L&?}m_U2oD+T!Y*i5v(+9@h(Ee}N9Xof}+E!6P}I7}WrdSmM}+KM?JqC+n?H?tfR zB@5!?<9QAy{Cti{+^pUh2WAL>?3Sv02k&gvFMj=UuB)zYuCA_bZMAm(HJ7p(q&_~$ z;SXZb*0*rP$Ze?TsIM;L0}GZ z;}$Bd)P|W&FCYLqTd6NqCo}4od^@4jU~T^IJh!qEp>L~atz!*Rnw;DHWksp^G?K&; zGtWVX?<;qm1LQ=Z@`eh>w3gNS47 zWLatJ!Fszk*5K9zYJeg6#KiFL5Y1-C{*c>~w+;N)^iv`g8%=zif=kQO$YO5ZtW7fG z#B_A0&2QcS%nz7oqZ8W4Z_p_zGtzamb4+e-Zxp{r)v{kWw{X|i{P~lBgNu`^U|ib( znO}3++V0=VeRp2Cc?9-?KT30mg0thdu02s}Yu|3NXpBr|i#ix=-)}H;NjuPi4M)p-K5o;x3&n!Gx^U2O^P~gc8O16L?JoEG*w?-c6SF%c0OFK z%$L3#m1k$mr?6LQsr;;itVB{!QuM7+RXZ;5 zxZ=J~`*aM4#T=(oB5ei)z?+w~C?t%^blN>{)A>qO*b07~o*xAa0*Cg|#fg`o=vV;; z@Of+QSWR)AxtfeDLjU}kFO7^O9xL~Z zj)_rMSG&Kvm8M3ImB`QfGX;@dsTnhE7HVE?uv3(iQ@%WSom;G|*oieu^6~>%h9jlf zHDab!SnQ66(`)%{uP7|L8FJnRfsAJeR3pgI8chyja=W`HV`V|Nfc5>nXPt^LVNaoa?$Fyg>P;60N1PIT_VE-mW3Z@m-D`*0-9LA%lc06U%M z%SuH_VtfJuMaky}SQ+N$RDx{krt`fN0&}!sTOP9OiAe?sdVoxv|)jth!kzx^EJ&OD^yv( z>pVEP^6I+5cGcGq(Q$fOw#1qZ7IoQwX|Baf?Jdu#f$#G%MK}@tlFH(8GbeWClAx;M; zgGj5*Yys@~j*OJeO~*jyWpj~kVSZtJg5CMYRF&8L8EW08zRS*jc>;rCjP*75R&rvZ zH#9BiN&MF#4&VLp$Y|xl{5)!}KShq)p%}S-vU7q*w}a3%$=na1IoqX&G8=pT9;8W5gGYbFIJE{ zhERQ7gX3tqa9w>dDkfpuZMgsr&ed%<^^nB!&*dBAQp5)%F>WdWS94iJ2-&)0wkiFmpjU4--yMY6Xt$PGcJ}LCp|Uvu z4goA%Sy7C^9jt+BkS|-EL*&kQ=mXU)R4j+Idl4F{-8`+C1oQCU?WGK|T&Pn>pxiq@ zK;@@4fFGUIYqEb{ID^CC)zd%7Ub=EH1@KJ7r(Bi`YI-@^RokrSr=^fCI1Jb-D@trY z){7X~*m=)#X!k$jI&Gh0f}ZcqOpCvyyy8?>#c4?eBn|TIH#4>X57~=(qu|kg>2CE| zMkUhZEecc`da-6I5#`jU*Jd9uN*jcVDqsg;WMR>nkpD+;zLgg%UQu5Ddurj~IEaHZ z5D|_Y=F-yInvtFXT5GvI1NnI!#MrWO2a$_&3uEk19^AF9&+u6%le5PP*bsrUvs={l zV|4eNg5R%SSubwJI?AADo2)k2=I2{$N_gPy)^Kk;cGIDLalNwgkb+! zx@a-m*4WlZX~3x~ji8I>YjW|&U6r@1_RWgc7?nANg@t@g;U#CQ8*n#|W}&_WV95JD zOv@6PAkR~2SlotEQc?$d+1XeG>O)}{ets&;7|rJx1};}Oi_n86aL3&-i{#N0Vs&}m z6B zKfj04PYFa{(zX5mZ#<;F66HrX%=<)VW2M$SWpdk>jbc^m^-hR3I_GIG>iKdzOE`H; z_iD4pNpf|Ml)f*#+Z=3!z_;yGEiNu@looGARpaAxZg=O9rYoig z`#06+|9)oB_t=B3%ouXd9H+0uN<3lJ(PUy+S?|EPy@x0L;MaY@vZa-N&y9XrDJg>? z=K#ZtddtM+=;Y*fu}-R}(oz{papSe&)0$iDkm$xXv^g-I0i0eVxLKh`hljhacLCkG zXCkgh8i>2b&YtEqYYmEjzo zB57!5Obw5gR=PMmwXv~ia=)DE4w|GEzVVjwT@RG{K31_N1`z11bZtSAw2YKSkL!YT z$^%(CL_tdlj{f!sgPd_=G#@DtNLE(XM{h0G_a+ZL*IQa;Hi=~ql3=s>9|AV%du5TC zmT6;Sv(0bW#<2yJ5A}6=Ddp%C#CiLQc1OW74m(RsaDk7%yc@Am5&bsi{X?c<}*I0bSO{uD#^1Cy?I7SoP0b5$y z?lkz%o(b7+cICH}%EnMz+S<}!a***`NCrh&W1K zXhmDwf5YM)d2?lI${qG}>jvM&JXtJPi!W4|ZD@Y1HU+5U+dm}JB$DZuJ%T)d!U)7> z(Gj?G6i!co6XT2QB^O<=KlF>TTlE5`fNT`$9sFf--4+DGG%)s-?e0}&E8m=nl0?6} z9HjF_6GxIKdDIk0%|gG&d)4cQdoJ2FzF;8tj%J% z@bY?lrELN(E8$lhiq6||0)PbrIznij9@qPoN??8z(z=(R zn2D7Z&vT5GWHZI~4-{N)!#1kf9-aZ6)PNdx)fY}oNGG1j^J5$PoZ1=p-NRIW35n{B}#4zPC8{ zD=RI+7Wr+u-S6?_&LNLZT@<%2w-D*_(<}mf{G^l=>4c8wJUU8wz50d*#CH4rg}Q3$ zcMaUnl(VOilM)=PtV83&4LGV6lUb=v+P?Tz{B==Hkwtq1n$?B{GJk^E+wJ8 zAKdIV>@4l}CqzR~NsZdu+dJXV9hMXh={%!#v~zq-6!+eP>kjD4b$B>-TLv`@Rw%3J zdrR6T%QHXk&tA8doiZ@+)$gH~ZiH+8VaXkU*Dj{?_p=g@-S;$q>G?jDaKzA-x9MQB zXHq=oIvBRKxSmlq{ge0xQ;gXPTbVX7fZgrHvNgr#zO(n1preHo`dyNrEEI3ExCVTS zC|DvBvgXa7RuDZQ2ju2OVRFfMR{>y+B^#GQsH?|2-hMy4FpK&ct%w4$<(b*pdpglW zslbcubGxwDWWiq!*ma-wo;z)?&rFm23V`Rqb2o09f9t_9~|m9$vGj3zq{JlaRWL-z_>Oig!-nCQVKn zFXnOo_M{QC{yL=G9t>!aU5dEAzJ-5LUZ$j-cuDO_BQ%h8wAb*JDB4Wzu~XP}i9WFh z<)A_4Is9%}b|fiMvA@4F+kXVG14nk})WXWQRxS)AjSAo&{yC@k-tRIJkoe^p__tD| z;t+cmh>mgvb_AT-8};sCfW|>nNz`p0Z?o|YQD6XR3xnioAlRVY6{gYoqGn>hX0r0K zhWew|0MQ5>8m&oc$t&e$HoYa=#&%GAWGx-9*2@C{(3%G{r}sev;Ax{HBTLI6z}(0Z z@jBmvR=r8bX$0T{Xtjau0}hjoPt4r}M7ZalE_x#ko1fuo?ma z0zBPj@BE4e0;=9#Ep)>jh{r@ncS50}nwt85B#5Ot)9Zqo=<}ic;Q+1|PY;j1wbsvW zN8s#=;$k5{4GQGK-{v@{0`q76S5u$AH#eMsrf}qkONn^6tX%Q%aq>3ab_07qJ;r~4 ziq)#O(6$u-GM68q=e2tMy1JM|$K>ttNxh1VzP&9}%J#HJbfmq)qa?#nq6i~Fo<4Vrm^OiJlqH_eues3(W%OFa&ZWFuF&Mg<7o|u*FOIBE7|n?w9m@ zAIytBP`+**QV`a5Hew7+>Jy!#ArD<5Vmua_tXO_)7iVXm$GvIVU(#9jfw`59_v9Dt zgJ1sq`P1e~BN1sRucBgo^4Tzmv%01v;@K@SGV=QR>hpCD(Q?!!%;)D%DWlws?>Kcv zuobkAgvc*P&xFFBUQc79Om54`*4=xoIh7HuPfEvBl#^MVM67R3s^i}YdRDZtPJrSO>N`B&<+JR?Co%TjKyst4bE-=3`;d6v1?p z&WhbeaTf`SKw4Vbe~{N`c=oIMV8ZK9oPyFi*uu}JWngj*ds}z+2kpoDr@@3bz@gv@ zdve*~63y+7d^lhAqgX~waMJEqOz1H5wmBWRJxQA9dqpc|X4aH3&@4vt7a^Zgi6_?4 zgUylO^0a~b)XT%O_7n_LwrPw#d?dBG_rW^!G?E!GL`l9V`% z+(3OtMwGAl+klCgd7IX9O55buSOk~=E_K+X$RPTP<#Xt`@n_8{m+MdaL&(@I!XnX? zCjBF7&xEv$W0Rr#A&PSl2wsq{o-LaSaHa&S%J0t!XlIb2x6Tzf_~Q|Lp$4pxv?m zAp<%DxGNpr_1=hevB(pd9CXc9?jN~WyqwUST5G){%DW5(C2&PW$u@>76BASG{rPg0 z5o(*kCOg&foms|}4 zA3g~QiEovXrO+d@r(IfgbBwjSg>oHJss-5{{-uh)g5y4h=8Ibcb{ieAm+Q%b!u;O~ zZ=yQy;m?qdKf7&9`}M-1w{>;kbNT)^IH`zWgdy@#@rutyb0u9vwaDwFjmb8rL> z91v6zbsx^lF`uieK{`zEVmGy+(ibm>vXivls<`e4F=w4GdzB^3EYXgL4&d#=SNg=ECCj!y3^EBEhb!{)Qm~kPYA=O7+|N8#Dh&tF^eiW6b zh5Q+261GU_>+4g{X=r;IVWAQz1KC=O_`aY8mk`nsP_2468lzB_bo#wzVR7mhe-=D3 zlz7<^X>~ip!o@N0&uDfj+R;w1VfztbJ`vI__(;L zY8&{bG3UuwrPxctcG%r2pcHQY_}oUGjVg<~Ghb~o$b7MmZWvNg4S2AJ<9@{E$v^)j z=Sj-_Vp7m(WsB zkLi*P>uxEg;OcLbR(84`HXr=_`KMFVcYAEnppjR=DI6uFBYB@pjDrNSTUREx%)Ld9;FnS0aRsb1GwEVgPH$1?A8k?f*77Eu=ObVCu02Qj zZC9$DWIeT8K1?`l_58kK(cqH0yT6T%iLRctNvYH?tti_y3kX8mS6Y80wvT)w6acN? ztaGfR%CNaNL(Krgw#s_YRZWnkgg4(*A}02Yf>7O9GD>>Su|l}TNKndnI)_PrUh$)9 zz&FN7)8*wfig65chdMX>p5I6@I!hn<_-@ZGd^s`;y8Pek``nV+PYxWn0Fboa1s`|` zPGY5!!Xj+y@R~(ugBV1gi*Wj z+McOEZI=r=pc+*(s)b6x(@9NCbU&VB%Byv=kR3ibrlL@`TniS66(QG+$D)gQN3z=K zHVGW09Qqx27a&+m(RVm{EEApZO|P48SB#^#v6Ix@X(rPu74xH;@NqQ&5=at6y!jrKHO*kplmMOn`9MhLDthQIvUrcS z0BIHY)%BVp1&9f_8g69A)tS9OLbEbZ3EyNJQFpj5PMn=ACh2#){;tq$dcA+xPDxqB zpJXfdUyPm<6v)-+wYo+tMNLjj=(X4fJc|IK1{RHS93`{zMI9ceuZdOeO5UIFjO!cx znFR#yTP24k#Zf;HzI3*_oinmAJwAgGJM~wk5c=iyj*h!$Lg$?H?ClE*G=>_(m+wkS zUa)$N2HUl(+qBw~h4S&?@NZcV(@}23=0-cZSc<9VQd_YN5J*74$S<-a++sw;Fw5uW zAg{G@v;ke#?;+B!(^%$}(+#No(R28C8;G>{1vY`7pSv@;L|pp@3%NWDHfdCYDpABe zo(VgNzp6-i?Li~Y&TPRxp1-83M1;A2YUnJ^uc;9ISTvl$!NoQ3+leMOa931f$Ju#7 zaJ_+mlnk)an_bH@p9=sN2~aO$dn}m+-_={2YiKNj#Gl*`FaJ1i&Yql{=xDFXt5^Qy zD$FXLS6;^iR`DxJ09pAuR!?pKUnj}~kxgKsDr+Kp4~jyy_nGFcKCm8ogYZkJRlL=Y zu>(GOaeZl)YbxuCz9$W zV8OX>0;_Z4&hNoURAt)rGbgwUiqpXIo&5Zc%azg} zczY?PhrIoG@S8iD)eBWsf8nM_NNY>WdoRLJ15by+7~8E^Jdk-ZoRn7V=ncGn@s?*@{!*8i!|TS?$vRBw~8B~ zXvfSV;`GFeuPQCwd+Xu?39Ri(0Ci0Kn9#OJ;j@m?aqR|%`wA3THY-}KLKrT|I+)v{_*?D-vYonnC zQFo;Q&u_SV_(86A=iRVpm3_s${C@>z=B8TdwrCFUc>_4Q^-sK_E5L<+c-~l5ZHUh! zE7tD%6s=>@YvFZ&>U*~w6jk7Svo}TAG?IiNf=7c<>2=qk?BcEw(hq{DZSVG$RpzSFHW1dpFDOx;&B7IO?-PO z9SoZF_wSykH#!`h(PE>+=j`kZvdi98Gz)+HkzWoIcO%Dk4*=fE3cb<)^zQ-BhZ^z6 zX|u#&G{1vU@>bUGA?qO9i(Ryv1CL&ZA4G8og#@s{KY$})eRj2A~CKq79+q?)rRYdNhJng`>MkmDHUije!8Qh z3Nf?JPmH`{B92eEUqv$>YCA`{XHqx}2zt*0`;jTS0g5Ee8Q0*t)p`(tPfR39=wCCH{U9G;$@?Lc^(!M3Z9Ld!_gDdcQQ-@kEZr+4A>5H(oep9At= zp7r74ND5buRVM;K{;?ic3Ypt%ofT%$Ljw)q` zDv$^RZqcZEh4emdG=+Vw-K(+40v)gCWFe_SxBC4%E@UXx7vo}Df3<6jN82s_A;9(A z+uIBH6CFSK(D%gv1p0M>9OjIiT=?%J;HuspPUk@qegJXIrzs7G6mX3wgFs`Be`iLX zg$J^r*$%r@7}{5NKX#1d%*?hN-H6d6RxU0+^^K{awdDVi;etdkwip8g6-3tBx)i)4 zjzK;0@4G}lunf!n4cj0sxS;7^soqmXl?(@1_wx|Wsvs2?HJ{Nlsc;0e&WaN&N8WQ7 zpAi*Gi>Qu_U*^;JU37ZhGT&c?5{5>Lgw+2tx~_|>W;Iz&W&@&a+!MMDjg9wrcL9q5 zR877+pB69dAWhwxHs(w^c6Jp4;=Y+0I9hb|JTtRAwcOE?dsD}p{B!f&owx^+QubO! zS#&x&+JN<%nUsdE&+~JyaBK+(;rRat=+qZ(Ha4te+fk806zRCCv)zfnVG4-&c!_S4vF)n)%oas zU*&Hkjb;yP`Nc9Ow&Ag{K=J%aIYzI~wjMuTrHtjeg;qZ7k?%6lf1-3#@BIy&=js}2 zJ)J6riUoy*2M6S=2Kr6Du$I4n{{pUUUEQ2!HfWfGv8cG1D+bItWUmw{V-oX8L?i=O zmDote%PY?LKwE2Qe;LVdI9>_6PK2h zC$rwMuR0^B&SGEzKjE zgYuu>-O;ND^V~u-T>ltxt#&Fq_ds%RKyZh+3l3cCsUh@Nzh(s~c_lMDQ!$s#^6&W0 z@^YAztSkU4Dk>CB3^BRa>#Y}eu3rH;8XF4>iyYVWiE$}TJp&zF1iL{?YE}a7t80Mg zj*N_OrQinaX!ddjf4P40h5&m-xF|BS6d(0qLfQ_$6yJwdSKDjZX?D`udm0-0 zyML(Frm=s}Q1iG4lm{6Z7Rir*$IYmx0*Gs`Gx9J2k!VvfDkA|%uwk0i#B4?18*6=i z^7JZ{CjRN;gxN#A2UAN+OjF@nrpaO%SZk=XHhTHRQXx6d2n>}M%Q@y@0NcDM<#(}bu1vqRx_)a z#gFYcM6})3n7(-ia+9?MeY?xphbDw8t4dj-m+M}>!hh6Dofp;X zS;-A<7w5Mpiy3E>JUm%6gdO5OPq2Hx$L9^dnWZI?Vkw(|Nk!~YuJ*34vV+-g1yYit zKbdjvR2oIm&)i8q5I6)xPuMZH?_Tu;N{8zEV{#44bekfcS|%l)Psuyo5u+TjsOB=3 z;&xj*?%Onxo))6)6g}YvvS^J|XpJxbsiEk8p#oFHCO-Q+G<8;P?ciG}D$A{A#A|kEt;m(^gDp2QDnk>D91Qn%`jFGXizPv3iqZk#5=3*v5 z=%Hi@{<_-ec98*Ui%$WAEC&jki!X=bKNKp0v(wXm`lzSX(A!ZeG+)kb6Jeu-d`T&w zE~~2iFWvZY_Eq}lMIb53obDNT3WvGcD6%Wa$8~+#kD7AU<|K7YUA-F^tkl&~Ro2ur z&}iHgc(-I_XIWZW$rB+iB7*DQ`>=Opd6YVNhpL<=_-Zv4{2KZAx_{SS5G~T{?o{zV z1u>_68yT5?Nx#lvI5!uU@8d|4T7Q2iff)D!Ut}~UZFMhZj+Qn~-Sg`c@qx?xrnuC! zBzgzZn}z5Mem&lg2DEf^e)fp&-8o)2hAo~p7dHFvKvX&?+kOAE8TjV@_7;7NO&I7+ z>3912^p7O@y8>I5;z?3h@ppcS3^>AIv+$#jvVX;&NXf_sB*cGkb8=3t&DWF6{YeY& z*r?{>QXYRO#=8P!mTKgZV6+VYE&oYMdc0kB0>I8#WrTl_pzrC!)9r}>h*>3H_lB0d zxDw?eEiv)smzcOb3wd?GdoevG<{DnpvH#BBo+vB>YvbN0tiCD{=vOFX|642wEJ6NS zKNpO=^P5+pxZAqAEU&h7O*z;Op5LT9nu2&;G zxJ8?=0*;1NIXStTkaccI)ZiJ{*T9^Fzey~_-q^|dv*|PSO6r)QSQzrejV=HBth^Hp z;y4@#{hgoh&YOoy&8`8o)!KNUo7-!4uxqp0KpF`h8R0iGH@{e_hD~He04?B(3ih~m zPBm6MT)@c#rYI*0sW+Np494RW>hH7T<3#C~GXENd!IU_1iazh+fiRek>L@w{W4 z7Dy>JjhNN{aBr~!1gY|^HhyifE>lQgf4>qClVfUn=@tO6sJ%UMO>IU+x$i@<-;N#` zwZ94@HtDg-Ec$W4^!Hm1DP>xD#uGp^{nX~8B~Iyj>1-m`WlIL5ip(s@Gs$RN#jNUE z!?Xg;a(4Q}rPU-BjcS(+AS|s`s$RW)30S(2T;eYcrY8&L1hiGhD7}b{o0~ddBqkZO zngyp#$4>(R7yOYJr-vJ#P_TkbZVR+wXRu($!Y?)k5fRs=VL1xzu zfP*LMHC`MHbHL9qyGDk#iT%6>J`O^7QgX%7$q5}Tt(~py+2J8IHTChKd)K(jKv`|6 zwYTVTr~w^;#O{RVV876;$8+m@J7`2}>tl3WYHE>*(>JS<)!y4M>{cN1QSTIrt{x0h z{N`CB?C!3@3S2Z}!|HW;S<+z^_j8-pFnFWMsCPuIG%EBRU_Aisk?4#ve$ZNacJeoG zb43D94Swh7^>y(>O5pdPp`i(qmZl-3B`OsIzP6S*HkC9W7(N> zr0&cw@vlwkb^Zn>wOLp8dL(p${Msb;!Hq5LBalcc6LAj z^2gWV72(m*(f3BQDIFd9-2-aYzkBrCFprqI^Jno1u$A2R4tI4iacYMJv@9{NjxnzQGw9@Kr*E1UiQkj zjX?JlFjJ|OCrdY0adN7C>Im!e$!qA?I!x>RVh?E~2EQN>*)%GZbxaQii*A?iTJ}n~3U@kp-QA0FJ1)%>?bJ+v`zyORLqaV+ zo0#MY=XSs2PRs9`x|=603Gm(G>bN7gd)keVXLw+j6v(Hdd81`C13TV1J^cmZcIe#gwYZ$%{Vr*2OkoK>XJ04zX4+zTVF6i#Kpx?})6*vd53(k|+$nD101K*_ zd7b;sqY(~!MVp^D7;~_{@9N@OQ}~+RO*%dePP=|YxoRVTZ{9E{YZ#VwT$Hn!-xm3<(6vApG&eDPfdr#QPCb5;; z7l91-eUK()W*4{fw(&N0eEs-U&E2S?UrkkLK+w;qXC0Ers0l zY|1xe=XgikjtmV6ot@Cp!1(xAY5Dz&;t1fr)haUJmIYz9Z(WtJBfoh~D0(rn?EP%P zuQJ@6H~jgk%zfq;dNwK{74)Q#z-5w!c8OdUEU|LiGdjPU>LuNyqS&urWiU#EmL!5u zP;*2>kZ2O-`=Si!<_?t**9K z+V(3AH3=1Qt@-3R1K9gLC!^fkN^mAGby#x?9${=4rTdK7P+`?ziekhy2BaPmX|2iMo0&Pl=m?C+1%D~voN^waBZoH|d(-@VLx zh$W(Q{3rv@pq-EakAffvXWF8tx94L6zmQP#u2^JNIor9Ty|Ur=?>9i-0U&rxVFCU! z*7Z-A(7x~lphOpZemE*(Qwy8|S9_!6?E2}PLY{)JMgOtCi9 z_s!agkT}^t4g8RUhJ=PjM%dNYQKt3MXkl{4VG1C0iOG(E0MrtK__vLWhlhvE-eT*+ zL&=^Z&hIb5H(sVHZEIK{GNsZn(TqRIpSd!6BGlDufP!Z4vKP6HRgBHC`0U~$p~u5~ zrLUfvA-@mq%3WLP{E%cIU?t4&TRck)pj{Dz6Y)uWhMqA&4!av0y)HT$3JMZRk zI~0D--@2|n@VndRpoN6eFwl}ve-tdiFNP^yAec@(Wt1V3pUeNS{i-tLt`a`7Ctzt4t-zBTzoy4kYQji#$w%PsQex- zB+8oz1{=#-apaP|!A4w0il0P6FxlOQ*Fyw^AZ_i4%Fa$r zHtL47Bo`BJZ{uNwHpkl)^FpP`u*6SQ;}1=mm|oYR7^GzDl*C8r=RhyQ#J)1#4uL>i z8<4Z>k+q$EuXur>W@dI|PG_5%?ggRtTrShlP@}w{p5G!z#Y871Cn+gmPkwm)SN#N2 zUs!NS7V8!>EhCGKnOWF(`%6Zc%+9H>u&@Mt_hAt1eYLp{W)$z~=_UQl@ehd7N<2O6 zT#YbeCjm7#j&;EPEShL`By)+^sZh|m;y1NyPzbNb$hGOm*fYLXs7_{a$apP+F9ZVd zgruRW_vyO`2P`*{EzjXC&$Y9OGcZ&dOj=plnISSWQ%{eMq!eE5B`ignKS+Ci{R&+x zr{m({0vc>@xQjMSK1Ac=gAiM1$0f&gx0bn)D2j6eyksOKWaQ+H^$ju6(OF{To`=<_ z#_S}Ugi=szP=e>qZ`ETuA|%s45BPN3mP%@-`I}gD)B}6+DS(v&6sZ==qa7U_zK$2? zR2@Femu6*U1^)L+1fP&_@F-*5Aiq72hoh5I=xE|0v*9kLRHKprtNm5qU3*)5P!I~4 zdEfG~fTN@1ujFJvcLTtfPUA0%n16I&3V~B;({3dX8eR@;rD); zokp;yx;i98|7zucqP*SO@!@G-gn@2Tlh@!KCNE}KR2cN~j-T2&bS`G_EEd$Mr=yaP zoJ?80uhjPInTbhC{nJC+HSyjpkR?kMm+V=e z5C_y#!m`b4K`yRKAh5_n^6eK^q=CzaM*xP?NjTKBm7V$)U_x%>Q+NQF7Pt5Q{^a~f z;ak`&=B~Yq!*adTfe5IRt;x>MU}HK@c2z|9_4ZEQqD=0$cnxLMIItg(T74C7=*f5( zzYO$Y(<%0IQ6^n&_1u@TME_NEAQQIQuXcP6a5Nb%t*AK92C8t0Ny!Tf3uI(u6$YK+ zAAAy~BKz0Z^#i0*k)@2I7dJQkqoX4sahbnyB2|9i)Z~Y!r@#9e`s(al^%dXp zaSVtneo|tSCM8mII^Cbof_<%0@9eif?Sss3A#7+}+>jMg}ax;))VspW{Sr z;@6vWhevxx*4Ckzg%uSQIXO8>jGuBt3k%1Oe?Rn|`QER&ImlVRf1gQB^MjBv(2`{1 zb-0`nK#=Pq;$7c(G&jRwFfNB`WH|DYyO-DCo;>;UmmbH5r-#3HW~MHMcVuLgH4Zxi zlM)E;kSTx`zBJ#`j_7)%g(IfDO z4g>;872@UNrCf+3Yj=G^T4ojbEFgMwz2hD|GU5#`l_=F4J8E;>nl4m^In_ygU#B;O3)YgRQ)1lgq+d_)@&;i zZw^V&F9*l}%L1f*EEziJczAz3L%$1N!ksXUkUf=rJ-W?N(N)1*2czU~rv+j&3J2(_Jq(*1w zc6ZIgRzA*E?Xa$|Ut7z=$5+2tsYmq++n$cLV_<$<4S}>RZDZr?Xl11zBdNkq`(94Q z)@3}NQ2d4vFF53=t|jKqHIcyPo5M$nOiQ2`4E#g4jM4$M$H(EWEO%xnBjo7`NTUG} z6L${}kyb$^HWE5U>nf6PGID6oBko64g9rsF=?4KUl@J!ndM3_#Wt50z67@t5Eqqdv z-Ed>s4|Xc*#5;1O z=OB+T_lW-N#5F{%^zig$7L(5BIlnis^(+38#M`d5UcJvnZ@nywi@#2yV4waz=u}hD z(^J!8dazKuPUXfFwMz54J6~?I+^LDs6jjj6${Nz-7@61+>Tw}DUFpl_Rz;f?SbGz= zF$ZxxTX88X-I)7G$V}E;LoHA1s)R1G?5H*awNIJH)txYw&>bIZ^93sU&1088eg)4? zc8IlJ^vfed#-Cb*UCHB^E)}+~11sG>XMpSLkxBNnVBgF!3coHIyq_67VVr_ zM{Yo1z}IU=^m9XuFh4hd49Z`ijN*11)`McaYPH1nyfHZ z-;=tsS|?|Fxo_WCIXF02*hnF7t!4&eX<;{g*vTR09{)CMffw%u21EZHA*TFCFiA)i1S2Gx<^#8k!wNh^#~+YhhV z8bQM~ND|Q7TLpOqt=m5T!q%okvN2hNf0$6)=VC~e_&n_VG0WE0hCs}!+u;Wn=rSs9G^R-k;;E=b-lRMQdC*5sbEm_*n<3aBFyxy z(#}fE+}*5lt_w*?IVi1c+uk~2`cXa0pobe2ZBlqJ2|hVG@{t7FX=tP{bY4b>$rYz; z%qZFI@5!@`v$2fTZ9N`Q3COi&KyR;OqjXK!oZ}#4ZRqGi0-$u5#paEG`M=g?2Op`R z!1>p&MD+CZf|B0^V62Ani^6VHa*d3V0~v-G3=7!5l{1)isLV=lvZ!X&D$z z-5BL)4_-C8`(Y&GA~zJt(GmA2vknqn6`HlC*iDHgA_oFp0IM}v&!IxRqA&di=Bs$` z>8l{_MhPlqRI!Hd|C=1r1Si)-d^Yve+B`k|6JPy1f70vnr^_Ykd)LwJ?VbPsUJ3T! z8yV#S=TVz8Z+|m79{H`a+s4pDGL{;GbZ~X`Bzn=n>9=|MPj9R}J#r3Rcl*fL%1@t` z67%2in~t0ORahfq&g1_LOPl8JS5KrCpf~52Dc)j1X*C^U6tG!&NC3aU@?uYu;6Cn} zhg6lF71I`FDLi>#UxOjX3RBZ?7*Lb3Q|P1A5ZKbb zlXa>$pK6{TL~rL3FzMF(F4)BvX`9R^17z=yI^WPxQPI%V*4G19*Bm4+ErJGP&LRgX z*979yY$k@>;X0GvT1;=2BmE@1fEMLznUIb$9jeD5x|gom(a|VcJ~@dMK)8Gf#JvBH z@CRn+%awf5FP4;zk-qgZgUOES&$&HGgjhEzscYQg@AS(|wjTQWrl44~Z+K|&#XpAJ zH_*Okqy} z0gWgT8LeG5)#d}B9d%w0oK!nFlv!^$jwbTGdKF42;TJ3HX+%y-OB;K-(fMyWuderdW#D90cdpyay~j+C1iOO@VX*}Fxq zFL`96A8~wqUQto(Wq&<+=wjW8fOTHo-0)UDq*BmvFtYx|IXGTUOv2{R=b0>c+x2OM z#O>p!C6dLkkFRGZzm?fWj0>2W(%Y(B2eNFtTNrOVCxcMZl9DpP8_WIkeDB}C7Z(@j zqaW^L3l0s1Z(?ppxSqP}>#z4cpv?p_nUa2E+U?Ka&%c1M&!-8#ecLrY4(OLgQ>F9E z!%RZ&jI^3l!QczGb@%bbjf<84N7Y%!MYVl@|Ei#bbV(>6f()qw14;=%HH{7k|k)%$a@mUVH7e-s`hsbAcP%1RH?=aSWx#WT4fF8O>AdSH7j05cJUh^0pe0L9 zO)P$<9NaeB`r~cxXgFU9JLI`gwU>vQ7v^0O0k-ve2@E1lV@i!_9H2&X-raLzQu1(y zU`46QU5~`Yz&QJs;PvS;IdYi3;!f5%vhi#qT=48mT^S+@n@vz(c&NOhyj;lM4e((| zpvm$n%^enS&VIARE}Qx)_B{aBIs;UF25NT%QZ-|9bIqsDaX_}FyiC(HbiQeh_Du#s za@t>OP)W_~8BMJ;r_1N|*1MoK1k_(Is&D{du9u%?nlcC;Jg73>nJXJ1cF!FN+tS!D z+bGcN(j3|$!$Z~9Uaa;ZGwJ3fBEAiTx}F~z17EJHlh8CI&_BFz00{F`T6R^X#?DSo zPO@_{4e?nodG4ifdt8ixl2$W&)X{g1D5B<^8U7jBlmtrv^HLXUQa`uY#vN9r+COcD3+zp=m?fC^&n z)q(#W%|eAt#7yk66MiKjq@qGtHS^7Yvk*89;fCS%_p^c0AWWNLqmjltmsbrpD)aoV z+s*l(Kezj}2X+OTHqhOoOzNG5&sYg0Lh=--%a8VsLc;o7Q!SyziuadZG0rMmCy(T@i6?<{oOZwN{CFR9JZ*@Sf7$O7$}gjaN-pc_R#8Sy4PgV$Iv07_`r&s~#8+&oeY3KR z-P|tya5l*NtqlNKK3pa0e0C;7QiOG)1t}`<5?EGA>$GO_cLxbTI*8`4? z&NfXDhO_qc#fuko`W&t{-uE>#23b5Tn)1eYg_P*fZ`31JftIgiT zp{OC7>mTEs+8*x*J)9#R(wedc3YI+()Si!j$5TgZaTS_O^&|nLO_X?y)N}wU*?c6~ z#1-EYS-2*OmeC}Lva$Fe)!g_x&jW7q(nTBz4U*8PLOJa6)+E7EP*FMl~# zQM+s|0IijS{e5g~?8rMJMykE6%8|`Sm3sByh}vF{aUV-cQc_Y{+9qam$mr4F;2_vx zR0`jL^Y!T7t&PdGg$FU6f_nkZt`?Ie_5<4~ej8JhlXubYcILDA+V&eB;ya&Bv(s?_ z)+anXbd4_H*|hEf2HnH$$SkDk>pyy#e;679|36xtRb`v~i$wt{YoUE$ zd1SY#Yf#}K;qBV6ceP_hl+Y65rbC3jelGQ$JVhpOIxdS|)?;wX@}m)#-C#`}p293( zJ9gb1v94nrw{U_@gnOJ`y(g1*izyO!HIm#*m+w4d!8pUSOiT0B5!M6HkXPwJJkh5c zb2GSdr^k~HSl|@##syP0?GUt0ybb@?Ym>m`h$09!_JM_zo+7I$vYEW3!7E1d5sP(W zZm!unCFRA%g_xiCg!TI;Bu|ZvO_0H**y{mF_~m5d1KsP=f>U6;){~M}SL4zbX=6%S zyhWUZleIJfkS9;KcX)_}hb?-`XlYCqXi#lXuPQf5g!eZXt3Ctoz;pa z(v;y-y5i^KyM6o4lD60aoC_H?g$)!A;Hr`;SHTUIr`9$dQV(QbIj$LF<z-+8qR(oSB&Mo5 zl(YJ8?Ja;HIyqH&vL0kQTk4f1ouB)G#NLcN zDH=L=r0cv_^L!UMH`%BSIO*Otqxs~`?cK|)T; z&-g=qEEI(M4^s=^@EG)LVSKKsO;!cBB~cGoFhGDlJ)b~%NHHtSaNcQy&Q6$ z2gm^^Cp0!*1*nYC93-!HV0?PLcet;VJ6b$Ai0ZhXmur=sli!ja77`*G5-x&asQlty za&-pX%zZWje0+RTRI!E{S`P@cUk^soc?~boE(;%zj?F13s!z?$%?*$CHA_$N@;EuU zpxwR8(ArjAQKpTHI%Qz4sC<0kI4d`&w(5zCGxcD!KDKI?)4}%6Cu@Zv_pb;^P&xf zb}?4mAWaC(lvnK$MRZHepjHSK7?nYAWY~xRO$h(@&t62!(Fm6woV4zkWg4}6r|Arp z0Aocs^nc$z6+@|22f);3?jTD@L)NkcamMl!m$Hcdxl=dbIWj2{gMn5T?iKo~9TDVh z8rk~|d;~O8I}{N_gW>i2C*b0)AouK5DFljAnnC5Ae&TbpW4nV)BCE{d&1D@&oen3^ zA|LO)1gU=1tc{6`0 zgc&9J8H(O&v|~sxghLs0S^;4`Kwv%18D0ZV9K0)JeMis98Bij`+zc;= zVNMZiME*N1F-+sk;fQYpoNvBsE4QIo4v8+Lrim%9>0eq(vFXA$IXhARjwvfxF{;3+ zE-5Sfei7^;T5SrY2M7i@2$nEF1s>2$694&fxkhm8JINqJfDnbc?!2%F8h$Lm)ZRNY zlS1+X94G~~Vq;)|I5*87Da6tvDj+PGPlW$`B_CK5UF&E02jvhUoahP&6ked)>Ht28 ziw^2qSO&uslZXeS%1mDHSKqqypPR^`=pj=v64|dI$fz!#pN&z8fDGv=hmihqKZ6>g z0|6mqrq9100c;!_h3$KbZmAK}H~ta`!l8N@bsAmf1;dm@{ux`e$rvBl;ytfL$^_V= z_b1SgQy)rCRQCI$m1B^Ga7`b(45(q%2v{q0|E^nM2}N+WSlFxwRzTxzUZms@s_M-3 zCjevoyX}xKLLw|jP*03@=>NNc;s7C~H$z+s5m5T%3~l3j(G_nBw|(bo^xwEwSz-9C zYG9Dj5|!onj?vIT(QydMD8WG>*aC|(o^=?tnl96`wI=@Wv}o;4k@}8mZRUP0B2x^B z>`O9$lb#2<@1%e=Amv8$?}zJ^11s|#Kfn(>Fd@{i35LbOHy`r}W^^4jB=aI8%5sY2YNW0~1+k&e_>Z@N{PC`D44B;AxKTw5DU2J+Oi+ zgA?DsW>^(N3hVb``eK3A-8wx|wrE6;kecs&GVw9YG*UJz8atoCAJ$}X|HPkFI1$Yv zXiKgcrNjhBn8gi&!SbS^6S>?=cl5O=CYYJ77IlM9 zpZEBm5hbo7uVPgPy><+7Ha9mxvIM8_5wC{_#i^)5U|xRgCEEo0N)}gghv@6UW;U{E zlt5v7{KV{%NK&)zCz{9}8!#&(uTO%T(0|IkADf#?b#HNet8*(<^}7nLz*oXbbY-^n z0c`E1x@`@q+6yylD^43ku;K!+6)d$BRRo(fPZe1DdzT(DpFP@{xZSVfiG$<#(ZHL; zCTo|{t=;~$tzLY*1%7VErPx;;tqq%7lP5fP^OgNyP|UMXF|jS*m*&`7Ja!Irh&?txFoj0y%4KkF(6) z-d_CnXY%1V=+ue#px*uOCwX}VeV zymWMMdRgtfQ-5;39R3jK$&oR2|73sHU6VRHHWgHZim#NjHQU#}_sHJPI@`+RG!00K z+dLl>yx#NFXV%LP>So&PA8gud?UDnBQ-wx5YwLi30H^gXD>Sszjl$ROJeq(M*Xp(w zueQ^o^=fRcxB%bM!mra5?ss_D*liFheuw?#@UY7@xgGb5*zu|)Ztbj}X2os+pIFJs zvnSs1czRemj7fR${+v%P20$y`^hEa8uV2Gcc+}piy%gjw#KoK}H~)EFM!d4#5%%zA z!5c5}^;ZPKYjpi*+J%v|e8fBZu#{8cagOJZJ*(^Uj#v5HBWnY)seD~$Pj)Ib(UanX z(yluiuQvO%fjShmpht}1X{9BJr^hi+@a6DW+gdI)UH0o+TLXwMkh(ctS(ekBoozgc z_aq=D4mdbp=zMA{oA%0f#XI&%>00&KUJiMaC>C>K=!_KmZJy1clKtqk)aKD|f>)Q9 zj@wh!^mGqVBje+aYx}XuGc(%-Y?`AH5fOL7x5M96lIC6>X5G|&`C`z~|B$`$^f6Ys zUpvZi&Y7Eq^G%M@LqQuaE&Tr8w@eOe*NfEGLPUg@Gw=P!#l&xh1+P7UO!v($-i4|)~toq zz{{;1c-Eeb4Q@q5&?D!SNU!GR)%JEgfz#;gtJ~QH1!q4!&&I#Bwz6uxm^)jp1@XiI z!IS(5e6C!=t7Avc&Ki%aw3{{0MYi8(I-4UOUzPh!O%i%SplHWCx0L*4WWNY!x}3n? zY3IZQQqXf)-SUe1X0MQko#ktx)oG>Y4W2f28ej$30TIF|P9NaklyhJ7j_&xZO7LW){en9T(41vnx`VxtLSS84_m;K{KyofQJl@IlqNu93N6>Ea2K>)VDis zwV$~ zeFA&GM`Xf-LQKr(KSCIumU~_=bdKh#czb)DY)*S?7UUG4mBO>8HKwoEUFTy}_YO*d zI;9QWb4b_tKw)8FWz{cbNwqV*^cP#Q2i40+)f7P z(>ROiy@5}!Z=~k%6^Do9xeW#V-go~{23SSo`H>aSuHw$LDk+JIkBgz=b?6-&q-BHp zO@9(DHa%D^Dk=g*{AOOB_RVU3WoP85z4W#kRLO2kj|S zU4K{r+xH8VAY$cled{y}+;P1){H#vQm#8{92GOCfj`WLvOnd9&=N?BHtzjOFfph9 ziOFqcFg`lAJyA^59Pa6|pUaY-UQB>FIzKNr?*h4n)mO5=UpaRUVuCWl!gay9JqzDx zS~tfVuW|BNpbYAWwz0S|{im|oF+ueg$GUW*Z(}nvGZzb!Nc{819 zmv>Kz<2>EwNf_?2MD!^>5hXG?%1i&779(RP^+WROrjy3_5<8nT4LjRw z&L^`c@88>U(SjZf1$t)s`tLW!Se2e@X(k_0^6mZ-=zn$Bzd!Awd9>{Z$oU3rsT=BZ zaB@0rwq_MJ?pqv3y#q~i+tAU`KYsi;e=(>1%~*BzMEiP6kcMfzz}VLZEjWK-aBh2Z zy#^G3;M*4|=H%t%W8-1R&XF-yfhHe&dtk5HINa%-sQ%>O@uQnWTbueSrzwEPQ({T| zKB?7;H=f}3=C9XVXA2*%I#;lb%|LT;mk(AUEzO1oVI9+B#cv?wI_naS@PRvH>`%!w@ZnpLwj+71v)VohB%chxa z%(?Ge_4YE$f1mzoXqD#tk|-6wnBmfcfnz2IPw>*IsPX2kWngEvlyW{MR;BJ_E^TUB z-KGKT-nxsr{%M|U&mu}&2LuE!u4{MPcNfLyFSZ?3o$rYXI$pa?e6Fp4G7);7ejlBj z`~JPiUfKodH+eb9u{lqI?J-_k9-o4=Mu4mBSNh|%cQtN?wt7olS*Zs8SpBKIH-nMk zY})uY(}CU?D4HN9Bjbj0iHeK!@=Pq-wCf^d63HJf;Tc!YO&Xg8{)A}1pQNaIgcr^*h>#~-i44^M2=gAdc9l4TN~2=Vno z=_djVMo_2UmpJsUo28SoVXyl_fi~npz5h)PN4LveKW=3l4Lzx39Nevz0bSlEYu1 z-9|C$sqYqzwt%z;!gH|<7e zcVaMVYI{;&7y%&h1@mN}oE#1g-u!@pA5mU*wzZw@RGH143kJq#yKQ86RC7Gp%NRE&Nhdc-OD!TVH?WheHXlT{gpa&so?)n;j=KGE$Oz`??0F^U(04 z&d*&01si=%d2#eGZET!g>sab9>whM+wDNCh02EtSbQV@{P?0!vIPigle;}p}5fKpp zSzNXdmX=027;|hq5(vzOh6W&`4jOM%wN>%_Hrn@|(6?%6%+DR2PVh|YsHr&%&hus7 zYfM9?2(8E2+^J`AbFTw(*xb+;`~AE-?uUB{WMuIvypBRcjL}a5{3lU9oCcy$F7Bs> z@Xq+S)8LtGn4}Dn-V{DlrUuGGF01B#OcHPOOJMraVDN)}HJxn9$tg#%jemIpM@0m* zF3Bh@jUL_-ur54fOY=@j9}xb6Yu_3Hydvj`ydC3!bf`YU;JYkWd^P+|iK{rI^_C?qGL*n_o8NuT=G7 zt0o?p{4SK*-`_{4!z8!ezVu~QDO_wx3JBnS=SretX=43XEJE{jimZx;2FM8*G~o=z z`uq8ntRrCdI3=6=-CsX8HNBBtta4}sNs0ZE7jk%VP73-WB7im*HH=LIEAP&0=a2kL zb%(c@tkbQHi!;E%LHgQPT~C;ATmSFoHBDEW%^!rVKQ&sx48F8@^?gP?A}{vC?47wx zE)6Eanwmx}{#sbsRD#=UM1emG(#YSoY9mwfW0Z&&lRnCj0uX_UDmgx0MPBvG=vs)= zTJPcRF8Fhe@$p&L(sFWmRMzhL84KUc{lY5;fUaoayK0xkOJC5*5 zOC}2GLiy-+j*d5%ecB80y9FJOTto6lr>259pFK}!WoF;mTn`EluUy8nH5Y3KqRa>T zwzMY~CxR5zWFjwt!SDfLmd)S^Vx$!a1m`_L{EiX63!dOX(M$he5w7upJ;&528R0}G z5hd4;XTubjXo1yW5qN+d)Z&#D8XCS)_KJ+mn3tC~CC>Zpp&BR03SSU<+TRh-P*E87 zL3ix8PoJuPsC-w*oGY?f1_F0FbYh-)N?#-Hd@kwny;2Ln9T$Ao>C2$OX)qsAB;U74 zh6{LRfD&+xaL?2^6KR~*HeQ(rzO9nF9Ao9;8Z{QU;bT;_kh-I8W+wGue&ap^N)e*= z{Mmpbby`9~U5qn&5+~2Ih}4EP*UJF*k<|CLi{|J6oB%X2C{EP9V`@nff9&AsZ!yEu zbniB#bHE>NF;(@^zBJ~WqLC>`!i~zV+rb$t6G~01Ut4Gvzi63%=;~Sv78g)yOFKP; zm%mzRpywbJkmU{3AAU|PmiP(^Em&w8>gwW!;5RnuZnWSno!+^93FNPBFDLexRSIO~ zX@nlf*<7YYDURB;PK-n)|r6I6^ISblLc&Rij`d>!jh%lXG2N%X;U! z^;Uzo7StqW+(Th17#koyHojGPOJUUM*V^8?IbBNWNjaYN9R01oPsn||ac)kK-QAuk zb_Xgh1(ueMO3FDiF%4^hPjS=tu{r>AVO(EQXl$tK2sY_@nu2~=4&2udsbZp%XGTXy zOTIVukF}GU-g(!A1^bdYIH;gXbxiUA|3gQ5$-1oIP>@vr>)W?)BP=X75f-e5CC6d1 zd0xDulcR=R{%*-5X5wOEkqBJAnwv~AZ3!8vRy7t(&4vdU9IbchD+>$L8e+hSIxh1w zs9B*T5;n2ULMdOIp2w&t8O>MS^4F#$$+2qwLDkh2X<;qhZX~EpeQYR$=v{0X0Q=|Y zWE*-oC7+bwV;TtUqxjjb$;t5!WQn+!(*(jy*M(3BSu;y-1>(>2(D@hzw3pEL4GiP`OFOR6`W=>Ywh?q*6T3UvgiqxqG zS(0p^({L(9H<%Lf9Sl&r717g)xx;21_ zg=@6@sml2?!UBmznwy!A=RF@{Rs<1Apaug9oX9I}txfQ!JKR5NwzYMj=X$$bY~QEu z?wrsB|CCg#s#e|Qge1$12MWLzzO~#DzC3Z*g{i{x67rIXsU$D2cXCoPV=yEpJ~FHX!`q;OHUM z0~QvRR=U+6YqVorku(ARx5l#R=7z&L9-#PpDj_c$;!O;qiXhwEC*!Cme)^Fx0yNqn z0JI)kOxxAuEJY19H$Mj89`JgW!v#qfcKl`5ioNdv|NDB;U%cw2*iR!6jRFK1$%BPP z)od!NP3pdXwFa2j*apXK04Qmm1Ch+m zFg7&y1gch535>b&qwh*c`S5=R*PH^FPPgI=-8Z5jWq_~rCbFK?EsZ~5%*ykE^o@;) z)5J4_8NH&bkr?8UWm+a`H)}NXj=DBJrVXH2cXU|Ayk8z%It-WN$IKj@dx*c2N;=vl z8OQ^jsmc%!?=gsD0_o;cC!Q?8EB2@Gf+E4&!Im?fLN8ikr)nLoY!#cMN;N1+stwKW zDs|N9e+&Ec`Wyp45OZ(q;Z|E^P&n0DK$?fj-K)78`j&PvbfoW_CI{tMo~KDB$MQbvJ!x zUB}+i^3m6Ol9GYJ`UMM=R715p4W7LGyu8eByK7Ugwx+G&yPa#Z`$FWGsb#MgMdJGtR6u_PEHP3Kd(b0 zEWQ+FXBSpl9jw}oP2;#kyDy_cr4r-fQ1b+4yP=`5?4^tIbKyB7BV!7)! zsU?gv34g^06bwInxJ9(QoNZTAQ~eyNM`>zlDoSDv>ZffDtacVQerDm~>IDPs8qjr$ zM(|aNa!$$K$$>r`@96NbqP!BQ-s$&9#ddde7{gAr3eSK{b9Z;oVg%?BYO%GI%_yFy zw*2EqTije#qWA39yM%6213ON^#&2ztF9ig)kDYHRWlIX_fJ0SfAqJ zlr?XD{j#^jp2Y>5x#`n#UWYuB?A{_v)K^bU>&UFo^2UtrDJc~D*XqCaLPJ5p5F=Jf zati2WI$5T`*v$Ki7qBy@yp~%_>t8Vyrl+U%Ni@kP>|M?oT6o(UAnb)7=74zDhQ6TQ zGAI#j9+j1qZMOe5DpI3&YtrUG*0*zV^HWA-8R!{Ga(XAw1%Vpu63*j2&;(}jIUW|4L8QX&8zm)W+QEE{T7b1+ z`-eWgx;(?~XX}r6-z|!{w0LWvK{=NT6t@|i zRP(99hVP_nye^#7E&L9YswW$!_Uq}f*5Aq1VzM|;b}Bg)!}Y~l?cbCw8f_m)M4Pgz z>%kp;r1Xy88Nu})lG2LWR&#-4N-yd(Bk{j1^V0PMv7NUSPLg&3OenGFb0DVStts)ABUjp6#kP7(45atYM=5V4F9CdhDn*r@bO_+K8&dY+@ zAz2Y?VlwJsxd{|0G&m!X5c`gtz@JpO4~TY0?_&7`tAdjJ;8P&JfRM^jk}`?(Riz_} zTeGYAF-1I&C*OqVwk8M`ZW`dGultNnrYS8$o^Nb~!Xf)JM0*jX3)p!I9eRn-Hh|`o zLoithOCeO@GP$D^e!(CY%@j-M{}@m-3XG)FG2bO^ajc6Vnlw_(fAYI5d+3ZrR`6jz zX?jEu-u$Np3$v;F$R%$LjOiG_vIL{emy+(Rb+lzKbZE?CBa{9EYMSLmdMh9j1oOjI z>WG<`1lV)dW-kFchMm7X#P`4g!y`l%@V%gI6!r;?0TVGt zmvw+!2t_XGZ+4+^V|(h}DJW7qD?tRs3o9T&pnGo_)msdKehv9A?=39M#cl$Z5A;1l zwIa+OE$KfH4aeztVFve8_u(&ju(s*6(o+Hf*#kmoTVBXWe3c!X$DE;zJWK>1Y%m4D^AYH8-1P*}U9l z{1fS!yN{ZfpIDg5HltdnQ9MXOs%wD%Z#pri|ASwk6}urzpaZB@hOnXOn1vwQz%vv` ze>b$siVUHQTA|FkaMhImh6IeaB@+YStF|LyHroe=6ET|KQL1v{9;LTK)&IQe2pD-O zgad$BP2dHqd-s+?E_KkMT+Al$ysR{xY@9z2{>TLxh17v_fEUNv3NA$(-~$-c?{m8@ zg^I;unnNTWJ*k-Cf>XS zFXi5yl}pizH$f}5=4&?a)hXiOakf_$r2pMQ$TE(aC{w`4;Xq(9OHIdk{1vll2`M23 z>sHv+;Dt2N6bjY#KM+mG6md*oV7smBIeGsavk_SDLE%MDb>X%REsw*DWF>;EITdHg zou5AWm(y6fo&=IQG33iAFw57V_8Qr$b+&HIJVE9PK6bZ|icBPNain_bwm?r)bFd38X2e_IhHZM{T=a8WpsSc3@_wq;1ccRrt&$I}5?RtH zGxAZ6F6>1aJwZt2j!FT1X7pbuE4>n8-jFq4Hc-Ez^m&ZxZx+YbK3x$YKVzcuo9llj=H9cGSKs$a6=1+y!5_h&vqU{^IMo=)8MSf28_%qifcw^IHLW~KG7=1SeQ7}vkY=Fy6~oJIq4^nG2- zLh3hI6ST2yoC*uRWGaG^bK?J2qh3)3dGU9*A*e4&+i#H1&kxvbda$u|qlzRf z3t)k=Nc!I|`oBARd~qlMIN6;INF?y>iWl76G$PA&Wd!ezquTlydM%VI-ZVEnL6$uJ zcR>mZX9H@E#myU(lVpln1m!c1i;qM>xf) z9xg~dX~Xl;7%AV(OkbTU3^39JO!9ydGtK)C_);YWUo=w@b`T&g5pRMl!Pis}v^2BP zNYu1~pMDy~Gzo`*ZG7#%oX8YPH3YYK_|yO5bC~^exs?zWFJkfnW`be7*TFh$-ygS# zx**jFljSOekQ zkvFksd)fwxaTML{;C)1g|`X8Xke&BvU5@_s>+5$o^s> z^-TCxDdaTNU^>QEJ|hl&zP;5nG64o&v@HP$@`9b^H7HP}yPq@!75&#C^PxdVM1BGg z&r0CrNN>moSeJon_obm&r*_CRao9b<2=;MQ>noO$b~Yi%5O=ZU6wnL#7k?y_EpL@4 z4OapX9C+v7@mb1?63Ei($H64hIgn2Tdstwfe9(lcY5?bRRooCPn1#mzl`zOZ!e5%0Qfyl#xj)Ie;(o z*c2HBY-DEHZ*i1A1BoG`4UT((TxP|3t%bpG|GQi0HNR&uLBKotx(^Oz!3&W zpWBBQ|Nr)(>xaVwmNsy2ci1_+C~oUV1w=FuBAZW2Mgc>r59OjC91j22f@6q$!US$a z9N?vkBc;T^B>a(U49e)AUmb$w2E&92yG^6Av#9?djfBGVJeE>Zs3JcF%;}NlDhLF)Q#@wHz&H}jQ#@Hvi$0%CX98#0zN5^gsZbLs*^8>m1d|w0ygsnKixyMW{R3E{ zK3p~O)vZ6ToYvs?^!57fYL9N_y##)DBHER&2H1(v=w-k_!w^)`zEJa4VD*GrNd9;i zPMwQS&7!1_5A~m4p((Fem?`(7o_HMuni6a{ccNPWT(~$h3Tj9Tj#S`a0m=gIy?gqv zDc1`$SKWVjjE2ApexmNJnh{q93l#m07=Ix7;n(1Ut_RJu(j%IoCfx%BveDm1lgW`h zoz{Ohvq!e78_^N4u2cN`2S9N_suHGaUuqE~m`V<|ZZ)vLyUw7{CXBUS6bmabqTN&K zvj4tYpK5SAu!NHuO~*J5@J0jk*(Xvi;hG1;?RKJ`&J4?e=j1)c6%1jN~7UmZo(a;U` z9j3|pV?cyEQ7nzG09=m&rjr-=>eIx>{x?DX%Ek(eMrc{ZOW{V!p94b~j{kTo;0Dzh z|F;zolqhi2SYi{6;ZpR7Zap)pZd7Xxhh7T@N6$u)#6Qkks|fB6bPPOyBCM}JNgwWZ z8U(zV@k-ghlXh6tb~TW|R1ZQxLvtk8I~K#pE#v-_Hu%o~s{xQ&hc4l(&3dpH1(8MI z46d%;iT;z2G&rJR0+fX8gM-{q+Lup$|BWv#j$mb>0w{g}c6$=2+HmlR{rpWbBa|&o z;Fo4b6EPuwTZ_{YM&`oHW!@d2gjRfe<7lTYGAX%Col?-_vNbC$RWHr+FoRl5ypWlR z?W_d=Mo_39P@6}*b3PjNIaRH}1~%bj2<0Pwm%RLMUt6*amfwn6U0wa*C_N~JkP`Ym zLu@>qF18#&SW$0}o6V9+LBafFb1Dq)#H0~jw9;~}H|Oiu^{wrS(n`GhSV4hdlTne| zOG}rT+C(vQ-XbEPq)s!DK05uoT3e``tZWHu>BGfFP~COM+dG4f?i68e?EfM*ie3o6 z)!mxuIr7EGBb^{vpmY+~z5~G8n^x0@riqn_Hq}f}{UBQ&YPt%8Itz!KLBUugW~<9~m^}R&{`A&&k})aOft2Sb7r~7#KL0n)=zx z3*>h}ttE$P4uny>q19XuQmUk?QL2Y7Y-k^zHNOy4=Y{AoA2?vMc7+HVqsfmdNX=0sd^{vAZCF%DE7d!RgJBvz)SD}ywoQ|PpMN8HW z+TwB@YE?P*M~r0FN~f%0W*#26cUy5~teJ#~iHPc6tM8+edVCsPw-$2~(hv0(Qp>=_ za=Z2g3O4G>wxW5M#;#35>ng1d@+C`+j33`hS+ZU#Hj*VXZ0LrUtH$H_Dw?t`Wv0`v z$7?(LmMbsDrzb_!9{aLtsOo4})oJ<@q4&=k6)(@$vlrwkF_GkMd;=2<&l^^}C>KLz_7DY`9@F;QQ7*MfZqT>z)vGB5AE3wtfF8@~nzn&~ z6YZO;ED}S*PJbX&=DB}!iALx}#mmmV^V8~DPtR>;unRDz+7k`#(?5E1D}#biU?-#& zY&1@FW^i9VuQ~S{7)Y(RTYRhxQusA?Yl_)o%ZrPt+VTm}(f-;@7D^yZ22|xQXEdK0 z$9HCT*4H|Uii*DIFgLYmGwSK-nVz01Vkc8kq1K)U6@Wa?sHu18Ww`_du50HTTS!!G znW-wg>s!h<)Q;@SlP7%qGPA6tV3I%}E$Knp11btV!w4jjS>Qe{Zo|p-y_ujfTWYHv zpqkd(6K}7c!oY$6GGs9;Pww4wtq2ALMo)YpP&NWw*oPRvG~7eKCqzI*xCGQx?z7i| z27_Q`wW4J?KYIm4LQ+#x1wD5ORD#qrK(Z(OL9NrCB3$3QzFuUc#y(u|n6Us4KKAir z6E+!pY)qVkgB@r?dVY3>j()FDPC7I^xSU|>cioWgFYHSt8IIxMW`d!eM3@?dEY)u( z_?@ecW}Nhskftfr6GV_N11KiBHbK)2wpV@f+u2hky>-jOs_xnh=qkR4)9tUMZg1CJ zdhypf&h~a)0Th~dYC3<#R%y&$-NF!zr?az&$TD+bT})Dxx|Uj?-knTYAt3@EGbg7n zpG&a(ye;mcqo093FrZC4#Laul?0qLS+O@A8F8Of-UNDFSa*R0gn; zo<0%`z&j<^7*tO$DlJ7Ori{wUEVu<@?NhFA&$>(z)c5eoPuOsPl+2r#|l?m!hi_BiHx|FuhU>yl4&78o>)xEF~*J0Zq% z>p)xJ`(M}%rD`CR>n_p)uxMR)r#gU-mY0_A`ulyt0i?%n1jznyK&=2n@{pWd$mpGx zmhTO2cnBxdR^zp9CNA#r(NT_-$>!#-WDQ0J!sTT(vOCxfBEAfqWi;XD;S|)=)T$WM z-yTp?9vmObN=Re_wF-0d7E)P9kh`?vJ+6fCgZub)-PHYhoiRUOZ;iM&0F>*08Q_cwq2zc$R0$Pf{ zeEzYVO{@Ptrh>?V!1ao%uF$O@j;F>yLn*mkoLq#Rbl~;;{E6`#K-)Dwaq)ehGLNI2 z9O&}Y9~g*vNi@d&@_87u+e(I95EiygFt9YBLFTX3?J#f#sj01b!NCFeJ_WOaT~VmL9yYqCSV=6~Xp&rBf%rx9=~IgPZWr0pn2tO%M?g zxpR#v!ehM)=*VID>a>*92HT^rvbn4*ESK%+9l|Zm*x37#`i>5EoLrUnad68yD|JXf zpCSFhF&j91n{YOInKh_G6xlSmH$iJD5Q`6Q&u?uPc23j#s> zQji7xVqN=`esi#6x@Ta3n~kl4w_tpL>}EekpySiRr}1~5u!mGi>dM#KwL5?TS?pOw zF_1QCdSz#4kIy?-)YcL)C{poqM%&-sGeW&i6)J5^GS5uQ-->|^IRTbpkrbz zc;T#V#m<)ngjTD$A9J#70^9w1@eO3&&~;F&ZuK)G0fI}Y+7)5IX|?`0v1 zN;QtxkJxgeqQo$wJ2QY-d-jntE7>_0iE^o}T5eCcMmv zlb#!@V_zDLeWKdm+f&X_!qm)&zTMDrB)YjK)J077;MeNv*!(=+yer_nffnt{+Nx70 z*Nw7Bc@`BFvcONypy0R&;`VJZ$J;wme$gQGE}NsBoweip_eGT_Aa^M2TMqR4D5k2N z9`Qhl#i}&p*|b(kad0N5rqp*+?%um$cink7H|G4))$57Gp)8@!P6{#7rBJD`!jQRw zqbtSWXJVYe&$){Zqm#Lx0vx=hu8!TZlA8ukqbDG2C9G=7Rxyl`#G--3t~>P~{u;zA z+9LZI@QnU84W>eg;f=svh6E4E&#RP^D|hR;gN9f9NxOzxH`$#5t*vO6^n5INwsSvO z^DRhGy!8HC9i3F>GFdIf?L1V`T?RUHw+?P6NpD6!PNu=wp;1XoI7RXI8TEAp!_v2Q zCs8x~+~wJ@V($Z+*(o3w`xJ?lfUF-EN2>Fn<|~^}A0(c9c16+z{0tp5(Yx`Iie<+y z5@GmoeSJNgB_~+E|K+_ZO@B?fIoMzy4Vx(la*vD$xAhBA=m_m$?je@g@OQP`FM0a= zeV}9fJTfO79WyP=kHVkENzA0isccz`iI4XGS}R90#;G z?=CbIXw@F?Fv~L%2YaYJXHt%gxZ-_d;$Rw0zMqU%U6GWSSf0R&aP{XWp05tRNtKaG z&L6h*?I!wON{&iwk=-FBS!~P-`{9rW!WIEPypk^|6Wv^#t*~kqtAEaRPZJkBgC-~1 zq~eW(T=CzLz*CB$R=xroipbaaWYmH$Pri%gD2a-RvQcgQWpO|G2?ulTud#edRJ@M0 z1cm?}CZ?o}j6oY6fOeidsj96-a>cF2je!#W3c5S%TTSUg4l2Tt5;;mW{LIL{)vt4B zx3g|bwl3A9yMne``OCFL=AQeC z^GLHYXmLwyS<+(TkGI844|R3YmmCR}`%dYTG8Y#~QHtloOe!h^PoA_qQ+;vA?}M|- zkB_f9J5|?)+QUDFf9GPt^0&u*BJ&Im+hp;u1%$poRLmzT;$m^H?(oo)39*03{|_pu z5f0QM%ShP@7j-sL&=|F~zAp7Nf(pXL!o|-IVt7KXnj8)7iF#iq$o4iA)tMiy56&A8 z4?ch(1`J=+(~!}`CC9dILm0K{Y=BLCXq!k5alt}&TM>I5g#sYCopft3p zJ@o+z)w&r=#2Fqwh={eKv&+&raJ#G;*8(vi4gOE#x^ZxhEr74uqq~ zcFUBl7&_MJqvR$zqBPBZ#b((|v5~A8WjE*f*Z;}+VN%9*;}I49Lh!}X64Nhtj5|%| z_#2vLW=-4-PoC7)*8KW0v43&GPVQu1jFb9%XegrV?7qaQ(&i8O#E0*q2L@8Mw)#}A z@$SiMdU=VCzNcZ}%XzOm}}Cd21IVB+sC%NW{` z@7iw)iI1Hr<4z$QU@A=r4zZ_7yNgQn}1vFyg_cIh8XEO zHVvTN9Ir0>W*DW+BCn`84ys)e%Pc_3QB95T{d@P_L{nRAT?MHv1HZij1>^*aj`U=} z8AQZ3Jfa2SN?O|_xG~%n-wzKwk=uN54AOQlTBRKv9H7uoDYxT3?XvtS#KN)(|Fo~)$vFG{&Qesohp}BEGeP5yy6E|LJ3{5&L;lWoj!odyPq|1eeV~) z>Jgf#ZTd;D`)$B-w8(%tzMGsFn6;uLt|>o7Mn8P2^nkp==t?+IF?dMaXER4bL|YSP z4N2UNi<_HtSeBJ&FNeN@wGz_igO5WBcC0Kzqx0Obtig_)91w9h z;$Hpm;ls^?rzP?~%(~5^wca;gO4=zA{=f;Vl}g6~n~{P-ctixg;k}`kDRrO^enYcJ z%6a!BVLV|tcJVCa#ix2Jb)*_o^;@^v+PrQvbUtnJXrr#>7 zsSSe*poya@N;M0aRqr^jWhu{<^b!1BKnTI;$Ow?|6ni`&3H$y%gO`W5(gvNc+)?jk zkSs9@ZlWKcbJX+m^Ddj?sfd`~hWri8YDErMhXc(wdtfsGT^!)GX;UzSD<0DM-dqG# z+6wRsSj)*7ePAdNoDeE`j{(n`AIN z87qAIBs!Ee695XS14uVfT3)ZVh+70 z%<_bxd79Q0oTffZG%*@^Pq~Qry+3Pxe8M)aY5!LI^iNBa_<6$BMU>BBJctYjmI$o} z!YvJmR-<290*So~=MEcF0sMUUyVTW+!4Gh?xawNR$Hz|^Z`wC!fq>n2w}mbNYQ9RB zgjb?<$J5l{o0W}?3Ei{w+nrsG$3q+2+t=NVm)x~;NGL+z_lmJ^wtrTM;VVdhmpGar zEBrEG*oqcTeo5@;kSHxh+=rEiFY?exGayufvdzlMN@}As)yuf&@9KPd5%yT5GgqH=T`b12SMq=IlXBOR+7HlEWlpUJqd8qWwysxK6>%Ash zmg zIL>SDGFGon85=9}cTQpdlEjjb^7jbs9QqlX@Dz=%2&mA>Mj!H$qMX$-fe_NRa^UbC zcLl=q7coBl^|{fbT>AJ_NXb-fF? zYzd*$wkJ(UL*w5>l?PDwN>+GB-^|9SLGel$c5PaxsWyv@ZF{R$IMhLqx>BjIZZbBH zF4OvDy7KBeS_%Aib<#cG_7d`XRAP$MZfrCU!e}_^{a%O!2mcPi2XAy}(IZQJke&p> zL-H-%%2{1VaZUgqIW)wZntBftLvV}Wy4hRRGg-COb{PRR%C;3D@+f81c$oGNZ8X1x ziPQF$E4Q`m!Ji@VL?`TTQh;_pHOGp}PH$_(LEsqLgfAqG$Mc@ZcSk_EqsF~TSXX{9 z|1anupLzytpuI>YKnMBwP>*@)a`?{m&EnNMP40ZAahV=sA>BN!(^}VP*?r3Va0;z< z>wg59_&Di-{}AuQaE~Lri<9f~#ttF7hw(hiwkjN_YJ~RKx<`!FNn(~%Bq8`dV!uiU z=f6O8-8iWT<&2|Tdcpz4EWE4tQd8Glu~7ydo_N(o0nTWt8drpIfBS42)BlLBHaJeW zU(o5$&`TOl2>%IkFcxuAmEaSi5ARA#dF{3aS)y8<2G?1`E!!rT$iI+y2a>#m6~M;T z-WrS3$Zs;+HaJx@LB^?2s3(G)(w!s18;s>kee;IOxeQWK}9W zJSBKc0MUGA58k@STJEc_hA`UpLlc2RJ_OglB+{(;_*mNC54GLmm`?j#Mvj08ws`grF2`6=R%y)}&)`Vzggrgw!)Y3$3cG284GQolAepn{TgHQkS30h0t-ay(Mjtg{xq28=& z2g?ZU3h=5$poe2a&XAU*IR8FP{Y>bYX9-vVc(x^K2#@D#Jr9_Ydo%4IOD+xInYE?j z^WMZwQWRE=f4&18TL1jB(4|SW&zgvN53q8o-Xk12k`Py2LzfyeGl*u@zpHt=kEv&Z z^l{q1j6`z*^mZi`j|D8*qL{V46y8-$dZ*0ZXC`Z$G^*X?z6YQQ_uRHaaNeUy%jli& z{Hri%{sgT~vFoY@k=o1fuKGqp)Zabqa~KW%bUpMod^rHRcXs*eUL~--nw(dcvr3GU ziib2;r{si}qk=R;{{3z3gf?;I8qlOeGLbY5ehZ^WCZ^5Q88zb-gk!DRV!p>@%Id2els>!9uvKr^~u$# zK48h@$+*;}Y;+=v;d3t;IU#N09}bLRcW(Q7B>nf_hML_K*t3H9fG;4E8L>ZX)?W)g zvMA+)zK~jbUIN~=A{|7tIrv!@Gyk7xLL7GlXM$A3lT!pIh!8?XO1fAovP~ioaBRqX zT+iwXA^S6p+^uFt7|X){Kj!Qqm+E3I6hMJ)RO?=VHMyasa1DbjEgfBae& z6k`8iLC}I_`5q|LuHEYUm)pUZYeQaMfvAj?p~p&3GCfOBLE5c)-=XecAx1zkF{;dW zQgpvU2l5-hhW^hVw>z|$a!qOawCirAsA_>YBoJV1CM*u&DS2&E1sTtok89pq5EDm} zZhqQ$_jmUX!teZV8q}^KOm`GHbQk8@z)5qtd;~ zSbZxYm~V|Q+YnGm8;#${;;=^W_HPeIKucnXfXwIAxAGAQC#FW;(fQFM!e?x&s{c7k zo`GQsd}-kWM0OC&G;N^Hv=>FIDJv7X&UwKiCSv2!o@jgv3o)Po!@f8KVM;ajm8}QA z4EaFw1_2>q#_xbT0SpXJN_lv_#-ln-&vzGwP$<^CgM+o)|4^hr|F+3OI%Ct-!r}ow z$EGb9#hq3-$NvuJGLWMY5Ip(*Xrf#$D)(?<;ZDO(EA9|E>CI`KVyAYO8o~d2n5|=h zPsfK3VdSN;CrH8VnoS4tjkWd((!P)ljd1Y2@d9<*umBFC*X8P0FDP+rZ*3*rM6<_q z-oJOg*J+WKqQVkeEtFSG0Jz6WFrN5KaTR{<=H=!6&XAFy>NGejvHQm;NJE5*goK1D z*T?E6wC^~w@7J$iz-JvMos?1!65)dJb^o(7XfY_`{asm9BwQA-GF+LKiv%Bd;YOz| zc{ywTPrdJfz3A99!VG0Y;>U<{57pV9Ydm> z<{(`5f`WWyXV()DXVETPug?^(8KpTkJe=yWa1arpe=~2o_$dqWi0T@EWCFzOtI(*I7(;E$|F2s-y5s~3XREwd3Z=qsSi@f{OBg#=oap^03Zz3GSD7I zCVL_{jlg>Mg!Fj98pcVl84>4J+;4kgVj??2Lm$)jAEm3Yb$0cD2hlR?Y*I5(BkXM1 z0j|~y#wMfrZ)r%VRCQn(Lu(~J8VYA@D|gW4pd1Op%I$Dcm|~0?E>8p8#`$>-Ko&ud z_PEQ|1V2ehRcYysdGKXkg_m(S6sbgcf^jz!4uL12eIE&`p1UQ0~;`SbB; zY(inWblGCqWIHI{LgRQu&YKqZ?Bw z(>m}lC}ynLp!mIU^ES#ZC7XEgVeOnz^kjo`D!eO^_TbD5USWUyOg3CJaxG-K1QKLJ z;e+pDkIN}`Wnbe`Ymy#Zy%{NHf)h{i!p$vE>v>@z3e?erXfZmz>%X~@xSZsa?%WYd#(+#?a=9Oz(8!Ow1=TVTL zManc@)x}>((WuXTd$uq^O(ikHuoY<^eOr*&VeNEqpU!7$X2y?1j`6Cy@jAae3vJ3{ zgqf&IPDeL8Ch>c4B3R1K#`+O8Rk)J;=g!RA*VlV{*eq2#uG`;-iC(i8Y~8D$A!D|3 zwv?8Zma{nNSY_!^U}^Pjo@ww4D*5;PcwK>d1rDkYYA)4~pn|$da5UQ5g!iwUmApED z;XalDPj_}UsyzS-eHl*f^9fu4Ef!YVkoI5U_oXtYhv_zhRAzr4Ud-M!6cpfReN)TD z3*G|;Wc)`0*Qav6O@+$p>Q_6B=jB=qkr5GgwpK~0iRUplOCb-}*0hF)r_Q55hK_cD z3n*1)sRG(t#7GUB=ZNoBzi*qv8%KVJ1M|6+mA<_*FG0#?R8f% z??r(C45m6R)6|q3nv;WCOPooiO;iL8gOGIjOalDQt}fHA=tpEh&OyjGZHTB3Kr zRkBEey9!h6zc=q@OfRFkVG)jjT^`RJ-ig@BX{k9w4rRg1PQ4l^_mfN!Ff`hWCif~# z{8u^`=(=2wT8w}ip|S-szS_c018YeUI9T?*Ga}W7c!zB^UH$)4Y=x3lu)2kVvpMpW zcyFS(XDQ$njTx@z$_$R-qArM=_ncng$_*fPIR7_4K`D!}T9=nny$Yd=MeXLVW`xHf?QB!Odc=OH^|k#BCi- zIM@439fiHgZf7npcYaNr+gE5yik72G8|C(-d`QDy<5XE*u!WiI{@S|RbLXb8rY0EY zAIW70GPMo)n5y3pMm;{<)3eze;8BJ`zm0-mn(dpyw8C%N!_Gmc|;A>g?#~XwQ~lt@ZU~jf>Z&31{f;>N2Kd z0|aBr)#a3`>BoOgqj_s%*y&UZbWZ92HW2-4@yXciGvqjdXDWOhb%tEF>v*HKR6)nM z_fgBHB0Rh+dM+BI8KKmYKrPq_l&~PE%8pLRM)*!;B>#0|{tM8McC2 zSgic~c?(BCj9rX_1H!_h%n@IpUq7*JU;IE7s?=||(lLh0O!Z{cdanP~#rXse56_Cv zij>0(Ti}U;@6a!NI9Y~DNa19$Bm?>Dhv|-jOg0cie0{m=w?&cmU%!eAlvxxM73HC? z%qflzkB^V=zqOW-`pO)Ul8}@-w0K}phCC#7HnazpbjhNzj8aL(KHpr~zpJdZataB? zs-{eqhQmXX88t@dkpbWR?E}d`>w&` z-`wN*qt|{-5*`=OX!$_@TKm0HX$E3!%!v~2h&E$LBA^~WM@M~(jEsuX=`lAQw@dYS z@?0?>C4Rb*&}g#Q7W(!qKrSxo*AH!pzD@ADMYiLDI_{pXo^Sr1dwl%-(^V>12Blgl z-&);8Q`?NED~mpK_YnK6^wF$B;qb$N5TFq;^GMmAYYCCfc*RKaw{6~PYeHSev)yj? zW-CFzUtB8>4V6A(b5S#3^`{#D6%2~kulkGSlOZ_B^e^BjphBLf6UXt;dZZV(E=XBug zz(86?u0W@ZYAMG;)M^L`4I!ZYy>+BUb&)EZ?Gn9o?ug*RlS#$p9+8f+iot;agXg

@R?hf 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

U(4#Evvj{{d_pO6PcF;(g+R&duJ1Y#)n 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 Q<&Uv*v~{tmI_8`7KeYh;)Bpeg literal 0 HcmV?d00001 diff --git a/docs/images/tinahuang.jpg b/docs/images/tinahuang.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3444a1dc42c8e8b39b08c3b6732a57958590358c GIT binary patch literal 6432 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 z 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 uU0en{@Q`<8!ntE;V8IiGndvC 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�ruC-X(jPRgF1 z6`ZfTLJhAcWeKncVLcD?GocN_^8;2Y)!J33qqk6RQ&kzkCMHDJjL%SN21}6QLdqS$ zqDJuD-?7?Hwgpc27sUL#D#C1sVj6|90&%m#N4jE19>3pXYA#!M%|WCe9DT*4{*MHF6BFL#r&Z_1IKYcR?YBtUnd5neqVb*E;LSh z*zdIQPgM~bj*$~*-~nstbyB#dAXY(3tS(k@II+c+tj7)CZ%SJc+Do~7j@6yGYrJ>n zCW%xDy8mPps!p4rBjUVcH7mWNmhiVa42{Idb!Yx-<7Z8N4>R%9*kyUR$JKnU-fF&h zAqO?AVzC*_4VeO^2{onIPW^xq%cefD8I-ZcA)?PMDti28 zv#u<#98E#(A-NhwxKHUYNCpgVVnPBgWu8(zi`vx&a{qi2{S=HwX^?{z)ky@2{N-xl zDE;>_Dp4S@cwKn7o`VlMeC%G(AhYV3C^LuBu$bz(lXFu6hsf!I?qklNc6H`=z5gvg z!I4Xn3B*`7M;xkyr0S;GHBYW`O6vc9!b_{3>D{npi&AmTbhki3V>hbsP%R4(doOYX zKOK1UXP{|K|A)4zn;!pd^O8Pj)?e87HMyR!RPrI-phFjR2KCO0)%V6As)Se^O;FVk<4hCVk^0e|>r{TedSj{koxz#m zTT_K;?=x*@jI!&>JX4KqyI7y=^EQRytp>jQ?-XVe6nser3q6{Qk1&Am$g=pdetc>| zR3_I~T733|nxlv&14e{5gbW%@`-8askK0m(bD49?KPzyyf6<)uT4?*Al`M{?9#MR| z!qSvH;s5t^0{`u|)av&H$6qN7t!=+kC|!hh`c_m6O=MM=_Nb8~SY)sk3lUDC`1Su6bX{RiR1hdhlR-oGM& z9Yp7qauK+BA><}ueOOr7JW6uXFRWZ}88=i@#FScFelgMi?DP3=M~O)fz&sPHUuzTSa-v$Rc&Xe=S|2j#S`=+S7%n z`MoDBJIt_Odj^FChLM?J4aFLW-np1HkiV;QA>RId*N>*gm#JcAs;g@P+$9o0_K#s@ ze_jLr$5jWg)h@VF#<1xd(18hJBR|s8TeU(&WXYdG`(4LI$32VhG{RQZ^_KqYyiyb! zQ~3?+8Cv;*uc~3)lwoOBsf=Qk2NqAy0)#=xDL+AG_U$5~X0o<=ZBf~Vt1uMDUDNhW`vePF>F09iiMi;Rk0 z!sRzlX_!XJdm|k_R#(?9U|BXJ=4PZ_gjg&Yd8D?GECKWVyw?eJFs9iwvic|n zDPI0oysZCUZy7zR [![thetips4you](images/thethips4you.jpg){: style="width:7%"}](https://www.youtube.com/c/Thetips4you) [![cloud learnhub](images/cloud_learn_hub.jpg){: style="width:7%"}](https://www.youtube.com/channel/UC57acx8sCmE7uFHfVMvIlNg) [![John Savill](images/John_Savill.jpg){: style="width:7%"}](https://www.youtube.com/c/NTFAQGuy) [![microservice factory](images/microservice_factory.jpg){: style="width:7%"}](https://www.youtube.com/channel/UCorFV-WGnajyfNu4zPI0AAA) [![kubedb appscode](images/kubedb_logo.jpg){: style="width:7%"}](https://www.youtube.com/c/AppsCodeInc) [![devops toolkit](images/devops_toolkit.jpg){: style="width:7%"}](https://www.youtube.com/c/DevOpsToolkit) [![ansible pilot](images/ansiblepilot.jpg){: style="width:7%"}](https://www.youtube.com/c/AnsiblePilot) [![codelytv](images/codelytv_logo.jpg){: style="width:7%"}](https://www.youtube.com/CodelyTV) [![pelado nerd](images/pelado_nerd.jpg){: style="width:7%"}](https://www.youtube.com/c/PeladoNerd) [![hola mundo](images/hola_mundo.jpg){: style="width:7%"}](https://www.youtube.com/c/HolaMundoDev) [![javier garzas](images/jgarzas.jpg){: style="width:7%"}](https://www.youtube.com/c/JavierGarz%C3%A1s/)
[![london IAC](images/londonIAC.jpg){: style="width:7%"}](https://www.youtube.com/c/LondonIAC) [![techworld nana](images/techworld_nana.jpg){: style="width:7%"}](https://www.youtube.com/c/TechWorldwithNana) [![honeypot](images/honeypot.jpg){: style="width:7%"}](https://www.youtube.com/c/Honeypotio) [![Ali Spittel](images/aspittel.jpg){: style="width:7%"}](https://www.youtube.com/c/AliSpittelDev) [![thomas maurer](images/thomas_maurer.jpg){: style="width:7%"}](https://www.youtube.com/c/ThomasMaurerCloud) [![freecodecamp](images/freecodecamp.jpg){: style="width:7%"}](https://www.youtube.com/c/Freecodecamp) [![thenewstack](images/thenewstack.jpg){: style="width:7%"}](https://www.youtube.com/c/TheNewStack) [![argocd project](images/argoproj.jpg){: style="width:7%"}](https://www.youtube.com/channel/UCOvYmppcbOPm1viN6ust3lA) [![fluxcd](images/fluxcd.jpg){: style="width:7%"}](https://www.youtube.com/channel/UCoZxt-YMhGHb20ZkvcCc5KA) [![container days](images/containerdays.jpg){: style="width:7%"}](https://www.youtube.com/c/ContainerDays) [![the cloud girl](images/thecloudgirl.jpg){: style="width:7%"}](https://www.youtube.com/c/priyankavergadia)
-[![ContinuousDeliveryFoundation](images/ContinuousDeliveryFoundation.jpg){: style="width:7%"}](https://www.youtube.com/c/ContinuousDeliveryFoundation) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) +[![ContinuousDeliveryFoundation](images/ContinuousDeliveryFoundation.jpg){: style="width:7%"}](https://www.youtube.com/c/ContinuousDeliveryFoundation) [![tina huang](images/tinahuang.jpg){: style="width:7%"}](https://www.youtube.com/c/TinaHuang1) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com) [![white square](images/empty_logo.jpg){: style="width:7%"}](https://www.youtube.com)

??? note "Click to expand!" diff --git a/docs/introduction.md b/docs/introduction.md index b389e680..8dbe1a8a 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -187,6 +187,7 @@ * [devops.com: Measuring Technical Debt](https://devops.com/measuring-technical-debt/) * [thenewstack.io: App Modernization: 5 Tips When Migrating to Kubernetes](https://thenewstack.io/app-modernization-5-tips-when-migrating-to-kubernetes/) * [thenewstack.io: Kubernetes and the Next Generation of PaaS](https://thenewstack.io/kubernetes-and-the-next-generation-of-paas/) +* [medium.com/geekculture: A Beginners Guide to Understanding Microservices](https://medium.com/geekculture/a-beginners-guide-to-understanding-microservices-d2a8bae871b7) A high-level overview of the microservices architecture and what it means in plain language understandable by beginners. ## Pets vs Cattle Analogy * [==cloudscaling.com: The History of Pets vs Cattle and How to Use the Analogy Properly==](http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/) diff --git a/docs/java_frameworks.md b/docs/java_frameworks.md index 653741b1..fffea29b 100644 --- a/docs/java_frameworks.md +++ b/docs/java_frameworks.md @@ -176,6 +176,7 @@ optimizing Enterprise Java for the microservices architecture. * [javarevisited.blogspot.com: Spring Boot + Angular Example Tutorial for Java Developers](https://javarevisited.blogspot.com/2022/01/spring-boot-angular-example-tutorial.html#axzz7HV4HFjED) * [piotrminkowski.com: Distributed Transactions in Microservices with Kafka Streams and Spring Boot](https://piotrminkowski.com/2022/01/24/distributed-transactions-in-microservices-with-kafka-streams-and-spring-boot/) * [vladmihalcea.com: Spring Boot Application Properties](https://vladmihalcea.com/spring-boot-application-properties/) +* [javarevisited.blogspot.com: How to log SQL statements in Spring Boot? Example Tutorial](https://javarevisited.blogspot.com/2022/02/how-to-log-sql-statements-in-spring.html) #### SpringBoot with Docker * [spring.io: spring boot with docker](https://spring.io/guides/gs/spring-boot-docker/) diff --git a/docs/kubernetes-releases.md b/docs/kubernetes-releases.md index 8dc3312a..3227d9da 100644 --- a/docs/kubernetes-releases.md +++ b/docs/kubernetes-releases.md @@ -39,4 +39,5 @@ * [kubernetes.io: Kubernetes 1.23: The Next Frontier](https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/) * [loft.sh: Kubernetes 1.23 Release](https://loft.sh/blog/kubernetes-1.23-release/) * [infoq.com: Kubernetes Proceeding with Deprecation of Dockershim in Upcoming 1.24 Release](https://www.infoq.com/news/2022/01/kubernetes-dockershim-removal/) -* [==blog.runx.dev: Will That Kubernetes v1.22 Upgrade Break My Application?==](https://blog.runx.dev/will-that-kubernetes-v1-22-upgrade-break-my-application-cc339dc2e2c7) \ No newline at end of file +* [==blog.runx.dev: Will That Kubernetes v1.22 Upgrade Break My Application?==](https://blog.runx.dev/will-that-kubernetes-v1-22-upgrade-break-my-application-cc339dc2e2c7) +* Concerned about the Dockershim removal in the upcoming Kubernetes 1.24 release? We've updated the faq with additional info, migration guide links and more: http://k8s.io/dockershim \ No newline at end of file diff --git a/docs/kubernetes-troubleshooting.md b/docs/kubernetes-troubleshooting.md index 65bac451..5fdbba76 100644 --- a/docs/kubernetes-troubleshooting.md +++ b/docs/kubernetes-troubleshooting.md @@ -37,6 +37,9 @@ * [containiq.com: Troubleshooting Kubernetes FailedAttachVolume and FailedMount](https://www.containiq.com/post/fixing-kubernetes-failedattachvolume-and-failedmount) When working with Persistent Volumes in Kubernetes, you might run into the FailedAttachVolume or FailedMount error. In this tutorial, we’ll show you how to troubleshoot these errors and find the root cause and fix them. * [==containiq.com: Kubernetes ImagePullBackOff: Troubleshooting With Examples==](https://www.containiq.com/post/kubernetes-imagepullbackoff) If you’ve worked with Kubernetes for a while, chances are good that you have experienced the **ImagePullBackOff** status. This issue can be frustrating if you are unfamiliar with it, so in this guide, you will walk the reader through how to troubleshoot this issue, what some common causes are, and where to start if they encounter this problem. * [medium.com/@andrewachraf: Detect crashes in your Kubernetes cluster using kwatch and Slack 🌟](https://medium.com/@andrewachraf/detect-crashes-in-your-cluster-using-kwatch-an-slack-84b979e93e03) Monitor all changes in your Kubernetes(K8s) cluster & detects crashes in your running apps in real time +* [==research.nccgroup.com: Detection Engineering for Kubernetes clusters==](https://research.nccgroup.com/2021/11/10/detection-engineering-for-kubernetes-clusters/) In this article you will learn how to detect anomalies in your cluster using Kubernetes Audit logs and Anomalies Detection Engineering. +* [pauldally.medium.com: Kubernetes — Debugging NetworkPolicy (Part 1)](https://pauldally.medium.com/debugging-networkpolicy-part-1-249921cdba37) + * [pauldally.medium.com: Kubernetes — Debugging NetworkPolicy (Part 2)](https://pauldally.medium.com/debugging-networkpolicy-part-2-2d5c42d8465c) ## Debugging Techniques and Strategies. Debugging with ephemeral containers - [kubectl-debug](https://github.com/aylei/kubectl-debug) diff --git a/docs/kubernetes.md b/docs/kubernetes.md index 324befa0..2e4a9a3c 100644 --- a/docs/kubernetes.md +++ b/docs/kubernetes.md @@ -511,6 +511,7 @@ * [thenewstack.io: What Does It Take to Manage Hundreds of Kubernetes Clusters?](https://thenewstack.io/what-does-it-take-to-manage-hundreds-of-kubernetes-clusters/) * [medium.com/pareture: Kubernetes Scaling, Capacity and Resource Planning in Complex Clusters](https://medium.com/pareture/kubernetes-scaling-capacity-and-resource-planning-in-complex-clusters-97a6105b43a4) * [blog.runx.dev: 3 Things I Hate About Kubernetes](https://blog.runx.dev/3-things-i-hate-about-kubernetes-49f1656baeaa) +* [devopslearners.com: What is a Kubernetes Ephemeral Container?](https://devopslearners.com/what-is-a-kubernetes-ephemeral-container-aa8ab658755d) ### kubeconfig * [medium: Mastering the KUBECONFIG file](https://medium.com/@ahmetb/mastering-kubeconfig-4e447aa32c75) @@ -759,6 +760,7 @@ * [blog.newrelic.com: Kubernetes Fundamentals, Part 2: How to Use Health Checks](https://blog.newrelic.com/engineering/kubernetes-health-checks) * [komodor.com: Kubernetes Liveness Probes: A Practical Guide](https://komodor.com/learn/kubernetes-liveness-probes-a-practical-guide/) * [martinheinz.dev: Improving Application Availability with Pod Readiness Gates](https://martinheinz.dev/blog/63) Making sure your app running in Kubernetes is available and ready to serve traffic can be easy with Pod liveness and readiness probes. However, not all applications are built to use probes. Is there any solution for when Pod probes aren't enough? +* [==thenewstack.io: Kubernetes Health Checks Using Probes==](https://thenewstack.io/kubernetes-health-checks-using-probes/) ### Kubernetes Limits and Requests * [kubernetes.io Policy Limit Ranges](https://kubernetes.io/docs/concepts/policy/limit-range/) diff --git a/docs/managed-kubernetes-in-public-cloud.md b/docs/managed-kubernetes-in-public-cloud.md index 17d35c67..700c7504 100644 --- a/docs/managed-kubernetes-in-public-cloud.md +++ b/docs/managed-kubernetes-in-public-cloud.md @@ -4,6 +4,7 @@ - [GKE vs EKS vs AKS](#gke-vs-eks-vs-aks) - [Other Managed Kubernetes](#other-managed-kubernetes) - [AWS EKS (Hosted/Managed Kubernetes on AWS)](#aws-eks-hostedmanaged-kubernetes-on-aws) + - [EKS and IaC with Crossplane](#eks-and-iac-with-crossplane) - [AWS EKS Vs ECS Vs Fargate](#aws-eks-vs-ecs-vs-fargate) - [EKS Anywhere (on premises)](#eks-anywhere-on-premises) - [EKS Distro (EKS-D)](#eks-distro-eks-d) @@ -126,7 +127,11 @@ * [==howtoforge.com: How to Create a Kubernetes Cluster with AWS CLI==](https://www.howtoforge.com/how-to-create-a-kubernetes-cluster-with-the-aws-cli/) * [blog.searce.com: Optimise cost for AWS EKS cluster using Spotinst 🌟](https://blog.searce.com/optimize-cost-for-aws-eks-cluster-using-spotinst-ffcebe8e3571) * [thenewstack.io: How We Built Preview Environments on Kubernetes and AWS](https://thenewstack.io/how-we-built-preview-environments-on-kubernetes-and-aws/) + +### EKS and IaC with Crossplane * [==aws.amazon.com: GitOps model for provisioning and bootstrapping Amazon EKS clusters using Crossplane and Argo CD==](https://aws.amazon.com/blogs/containers/gitops-model-for-provisioning-and-bootstrapping-amazon-eks-clusters-using-crossplane-and-argo-cd/) +* [nivogt.medium.com: [IaC] Continuous Delivery with Crossplane and ArgoCD : how to automate the creation of AWS EKS clusters](https://nivogt.medium.com/iac-continuous-delivery-with-crossplane-and-argocd-how-to-automate-the-creation-of-aws-eks-1523ef0e0aa) + ### AWS EKS Vs ECS Vs Fargate * [cloudify.co: AWS EKS Vs. ECS Vs. Fargate: The Breakdown](https://cloudify.co/blog/aws-eks-vs-ecs-vs-fargate/) @@ -280,6 +285,8 @@
+ +
diff --git a/docs/message-queue.md b/docs/message-queue.md index f082ef58..397ea881 100644 --- a/docs/message-queue.md +++ b/docs/message-queue.md @@ -434,7 +434,7 @@ Red Hat AMQ 7|JBoss AMQ 7 (Broker) or Red Hat AMQ 7 Suite|Apache ActiveMQ Artemi - [Dzone: Autoscaling Your Kubernetes Microservice with KEDA](https://dzone.com/articles/autoscaling-your-kubernetes-microservice-with-keda) Introduction to KEDA—event-driven autoscaler for Kubernetes, Apache Camel, and ActiveMQ Artemis—and how to use it to scale a Java microservice on Kubernetes. - [tomd.xyz: Event-driven integration on Kubernetes with Camel & KEDA 🌟](https://tomd.xyz/kubernetes-event-driven-keda/) Can we develop apps in Kubernetes that autoscale based on events? Perhaps, with this example using KEDA, ActiveMQ and Apache Camel. - [faun.pub: Scaling an app in Kubernetes with KEDA (no Prometheus is needed)](https://faun.pub/keda-ec9fc7c8dd81) -- [itnext.io: Event Driven Autoscaling](https://itnext.io/event-driven-autoscaling-503b5cefaa49) +- [itnext.io: Event Driven Autoscaling](https://itnext.io/event-driven-autoscaling-503b5cefaa49) KEDA expands the capabilities of Kubernetes by managing the integration with external sources allowing you to auto-scale your Kubernetes Deployments based on data from both internal and external metrics. ## Integration Platform as a Solution (iPaaS). Platforms for collecting, storing and routing customer event data - [quandarycg.com: Everything You Need To Know About System Integration (And IPaaS) 🌟](https://quandarycg.com/everything-you-need-to-know-about-integrations/) diff --git a/docs/mlops.md b/docs/mlops.md index 33661c40..f2c91d0e 100644 --- a/docs/mlops.md +++ b/docs/mlops.md @@ -35,5 +35,7 @@ + + \ No newline at end of file diff --git a/docs/nosql.md b/docs/nosql.md index 12f2da0a..27680163 100644 --- a/docs/nosql.md +++ b/docs/nosql.md @@ -27,6 +27,7 @@ - [medium: When to Use MongoDB Rather than MySQL](https://medium.com/@rsk.saikrishna/when-to-use-mongodb-rather-than-mysql-d03ceff2e922) - [sysadminxpert.com: Demystifying NoSQL Databases 🌟](https://sysadminxpert.com/demystifying-nosql-databases/) - [datastax.medium.com: SQL versus NoSQL: The Pros and Cons](https://datastax.medium.com/sql-versus-nosql-the-pros-and-cons-488d4a7ba92f) +- [intellipaat.com: NoSQL vs. SQL - Difference between SQL and NoSQL](https://intellipaat.com/blog/nosql-vs-sql-what-is-better/) One has been predominantly used by firms for storing structured data in various forms, while another lets the companies store unstructured and semi-structured data also. Which among them is better and more efficient? Let’s analyze in this blog! ### Couchbase * [wikipedia: Couchbase Server](https://en.wikipedia.org/wiki/Couchbase_Server) @@ -66,6 +67,7 @@ - [datastax.com: Apache Cassandra 4.0 is Now Delivered Via K8ssandra on Amazon EKS](https://www.datastax.com/blog/apache-cassandra-40-now-delivered-k8ssandra-amazon-eks) - [foojay.io: K8ssandra Performance Benchmarks on Cloud Managed Kubernetes](https://foojay.io/today/k8ssandra-performance-benchmarks-on-cloud-managed-kubernetes/) - [datastax.medium.com: We Pushed Helm to the Limit—then Built a Kubernetes Operator](https://datastax.medium.com/we-pushed-helm-to-the-limit-then-built-a-kubernetes-operator-5136f7c71e91) + - [thenewstack.io: How to Run a Cassandra Operation in Docker](https://thenewstack.io/how-to-run-a-cassandra-operation-in-docker/) - [HBase.apache.org](http://hbase.apache.org/) - [Hive.apache.org](https://hive.apache.org/) - [rethinkdb.com](http://rethinkdb.com) diff --git a/docs/other-awesome-lists.md b/docs/other-awesome-lists.md index 1d9ca835..9b23d4e9 100644 --- a/docs/other-awesome-lists.md +++ b/docs/other-awesome-lists.md @@ -136,7 +136,8 @@ - [Awesome Terraform](https://github.com/shuaibiyy/awesome-terraform) ### Security -- [Awesome Security](https://github.com/sbilly/awesome-security) +- [sbilly/awesome-security: Awesome Security](https://github.com/sbilly/awesome-security) +- [myugan/awesome-docker-security: Awesome Docker Security](https://github.com/myugan/awesome-docker-security) A curated list of awesome Docker security resources ### QA - [Awesome Test Automation](https://github.com/atinfo/awesome-test-automation) diff --git a/docs/project-management-methodology.md b/docs/project-management-methodology.md index 9b856ab0..4d176229 100644 --- a/docs/project-management-methodology.md +++ b/docs/project-management-methodology.md @@ -57,6 +57,7 @@ - [infoq.com: Better Metrics for Building High Performance Teams](https://www.infoq.com/articles/better-metrics-team-performance/) - [==noidea.dog/glue: Being Glue==](https://noidea.dog/glue) - [hbr.org: The Real Value of Middle Managers](https://hbr.org/2021/06/the-real-value-of-middle-managers) +- [dev.to: What’s Wrong With Measuring Developer Performance (+ 10 Best Metrics)](https://dev.to/actitime/whats-wrong-with-measuring-developer-performance-10-best-metrics-5620) ### Spanish - [scrum.org: Scrum no es una metodología, es un marco de trabajo](https://www.scrum.org/resources/blog/scrum-no-es-una-metodologia-es-un-marco-de-trabajo) diff --git a/docs/python.md b/docs/python.md index 6b7f351e..adc249ee 100644 --- a/docs/python.md +++ b/docs/python.md @@ -191,6 +191,8 @@ - [==freecodecamp.org: Python Requests – How to Interact with Web Services using Python==](https://www.freecodecamp.org/news/how-to-interact-with-web-services-using-python/) - [thenewstack.io: Guido van Rossum’s Ambitious Plans for Improving Python Performance](https://thenewstack.io/guido-van-rossums-ambitious-plans-for-improving-python-performance/) While Python is a simple language to start with and has excellent support for ML/AI, it is still a slow language which consumes more energy. This means the execution/infra costs are higher. The creator of Python, Guido van Rossum, quit his BDFL (Benevolent Dictator For Life) post at Python (in disgust over PIP 572) and later joined Microsoft. He is reported to be working at making Python 5-fold faster in next few releases. - [towardsdatascience.com: Memory Management in Python](https://towardsdatascience.com/memory-management-in-python-6bea0c8aecc9) How does it work? A list of examples that help. +- [dev.to: python dictionary methods explanation and visualization](https://dev.to/mahmoudessam/python-dictionary-methods-explanation-and-visualization-1l64) +- [medium.com/@florian.rieger: If you haven‘t heard of descriptors, you don‘t know Python](https://medium.com/@florian.rieger/if-you-haven-t-heard-of-descriptors-you-don-t-know-python-1ea4fd1614c2) ## PHP vs Python - [geekflare.com: PHP vs Python: A Comprehensive Comparison](https://geekflare.com/php-vs-python-comparison) diff --git a/docs/recruitment.md b/docs/recruitment.md index 54af042a..633aa671 100644 --- a/docs/recruitment.md +++ b/docs/recruitment.md @@ -194,6 +194,8 @@ + + diff --git a/docs/sre.md b/docs/sre.md index 532cdb80..ec9b4203 100644 --- a/docs/sre.md +++ b/docs/sre.md @@ -113,5 +113,7 @@
+ +
\ No newline at end of file diff --git a/docs/terraform.md b/docs/terraform.md index fb3f12ee..62fa434a 100644 --- a/docs/terraform.md +++ b/docs/terraform.md @@ -185,6 +185,7 @@ * [thenewstack.io: Better Together: Hyper-Converged Kubernetes with Terraform](https://thenewstack.io/better-together-hyper-converged-kubernetes-with-terraform/) * [==AdminTurnedDevOps/Terraform-The-Hard-Way==](https://github.com/AdminTurnedDevOps/Terraform-The-Hard-Way) The most efficient way to learn Terraform for beginners and intermediate practitioners * [acloudguru.com: 5 things we love about Terraform](https://acloudguru.com/blog/engineering/5-things-we-love-about-terraform) +* [==devops.com: How to Migrate Existing Infrastructure to Terraform==](https://devops.com/how-to-migrate-existing-infrastructure-to-terraform/) ### Interview Questions - [interviewbit.com: Terraform Interview Questions](https://www.interviewbit.com/terraform-interview-questions/) @@ -479,6 +480,8 @@ - [hashicorp.com: Rover - Terraform Visualizer](https://www.hashicorp.com/resources/terraform-plan-interactive-configuration-and-state-visualization-with-rover) - [cloudify.co: Cloudify and Terraform Integration. Supercharge Your Terraform Templates](https://cloudify.co/terraform-integration/) Significantly extend Terraform usability with Cloudify's plugin and enjoy end-to-end automation and avoid costly blueprint transformation. - [cloudquery.io: Announcing CloudQuery Terraform Drift Detection](https://www.cloudquery.io/blog/announcing-cloudquery-terraform-drift-detection) +- [run-x/opta: Opta - Supercharge DevOps on any cloud](https://github.com/run-x/opta) Infrastructure-as-code where you work with high-level constructs instead of getting lost in low level cloud configuration + - [cncf.io: Introducing Opta: Terraform on Rails](https://www.cncf.io/blog/2022/02/18/introducing-opta-terraform-on-rails/) ## Terraform Frameworks ### Kubestack Terraform GitOps Framework diff --git a/mkdocs.yml b/mkdocs.yml index 50be3853..16db2ed8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -176,6 +176,7 @@ nav: - YAML and JSON: yaml.md - Databases: - Relational Databases and Database DevOps: databases.md + - Crunchy Data PostgreSQL Operator: crunchydata.md - NoSQL Databases: nosql.md - Data Pipeline: message-queue.md - Service Mesh: @@ -189,6 +190,28 @@ nav: - Edge Computing: edge-computing.md - Cloud Architecture Diagram Tools: cloud-arch-diagrams.md - AWS: aws.md + - AWS Miscellaneous: aws-miscellaneous.md + - AWS Architecture: aws-architecture.md + - AWS Best Practices: aws-best-practices.md + - AWS Migrations: aws-migrations.md + - AWS Networking: aws-networking.md + - AWS Databases: aws-databases.md + - AWS Storage: aws-storage.md + - AWS Security: aws-security.md + - AWS Monitoring: aws-monitoring.md + - AWS IaC: aws-iac.md + - AWS Samples Boilerplates: aws-samples-boilerplates.md + - AWS Tools Scripts: aws-tools-scripts.md + - AWS Data: aws-data.md + - AWS DevOps: aws-devops.md + - AWS Serverless: aws-serverless.md + - AWS Pricing: aws-pricing.md + - AWS Containers: aws-containers.md + - AWS Backup: aws-backup.md + - AWS Training: aws-training.md + - AWS Certification: aws-certification.md + - AWS New Features: aws-newfeatures.md + - AWS Spain: aws-spain.md - Google Cloud Platform: GoogleCloudPlatform.md - Microsoft Azure: azure.md - IBM & IBM Cloud: ibm_cloud.md @@ -205,7 +228,7 @@ nav: - Websites for web developers: devel-sites.md - Angular: angular.md - Document Object Model (DOM): dom.md - - Go: golang.md + - Golang: golang.md - JavaScript - node.js & npm: javascript.md - Python - Django & Flask: python.md - Low Code and No Code: lowcode-nocode.md