~repos /website

#astro#js#html#css

git clone https://pyrossh.dev/repos/website.git

木 Personal website of pyrossh. Built with astrojs, shiki, vite.


24f49a2b pyrossh

1 month ago
update routes
Files changed (2) hide show
  1. infra/.terraform.lock.hcl +17 -16
  2. 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.99.1"
5
+ version = "6.17.0"
6
+ constraints = "6.17.0"
6
7
  hashes = [
7
- "h1:xgPyZArCfKVMy8sThzhb0IernbFy0fJGm897ztejZAQ=",
8
+ "h1:V7rm9KGpo/dNJG2u8XfiB9nZIsfYTbAyUE0C0eA5lTc=",
8
- "zh:00b0a61c6d295300f0aa7a79a7d40e9f836164f1fff816d38324c148cd846887",
9
+ "zh:157063d66cd4b5fc650f20f56127e19c9da5d135f4231f9ca0c19a1c0bf6e29d",
10
+ "zh:2050dc03304b42204e6c58bbb1a2afd4feeac7db55d7c06be77c6b1e2ab46a0f",
11
+ "zh:2a7f7751eef636ca064700cc4574b9b54a2596d9e2e86b91c45127410d9724c6",
9
- "zh:1ee9d5ccb67378704642db62113ac6c0d56d69408a9c1afb9a8e14b095fc0733",
12
+ "zh:335fd7bb44bebfc4dd1db1c013947e1dde2518c6f2d846aac13b7314414ce461",
13
+ "zh:545c248d2eb601a7b45a34313096cae0a5201ccf31e7fd99428357ef800051e0",
14
+ "zh:57d19883a6367c245e885856a1c5395c4c743c20feff631ea4ec7b5e16826281",
15
+ "zh:66d4f080b8c268d65e8c4758ed57234e5a19deff6073ffc3753b9a4cc177b54e",
10
- "zh:2035977ed418dcb18290785c1eeb79b7133b39f718c470346e043ac48887ffc7",
16
+ "zh:6ad50de35970f15e1ed41d39742290c1be80600b7df3a9fbb4c02f353b9586cf",
11
- "zh:67e3ca1bf7061900f81cf958d5c771a2fd6048c2b185bec7b27978349b173a90",
17
+ "zh:7af42fa531e4dcb3ddb09f71ca988e90626abbf56a45981c2a6c01d0b364a51b",
12
- "zh:87fadbe5de7347ede72ad879ff8d8d9334103cd9aa4a321bb086bfac91654944",
18
+ "zh:9a6a535a879314a9137ec9d3e858b7c490a962050845cf62620ba2bf4ae916a8",
13
- "zh:901d170c457c2bff244a2282d9de595bdb3ebecc33a2034c5ce8aafbcff66db9",
14
- "zh:92c07d6cf530679565b87934f9f98604652d787968cce6a3d24c148479b7e34b",
15
19
  "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
16
- "zh:a7d4803b4c5ff17f029f8b270c91480442ece27cec7922c38548bcfea2ac2d26",
20
+ "zh:ca213e0262c8f686fcd40e3fc84d67b8eea1596de988c13d4a8ecd4522ede669",
21
+ "zh:cc4132f682e9bf17c0649928ad92af4da07ffe7bccfe615d955225cdcf9e7f09",
17
- "zh:afda848da7993a07d29018ec25ab6feda652e01d4b22721da570ce4fcc005292",
22
+ "zh:dfe6de43496d2e2b6dff131fef6ada1e15f1fbba3d47235c751564d22003d05e",
18
- "zh:baaf16c98b81bad070e0908f057a97108ecd6e8c9f754d7a79b18df4c8453279",
19
- "zh:c3dd496c5014427599d6b6b1c14c7ebb09a15df78918ae0be935e7bfa83b894c",
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.99.1"
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
- }