We recently moved our main applications from Heroku to Kubernetes . The 3 main driving factors behind the switch were scalability (database size limits), security (the inability to set up PostgreSQL instances in private networks), and costs (GCP is cheaper for raw computing resources). \r\n\r\n

We prefer using managed services, so we are using Google Kubernetes Engine with Google Cloud SQL for PostgreSQL for our PostgreSQL databases and Google Cloud Memorystore for Redis . For our CI/CD pipeline, we are using CircleCI and Google Cloud Build to deploy applications managed with Helm . The new infrastructure is managed with Terraform .\r\n\r\n

Read the blog post to go more in depth.","private":false,"viewCount":1548497,"publishedAt":"2019-04-08T20:15:00Z","upvotesCount":20,"decisionType":"migration","fromTools":[{"type":"id","generated":false,"id":"Tool:101231773470689784","typename":"Tool"}],"toTools":[{"type":"id","generated":false,"id":"Tool:101231774087656167","typename":"Tool"}],"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231773470689784","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774087656167","typename":"Tool"}],"services":[{"type":"id","generated":false,"id":"Tool:101231773470689784","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774206661614","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774087656167","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776793553849","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773853533403","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231777912408415","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773854768982","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773501041914","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231778086278044","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776419588718","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$StackDecision:101892392595322895.company":{"imageUrl":"https://img.stackshare.io/company/482/default_65113ae34bd00706ed1cf546cf70466c17bd4f31.jpg","thumbUrl":"https://img.stackshare.io/company/482/thumb_65113ae34bd00706ed1cf546cf70466c17bd4f31.jpg","name":"Rainforest QA","path":"/companies/rainforest-qa","features":[],"__typename":"Company"},"$StackDecision:101892392595322895.link":{"url":"https://www.rainforestqa.com/blog/2019-04-02-why-we-moved-from-heroku-to-google-kubernetes-engine/","title":"Why Rainforest QA Moved from Heroku to Google Kubernetes Engine","__typename":"Link"},"Tool:101231773470689784":{"id":"101231773470689784","name":"Heroku","slug":"heroku","title":"Build, deliver, monitor and scale web apps and APIs with a trail blazing developer experience.","verified":true,"imageUrl":"https://img.stackshare.io/service/133/3wgIDj3j.png","canonicalUrl":"/heroku","path":"/heroku","votes":3208,"fans":25161,"stacks":25523,"followingTool":false,"followContext":null,"__typename":"Tool","thumbUrl":"https://img.stackshare.io/service/133/thumb_3wgIDj3j.png","thumbRetinaUrl":"https://img.stackshare.io/service/133/thumb_retina_3wgIDj3j.png"},"Tool:101231774087656167":{"id":"101231774087656167","name":"Google Kubernetes Engine","slug":"google-kubernetes-engine","title":"Deploy, manage, and scale containerized applications on Kubernetes, powered by Google Cloud","verified":true,"imageUrl":"https://img.stackshare.io/service/1587/s01TMTGn.png","canonicalUrl":"/google-kubernetes-engine","path":"/google-kubernetes-engine","votes":78,"fans":1107,"stacks":1140,"followingTool":false,"followContext":null,"__typename":"Tool","thumbUrl":"https://img.stackshare.io/service/1587/thumb_s01TMTGn.png"},"Tool:101231776793553849":{"name":"Google Cloud SQL for PostgreSQL","path":"/google-cloud-sql-for-postgresql","id":"101231776793553849","imageUrl":"https://img.stackshare.io/service/6671/sql.png","thumbUrl":"https://img.stackshare.io/service/6671/thumb_sql.png","stacks":145,"fans":136,"votes":0,"followingTool":false,"__typename":"Tool"},"Tool:101231777912408415":{"name":"Google Cloud Memorystore","path":"/google-cloud-memorystore","id":"101231777912408415","imageUrl":"https://img.stackshare.io/service/8947/PoHJY3K8_400x400.jpg","thumbUrl":"https://img.stackshare.io/service/8947/thumb_PoHJY3K8_400x400.jpg","stacks":156,"fans":164,"votes":0,"followingTool":false,"__typename":"Tool"},"Tool:101231778086278044":{"name":"Google Cloud Build","path":"/google-cloud-build","id":"101231778086278044","imageUrl":"https://img.stackshare.io/service/9309/PoHJY3K8_400x400.jpg","thumbUrl":"https://img.stackshare.io/service/9309/thumb_PoHJY3K8_400x400.jpg","stacks":492,"fans":320,"votes":4,"followingTool":false,"__typename":"Tool"},"Tool:101231776419588718":{"name":"Helm","path":"/helm","id":"101231776419588718","imageUrl":"https://img.stackshare.io/package_manager/5983/default_339a3dd6beb63de6d3ff804a4e676ae114919d80.jpg","thumbUrl":"https://img.stackshare.io/package_manager/5983/thumb_339a3dd6beb63de6d3ff804a4e676ae114919d80.jpg","stacks":1391,"fans":1339,"votes":18,"followingTool":false,"__typename":"Tool"},"$Tool:101231773970332063.stackDecisions({\"first\":6}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:101892392595322895","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:102182841808695342":{"id":"102182841808695342","username":"sungchun12","title":"","companyName":"","imageUrl":"https://img.stackshare.io/user/296875/default_a070a5411aacdfce03dc33d2977d0d73715c4049.png","thumbUrl":"https://img.stackshare.io/user/296875/thumb_a070a5411aacdfce03dc33d2977d0d73715c4049.png","displayName":"Sung Won Chung","__typename":"User"},"StackDecision:103080800236049641":{"user":{"type":"id","generated":false,"id":"User:102182841808695342","typename":"User"},"company":null,"link":{"type":"id","generated":true,"id":"$StackDecision:103080800236049641.link","typename":"Link"},"publicId":"103080800236049641","id":"103080800236049641","htmlContent":"

