Skip to content

Commit d704499

Browse files
author
Marcel Mueller
authored
chore: add establishment order migrations and bucket (#1315)
* chore: add establishment order migrations and bucket * fix: local migrations
1 parent 0b2deaf commit d704499

5 files changed

Lines changed: 4311 additions & 0 deletions

File tree

infrastructure/api/ecs.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,14 @@ resource "aws_ecs_task_definition" "node_api_task" {
185185
name = "DAM_RST_IMAGE_COLLECTION_ID"
186186
value = var.dam_config.dam_rst_image_collection_id
187187
},
188+
{
189+
name = "ESTABLISHMENT_ORDER_DOCS_BUCKET"
190+
value = aws_s3_bucket.establishment_order_docs.id
191+
},
192+
{
193+
name = "AWS_REGION"
194+
value = var.aws_region
195+
}
188196
]
189197
portMappings = [
190198
{

infrastructure/api/iam.tf

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,31 @@ resource "aws_iam_role_policy" "cloudwatch_metrics" {
9393
})
9494
}
9595

96+
# IAM policy for S3 access to Establishment Order documents
97+
resource "aws_iam_role_policy" "s3_establishment_order_docs" {
98+
name = "${var.app_name}_s3_establishment_order_docs"
99+
role = aws_iam_role.app_container_role.id
100+
101+
policy = jsonencode({
102+
Version = "2012-10-17"
103+
Statement = [
104+
{
105+
Effect = "Allow"
106+
Action = [
107+
"s3:GetObject",
108+
"s3:PutObject",
109+
"s3:DeleteObject",
110+
"s3:ListBucket"
111+
]
112+
Resource = [
113+
"arn:aws:s3:::rst-lza-establishment-order-docs-${var.target_env}",
114+
"arn:aws:s3:::rst-lza-establishment-order-docs-${var.target_env}/*"
115+
]
116+
}
117+
]
118+
})
119+
}
120+
96121
resource "aws_iam_role_policy" "app_container_cwlogs" {
97122
name = "${var.app_name}_container_cwlogs"
98123
role = aws_iam_role.app_container_role.id

infrastructure/api/s3.tf

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# S3 bucket for Establishment Order documents
2+
resource "aws_s3_bucket" "establishment_order_docs" {
3+
bucket = "rst-lza-establishment-order-docs-${var.target_env}"
4+
}
5+
6+
# Enable versioning for the bucket
7+
resource "aws_s3_bucket_versioning" "establishment_order_docs" {
8+
bucket = aws_s3_bucket.establishment_order_docs.id
9+
10+
versioning_configuration {
11+
status = "Enabled"
12+
}
13+
}
14+
15+
# Enable encryption for the bucket
16+
resource "aws_s3_bucket_server_side_encryption_configuration" "establishment_order_docs" {
17+
bucket = aws_s3_bucket.establishment_order_docs.id
18+
19+
rule {
20+
apply_server_side_encryption_by_default {
21+
sse_algorithm = "AES256"
22+
}
23+
}
24+
}
25+
26+
# Block public access
27+
resource "aws_s3_bucket_public_access_block" "establishment_order_docs" {
28+
bucket = aws_s3_bucket.establishment_order_docs.id
29+
30+
block_public_acls = true
31+
block_public_policy = true
32+
ignore_public_acls = true
33+
restrict_public_buckets = true
34+
}
35+
36+
# Lifecycle policy - delete old versions after 30 days
37+
resource "aws_s3_bucket_lifecycle_configuration" "establishment_order_docs" {
38+
bucket = aws_s3_bucket.establishment_order_docs.id
39+
40+
rule {
41+
id = "expire-old-versions"
42+
status = "Enabled"
43+
44+
filter {
45+
prefix = ""
46+
}
47+
48+
noncurrent_version_expiration {
49+
noncurrent_days = 30
50+
}
51+
}
52+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
create table if not exists rst.recreation_establishment_order_docs
2+
(
3+
s3_key varchar primary key,
4+
rec_resource_id varchar(10) references rst.recreation_resource,
5+
title varchar,
6+
file_size bigint,
7+
extension varchar
8+
);
9+
10+
select upsert_timestamp_columns('rst', 'recreation_establishment_order_docs');
11+
12+
select setup_temporal_table('rst', 'recreation_establishment_order_docs');
13+
14+
comment on column rst.recreation_establishment_order_docs.s3_key is 'S3 object key (path) for the establishment order document';
15+
comment on column rst.recreation_establishment_order_docs.rec_resource_id is 'Recreation Resource ID';
16+
comment on column rst.recreation_establishment_order_docs.title is 'Title of the establishment order document';
17+
comment on column rst.recreation_establishment_order_docs.file_size is 'File size in bytes';
18+
comment on column rst.recreation_establishment_order_docs.extension is 'File extension (e.g., pdf)';
19+
20+
create index if not exists idx_recreation_establishment_order_docs_rec_resource_id
21+
on rst.recreation_establishment_order_docs(rec_resource_id);

0 commit comments

Comments
 (0)