Skip to content

Commit 8f11ec4

Browse files
authored
ci: prepare terraform files (#187)
Signed-off-by: Matheus Cruz <[email protected]>
1 parent 74e1c76 commit 8f11ec4

File tree

4 files changed

+111
-26
lines changed

4 files changed

+111
-26
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ name: Timeless CI - Build & Publish
33
on:
44
push:
55
branches: [ "main" ]
6+
paths-ignore:
7+
- 'infrastructure/**'
68
pull_request:
79
branches: [ "main" ]
8-
10+
paths-ignore:
11+
- 'infrastructure/**'
912

1013
permissions:
1114
contents: read

.github/workflows/pull_request.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ name: Timeless CI - Pull Request Build
33
on:
44
pull_request:
55
branches: [ "main" ]
6+
paths-ignore:
7+
- 'infrastructure/**'
68

79
permissions:
810
contents: read

infrastructure/main.tf

Lines changed: 99 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,142 @@
1+
# S3 Bucket
12
resource "aws_s3_bucket" "timeless_bucket" {
23
bucket = var.bucket_assets_name
4+
}
5+
6+
resource "aws_s3_bucket_acl" "timeless_bucket_acl" {
7+
bucket = aws_s3_bucket.timeless_bucket.id
38
acl = "private"
49
}
510

6-
resource "aws_iam_user" "timeless_assets_writer" {
7-
name = var.timeless_assets_writer_name
11+
# IAM Users
12+
resource "aws_iam_user" "timeless_whatsapp_app" {
13+
name = var.timeless_whatsapp_app_name
814
}
915

10-
resource "aws_iam_policy" "bucket_write_policy" {
11-
name = "BucketWriteAccessPolicy"
12-
description = "Allows write access to ${var.bucket_assets_name} bucket"
16+
resource "aws_iam_user" "timeless_api_app" {
17+
name = var.timeless_api_app_name
18+
}
19+
20+
# IAM Policies
21+
22+
resource "aws_iam_policy" "timeless_whatsapp_sqs_policy" {
23+
name = "AllowSendReceiveMessagePolicy"
1324
policy = jsonencode({
1425
Version = "2012-10-17",
1526
Statement = [
1627
{
1728
Effect = "Allow",
1829
Action = [
19-
"s3:PutObject",
20-
"s3:PutObjectAcl",
21-
"s3:GetObject"
30+
"sqs:SendMessage",
31+
"sqs:GetQueueAttributes"
2232
],
23-
Resource = "${aws_s3_bucket.timeless_bucket.arn}/*"
33+
Resource = ["${aws_sqs_queue.incoming_messages.arn}"]
2434
},
2535
{
2636
Effect = "Allow",
2737
Action = [
28-
"sqs:SendMessage",
2938
"sqs:ReceiveMessage",
30-
"sqs:GetQueueAttributes",
31-
"sqs:DeleteMessage"
39+
"sqs:DeleteMessage",
40+
"sqs:GetQueueAttributes"
3241
],
33-
Resource = "${aws_sqs_queue.incoming_messages.arn}"
42+
Resource = ["${aws_sqs_queue.message_processed.arn}"]
43+
}
44+
]
45+
})
46+
}
47+
48+
resource "aws_iam_policy" "timeless_api_sqs_policy" {
49+
name = "AllowTimelessAPISendReceiveMessagePolicy"
50+
policy = jsonencode({
51+
Version = "2012-10-17",
52+
Statement = [
53+
{
54+
Effect = "Allow",
55+
Action = [
56+
"sqs:SendMessage",
57+
"sqs:GetQueueAttributes"
58+
],
59+
Resource = ["${aws_sqs_queue.message_processed.arn}"]
3460
},
3561
{
36-
Effect = "Allow"
62+
Effect = "Allow",
3763
Action = [
3864
"sqs:ReceiveMessage",
39-
"sqs:GetQueueAttributes",
4065
"sqs:DeleteMessage",
41-
"sqs:SendMessage",
66+
"sqs:GetQueueAttributes"
67+
],
68+
Resource = ["${aws_sqs_queue.incoming_messages.arn}"]
69+
}
70+
]
71+
})
72+
}
73+
74+
resource "aws_iam_policy" "bucket_read_policy" {
75+
name = "TimelessAPIBucketReadAccessPolicy"
76+
description = "Allows read access to ${var.bucket_assets_name} bucket"
77+
policy = jsonencode({
78+
Version = "2012-10-17",
79+
Statement = [
80+
{
81+
Effect = "Allow",
82+
Action = [
83+
"s3:GetObject"
4284
],
43-
Resource = "${aws_sqs_queue.message_processed.arn}"
85+
Resource = "${aws_s3_bucket.timeless_bucket.arn}/*"
4486
}
4587
]
4688
})
4789
}
4890

49-
resource "aws_iam_user_policy_attachment" "attach_policy" {
50-
user = aws_iam_user.timeless_assets_writer.name
91+
resource "aws_iam_policy" "bucket_write_policy" {
92+
name = "TimelessWhatsappBucketWriteAccessPolicy"
93+
description = "Allows write access to ${var.bucket_assets_name} bucket"
94+
policy = jsonencode({
95+
Version = "2012-10-17",
96+
Statement = [
97+
{
98+
Effect = "Allow",
99+
Action = [
100+
"s3:PutObject",
101+
"s3:PutObjectAcl",
102+
"s3:DeleteObject"
103+
],
104+
Resource = "${aws_s3_bucket.timeless_bucket.arn}/*"
105+
}
106+
]
107+
})
108+
}
109+
110+
# IAM User Policy Attachments
111+
112+
resource "aws_iam_user_policy_attachment" "attach_bucket_write_policy" {
113+
user = aws_iam_user.timeless_whatsapp_app.name
51114
policy_arn = aws_iam_policy.bucket_write_policy.arn
52115
}
53116

54-
resource "aws_sqs_queue" "incoming_messages" {
55-
name = "incoming-messages.fifo"
117+
resource "aws_iam_user_policy_attachment" "attach_sqs_policy" {
118+
user = aws_iam_user.timeless_whatsapp_app.name
119+
policy_arn = aws_iam_policy.timeless_whatsapp_sqs_policy.arn
120+
}
121+
122+
resource "aws_iam_user_policy_attachment" "attach_api_bucket_read_policy" {
123+
user = aws_iam_user.timeless_api_app.name
124+
policy_arn = aws_iam_policy.bucket_read_policy.arn
125+
}
126+
127+
resource "aws_iam_user_policy_attachment" "attach_api_sqs_policy" {
128+
user = aws_iam_user.timeless_api_app.name
129+
policy_arn = aws_iam_policy.timeless_api_sqs_policy.arn
130+
}
131+
56132

133+
# SQS Queues
134+
resource "aws_sqs_queue" "incoming_messages" {
57135
fifo_queue = true
58136
content_based_deduplication = true
59137
}
60138

61139
resource "aws_sqs_queue" "message_processed" {
62-
name = "messages-processed.fifo"
63-
64140
fifo_queue = true
65141
content_based_deduplication = true
66142
}

infrastructure/variables.tf

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ variable "bucket_assets_name" {
22
type = string
33
}
44

5-
variable "timeless_assets_writer_name" {
5+
variable "timeless_whatsapp_app_name" {
66
type = string
7-
}
7+
}
8+
9+
variable "timeless_api_app_name" {
10+
type = string
11+
}

0 commit comments

Comments
 (0)