Context: I wanted to create an end to end IoT data pipeline simulation in Google Cloud IoT Core and other GCP services. I never touched Terraform meaningfully until working on this project, and it's one of the best explorations in my development career. The documentation and syntax is incredibly human-readable and friendly. I'm used to building infrastructure through the google apis via Python , but I'm so glad past Sung did not make that decision. I was tempted to use Google Cloud Deployment Manager, but the templates were a bit convoluted by first impression. I'm glad past Sung did not make this decision either.\n\n

Solution: Leveraging Google Cloud Build Google Cloud Run Google Cloud Bigtable Google BigQuery Google Cloud Storage Google Compute Engine along with some other fun tools, I can deploy over 40 GCP resources using Terraform!\n\n

Check Out My Architecture: CLICK ME\n\n

Check out the GitHub repo attached","private":false,"viewCount":1957599,"publishedAt":"2019-11-04T17:23:06Z","upvotesCount":33,"decisionType":"tool","fromTools":[{"type":"id","generated":false,"id":"Tool:101231776857758559","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"}],"toTools":[{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"}],"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776857758559","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"}],"services":[{"type":"id","generated":false,"id":"Tool:101231777276974436","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776857758559","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231778086278044","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101926994197858823","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774691530681","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773713150436","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773712725009","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773649935410","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773410696721","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$StackDecision:103080800236049641.link":{"url":"https://github.com/sungchun12/iot-python-webapp","title":"GitHub - sungchun12/iot-python-webapp: Live, real-time dashboard in a serverless docker web app, and deployed via terraform with a built-in CICD trigger-See Mock Website","__typename":"Link"},"Tool:101231776857758559":{"id":"101231776857758559","name":"Google Cloud Deployment Manager","slug":"google-cloud-deployment-manager","title":"Create and manage cloud resources with simple templates","verified":true,"imageUrl":"https://img.stackshare.io/service/6810/deployment-manager-3.png","canonicalUrl":"/google-cloud-deployment-manager","path":"/google-cloud-deployment-manager","votes":5,"fans":117,"stacks":26,"followingTool":false,"followContext":null,"__typename":"Tool","thumbUrl":"https://img.stackshare.io/service/6810/thumb_deployment-manager-3.png"},"Tool:101231777276974436":{"name":"Google Cloud IoT Core","path":"/google-cloud-iot-core","id":"101231777276974436","imageUrl":"https://img.stackshare.io/service/7702/cloud-iot-core.png","thumbUrl":"https://img.stackshare.io/service/7702/thumb_cloud-iot-core.png","stacks":44,"fans":111,"votes":0,"followingTool":false,"__typename":"Tool"},"Tool:101926994197858823":{"name":"Google Cloud Run","path":"/google-cloud-run","id":"101926994197858823","imageUrl":"https://img.stackshare.io/service/10762/google-cloud-run-logo.png","thumbUrl":"https://img.stackshare.io/service/10762/thumb_google-cloud-run-logo.png","stacks":268,"fans":325,"votes":62,"followingTool":false,"__typename":"Tool"},"Tool:101231774691530681":{"name":"Google Cloud Bigtable","path":"/google-cloud-bigtable","id":"101231774691530681","imageUrl":"https://img.stackshare.io/service/2977/Cloud-Bigtable.png","thumbUrl":"https://img.stackshare.io/service/2977/thumb_Cloud-Bigtable.png","stacks":138,"fans":415,"votes":25,"followingTool":false,"__typename":"Tool"},"Tool:101231773713150436":{"name":"Google BigQuery","path":"/google-bigquery","id":"101231773713150436","imageUrl":"https://img.stackshare.io/service/695/BigQuery.png","thumbUrl":"https://img.stackshare.io/service/695/thumb_BigQuery.png","stacks":1679,"fans":1838,"votes":152,"followingTool":false,"__typename":"Tool"},"Tool:101231773712725009":{"name":"Google Cloud Storage","path":"/google-cloud-storage","id":"101231773712725009","imageUrl":"https://img.stackshare.io/service/694/Cloud_Storage.png","thumbUrl":"https://img.stackshare.io/service/694/thumb_Cloud_Storage.png","stacks":1706,"fans":1560,"votes":75,"followingTool":false,"__typename":"Tool"},"Tool:101231773649935410":{"name":"Google Compute Engine","path":"/google-compute-engine","id":"101231773649935410","imageUrl":"https://img.stackshare.io/service/518/s01TMTGn.png","thumbUrl":"https://img.stackshare.io/service/518/thumb_s01TMTGn.png","stacks":12204,"fans":11569,"votes":423,"followingTool":false,"__typename":"Tool","thumbRetinaUrl":"https://img.stackshare.io/service/518/thumb_retina_s01TMTGn.png","slug":"google-compute-engine"},"$Tool:101231773970332063.stackDecisions({\"first\":6}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:103080800236049641","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:101232078214123803":{"id":"101232078214123803","username":"pedroarnal","title":"CTO","companyName":"La Cupula Music SL","imageUrl":"https://img.stackshare.io/user/172401/default_517abb11b81db1713b606bbae3104561eaa58f9e.jpeg","thumbUrl":"https://img.stackshare.io/user/172401/thumb_517abb11b81db1713b606bbae3104561eaa58f9e.jpeg","displayName":"Pedro Arnal Puente","__typename":"User"},"StackDecision:102413413121423568":{"user":{"type":"id","generated":false,"id":"User:101232078214123803","typename":"User"},"company":{"type":"id","generated":true,"id":"$StackDecision:102413413121423568.company","typename":"Company"},"link":null,"publicId":"102413413121423568","id":"102413413121423568","htmlContent":"

Our base infrastructure is composed of Debian based servers running in Amazon EC2 , asset storage with Amazon S3 , and Amazon RDS for Aurora and Redis under Amazon ElastiCache for data storage.\n\n

We are starting to work in automated provisioning and management with Terraform.","private":false,"viewCount":647590,"publishedAt":"2019-07-09T20:37:45Z","upvotesCount":8,"decisionType":"freeform","fromTools":[],"toTools":[],"subjectTools":[],"services":[{"type":"id","generated":false,"id":"Tool:101231774115728230","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774222037205","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773854768982","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773616958547","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$StackDecision:102413413121423568.company":{"imageUrl":"https://img.stackshare.io/company/24730/default_bdb6702c2b2b7b85258260c9c64138f469b19368.jpeg","thumbUrl":"https://img.stackshare.io/company/24730/thumb_bdb6702c2b2b7b85258260c9c64138f469b19368.jpeg","name":"SonoSuite","path":"/companies/sonosuite","features":[],"__typename":"Company"},"Tool:101231774115728230":{"name":"Debian","path":"/debian","id":"101231774115728230","imageUrl":"https://img.stackshare.io/service/1656/vd4gAekh.png","thumbUrl":"https://img.stackshare.io/service/1656/thumb_vd4gAekh.png","stacks":15996,"fans":13857,"votes":164,"followingTool":false,"__typename":"Tool"},"Tool:101231774222037205":{"name":"Amazon Aurora","path":"/amazon-aurora","id":"101231774222037205","imageUrl":"https://img.stackshare.io/service/1924/default_437b69de1bb8ef0ec297028e3caf75d539536eed.png","thumbUrl":"https://img.stackshare.io/service/1924/thumb_437b69de1bb8ef0ec297028e3caf75d539536eed.png","stacks":808,"fans":946,"votes":55,"followingTool":false,"__typename":"Tool"},"Tool:101231773616958547":{"name":"Amazon ElastiCache","path":"/amazon-elasticache","id":"101231773616958547","imageUrl":"https://img.stackshare.io/service/392/amazon-elasticache.png","thumbUrl":"https://img.stackshare.io/service/392/thumb_amazon-elasticache.png","stacks":1324,"fans":1319,"votes":151,"followingTool":false,"__typename":"Tool"},"$Tool:101231773970332063.stackDecisions({\"first\":6}).edges.2":{"node":{"type":"id","generated":false,"id":"StackDecision:102413413121423568","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:101232084434873139":{"id":"101232084434873139","username":"praveenm","title":"Engineering Manager","companyName":"Taylor and Francis","imageUrl":"https://img.stackshare.io/user/184805/default_8f070c83259657b92042275d398fe014873e73aa.jpeg","thumbUrl":"https://img.stackshare.io/user/184805/thumb_8f070c83259657b92042275d398fe014873e73aa.jpeg","displayName":"Praveen Mooli","__typename":"User"},"StackDecision:102523983538702954":{"user":{"type":"id","generated":false,"id":"User:101232084434873139","typename":"User"},"company":null,"link":null,"publicId":"102523983538702954","id":"102523983538702954","htmlContent":"

We are in the process of building a modern content platform to deliver our content through various channels. We decided to go with Microservices architecture as we wanted scale. Microservice architecture style is an approach to developing an application as a suite of small independently deployable services built around specific business capabilities. You can gain modularity, extensive parallelism and cost-effective scaling by deploying services across many distributed servers. Microservices modularity facilitates independent updates/deployments, and helps to avoid single point of failure, which can help prevent large-scale outages.\nWe also decided to use Event Driven Architecture pattern which is a popular distributed asynchronous architecture pattern used to produce highly scalable applications. The event-driven architecture is made up of highly decoupled, single-purpose event processing components that asynchronously receive and process events.\n\n

To build our #Backend capabilities we decided to use the following:\n1. #Microservices - Java with Spring Boot , Node.js with ExpressJS and Python with Flask \n2. #Eventsourcingframework - Amazon Kinesis , Amazon Kinesis Firehose , Amazon SNS , Amazon SQS, AWS Lambda \n3. #Data - Amazon RDS , Amazon DynamoDB , Amazon S3 , MongoDB Atlas \n\n

To build #Webapps we decided to use Angular 2 with RxJS \n\n

#Devops - GitHub , Travis CI , Terraform , Docker , Serverless ","private":false,"viewCount":4010483,"publishedAt":"2019-07-29T09:17:15Z","upvotesCount":19,"decisionType":"freeform","fromTools":[],"toTools":[],"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231773669807419","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773636491087","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773410696721","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775927452566","typename":"Tool"}],"services":[{"type":"id","generated":false,"id":"Tool:101231773840406851","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776297440807","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773838011785","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774666323920","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773845103618","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773920953695","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773632626053","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775186090046","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773618592622","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773618167288","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774215979427","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775174055327","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774170220209","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773410696721","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773636491087","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773669807419","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775927452566","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773523090140","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773615579247","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"}],"topics":[{"type":"id","generated":false,"id":"Topic:101231988901054690","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988911787479","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101348076767785781","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101348393685875978","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988857851707","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101910501640308173","typename":"Topic"}],"__typename":"StackDecision"},"Tool:101231773636491087":{"id":"101231773636491087","name":"Travis CI","slug":"travis-ci","title":"A hosted continuous integration service for open source and private projects","verified":true,"imageUrl":"https://img.stackshare.io/service/460/Lu6cGu0z_400x400.png","canonicalUrl":"/travis-ci","path":"/travis-ci","votes":1749,"fans":9387,"stacks":26379,"followingTool":false,"followContext":null,"__typename":"Tool","thumbUrl":"https://img.stackshare.io/service/460/thumb_Lu6cGu0z_400x400.png"},"Tool:101231775927452566":{"id":"101231775927452566","name":"Serverless","slug":"serverless","title":"The most widely-adopted toolkit for building serverless applications","verified":false,"imageUrl":"https://img.stackshare.io/service/5095/serverless-logo.png","canonicalUrl":"/serverless","path":"/serverless","votes":26,"fans":1539,"stacks":1334,"followingTool":false,"followContext":null,"__typename":"Tool","thumbUrl":"https://img.stackshare.io/service/5095/thumb_serverless-logo.png"},"Tool:101231773840406851":{"name":"Flask","path":"/flask","id":"101231773840406851","imageUrl":"https://img.stackshare.io/service/1001/default_6d109315b60108628b7cd3e159b84645c31ef0e2.png","thumbUrl":"https://img.stackshare.io/service/1001/thumb_6d109315b60108628b7cd3e159b84645c31ef0e2.png","stacks":19014,"fans":19615,"votes":66,"followingTool":false,"__typename":"Tool"},"Tool:101231776297440807":{"name":"MongoDB Atlas","path":"/mongodb-atlas","id":"101231776297440807","imageUrl":"https://img.stackshare.io/service/5739/atlas-360x360.png","thumbUrl":"https://img.stackshare.io/service/5739/thumb_atlas-360x360.png","stacks":843,"fans":1151,"votes":34,"followingTool":false,"__typename":"Tool"},"Tool:101231774666323920":{"name":"Spring Boot","path":"/spring-boot","id":"101231774666323920","imageUrl":"https://img.stackshare.io/service/2927/nPzvMuo2_400x400.png","thumbUrl":"https://img.stackshare.io/service/2927/thumb_nPzvMuo2_400x400.png","stacks":25973,"fans":27683,"votes":1012,"followingTool":false,"__typename":"Tool"},"Tool:101231773920953695":{"name":"ExpressJS","path":"/expressjs","id":"101231773920953695","imageUrl":"https://img.stackshare.io/service/1163/hashtag.png","thumbUrl":"https://img.stackshare.io/service/1163/thumb_hashtag.png","stacks":32017,"fans":28974,"votes":1617,"followingTool":false,"__typename":"Tool"},"Tool:101231775186090046":{"name":"Amazon Kinesis Firehose","path":"/amazon-kinesis-firehose","id":"101231775186090046","imageUrl":"https://img.stackshare.io/service/3770/amazon-kinesis.png","thumbUrl":"https://img.stackshare.io/service/3770/thumb_amazon-kinesis.png","stacks":234,"fans":238,"votes":0,"followingTool":false,"__typename":"Tool"},"Tool:101231773618592622":{"name":"Amazon SNS","path":"/amazon-sns","id":"101231773618592622","imageUrl":"https://img.stackshare.io/service/396/amazon-sns.png","thumbUrl":"https://img.stackshare.io/service/396/thumb_amazon-sns.png","stacks":1386,"fans":1565,"votes":18,"followingTool":false,"__typename":"Tool"},"Tool:101231773618167288":{"name":"Amazon SQS","path":"/amazon-sqs","id":"101231773618167288","imageUrl":"https://img.stackshare.io/service/395/amazon-sqs.png","thumbUrl":"https://img.stackshare.io/service/395/thumb_amazon-sqs.png","stacks":2235,"fans":2512,"votes":171,"followingTool":false,"__typename":"Tool"},"Tool:101231775174055327":{"name":"Angular","path":"/angular","id":"101231775174055327","imageUrl":"https://img.stackshare.io/service/3745/cb8U-gL6_400x400.jpg","thumbUrl":"https://img.stackshare.io/service/3745/thumb_cb8U-gL6_400x400.jpg","stacks":1835,"fans":5362,"votes":499,"followingTool":false,"__typename":"Tool"},"Tool:101231774170220209":{"name":"RxJS","path":"/rxjs","id":"101231774170220209","imageUrl":"https://img.stackshare.io/service/1796/984368.png","thumbUrl":"https://img.stackshare.io/service/1796/thumb_984368.png","stacks":2127,"fans":1163,"votes":21,"followingTool":false,"__typename":"Tool"},"Tool:101231773615579247":{"name":"Amazon DynamoDB","path":"/amazon-dynamodb","id":"101231773615579247","imageUrl":"https://img.stackshare.io/service/389/amazon-dynamodb.png","thumbUrl":"https://img.stackshare.io/service/389/thumb_amazon-dynamodb.png","stacks":3708,"fans":4020,"votes":195,"followingTool":false,"__typename":"Tool"},"Topic:101231988901054690":{"name":"Backend","id":"101231988901054690","__typename":"Topic"},"Topic:101231988911787479":{"name":"Microservices","id":"101231988911787479","__typename":"Topic"},"Topic:101348076767785781":{"name":"Eventsourcingframework","id":"101348076767785781","__typename":"Topic"},"Topic:101348393685875978":{"name":"Webapps","id":"101348393685875978","__typename":"Topic"},"Topic:101231988857851707":{"name":"Devops","id":"101231988857851707","__typename":"Topic"},"Topic:101910501640308173":{"name":"Data","id":"101910501640308173","__typename":"Topic"},"$Tool:101231773970332063.stackDecisions({\"first\":6}).edges.3":{"node":{"type":"id","generated":false,"id":"StackDecision:102523983538702954","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:103684953019409595":{"id":"103684953019409595","username":"tompattison5226","title":null,"companyName":null,"imageUrl":"https://img.stackshare.io/user/392652/default_f32d96a9de573dede1158dd04d2753b57dbd6d63.jpg","thumbUrl":"https://img.stackshare.io/user/392652/thumb_f32d96a9de573dede1158dd04d2753b57dbd6d63.jpg","displayName":"Tom Pattison","__typename":"User"},"StackDecision:103832323315470580":{"user":{"type":"id","generated":false,"id":"User:103684953019409595","typename":"User"},"company":{"type":"id","generated":true,"id":"$StackDecision:103832323315470580.company","typename":"Company"},"link":{"type":"id","generated":true,"id":"$StackDecision:103832323315470580.link","typename":"Link"},"publicId":"103832323315470580","id":"103832323315470580","htmlContent":"

Terraform Preferred for infrastructure-as-code (IAC), deploying infrastructure to AWS.","private":false,"viewCount":48900,"publishedAt":"2020-03-16T10:45:18Z","upvotesCount":1,"decisionType":"protip","fromTools":[],"toTools":[],"subjectTools":[{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"}],"services":[{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$StackDecision:103832323315470580.company":{"imageUrl":"https://img.stackshare.io/company/41300/default_e60c3989b0c9997530ec61f58aa1bebf9a343b81.png","thumbUrl":"https://img.stackshare.io/company/41300/thumb_e60c3989b0c9997530ec61f58aa1bebf9a343b81.png","name":"Checkout-com","path":"/companies/checkout-com","features":[],"__typename":"Company"},"$StackDecision:103832323315470580.link":{"url":"https://www.checkout.com/blog","title":"The latest in payments technology and company news | Checkout.com","__typename":"Link"},"$Tool:101231773970332063.stackDecisions({\"first\":6}).edges.4":{"node":{"type":"id","generated":false,"id":"StackDecision:103832323315470580","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:104211572134678860":{"id":"104211572134678860","username":"ydbhondekar2407","title":"Product Manager | SaaS | Traveller","companyName":"","imageUrl":"https://img.stackshare.io/user/601091/default_de1eb7053fffbc6c76e6d2752d994e9437a7e495.jpg","thumbUrl":"https://img.stackshare.io/user/601091/thumb_de1eb7053fffbc6c76e6d2752d994e9437a7e495.jpg","displayName":"Yogesh Bhondekar","__typename":"User"},"StackDecision:104284687365973556":{"user":{"type":"id","generated":false,"id":"User:104211572134678860","typename":"User"},"company":null,"link":null,"publicId":"104284687365973556","id":"104284687365973556","htmlContent":"

Hi,\nI am building an enhanced web-conferencing app that will have a voice/video call, live chats, live notifications, live discussions, screen sharing, etc features. Ref: Zoom.\n\n

I need advise finalizing the tech stack for this app. I am considering below tech stack:\n\n