{"id":16925281,"url":"https://github.com/kthy/3pe-iaas-poc","last_synced_at":"2026-04-09T19:47:22.761Z","repository":{"id":118597720,"uuid":"259886766","full_name":"kthy/3pe-iaas-poc","owner":"kthy","description":"A hobby project to try out Terraform, AWS and Github Actions","archived":false,"fork":false,"pushed_at":"2020-05-14T09:04:47.000Z","size":693,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-25T21:56:09.619Z","etag":null,"topics":["aws-lambda","csharp","github-actions","golang","hobby-project","html5","java","nodejs","plotly","python","ruby","terraform","vuejs"],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kthy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-29T09:50:42.000Z","updated_at":"2020-05-14T09:04:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"668452b1-8f84-4bc9-b610-e78c96d9557a","html_url":"https://github.com/kthy/3pe-iaas-poc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kthy%2F3pe-iaas-poc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kthy%2F3pe-iaas-poc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kthy%2F3pe-iaas-poc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kthy%2F3pe-iaas-poc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kthy","download_url":"https://codeload.github.com/kthy/3pe-iaas-poc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244719871,"owners_count":20498728,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-lambda","csharp","github-actions","golang","hobby-project","html5","java","nodejs","plotly","python","ruby","terraform","vuejs"],"created_at":"2024-10-13T20:09:20.687Z","updated_at":"2025-12-30T18:52:25.541Z","avatar_url":"https://github.com/kthy.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [🕄]\n\n![Double triangular probability distribution function][dtpdf]\n\n3PE IaaS PoC: a [three-point estimation][1] calculator (but with [proper\ncalculations for the double-triangular distribution][2] instead of the\nsimplified hogwash on Wikipedia) showcasing automatic provisioning and\ndeployment.\n\nA hobby project to try out [Vagrant], [Terraform], [AWS] and\n[Github Actions].\n\n---\n\n## ⚠️ WIP ⚠️\n\nThis is a work in progress. By one person. In his spare time. **Caveat emptor!**\n\n---\n\n## Frontend\n\n* HTML5 SPA ([12-Factor]) built with [Bootstrap].\n  * Color palette: https://coolors.co/334139-533b4d-b5dfaf-e574bc-f51aa4\n  * Simple table with functionality:\n    * Add row with work package name.\n    * Update row with best-case, most-likely, worst-case estimates.\n    * Delete row.\n  * Output below table:\n    * Best estimate (95% confidence interval).\n    * [Plotly] box plot of confidence intervals.\n  * Button to select Lambda backend.\n* Data stored in browser local storage or [Redis] (user choice).\n* Load estimate from URL slug.\n* Send estimate as permalink in an email.\n* Served by an [nginx] container running in Amazon EC2.\n* Some functionality available offline with [UpUp].\n\n## Backend\n\n* Calculates a three-point estimate based on an array of three-tuples.\n* Implemented in Java, Go, Node.js, C#, Python and Ruby. Perl?\n* Deployed as AWS Lambda functions.\n\n## Other services\n\n* [Mailgun] to send the estimate to a friend.\n* [Open Distro for Elasticsearch] (on Amazon) for logging.\n* [Sonarcloud] for static code analysis and QA.\n\n---\n\n## Baby Steps\n\n### 0. Prerequisites\n\nThis guide assumes you have\n\n* Windows 10 Pro,\n* [Hyper-V enabled][3] and configured with a virtual bridge, and\n* [Vagrant] 2.2.x installed.\n\nIf you want to use Vagrant Share, you also need the [ngrok] executable somewhere\non your `%PATH%`.\n\n### 1. Vagrant\n\nVagrant is used to create a consistent development environment. Before the first\nrun — which will provision the developer VM — you need to fill in the missing\nvalues in the `.env.template` file and rename it to `.env`. Enter your Windows\nusername as `user@domain`. Pick a canonical timezone name from the [tzdata list]\nas the value for `TZ`, or remove the key to run the environment on UTC.\n\nThe development VM is an [Alpine] 3.11 image with an nginx web server serving\nthe `frontend` directory through a symlink, configured in the `Vagrantfile`.\nIf the `AWS_*` keys are set in your `.env` file, it will also have the AWS CLI\ninstalled.\n\nTo launch and use the developer VM, now simply `vagrant up` in the root dir.\nWhen the guest VM is ready, open the URL in the last line of the install log in\na browser on your host machine to verify that you can access the web server.\n\nYou can now edit the code in the `frontend` directory and immediately see your\nchanges in the browser (F5, natch).\n\n\u003c!--\nTo share your dev web server with the world through Vagrant Share, just\n`vagrant share --http 4567`.\n--\u003e\n\n### 2. AWS\n\nTo run the **λ** functions you need an execution role. Open the [roles page] in\nthe IAM console and click *Create role*:\n\n* Choose the Lambda use case\n* Pick **AWSLambdaBasicExecutionRole**\n* No tags\n* Name the role `lambda-execution-role`\n\n### AWS\n\n* `eu-north-1`\n* `ami-09c69c3a9e3578c8d`\n\n[1]:https://en.wikipedia.org/wiki/Three-point_estimation\n[2]:https://www.mhnederlof.nl/doubletriangular.html\n[3]:https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v\n[12-Factor]:https://12factor.net/\n[AWS]:https://aws.amazon.com/\n[Bootstrap]:https://getbootstrap.com/\n[dtpdf]:http://www.mhnederlof.nl/images/doubletriangular.jpg\n[Github Actions]:https://github.com/features/actions\n[Mailgun]:https://mailgun.com/\n[nginx]:https://nginx.com/\n[ngrok]:https://ngrok.com/\n[Open Distro for Elasticsearch]:https://opendistro.github.io/for-elasticsearch/\n[Plotly]:https://plotly.com/javascript/box-plots/\n[Redis]:https://redis.io/\n[roles page]:https://console.aws.amazon.com/iam/home#/roles\n[Sonarcloud]:https://sonarcloud.io/\n[Terraform]:https://terraform.io/\n[tzdata list]:https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\n[UpUp]:https://github.com/TalAter/UpUp\n[Vagrant]:https://www.vagrantup.com/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkthy%2F3pe-iaas-poc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkthy%2F3pe-iaas-poc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkthy%2F3pe-iaas-poc/lists"}