@hasna/uptime 0.1.10 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/api.js +75 -11
- package/dist/cli/index.js +76 -12
- package/dist/cloud-plan.js +1 -1
- package/dist/imports.d.ts +6 -2
- package/dist/imports.d.ts.map +1 -1
- package/dist/imports.js +72 -8
- package/dist/index.js +76 -12
- package/dist/mcp/index.js +74 -10
- package/dist/service.d.ts +3 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +74 -10
- package/dist/store.js +62 -1
- package/docs/aws-deployment-runbook.md +155 -51
- package/infra/aws/outputs.tf +35 -0
- package/infra/aws/terraform.tfvars.example +1 -1
- package/infra/aws/variables.tf +1 -1
- package/package.json +1 -1
|
@@ -40,20 +40,29 @@ write a sourceable env file with a placeholder probe identity.
|
|
|
40
40
|
|
|
41
41
|
1. Locate the real infrastructure repository or create the change in the
|
|
42
42
|
approved owner repository.
|
|
43
|
-
2.
|
|
43
|
+
2. Set the operator shell variables used by the command snippets:
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
|
|
46
|
+
: "${AWS_PROFILE_NAME:?set AWS_PROFILE_NAME to the reviewed AWS profile}"
|
|
47
|
+
AWS_REGION="${AWS_REGION:-us-east-1}"
|
|
48
|
+
TF_DIR="${TF_DIR:-infra/aws}"
|
|
49
|
+
PLAN_FILE="${PLAN_FILE:-open-uptime.tfplan}"
|
|
47
50
|
```
|
|
48
51
|
|
|
49
|
-
3. Confirm the
|
|
52
|
+
3. Confirm the AWS caller identity:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
aws sts get-caller-identity --profile "$AWS_PROFILE_NAME"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
4. Confirm the target VPC, private subnets, KMS key, and EFS/Backup plan inputs
|
|
50
59
|
still match the plan.
|
|
51
|
-
|
|
60
|
+
5. Confirm the protected access mode. The first deploy can use the CloudFront
|
|
52
61
|
default HTTPS domain without custom DNS or ACM. Custom hostname deploys still
|
|
53
62
|
require Route53/edge ownership and an ACM certificate.
|
|
54
|
-
|
|
63
|
+
6. Confirm the deployment role uses short-lived credentials or OIDC, not copied
|
|
55
64
|
access keys.
|
|
56
|
-
|
|
65
|
+
7. Create a private evidence directory outside the public repository. Store
|
|
57
66
|
command output, plan summaries, screenshots, and incident notes there. Do
|
|
58
67
|
not store tokens, database URLs, probe private keys, or secret values.
|
|
59
68
|
|
|
@@ -84,10 +93,10 @@ copy-pastable AWS mutation commands.
|
|
|
84
93
|
Plan the included Terraform/OpenTofu starter without a backend:
|
|
85
94
|
|
|
86
95
|
```bash
|
|
87
|
-
terraform -chdir=
|
|
88
|
-
terraform -chdir=
|
|
89
|
-
terraform -chdir=
|
|
90
|
-
terraform -chdir=
|
|
96
|
+
terraform -chdir="$TF_DIR" fmt -check
|
|
97
|
+
terraform -chdir="$TF_DIR" init -backend=false
|
|
98
|
+
terraform -chdir="$TF_DIR" validate
|
|
99
|
+
terraform -chdir="$TF_DIR" plan -out "$PLAN_FILE"
|
|
91
100
|
```
|
|
92
101
|
|
|
93
102
|
Use Terraform/OpenTofu 1.9 or newer for this starter.
|
|
@@ -101,14 +110,14 @@ desired count `0`.
|
|
|
101
110
|
dormant:
|
|
102
111
|
|
|
103
112
|
```bash
|
|
104
|
-
terraform show -json
|
|
113
|
+
terraform -chdir="$TF_DIR" show -json "$PLAN_FILE" \
|
|
105
114
|
| jq -r '.resource_changes[] | select(.type=="aws_ecs_service") | [.address, .change.after.desired_count] | @tsv'
|
|
106
115
|
```
|
|
107
116
|
|
|
108
117
|
2. Confirm Terraform is not managing secret values:
|
|
109
118
|
|
|
110
119
|
```bash
|
|
111
|
-
terraform show -json
|
|
120
|
+
terraform -chdir="$TF_DIR" show -json "$PLAN_FILE" \
|
|
112
121
|
| jq -r '.resource_changes[] | select(.type | test("secret_version|random_password|random_string")) | .address'
|
|
113
122
|
```
|
|
114
123
|
|
|
@@ -117,7 +126,7 @@ desired count `0`.
|
|
|
117
126
|
3. Apply only the reviewed zero-count plan:
|
|
118
127
|
|
|
119
128
|
```bash
|
|
120
|
-
terraform apply
|
|
129
|
+
terraform -chdir="$TF_DIR" apply "$PLAN_FILE"
|
|
121
130
|
```
|
|
122
131
|
|
|
123
132
|
4. Capture outputs, the source commit, the package version, the plan summary,
|
|
@@ -130,10 +139,11 @@ or the declared image builder. Record only the immutable digest, not build logs
|
|
|
130
139
|
that contain environment values:
|
|
131
140
|
|
|
132
141
|
```bash
|
|
142
|
+
IMAGE_BUILDER_PROJECT="$(terraform -chdir="$TF_DIR" output -raw image_builder_project_name)"
|
|
133
143
|
aws codebuild start-build \
|
|
134
|
-
--profile
|
|
135
|
-
--region
|
|
136
|
-
--project-name
|
|
144
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
145
|
+
--region "$AWS_REGION" \
|
|
146
|
+
--project-name "$IMAGE_BUILDER_PROJECT"
|
|
137
147
|
```
|
|
138
148
|
|
|
139
149
|
Update the approved infra root so `container_image` is the immutable ECR digest,
|
|
@@ -142,8 +152,16 @@ then re-plan with all services still at `0`.
|
|
|
142
152
|
Populate Secrets Manager values out of band. Verify metadata only:
|
|
143
153
|
|
|
144
154
|
```bash
|
|
145
|
-
|
|
146
|
-
aws secretsmanager
|
|
155
|
+
terraform -chdir="$TF_DIR" output -json secret_refs | jq -r '.[]' | while read -r SECRET_ID; do
|
|
156
|
+
aws secretsmanager describe-secret \
|
|
157
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
158
|
+
--region "$AWS_REGION" \
|
|
159
|
+
--secret-id "$SECRET_ID"
|
|
160
|
+
aws secretsmanager list-secret-version-ids \
|
|
161
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
162
|
+
--region "$AWS_REGION" \
|
|
163
|
+
--secret-id "$SECRET_ID"
|
|
164
|
+
done
|
|
147
165
|
```
|
|
148
166
|
|
|
149
167
|
Each required secret must have an `AWSCURRENT` version before any task is
|
|
@@ -166,11 +184,13 @@ Scale only the web task, then capture the ECS deployment id and task definition
|
|
|
166
184
|
ARN:
|
|
167
185
|
|
|
168
186
|
```bash
|
|
187
|
+
ECS_CLUSTER="$(terraform -chdir="$TF_DIR" output -raw ecs_cluster_name)"
|
|
188
|
+
WEB_SERVICE="$(terraform -chdir="$TF_DIR" output -json service_names | jq -r '.[] | select(endswith("-web"))')"
|
|
169
189
|
aws ecs describe-services \
|
|
170
|
-
--profile
|
|
171
|
-
--region
|
|
172
|
-
--cluster
|
|
173
|
-
--services
|
|
190
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
191
|
+
--region "$AWS_REGION" \
|
|
192
|
+
--cluster "$ECS_CLUSTER" \
|
|
193
|
+
--services "$WEB_SERVICE" \
|
|
174
194
|
--query 'services[0].{taskDefinition:taskDefinition,deployments:deployments[*].{id:id,status:status,desired:desiredCount,running:runningCount}}'
|
|
175
195
|
```
|
|
176
196
|
|
|
@@ -180,10 +200,14 @@ Run these checks through the public edge URL and record status codes and request
|
|
|
180
200
|
ids. Use a scoped hosted token only from the operator secret store.
|
|
181
201
|
|
|
182
202
|
```bash
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
203
|
+
EDGE_URL="$(terraform -chdir="$TF_DIR" output -raw protected_access_url)"
|
|
204
|
+
: "${HOSTED_TOKEN_FILE:?set HOSTED_TOKEN_FILE to a 0600 file containing the scoped hosted token}"
|
|
205
|
+
HOSTED_TOKEN="$(tr -d '\n' < "$HOSTED_TOKEN_FILE")"
|
|
206
|
+
|
|
207
|
+
curl -fsS "$EDGE_URL/health"
|
|
208
|
+
curl -i "$EDGE_URL/"
|
|
209
|
+
curl -i "$EDGE_URL/api/v1/summary"
|
|
210
|
+
curl -i -H "Authorization: Bearer $HOSTED_TOKEN" "$EDGE_URL/api/v1/summary"
|
|
187
211
|
```
|
|
188
212
|
|
|
189
213
|
Expected results:
|
|
@@ -200,19 +224,22 @@ Expected results:
|
|
|
200
224
|
Inspect recent web logs without printing secrets:
|
|
201
225
|
|
|
202
226
|
```bash
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
--
|
|
227
|
+
WEB_LOG_GROUP="$(terraform -chdir="$TF_DIR" output -json log_group_names | jq -r '.web')"
|
|
228
|
+
aws logs tail "$WEB_LOG_GROUP" \
|
|
229
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
230
|
+
--region "$AWS_REGION" \
|
|
206
231
|
--since 15m
|
|
207
232
|
```
|
|
208
233
|
|
|
209
234
|
Verify the initial web alarms exist and are not already alarming:
|
|
210
235
|
|
|
211
236
|
```bash
|
|
237
|
+
WEB_5XX_ALARM="$(terraform -chdir="$TF_DIR" output -json alarm_names | jq -r '.web_5xx')"
|
|
238
|
+
WEB_UNHEALTHY_ALARM="$(terraform -chdir="$TF_DIR" output -json alarm_names | jq -r '.web_unhealthy')"
|
|
212
239
|
aws cloudwatch describe-alarms \
|
|
213
|
-
--profile
|
|
214
|
-
--region
|
|
215
|
-
--alarm-names
|
|
240
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
241
|
+
--region "$AWS_REGION" \
|
|
242
|
+
--alarm-names "$WEB_5XX_ALARM" "$WEB_UNHEALTHY_ALARM" \
|
|
216
243
|
--query 'MetricAlarms[*].{name:AlarmName,state:StateValue,reason:StateReason}'
|
|
217
244
|
```
|
|
218
245
|
|
|
@@ -224,14 +251,24 @@ those workers are implemented, emit metrics, and are enabled.
|
|
|
224
251
|
Verify EFS backup coverage after the first apply:
|
|
225
252
|
|
|
226
253
|
```bash
|
|
254
|
+
BACKUP_VAULT="$(terraform -chdir="$TF_DIR" output -raw backup_vault_name)"
|
|
255
|
+
EFS_FILE_SYSTEM_ID="$(terraform -chdir="$TF_DIR" output -raw efs_file_system_id)"
|
|
256
|
+
EFS_FILE_SYSTEM_ARN="$(aws efs describe-file-systems \
|
|
257
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
258
|
+
--region "$AWS_REGION" \
|
|
259
|
+
--file-system-id "$EFS_FILE_SYSTEM_ID" \
|
|
260
|
+
--query 'FileSystems[0].FileSystemArn' \
|
|
261
|
+
--output text)"
|
|
262
|
+
|
|
227
263
|
aws backup list-protected-resources \
|
|
228
|
-
--profile
|
|
229
|
-
--region
|
|
230
|
-
--query
|
|
264
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
265
|
+
--region "$AWS_REGION" \
|
|
266
|
+
--query "Results[?ResourceArn=='$EFS_FILE_SYSTEM_ARN'].[ResourceArn,LastBackupTime]"
|
|
231
267
|
aws backup list-recovery-points-by-backup-vault \
|
|
232
|
-
--profile
|
|
233
|
-
--region
|
|
234
|
-
--backup-vault-name
|
|
268
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
269
|
+
--region "$AWS_REGION" \
|
|
270
|
+
--backup-vault-name "$BACKUP_VAULT" \
|
|
271
|
+
--query "RecoveryPoints[?ResourceArn=='$EFS_FILE_SYSTEM_ARN'].[RecoveryPointArn,Status,CreationDate]"
|
|
235
272
|
```
|
|
236
273
|
|
|
237
274
|
A restore drill must restore to a separate file system or staging target first.
|
|
@@ -239,6 +276,65 @@ Do not overwrite the production EFS file system during a drill. Record the
|
|
|
239
276
|
recovery point ARN, restore job id, target resource, validation result, and
|
|
240
277
|
cleanup action.
|
|
241
278
|
|
|
279
|
+
Run the restore drill with a dedicated restore role and a staging security group
|
|
280
|
+
and subnet. The metadata keys are AWS Backup EFS restore metadata; keep the
|
|
281
|
+
staging file system encrypted with the Open Uptime KMS key.
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
: "${RECOVERY_POINT_ARN:?set RECOVERY_POINT_ARN to the selected recovery point ARN}"
|
|
285
|
+
: "${RESTORE_ROLE_ARN:?set RESTORE_ROLE_ARN to the AWS Backup restore role ARN}"
|
|
286
|
+
: "${STAGING_SUBNET_ID:?set STAGING_SUBNET_ID to the staging private subnet id}"
|
|
287
|
+
: "${STAGING_SECURITY_GROUP_ID:?set STAGING_SECURITY_GROUP_ID to the staging EFS security group id}"
|
|
288
|
+
KMS_KEY_ARN="$(terraform -chdir="$TF_DIR" output -raw kms_key_arn)"
|
|
289
|
+
|
|
290
|
+
RESTORE_JOB_ID="$(aws backup start-restore-job \
|
|
291
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
292
|
+
--region "$AWS_REGION" \
|
|
293
|
+
--recovery-point-arn "$RECOVERY_POINT_ARN" \
|
|
294
|
+
--iam-role-arn "$RESTORE_ROLE_ARN" \
|
|
295
|
+
--resource-type EFS \
|
|
296
|
+
--metadata "file-system-id=$EFS_FILE_SYSTEM_ID,newFileSystem=true,encrypted=true,kmsKeyId=$KMS_KEY_ARN,performanceMode=generalPurpose,throughputMode=bursting" \
|
|
297
|
+
--query 'RestoreJobId' \
|
|
298
|
+
--output text)"
|
|
299
|
+
|
|
300
|
+
aws backup describe-restore-job \
|
|
301
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
302
|
+
--region "$AWS_REGION" \
|
|
303
|
+
--restore-job-id "$RESTORE_JOB_ID" \
|
|
304
|
+
--query '{status:Status,createdResourceArn:CreatedResourceArn,statusMessage:StatusMessage}'
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Poll `describe-restore-job` until `Status` is `COMPLETED`, then create a
|
|
308
|
+
temporary mount target for the restored file system in the staging subnet:
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
RESTORED_EFS_ID="$(aws backup describe-restore-job \
|
|
312
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
313
|
+
--region "$AWS_REGION" \
|
|
314
|
+
--restore-job-id "$RESTORE_JOB_ID" \
|
|
315
|
+
--query 'CreatedResourceArn' \
|
|
316
|
+
--output text | awk -F/ '{print $NF}')"
|
|
317
|
+
|
|
318
|
+
aws efs create-mount-target \
|
|
319
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
320
|
+
--region "$AWS_REGION" \
|
|
321
|
+
--file-system-id "$RESTORED_EFS_ID" \
|
|
322
|
+
--subnet-id "$STAGING_SUBNET_ID" \
|
|
323
|
+
--security-groups "$STAGING_SECURITY_GROUP_ID"
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
Validate the restored `/data/uptime/uptime.db` from a staging host or task with
|
|
327
|
+
read-only SQLite integrity checks. Capture only counts and integrity status, not
|
|
328
|
+
monitor targets or secrets:
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
sqlite3 /mnt/restore/uptime/uptime.db 'PRAGMA integrity_check;'
|
|
332
|
+
sqlite3 /mnt/restore/uptime/uptime.db 'SELECT COUNT(*) FROM monitors;'
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
After evidence is recorded, delete the staging mount target and restored file
|
|
336
|
+
system. Never mount the restored file system over production during a drill.
|
|
337
|
+
|
|
242
338
|
## Reports And Reporter Gate
|
|
243
339
|
|
|
244
340
|
Report preview can be tested locally or through authenticated read APIs. Hosted
|
|
@@ -273,6 +369,11 @@ routes are backed by cloud check jobs and cloud audit rows.
|
|
|
273
369
|
URLs, or probe private keys in task definitions. Use ECS `secrets.valueFrom`
|
|
274
370
|
refs such as `HASNA_UPTIME_HOSTED_TOKEN`.
|
|
275
371
|
- Do not run public probe workers against private targets.
|
|
372
|
+
- Do not enable public probe workers until runtime target policy resolves and
|
|
373
|
+
pins DNS answers, rejects redirects and DNS rebinding into denied ranges, and
|
|
374
|
+
emits target-policy decision records. The current configuration-time policy
|
|
375
|
+
blocks direct denied hosts, including IPv4-mapped IPv6 forms, but it is not a
|
|
376
|
+
substitute for execution-time DNS and redirect enforcement.
|
|
276
377
|
- Do not enable scheduler, public-probe, reporter, or migration workers against
|
|
277
378
|
the EFS SQLite bridge; those services need Postgres/cloud leases first.
|
|
278
379
|
- Do not expose dashboard/API routes without hosted auth and workspace checks.
|
|
@@ -293,11 +394,13 @@ Before each service update, record the previous task definition ARN and current
|
|
|
293
394
|
desired counts:
|
|
294
395
|
|
|
295
396
|
```bash
|
|
397
|
+
ECS_CLUSTER="$(terraform -chdir="$TF_DIR" output -raw ecs_cluster_name)"
|
|
398
|
+
WEB_SERVICE="$(terraform -chdir="$TF_DIR" output -json service_names | jq -r '.[] | select(endswith("-web"))')"
|
|
296
399
|
aws ecs describe-services \
|
|
297
|
-
--profile
|
|
298
|
-
--region
|
|
299
|
-
--cluster
|
|
300
|
-
--services
|
|
400
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
401
|
+
--region "$AWS_REGION" \
|
|
402
|
+
--cluster "$ECS_CLUSTER" \
|
|
403
|
+
--services "$WEB_SERVICE" \
|
|
301
404
|
--query 'services[0].{taskDefinition:taskDefinition,desired:desiredCount,running:runningCount}'
|
|
302
405
|
```
|
|
303
406
|
|
|
@@ -305,10 +408,10 @@ If web health fails after scale-up, first scale web back to `0`:
|
|
|
305
408
|
|
|
306
409
|
```bash
|
|
307
410
|
aws ecs update-service \
|
|
308
|
-
--profile
|
|
309
|
-
--region
|
|
310
|
-
--cluster
|
|
311
|
-
--service
|
|
411
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
412
|
+
--region "$AWS_REGION" \
|
|
413
|
+
--cluster "$ECS_CLUSTER" \
|
|
414
|
+
--service "$WEB_SERVICE" \
|
|
312
415
|
--desired-count 0
|
|
313
416
|
```
|
|
314
417
|
|
|
@@ -316,12 +419,13 @@ If a later task definition is bad, restore the previous task definition and keep
|
|
|
316
419
|
workers disabled:
|
|
317
420
|
|
|
318
421
|
```bash
|
|
422
|
+
: "${PREVIOUS_TASK_DEFINITION_ARN:?set PREVIOUS_TASK_DEFINITION_ARN from the pre-update evidence}"
|
|
319
423
|
aws ecs update-service \
|
|
320
|
-
--profile
|
|
321
|
-
--region
|
|
322
|
-
--cluster
|
|
323
|
-
--service
|
|
324
|
-
--task-definition
|
|
424
|
+
--profile "$AWS_PROFILE_NAME" \
|
|
425
|
+
--region "$AWS_REGION" \
|
|
426
|
+
--cluster "$ECS_CLUSTER" \
|
|
427
|
+
--service "$WEB_SERVICE" \
|
|
428
|
+
--task-definition "$PREVIOUS_TASK_DEFINITION_ARN" \
|
|
325
429
|
--desired-count 1
|
|
326
430
|
```
|
|
327
431
|
|
package/infra/aws/outputs.tf
CHANGED
|
@@ -26,6 +26,41 @@ output "evidence_bucket" {
|
|
|
26
26
|
value = aws_s3_bucket.evidence.bucket
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
output "kms_key_arn" {
|
|
30
|
+
value = var.kms_key_arn
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
output "secret_refs" {
|
|
34
|
+
value = {
|
|
35
|
+
app_env = var.app_env_secret_arn
|
|
36
|
+
hosted_token = var.hosted_token_secret_arn
|
|
37
|
+
public_probe = var.public_probe_secret_arn
|
|
38
|
+
reporting = var.reporting_secret_arn
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
output "log_group_names" {
|
|
43
|
+
value = merge(
|
|
44
|
+
{ image_builder = aws_cloudwatch_log_group.image_builder.name },
|
|
45
|
+
{ for role, group in aws_cloudwatch_log_group.service : role => group.name },
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
output "alarm_names" {
|
|
50
|
+
value = {
|
|
51
|
+
web_5xx = aws_cloudwatch_metric_alarm.web_5xx.alarm_name
|
|
52
|
+
web_unhealthy = aws_cloudwatch_metric_alarm.web_unhealthy.alarm_name
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
output "backup_vault_name" {
|
|
57
|
+
value = aws_backup_vault.data.name
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
output "backup_plan_id" {
|
|
61
|
+
value = aws_backup_plan.data.id
|
|
62
|
+
}
|
|
63
|
+
|
|
29
64
|
output "efs_file_system_id" {
|
|
30
65
|
value = aws_efs_file_system.data.id
|
|
31
66
|
}
|
|
@@ -15,7 +15,7 @@ public_subnet_ids = ["subnet-replace-public-a", "subnet-replace-public-b"
|
|
|
15
15
|
alb_ingress_cidr_blocks = []
|
|
16
16
|
private_subnet_ids = ["subnet-replace-private-a", "subnet-replace-private-b"]
|
|
17
17
|
container_image = "123456789012.dkr.ecr.us-east-1.amazonaws.com/open-uptime@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
18
|
-
runtime_package_version = "0.1.
|
|
18
|
+
runtime_package_version = "0.1.11"
|
|
19
19
|
certificate_arn = null
|
|
20
20
|
hosted_zone_id = null
|
|
21
21
|
app_env_secret_arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:open-uptime/prod/app/env"
|
package/infra/aws/variables.tf
CHANGED
|
@@ -116,7 +116,7 @@ variable "container_image" {
|
|
|
116
116
|
variable "runtime_package_version" {
|
|
117
117
|
description = "Published @hasna/uptime package version that CodeBuild should build into the ECR image."
|
|
118
118
|
type = string
|
|
119
|
-
default = "0.1.
|
|
119
|
+
default = "0.1.11"
|
|
120
120
|
|
|
121
121
|
validation {
|
|
122
122
|
condition = can(regex("^[0-9]+\\.[0-9]+\\.[0-9]+(-[0-9A-Za-z.-]+)?$", var.runtime_package_version))
|
package/package.json
CHANGED