Feat: Setup Cloudwatch Logs for EC2#73
Conversation
ⓘ You are approaching your monthly quota for Qodo. Upgrade your plan Review Summary by QodoSetup CloudWatch Logs integration for EC2 container monitoring
WalkthroughsDescription• Create new CloudWatch Logs module for EC2 container logging • Configure EC2 IAM role with CloudWatch Logs permissions • Update deployment script to attach Docker logs to CloudWatch • Add AMI ID as configurable variable for compute module • Clean up Terraform lock file and apply formatting Diagramflowchart LR
A["EC2 Instance"] -->|"logs via awslogs driver"| B["CloudWatch Log Group"]
C["IAM Role"] -->|"permissions"| B
D["Deploy Script"] -->|"configures log driver"| A
E["Logs Module"] -->|"creates & manages"| B
File Changes1. infra/modules/logs/main.tf
|
Code Review by Qodo
1.
|
| variable "ami_id" { | ||
| type = string |
There was a problem hiding this comment.
2. Required ami_id breaks plans 🐞 Bug ⛯ Reliability
infra/env/prod introduces a required ami_id (no default) and wires it into module.compute, so tofu plan/apply will fail in non-interactive contexts unless the caller explicitly provides ami_id.
Agent Prompt
### Issue description
The prod environment now requires `ami_id` with no default, which makes `tofu plan/apply` fail unless the operator/automation always supplies `-var ami_id=...` (or `TF_VAR_ami_id`).
### Issue Context
Previously, the module selected an AL2023 AMI via a data source. After the change, the module uses `var.ami_id`, but the variable is required at both env and module levels.
### Fix Focus Areas
- infra/env/prod/variables.tf[17-24]
- infra/env/prod/main.tf[51-68]
- infra/modules/compute/variables.tf[34-41]
- infra/modules/compute/main.tf[1-16]
- infra/modules/compute/main.tf[103-110]
### Suggested fix
Implement a safe default path so callers are not forced to pass `ami_id`:
- Option A (module-level): set `variable "ami_id" { type = string, default = null }` and set `aws_instance.this.ami = coalesce(var.ami_id, data.aws_ami.al2023.id)`.
- Option B (env-level): keep module variable required, but add a data source in `infra/env/prod` and pass `ami_id = coalesce(var.ami_id, data.aws_ami.al2023.id)`, while giving env `ami_id` a `default = null`.
Either approach removes the hard requirement while still allowing pinning when desired.
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
* Small changes to dev tooling (docker/make/compose * Server: minor variable rename * Auth middleware + clerk webhook handler * Added WithTransaction to store * Removed debug logging message exposing userid * Removed docker-compose changes not relevant to PR * Renamed users.go to users.handler.go in handlers * Added documentation explaining dev bypass * Feat/calibration-endpoints (#57) * added user calibration endpoints and schema" - Added user_calibration migration - Added sqlc queries for calibration CRUD operations - added /api/users/me/calibration endpoints: GET, POST, DELETE - me endpoint now fetches user from clerk id using middleware, enhancing security - removed GET methods for user (GET /{id}, GET /) * Fixed line endings * Fixed time formatting in handler * Added NOT NULL constrain to updated_at, created_at in db table switch go dev container port to correct mapping (8080) fixed variable typo in middleware_auth.go --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * Fixed syntax error on migration (#58) Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * Feat/workouts api (#59) * Implemented workout and calibration schema with included sqlc queries. Updated makefile and seeding files * Regenerated SQLC to match new queries and models (workout type + workout session) * Added workout session service * Added Workout Handler Endpoint * Addressed PR comments - fixed syntax error in makefile - Fixed migration schema - fixed seeding script - added /service/helps/helpers.util file - renamed Dtos to match go standards, (Id -> ID) * Updated API endpoints * updated dtos to match casing convention. updated workout_session logic * Added functionality for workout sets and reps. (services, handlers, migrations, queries) * Addressed PR comments * Addressed PR comments --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * fix: added clerk webhook secret (#62) * Fix/add clerkwebhook secret (#64) * fix: added clerk webhook secret * updated CRLF line endings to LF * Fix/add clerkwebhook secret (#66) * fix: added clerk webhook secret * updated CRLF line endings to LF * fix * prod fix * Seed Script: Wipe Data (#69) * Prod fix (#67) * Small changes to dev tooling (docker/make/compose * Server: minor variable rename * Auth middleware + clerk webhook handler * Added WithTransaction to store * Removed debug logging message exposing userid * Removed docker-compose changes not relevant to PR * Renamed users.go to users.handler.go in handlers * Added documentation explaining dev bypass * Feat/calibration-endpoints (#57) * added user calibration endpoints and schema" - Added user_calibration migration - Added sqlc queries for calibration CRUD operations - added /api/users/me/calibration endpoints: GET, POST, DELETE - me endpoint now fetches user from clerk id using middleware, enhancing security - removed GET methods for user (GET /{id}, GET /) * Fixed line endings * Fixed time formatting in handler * Added NOT NULL constrain to updated_at, created_at in db table switch go dev container port to correct mapping (8080) fixed variable typo in middleware_auth.go --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * Fixed syntax error on migration (#58) Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * Feat/workouts api (#59) * Implemented workout and calibration schema with included sqlc queries. Updated makefile and seeding files * Regenerated SQLC to match new queries and models (workout type + workout session) * Added workout session service * Added Workout Handler Endpoint * Addressed PR comments - fixed syntax error in makefile - Fixed migration schema - fixed seeding script - added /service/helps/helpers.util file - renamed Dtos to match go standards, (Id -> ID) * Updated API endpoints * updated dtos to match casing convention. updated workout_session logic * Added functionality for workout sets and reps. (services, handlers, migrations, queries) * Addressed PR comments * Addressed PR comments --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * fix: added clerk webhook secret (#62) * Fix/add clerkwebhook secret (#64) * fix: added clerk webhook secret * updated CRLF line endings to LF * Fix/add clerkwebhook secret (#66) * fix: added clerk webhook secret * updated CRLF line endings to LF * fix --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * fix: wipe data on seed --------- Co-authored-by: Nicola Savino <77707655+NickSavino@users.noreply.github.com> Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * fix: (#70) - updated workout session history endpoint - added reset_workflow script along with github action - added ingestion functionality for webhook * Feat: Setup Cloudwatch Logs for EC2 (#73) * feat: setup AWS Cloudwatch resource and updated deploy script to attach to logging --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> Co-authored-by: Aarsh Shah <86862845+AarshShah9@users.noreply.github.com>
* Small changes to dev tooling (docker/make/compose * Server: minor variable rename * Auth middleware + clerk webhook handler * Added WithTransaction to store * Removed debug logging message exposing userid * Removed docker-compose changes not relevant to PR * Renamed users.go to users.handler.go in handlers * Added documentation explaining dev bypass * Feat/calibration-endpoints (#57) * added user calibration endpoints and schema" - Added user_calibration migration - Added sqlc queries for calibration CRUD operations - added /api/users/me/calibration endpoints: GET, POST, DELETE - me endpoint now fetches user from clerk id using middleware, enhancing security - removed GET methods for user (GET /{id}, GET /) * Fixed line endings * Fixed time formatting in handler * Added NOT NULL constrain to updated_at, created_at in db table switch go dev container port to correct mapping (8080) fixed variable typo in middleware_auth.go --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * Fixed syntax error on migration (#58) Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * Feat/workouts api (#59) * Implemented workout and calibration schema with included sqlc queries. Updated makefile and seeding files * Regenerated SQLC to match new queries and models (workout type + workout session) * Added workout session service * Added Workout Handler Endpoint * Addressed PR comments - fixed syntax error in makefile - Fixed migration schema - fixed seeding script - added /service/helps/helpers.util file - renamed Dtos to match go standards, (Id -> ID) * Updated API endpoints * updated dtos to match casing convention. updated workout_session logic * Added functionality for workout sets and reps. (services, handlers, migrations, queries) * Addressed PR comments * Addressed PR comments --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * fix: added clerk webhook secret (#62) * Fix/add clerkwebhook secret (#64) * fix: added clerk webhook secret * updated CRLF line endings to LF * Fix/add clerkwebhook secret (#66) * fix: added clerk webhook secret * updated CRLF line endings to LF * fix * prod fix * Seed Script: Wipe Data (#69) * Prod fix (#67) * Small changes to dev tooling (docker/make/compose * Server: minor variable rename * Auth middleware + clerk webhook handler * Added WithTransaction to store * Removed debug logging message exposing userid * Removed docker-compose changes not relevant to PR * Renamed users.go to users.handler.go in handlers * Added documentation explaining dev bypass * Feat/calibration-endpoints (#57) * added user calibration endpoints and schema" - Added user_calibration migration - Added sqlc queries for calibration CRUD operations - added /api/users/me/calibration endpoints: GET, POST, DELETE - me endpoint now fetches user from clerk id using middleware, enhancing security - removed GET methods for user (GET /{id}, GET /) * Fixed line endings * Fixed time formatting in handler * Added NOT NULL constrain to updated_at, created_at in db table switch go dev container port to correct mapping (8080) fixed variable typo in middleware_auth.go --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * Fixed syntax error on migration (#58) Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * Feat/workouts api (#59) * Implemented workout and calibration schema with included sqlc queries. Updated makefile and seeding files * Regenerated SQLC to match new queries and models (workout type + workout session) * Added workout session service * Added Workout Handler Endpoint * Addressed PR comments - fixed syntax error in makefile - Fixed migration schema - fixed seeding script - added /service/helps/helpers.util file - renamed Dtos to match go standards, (Id -> ID) * Updated API endpoints * updated dtos to match casing convention. updated workout_session logic * Added functionality for workout sets and reps. (services, handlers, migrations, queries) * Addressed PR comments * Addressed PR comments --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * fix: added clerk webhook secret (#62) * Fix/add clerkwebhook secret (#64) * fix: added clerk webhook secret * updated CRLF line endings to LF * Fix/add clerkwebhook secret (#66) * fix: added clerk webhook secret * updated CRLF line endings to LF * fix --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * fix: wipe data on seed --------- Co-authored-by: Nicola Savino <77707655+NickSavino@users.noreply.github.com> Co-authored-by: NicolaSavino <nick.savino@arcurve.com> * fix: (#70) - updated workout session history endpoint - added reset_workflow script along with github action - added ingestion functionality for webhook * Feat: Setup Cloudwatch Logs for EC2 (#73) * feat: setup AWS Cloudwatch resource and updated deploy script to attach to logging * Increaed EC2 Tier and added elastic ip (#76) * Increaed EC2 Tier and added elastic ip * added newline to EOF * Logging Middleware (#75) * Added Logging Middleware to increase observability * small rename * Refactored user handler logic to be executed in service * Updated logging.go to adress bot comments * Updated logging middleware to forward optional http.ResponseWriter interfaces --------- Co-authored-by: NicolaSavino <nick.savino@arcurve.com> Co-authored-by: Aarsh Shah <86862845+AarshShah9@users.noreply.github.com>
No description provided.