diff --git a/.auto.tfvars.example b/.auto.tfvars.example new file mode 100644 index 0000000..0cdd5a3 --- /dev/null +++ b/.auto.tfvars.example @@ -0,0 +1,2 @@ +cloudflare_api_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +cloudflare_zone_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" diff --git a/.gitignore b/.gitignore index 514faaa..bc7e155 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,7 @@ override.tf.json # Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan # example: *tfplan* *.lock.hcl +.auto.tfvars bootstrap *.zip diff --git a/README.md b/README.md index 8a9efb6..3ad599c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Portfolio Website -This static website is built with Go and Templ and deployed on AWS Lambda with Terraform. +This static website is built with Go and Templ, deployed on AWS Lambda with Terraform, and is accessible via a Cloudflare custom domain. Complete website in singe binary. @@ -11,35 +11,19 @@ First, build the binary for the Lambda function, which will later be zipped and ```bash make build ``` +On Cloudflare, create an API key that can write DNS records. Along with the specific Cloudflare zone ID for the domain, import the credentials into the .auto.tfvars file: -cd into aws-infra and run terraform apply: +Run terraform commands: ```bash -cd aws-infra terraform init terraform apply ``` +Three main resources are created: -output will provide the URL to the website: +Lambda function, an API Gateway, a certificate in ACM, and an updated Cloudflare domain entry. -```bash -Outputs: - -api_gateway_url = { - "value" = "https://dx90b08zwj.execute-api.us-east-1.amazonaws.com" -} -lambda_arn = { - "invoke_arn" = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:795062932265:function:portfolio-web/invocations" - "lambda_arn" = "arn:aws:lambda:us-east-1:795062932265:function:portfolio-web" - "lambda_name" = "portfolio-web" -} -``` - -Two main resources are created: - -Lambda function and API Gateway - -![lambda](public/lambda.png) +![lambda](public/lambda-domain.png) Destroy infrastructure: diff --git a/aws-infra/main.tf b/aws-infra/main.tf deleted file mode 100644 index dd7aa7a..0000000 --- a/aws-infra/main.tf +++ /dev/null @@ -1,48 +0,0 @@ -module "lambda" { - source = "./modules/lambda" - - # providers = { - # aws = aws.snadbox - # } - - lambda_config = { - work_dir = "../" - bin_name = "bootstrap" - archive_bin_name = "function.zip" - function_name = "portfolio-web" - handler = "main" - runtime = "provided.al2023" - ephemeral_storage = "512" - archive_type = "zip" - } -} - -module "api_gateway" { - source = "./modules/API-gateway" - - # providers = { - # aws = aws.snadbox - # } - - api_gw_conf = { - name = "portfolio-web" - protocol_type = "HTTP" - } - - lambda_integration_route_premission = { - lambda_invoke_arn = module.lambda.lambda_arn.invoke_arn - lambda_func_name = module.lambda.lambda_arn.lambda_name - integration_type = "AWS_PROXY" - integration_method = "POST" - connection_type = "INTERNET" - route_key = "GET /{proxy+}" - statement_id = "AllowExecutionFromAPIGateway" - action = "lambda:InvokeFunction" - principal = "apigateway.amazonaws.com" - authorizer_type = "REQUEST" - authorizer_uri = module.lambda.lambda_arn.invoke_arn - indentity_sources = ["$request.header.Authorization"] - authorizer_name = "example-authorizer" - authorizer_payload_format_version = "1.0" - } -} diff --git a/aws-infra/modules/API-gateway/LICENSE b/aws-infra/modules/API-gateway/LICENSE deleted file mode 100644 index b1bb089..0000000 --- a/aws-infra/modules/API-gateway/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 Ujstor - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/aws-infra/modules/API-gateway/main.tf b/aws-infra/modules/API-gateway/main.tf deleted file mode 100644 index 4c14af2..0000000 --- a/aws-infra/modules/API-gateway/main.tf +++ /dev/null @@ -1,77 +0,0 @@ -resource "aws_apigatewayv2_api" "lambda_api" { - name = var.api_gw_conf.name - protocol_type = var.api_gw_conf.protocol_type - - cors_configuration { - allow_headers = ["content-type", "authorization"] - allow_methods = ["GET", "POST", "PUT", "DELETE", "OPTIONS"] - allow_origins = ["*"] - } -} - -resource "aws_apigatewayv2_stage" "lambda" { - api_id = aws_apigatewayv2_api.lambda_api.id - - name = "$default" - auto_deploy = true - - access_log_settings { - destination_arn = aws_cloudwatch_log_group.api_gw.arn - - format = jsonencode({ - requestId = "$context.requestId" - sourceIp = "$context.identity.sourceIp" - requestTime = "$context.requestTime" - protocol = "$context.protocol" - httpMethod = "$context.httpMethod" - resourcePath = "$context.resourcePath" - routeKey = "$context.routeKey" - status = "$context.status" - responseLength = "$context.responseLength" - integrationErrorMessage = "$context.integrationErrorMessage" - } - ) - } -} - -resource "aws_cloudwatch_log_group" "api_gw" { - name = "/aws/api_gw/${aws_apigatewayv2_api.lambda_api.name}" - - retention_in_days = 30 -} - -resource "aws_apigatewayv2_integration" "lambda_integration" { - - api_id = aws_apigatewayv2_api.lambda_api.id - integration_type = var.lambda_integration_route_premission.integration_type - integration_uri = var.lambda_integration_route_premission.lambda_invoke_arn - integration_method = var.lambda_integration_route_premission.integration_method - connection_type = var.lambda_integration_route_premission.connection_type -} - -resource "aws_apigatewayv2_route" "route" { - - api_id = aws_apigatewayv2_api.lambda_api.id - route_key = var.lambda_integration_route_premission.route_key - target = "integrations/${aws_apigatewayv2_integration.lambda_integration.id}" -} - -resource "aws_lambda_permission" "apigateway_permission" { - - statement_id = var.lambda_integration_route_premission.statement_id - action = var.lambda_integration_route_premission.action - function_name = var.lambda_integration_route_premission.lambda_func_name - principal = var.lambda_integration_route_premission.principal - - source_arn = "${aws_apigatewayv2_api.lambda_api.execution_arn}/*/*/*" -} - -resource "aws_apigatewayv2_authorizer" "lambda_authorizer" { - - api_id = aws_apigatewayv2_api.lambda_api.id - authorizer_type = var.lambda_integration_route_premission.authorizer_type - authorizer_uri = var.lambda_integration_route_premission.authorizer_uri - identity_sources = var.lambda_integration_route_premission.indentity_sources - name = var.lambda_integration_route_premission.authorizer_name - authorizer_payload_format_version = var.lambda_integration_route_premission.authorizer_payload_format_version -} diff --git a/aws-infra/modules/API-gateway/outputs.tf b/aws-infra/modules/API-gateway/outputs.tf deleted file mode 100644 index 76677f8..0000000 --- a/aws-infra/modules/API-gateway/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "api_gateway_url" { - description = "Lambda ARN-s and name" - value = { - value = aws_apigatewayv2_api.lambda_api.api_endpoint - } -} - diff --git a/aws-infra/modules/API-gateway/terraform.tf b/aws-infra/modules/API-gateway/terraform.tf deleted file mode 100644 index 1ac87da..0000000 --- a/aws-infra/modules/API-gateway/terraform.tf +++ /dev/null @@ -1,8 +0,0 @@ -terraform { - required_providers { - aws = { - source = "hashicorp/aws" - version = "~> 5.0" - } - } -} diff --git a/aws-infra/modules/API-gateway/variables.tf b/aws-infra/modules/API-gateway/variables.tf deleted file mode 100644 index e47fee9..0000000 --- a/aws-infra/modules/API-gateway/variables.tf +++ /dev/null @@ -1,34 +0,0 @@ -variable "api_gw_conf" { - description = "API Gateway configuration" - type = object({ - name = string - protocol_type = string - }) - default = { - name = "api-gw" - protocol_type = "HTTP" - } -} - -variable "lambda_integration_route_premission" { - description = "Lambda integration, route and permission configuration" - type = object({ - lambda_invoke_arn = string - lambda_func_name = string - integration_type = string - integration_method = string - connection_type = string - route_key = string - statement_id = string - action = string - principal = string - authorizer_type = string - authorizer_uri = string - indentity_sources = set(string) - authorizer_name = string - authorizer_payload_format_version = string - }) -} - - - diff --git a/aws-infra/modules/lambda/LICENSE b/aws-infra/modules/lambda/LICENSE deleted file mode 100644 index b1bb089..0000000 --- a/aws-infra/modules/lambda/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 Ujstor - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/aws-infra/modules/lambda/main.tf b/aws-infra/modules/lambda/main.tf deleted file mode 100644 index 5881c92..0000000 --- a/aws-infra/modules/lambda/main.tf +++ /dev/null @@ -1,44 +0,0 @@ -data "archive_file" "lambda" { - - type = var.lambda_config.archive_type - source_file = "${var.lambda_config.work_dir}/${var.lambda_config.bin_name}" - output_path = "${var.lambda_config.work_dir}/${var.lambda_config.archive_bin_name}" - output_file_mode = "0666" - -} - -data "aws_iam_policy_document" "assume_role_lambda" { - statement { - effect = "Allow" - - principals { - type = "Service" - identifiers = ["lambda.amazonaws.com"] - } - - actions = ["sts:AssumeRole"] - } -} - -resource "aws_iam_role" "iam_for_lambda" { - name = "iam_for_lambda" - assume_role_policy = data.aws_iam_policy_document.assume_role_lambda.json - - inline_policy {} -} - -resource "aws_lambda_function" "lambda" { - - filename = "${var.lambda_config.work_dir}/${var.lambda_config.archive_bin_name}" - function_name = var.lambda_config.function_name - role = aws_iam_role.iam_for_lambda.arn - handler = var.lambda_config.handler - runtime = var.lambda_config.runtime - source_code_hash = data.archive_file.lambda.output_base64sha256 - - ephemeral_storage { - size = var.lambda_config.ephemeral_storage - } - - depends_on = [data.archive_file.lambda] -} diff --git a/aws-infra/modules/lambda/outputs.tf b/aws-infra/modules/lambda/outputs.tf deleted file mode 100644 index 6e7ec3d..0000000 --- a/aws-infra/modules/lambda/outputs.tf +++ /dev/null @@ -1,9 +0,0 @@ -output "lambda_arn" { - description = "Lambda ARN-s and name" - value = { - lambda_name = aws_lambda_function.lambda.function_name - lambda_arn = aws_lambda_function.lambda.arn - invoke_arn = aws_lambda_function.lambda.invoke_arn - } -} - diff --git a/aws-infra/modules/lambda/terrafrom.tf b/aws-infra/modules/lambda/terrafrom.tf deleted file mode 100644 index e464774..0000000 --- a/aws-infra/modules/lambda/terrafrom.tf +++ /dev/null @@ -1,12 +0,0 @@ -terraform { - required_providers { - aws = { - source = "hashicorp/aws" - version = "~> 5.0" - } - archive = { - source = "hashicorp/archive" - version = "~> 2.0" - } - } -} diff --git a/aws-infra/modules/lambda/variables.tf b/aws-infra/modules/lambda/variables.tf deleted file mode 100644 index 03f33de..0000000 --- a/aws-infra/modules/lambda/variables.tf +++ /dev/null @@ -1,13 +0,0 @@ -variable "lambda_config" { - description = "Lambda function configuration" - type = object({ - work_dir = string - bin_name = string - archive_bin_name = string - function_name = string - handler = string - runtime = string - ephemeral_storage = number - archive_type = string - }) -} diff --git a/aws-infra/outputs.tf b/aws-infra/outputs.tf deleted file mode 100644 index 000d96b..0000000 --- a/aws-infra/outputs.tf +++ /dev/null @@ -1,9 +0,0 @@ -output "lambda_arn" { - description = "Lambda ARN-s and name" - value = module.lambda.lambda_arn -} - -output "api_gateway_url" { - description = "API gateway URL" - value = module.api_gateway.api_gateway_url -} diff --git a/aws-infra/terraform.tf b/aws-infra/terraform.tf deleted file mode 100644 index e21a378..0000000 --- a/aws-infra/terraform.tf +++ /dev/null @@ -1,22 +0,0 @@ -terraform { - required_providers { - aws = { - source = "hashicorp/aws" - version = "~> 5.0" - } - archive = { - source = "hashicorp/archive" - version = "~> 2.0" - } - } - required_version = ">= 1.0.0, < 2.0.0" -} -provider "aws" { - region = "us-east-1" - # alias = "snadbox" - - # assume_role { - # role_arn = "arn:aws:iam::730335647984:role/OrganizationAccountAccessRole" - # } -} - diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..f384673 --- /dev/null +++ b/main.tf @@ -0,0 +1,44 @@ +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + cloudflare = { + source = "cloudflare/cloudflare" + version = "~> 4.0" + } + } + required_version = ">= 1.0.0, < 2.0.0" +} +provider "aws" { + region = "us-east-1" +} + +provider "cloudflare" { + api_token = var.cloudflare_api_token +} + +module "lambda-portfolio-web" { + source = "github.com/ujstor/aws-lambda-static-website//modules/modules/services/lambda-web-domain?ref=v0.0.1" + + environment = "prod" + go_bin_dir = "./" + + cloudflare_zone_id = var.cloudflare_zone_id + cloudflare_api_token = var.cloudflare_api_token + + domain = "ujstor.com" + lambda_func_name = "lambda-portfolio-web" +} + +variable "cloudflare_api_token" { + description = "Cloudflare API token" + type = string + sensitive = true +} + +variable "cloudflare_zone_id" { + description = "Cloudflare zone id" + type = string +} diff --git a/public/lambda-domain.png b/public/lambda-domain.png new file mode 100644 index 0000000..d765e15 Binary files /dev/null and b/public/lambda-domain.png differ