diff --git a/README.md b/README.md index ef42097..2796830 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# [Personal website](ivanch.me) +# [Personal website](https://ivanch.me) ## Running 1. `git submodule update --init --recursive` diff --git a/content/posts/api-gateway-terraform.md b/content/posts/api-gateway-terraform.md index a79e468..2a87d46 100644 --- a/content/posts/api-gateway-terraform.md +++ b/content/posts/api-gateway-terraform.md @@ -1,7 +1,7 @@ --- title: "AWS API Gateway Terraform" -date: 2022-12-01T15:56:53-03:00 -draft: true +date: 2022-12-01T15:30:00-03:00 +draft: false summary: "How to create API Gateway endpoints with Terraform." --- @@ -45,7 +45,8 @@ resource "aws_api_gateway_integration" "api_users_all" { type = "HTTP_PROXY" integration_http_method = "GET" uri = "https://api.example.com/users/all" - request_parameters = { + + request_parameters = { "integration.request.header.Authorization" = true } } @@ -119,6 +120,7 @@ output "resource_id" { As we referenced the `resource_id` in the `outputs.tf`, we need to define it in the `locals.tf`. ```terraform locals { + // this join is because we can't do aws_api_gateway_resource.api_resource.id resource_id = join("", aws_api_gateway_resource.api_resource[*].id) // if starts with '{' and ends with '}' then it's a path parameter @@ -159,7 +161,7 @@ resource "aws_api_gateway_method" "api_method" { http_method = var.http_methods[count.index] authorization = var.authorization ? "CUSTOM" : "NONE" - // Got a path variable? No problem! We deal with that too right here. + // Got a path variable? No problem! We deal with that too right here request_parameters = merge(local.method_request_parameters, local.path_variable != "" ? { "method.request.path.${local.path_variable}" = local.path_variable != "" } : {}) @@ -194,9 +196,9 @@ Now that we have the module, we can use it in our `main.tf` file. We will use th module "api_users" { source = "./api" - parent_id = local.gateway.gateway_config.root_endpoints.api_root + gateway_id = gateway.outputs.gateway.gateway_config.gateway_id + parent_id = gateway.outputs.gateway.gateway_config.root_endpoints.api_root path_part = "users" - gateway_id = local.gateway.gateway_config.gateway_id only_resource = true } @@ -204,33 +206,32 @@ module "api_users" { module "api_users_all" { source = "./api" + gateway_id = gateway.outputs.gateway.gateway_config.gateway_id parent_id = module.api_users.resource_id path_part = "all" http_methods = ["GET"] uri = "http://api.example.com/users/all" - gateway_id = local.gateway.gateway_config.gateway_id - authorizer_id = local.gateway.gateway_config.authorizers.default } # /users/all/{userid} (get, post, put, delete) module "api_users_all" { source = "./api" + gateway_id = gateway.outputs.gateway.gateway_config.gateway_id parent_id = module.api_users_all.resource_id path_part = "{userid}" http_methods = ["GET", "POST", "PUT", "DELETE"] uri = "http://api.example.com/users/all/{userid}" - gateway_id = local.gateway.gateway_config.gateway_id } # and so on... ``` ## Conclusion -For one endpoint, we went from having to manage 11 lines splitted in 3 files to just 5 lines inside of one file. If you have to manage hundreds of endpoints, that will be a great help. +For one endpoint, we went from having to manage 15 lines splitted in 3 files to just 5 lines inside of one file. If you have to manage hundreds of endpoints, that will be a great help. ## WWW-Authenticate header -We can also add the `WWW-Authenticate` header to the request for example. We tried to do that by adding it to the files properly, but that didn't work. The reason is that the API Gateway was not passing the `WWW-Authenticate` to our API, and that's because of the name of the header. You may call it `WWW-Authenticate-Header` for example and it will work. +We can also add the `WWW-Authenticate` header to the request for example. We tried to do that by adding it to the files properly, but it didn't work. The reason was that the API Gateway was not passing the `WWW-Authenticate` to our API, and that's because of the name of the header. You may call it `WWW-Authenticate-Header` for example and it will work. ## Disclaimer This code has not been tested "as is", though it has been tested as part of a bigger project. There is always room for improvements and more possibilities depending on the context, but it's a good start. \ No newline at end of file diff --git a/content/posts/selfhost.md b/content/posts/selfhost.md index 749fe90..621df48 100644 --- a/content/posts/selfhost.md +++ b/content/posts/selfhost.md @@ -14,7 +14,7 @@ Litty bitty apocalyptic. ## Misc * [Netdata](https://hub.docker.com/r/netdata/netdata/) - Server monitor. -* [Heimdall](https://www.heimdall.io/) - Panel to add all your selfhosted services. +* [Heimdall](https://hub.docker.com/r/linuxserver/heimdall/) - Panel to add all your selfhosted services. * [Statping](https://statping.com/) - Application ping. * [Uptime Kuma](https://uptime.kuma.pet/) - Application ping (beautier). * [Gitea](https://gitea.com/) - Homemade GitHub. @@ -22,11 +22,11 @@ Litty bitty apocalyptic. * [Code Server](https://hub.docker.com/r/linuxserver/code-server/) - VSCode inside of a Docker. * [FileBrowser](https://filebrowser.org/installation#docker/) - The name says by itself. -## Mídia +## Media * [Transmission](https://hub.docker.com/r/linuxserver/transmission/) - Torrent client with a web interface. * [Sonarr](https://hub.docker.com/r/linuxserver/sonarr/) - TV shows management (Torrent integration). * [Radarr](https://hub.docker.com/r/linuxserver/radarr/) - Movies management (Torrent integration). * [Jekyll](https://hub.docker.com/r/jekyll/jekyll/) - Homemade Netflix. -## Joguinhos +## Game server * [Minecraft Server](https://hub.docker.com/r/itzg/minecraft-server/) - The name says by itself². \ No newline at end of file