{"id":15630598,"url":"https://github.com/afeld/tech-foundations","last_synced_at":"2026-01-20T05:02:47.452Z","repository":{"id":213914409,"uuid":"735248797","full_name":"afeld/tech-foundations","owner":"afeld","description":"Columbia SPS Operations Management in IT course","archived":false,"fork":false,"pushed_at":"2024-03-25T22:22:56.000Z","size":283,"stargazers_count":2,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-04-08T17:10:08.833Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":false,"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/afeld.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2023-12-24T07:59:57.000Z","updated_at":"2024-05-30T04:07:56.462Z","dependencies_parsed_at":"2024-01-27T20:21:16.220Z","dependency_job_id":"e6363b1d-86e7-4181-b2c7-7bde14c4e2da","html_url":"https://github.com/afeld/tech-foundations","commit_stats":null,"previous_names":["afeld/tech-foundations"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/afeld/tech-foundations","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afeld%2Ftech-foundations","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afeld%2Ftech-foundations/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afeld%2Ftech-foundations/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afeld%2Ftech-foundations/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/afeld","download_url":"https://codeload.github.com/afeld/tech-foundations/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afeld%2Ftech-foundations/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28596087,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T02:08:49.799Z","status":"ssl_error","status_checked_at":"2026-01-20T02:08:44.148Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-10-03T10:33:32.551Z","updated_at":"2026-01-20T05:02:47.435Z","avatar_url":"https://github.com/afeld.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Operations Management in IT course\n\nThis repository uses [Terraform](https://www.terraform.io/) to set up Google Cloud for the Columbia University's [Operations Management in IT](https://doc.sis.columbia.edu/#subj/TMGT/PS5120-20241-001/) course. Using a list of student and instructor IDs ([UNIs](https://www.cuit.columbia.edu/my-uni)), it provisions [Projects](https://cloud.google.com/docs/overview#projects) for each, granting access to the instructor and Associates (a.k.a. teaching assistants) via [IAM](https://cloud.google.com/security/products/iam).\n\n## Course setup\n\nThis only needs to be done once per semester, by whichever instructor is managing Google Cloud.\n\n1. If the number of students+instructors is larger than 20, [request a Project Quota increase](https://support.google.com/code/contact/project_quota_increase)\n1. [Install Terraform](https://developer.hashicorp.com/terraform/install)\n1. [Install `gcloud`](https://cloud.google.com/sdk/docs/install)\n1. Set up `gcloud`:\n\n   ```sh\n   gcloud auth application-default login\n   gcloud config set project columbia-sps-tech-foundations\n   gcloud auth application-default set-quota-project columbia-sps-tech-foundations\n   ```\n\n1. Download the student list\n   1. Go to the [SSOL](https://ssol.columbia.edu/)\n   1. Click `Class List`\n   1. Click `See Roster`\n   1. Click `Download comma delimited roster with Excel extension.`\n   1. Move to `terraform/students.csv`\n1. Run `terraform apply -parallelism=400` (arbitrarily high number)\n\nAs the course enrollment changes, re-run the last two steps.\n\nAs students go through the setup (below), you can re-run the `apply` to get a report of who is missing billing.\n\n## Student setup\n\nDo these one-time setup steps to ensure you don't have to pay for Google Cloud use for this class. Credits are provided through the [Google Cloud for Education](https://cloud.google.com/edu/faculty) program.\n\nA [Project](https://cloud.google.com/docs/overview#projects) has been created for you, which the instructors have access to for troubleshooting. You redeem the credits, which creates a Billing Account. You then have to associate that Billing Account with the existing Project.\n\n1. [Redeem the credits](https://cloud.google.com/billing/docs/how-to/edu-grants#redeem) - [video walkthrough](https://www.youtube.com/watch?v=2AnX7BX-qew)\n   1. Instructor will send the coupon retrieval link\n   1. Fill in the form\n      - Use your UNI for your email, not an [alias](https://www.cuit.columbia.edu/email/email-aliases)\n   1. When you get to [the GCP Credit Application screen](https://console.cloud.google.com/education), **make sure you've [switched to your Columbia Google account](https://support.google.com/docs/answer/2405894)**\n1. [Dismiss the Free Trial banner — should not need a credit card](https://services.google.com/fh/files/helpcenter/cloud_edu_free_trial_warning.pdf)\n1. Confirm the credits were applied\n   1. Go to [the Billing Accounts page](https://console.cloud.google.com/billing?organizationId=819335046878)\n   1. Click `Billing Account for Education`\n   1. In the sidebar, click `Credits`\n   1. You should see an `Operations Management in IT` credit for $50\n1. Switch to your Project\n   1. In the top navigation bar, on the left side, click the drop-down\n   1. You should see a `Select a resource` modal pop up\n   1. Click the `ALL` tab\n   1. Click `Ops Mgmt in IT - \u003cyour UNI\u003e`\n1. [Change the Billing Account](https://cloud.google.com/billing/docs/how-to/modify-project#how-to-change-ba) to `Billing Account for Education`\n\n### Accidentally redeemed the credit with the wrong Google account\n\nIf you missed the step above about switching to your Columbia Google account, the easiest fix is to follow [these steps](https://cloud.google.com/billing/docs/how-to/grant-access-to-billing#update-cloud-billing-permissions) and make your `\u003cuni\u003e@columbia.edu` user a `Billing Account Administrator` on the `Billing Account for Education`.\n\n### Use of Google Cloud outside this class\n\nIf you're using Google Cloud for something outside of this class, we suggest [creating a separate Project](https://cloud.google.com/resource-manager/docs/creating-managing-projects) to keep things isolated. The `Billing Account for Education` is yours, so you're welcome to [associate it with other Projects](https://cloud.google.com/billing/docs/how-to/modify-project#how-to-change-ba) to use those credits.\n\nWe won't use the full $50 credit for this class, so you're welcome to take advantage of the remainder for other things. If you use it up, you'll start spending against your [Free Trial](https://cloud.google.com/free). Beyond that, you'll have to [pay](https://cloud.google.com/billing/docs/how-to/payment-methods).\n\n## Cleanup\n\nAt the end of the course:\n\n1. Delete all rows from `terraform/students.csv`.\n1. Delete the `instructors` local values.\n1. Run `terraform apply -parallelism=400`\n\n## Troubleshooting students\n\nInstructors should have access to all student Projects. In the selector in the top of the nav bar, switch to their Project; the name ends with their UNI.\n\n### Audit Logs\n\nTo help figure out what went wrong, it may be helpful to see what actions a student performed.\n\n1. [Go to Logs Explorer](https://console.cloud.google.com/logs/query;query=protoPayload.authenticationInfo.principalEmail!%3D%22alf2215@columbia.edu%22;duration=P7D)\n1. Run a query with `protoPayload.authenticationInfo.principalEmail!=\"alf2215@columbia.edu\"` to filter out setup calls made from this repository\n\n[Info about Cloud Audit Logs](https://cloud.google.com/logging/docs/audit)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafeld%2Ftech-foundations","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fafeld%2Ftech-foundations","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafeld%2Ftech-foundations/lists"}