~repos /website
git clone https://pyrossh.dev/repos/website.git
木 Personal website of pyrossh. Built with astrojs, shiki, vite.
24f49a2b
—
pyrossh 1 month ago
update routes
- infra/.terraform.lock.hcl +17 -16
- infra/main.tf +46 -42
infra/.terraform.lock.hcl
CHANGED
|
@@ -2,23 +2,24 @@
|
|
|
2
2
|
# Manual edits may be lost in future updates.
|
|
3
3
|
|
|
4
4
|
provider "registry.terraform.io/hashicorp/aws" {
|
|
5
|
-
version
|
|
5
|
+
version = "6.17.0"
|
|
6
|
+
constraints = "6.17.0"
|
|
6
7
|
hashes = [
|
|
7
|
-
"h1:
|
|
8
|
+
"h1:V7rm9KGpo/dNJG2u8XfiB9nZIsfYTbAyUE0C0eA5lTc=",
|
|
8
|
-
"zh:
|
|
9
|
+
"zh:157063d66cd4b5fc650f20f56127e19c9da5d135f4231f9ca0c19a1c0bf6e29d",
|
|
10
|
+
"zh:2050dc03304b42204e6c58bbb1a2afd4feeac7db55d7c06be77c6b1e2ab46a0f",
|
|
11
|
+
"zh:2a7f7751eef636ca064700cc4574b9b54a2596d9e2e86b91c45127410d9724c6",
|
|
9
|
-
"zh:
|
|
12
|
+
"zh:335fd7bb44bebfc4dd1db1c013947e1dde2518c6f2d846aac13b7314414ce461",
|
|
13
|
+
"zh:545c248d2eb601a7b45a34313096cae0a5201ccf31e7fd99428357ef800051e0",
|
|
14
|
+
"zh:57d19883a6367c245e885856a1c5395c4c743c20feff631ea4ec7b5e16826281",
|
|
15
|
+
"zh:66d4f080b8c268d65e8c4758ed57234e5a19deff6073ffc3753b9a4cc177b54e",
|
|
10
|
-
"zh:
|
|
16
|
+
"zh:6ad50de35970f15e1ed41d39742290c1be80600b7df3a9fbb4c02f353b9586cf",
|
|
11
|
-
"zh:
|
|
17
|
+
"zh:7af42fa531e4dcb3ddb09f71ca988e90626abbf56a45981c2a6c01d0b364a51b",
|
|
12
|
-
"zh:
|
|
18
|
+
"zh:9a6a535a879314a9137ec9d3e858b7c490a962050845cf62620ba2bf4ae916a8",
|
|
13
|
-
"zh:901d170c457c2bff244a2282d9de595bdb3ebecc33a2034c5ce8aafbcff66db9",
|
|
14
|
-
"zh:92c07d6cf530679565b87934f9f98604652d787968cce6a3d24c148479b7e34b",
|
|
15
19
|
"zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
|
|
16
|
-
"zh:
|
|
20
|
+
"zh:ca213e0262c8f686fcd40e3fc84d67b8eea1596de988c13d4a8ecd4522ede669",
|
|
21
|
+
"zh:cc4132f682e9bf17c0649928ad92af4da07ffe7bccfe615d955225cdcf9e7f09",
|
|
17
|
-
"zh:
|
|
22
|
+
"zh:dfe6de43496d2e2b6dff131fef6ada1e15f1fbba3d47235c751564d22003d05e",
|
|
18
|
-
"zh:baaf16c98b81bad070e0908f057a97108ecd6e8c9f754d7a79b18df4c8453279",
|
|
19
|
-
"zh:
|
|
23
|
+
"zh:e37d035fa02693a3d47fe636076cce50b6579b6adc0a36a7cf0456a2331c99ec",
|
|
20
|
-
"zh:e2b84c1d40b3f2c4b1d74bf170b9e932983b61bac0e6dab2e36f5057ddcc997f",
|
|
21
|
-
"zh:e49c92cb29c53b4573ed4d9c946486e6bcfc1b63f1aee0c79cc7626f3d9add03",
|
|
22
|
-
"zh:efae8e339c4b13f546e0f96c42eb95bf8347de22e941594849b12688574bf380",
|
|
23
24
|
]
|
|
24
25
|
}
|
infra/main.tf
CHANGED
|
@@ -2,7 +2,7 @@ terraform {
|
|
|
2
2
|
required_providers {
|
|
3
3
|
aws = {
|
|
4
4
|
source = "hashicorp/aws"
|
|
5
|
-
version = "=
|
|
5
|
+
version = "= 6.17.0"
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
}
|
|
@@ -159,6 +159,27 @@ resource "aws_cloudfront_function" "zip_redirector" {
|
|
|
159
159
|
CODE
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
resource "aws_cloudfront_function" "bundle_redirector" {
|
|
163
|
+
name = "bundle_redirector"
|
|
164
|
+
runtime = "cloudfront-js-2.0"
|
|
165
|
+
publish = true
|
|
166
|
+
code = <<CODE
|
|
167
|
+
function handler(event) {
|
|
168
|
+
const request = event.request;
|
|
169
|
+
const uri = request.uri;
|
|
170
|
+
|
|
171
|
+
if (uri.endsWith('.bundle')) {
|
|
172
|
+
request.uri = "/" + request.uri.replace("/repos/", "");
|
|
173
|
+
return request;
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
statusCode: 404,
|
|
177
|
+
statusDescription: 'Not Found',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
CODE
|
|
181
|
+
}
|
|
182
|
+
|
|
162
183
|
resource "aws_cloudfront_distribution" "s3_distribution" {
|
|
163
184
|
origin {
|
|
164
185
|
domain_name = aws_s3_bucket.website_bucket.bucket_regional_domain_name
|
|
@@ -184,6 +205,30 @@ resource "aws_cloudfront_distribution" "s3_distribution" {
|
|
|
184
205
|
}
|
|
185
206
|
}
|
|
186
207
|
|
|
208
|
+
ordered_cache_behavior {
|
|
209
|
+
path_pattern = "/repos/*.bundle"
|
|
210
|
+
allowed_methods = ["GET", "HEAD"]
|
|
211
|
+
cached_methods = ["GET", "HEAD"]
|
|
212
|
+
target_origin_id = aws_s3_bucket.repos_bucket.bucket_regional_domain_name
|
|
213
|
+
|
|
214
|
+
forwarded_values {
|
|
215
|
+
query_string = false
|
|
216
|
+
cookies {
|
|
217
|
+
forward = "none"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
min_ttl = 0
|
|
222
|
+
default_ttl = 86400
|
|
223
|
+
max_ttl = 31536000
|
|
224
|
+
compress = true
|
|
225
|
+
viewer_protocol_policy = "redirect-to-https"
|
|
226
|
+
function_association {
|
|
227
|
+
event_type = "viewer-request"
|
|
228
|
+
function_arn = aws_cloudfront_function.bundle_redirector.arn
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
187
232
|
ordered_cache_behavior {
|
|
188
233
|
path_pattern = "/zips/*"
|
|
189
234
|
allowed_methods = ["GET", "HEAD"]
|
|
@@ -272,44 +317,3 @@ resource "aws_route53_record" "a_record_domain" {
|
|
|
272
317
|
evaluate_target_health = false #
|
|
273
318
|
}
|
|
274
319
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
resource "aws_iam_user" "repos_bucket_read_user" {
|
|
278
|
-
name = "repos_bucket_read_user"
|
|
279
|
-
path = "/"
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
data "aws_iam_policy_document" "repos_bucket_read_policy" {
|
|
283
|
-
statement {
|
|
284
|
-
actions = [
|
|
285
|
-
"s3:GetObject",
|
|
286
|
-
"s3:ListBucket"
|
|
287
|
-
]
|
|
288
|
-
resources = [
|
|
289
|
-
aws_s3_bucket.repos_bucket.arn,
|
|
290
|
-
"${aws_s3_bucket.repos_bucket.arn}/*",
|
|
291
|
-
]
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
resource "aws_iam_policy" "repos_bucket_read_policy" {
|
|
296
|
-
name = "repos_bucket_read_policy"
|
|
297
|
-
policy = data.aws_iam_policy_document.repos_bucket_read_policy.json
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
resource "aws_iam_user_policy_attachment" "repos_bucket_read_attachment" {
|
|
301
|
-
user = aws_iam_user.repos_bucket_read_user.name
|
|
302
|
-
policy_arn = aws_iam_policy.repos_bucket_read_policy.arn
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
resource "aws_iam_access_key" "repos_bucket_read_key" {
|
|
306
|
-
user = aws_iam_user.repos_bucket_read_user.name
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
output "aws_access_key_id" {
|
|
310
|
-
value = aws_iam_access_key.repos_bucket_read_key.id
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
output "aws_secret_access_key" {
|
|
314
|
-
value = aws_iam_access_key.repos_bucket_read_key.secret
|
|
315
|
-
}
|