https://github.com/iac-factory/terraform-aws-advanced-api-gateway
Advanced Configuration via Open-API + AWS API Gateway
https://github.com/iac-factory/terraform-aws-advanced-api-gateway
Last synced: 2 months ago
JSON representation
Advanced Configuration via Open-API + AWS API Gateway
- Host: GitHub
- URL: https://github.com/iac-factory/terraform-aws-advanced-api-gateway
- Owner: iac-factory
- License: bsd-3-clause
- Created: 2022-07-29T21:58:57.000Z (almost 3 years ago)
- Default Branch: Development
- Last Pushed: 2023-01-09T02:23:44.000Z (over 2 years ago)
- Last Synced: 2025-02-08T17:44:58.738Z (4 months ago)
- Language: HCL
- Homepage:
- Size: 265 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# terraform-aws-advanced-api-gateway #
*Anything with a `ⓘ` is a dropdown containing additional, contextual information.*
## Setup ##
1. Initialize the module:
```bash
terraform init
```2. Create a `terraform.auto.tfvars` file:
```hcl
vpc-security-group-names = ["vpc-security-group"]
vpc-subnet-names = [ "private-subnet-*" ]
custom-cors-x-headers = ["X-No-Cache"]
```#### Inputs
| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [vpc-security-group-names](#input_vpc-security-group-names) | VPC Security Group (Array, Common-Name) | `list(string)` | n/a | yes |
| [vpc-subnet-names](#input_vpc-subnet-names) | VPC Subnet(s) (Array, Common-Name) | `list(string)` | n/a | yes |
| [api-gateway-name](#input_api-gateway-name) | AWS API Gateway Common Name | `string` | `"Example-Terraform-Advanced-API-Gateway"` | no |
| [api-gateway-stage-name](#input_api-gateway-stage-name) | AWS API Gateway Stage Name | `string` | `"testing"` | no |
| [custom-cors-x-headers](#input_custom-cors-x-headers) | List of X-* Headers for OPTIONS (CORS) Response(s) | `list(string)` | `null` | no |
| [lambda-artifacts-bucket](#input_lambda-artifacts-bucket) | AWS S3 Bucket Name | `string` | `"example-terraform-advanced-api-gateway-module-bucket"` | no |
| [lambda-authorizer-description](#input_lambda-authorizer-description) | AWS Lambda Function Description | `string` | `"(Auto-Generated AWS Lambda Authorizer Function)"` | no |
| [lambda-authorizer-name](#input_lambda-authorizer-name) | AWS Lambda Function Common Name | `string` | `"Example-Terraform-Authorizer"` | no |
| [lambda-function-description](#input_lambda-function-description) | AWS Lambda Function Description | `string` | `"(Auto-Generated AWS Lambda Function)"` | no |
| [lambda-function-name](#input_lambda-function-name) | AWS Lambda Function Common Name | `string` | `"Example-Terraform-Lambda-Function"` | no |
| [lambda-log-group-name](#input_lambda-log-group-name) | AWS CloudWatch Log Group for Lambda Function(s) | `string` | `"Example-Terraform-Lambda-Log-Group"` | no |
| [sns-topic-name](#input_sns-topic-name) | AWS SNS Topic Common Name | `string` | `"Example-Terraform-SNS-Topic"` | no |
| [sqs-queue-name](#input_sqs-queue-name) | AWS SQS Queue Common Name | `string` | `"Example-Terraform-SQS-Queue"` | no |
#### Modules| Name | Source | Version |
|------|--------|---------|
| [identity](#module_identity) | ./modules/identity | n/a |
| [lambda-authorizer](#module_lambda-authorizer) | ./modules/authorizer | n/a |
| [lambda-function](#module_lambda-function) | ./modules/lambda-function | n/a |
| [open-api](#module_open-api) | ./modules/open-api | n/a |
| [region](#module_region) | ./modules/region | n/a |
| [sns](#module_sns) | ./modules/sns | n/a |
| [sqs-queue](#module_sqs-queue) | ./modules/sqs | n/a |
#### Outputs| Name | Description |
|------|-------------|
| [data](#output_data) | Validation + Data References Dependent On User-Input |
| [schema](#output_schema) | AWS API-Gateway Open-API Export + Authorization & X-API-Gateway Extension(s) |
| [sns-publication-message](#output_sns-publication-message) | Example Message for Testing SNS + SQS Integration(s) |
#### Requirements| Name | Version |
|------|---------|
| [aws](#requirement_aws) | ~>4 |
#### Resources| Name | Type |
|------|------|
| [aws_api_gateway_account.account](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_account) | resource |
| [aws_api_gateway_deployment.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_deployment) | resource |
| [aws_api_gateway_method_settings.settings](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_method_settings) | resource |
| [aws_api_gateway_rest_api.api](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_rest_api) | resource |
| [aws_api_gateway_stage.stage](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_stage) | resource |
| [aws_cloudwatch_log_group.api-execution-logs](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_log_group) | resource |
| [aws_iam_policy.cloudwatch-policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy) | resource |
| [aws_iam_policy.sns-policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy) | resource |
| [aws_iam_policy_attachment.cloudwatch-attachment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy_attachment) | resource |
| [aws_iam_policy_attachment.sns-attachment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy_attachment) | resource |
| [aws_iam_role.cloudwatch](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role.role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role_policy.account-logging-policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |
| [aws_iam_role_policy_attachment.api-cloudwatch-attachment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_s3_bucket.lambda-function-bucket](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket) | resource |
| [aws_s3_bucket_acl.access-control-list](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_acl) | resource |
| [aws_s3_bucket_versioning.lambda-function-versioning](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_versioning) | resource |
| [aws_iam_policy.api-gateway-logging](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy) | data source |
| [aws_iam_policy_document.cloudwatch-policy-document](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
| [aws_iam_policy_document.sns-policy-document](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
| [aws_security_group.sg](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/security_group) | data source |
| [aws_subnets.subnets](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnets) | data source |---
## Documentation ##
ⓘ View (Drop-Down)
Documentation is both programmatically and conventionally generated.
**Note** - Given the workflow between `git` & `pre-commit`, when creating
a new commit, ensure to run the following:```bash
git commit -a --message "..."
```If a commit shows as a **Failure**, ***such is the job of the pre-commit hook***.
Simply re-commit and then the repository should be able to be pushed to.### Generating `tfvars` & `tfvars.json` ###
```bash
terraform-docs tfvars hcl "$(git rev-parse --show-toplevel)"terraform-docs tfvars json "$(git rev-parse --show-toplevel)"
```### `terraform-docs` ###
In order to install `terraform-docs`, ensure `brew` is installed (for MacOS systems), and run
```bash
brew install terraform-docs
```If looking to upgrade:
```bash
brew uninstall terraform-docs
brew install terraform-docs
```It's elected to use `brew uninstall` vs `brew upgrade` because old versions are then removed.
### `git` & `pre-commit` ###
Documentation is often a second thought; refer to the following steps to ensure documentation is always updated
upon `git commit`.1. Install Pre-Commit
```bash
brew install pre-commit || pip install pre-commit
```
2. Check Installation + Version
```bash
pre-commit --version
```
3. Generate Configuration (`.pre-commit-config.yaml`)
4. Configure `git` hooks
```bash
pre-commit install
pre-commit install-hooks
```
- If any errors show
```bash
git config --unset-all core.hooksPath
```**Most Importantly**
> *`pre-commit install` should always be the first command after a project is cloned.*
## References ##
- [**Versioning**](https://semver.org)
- [**The 12-Factor Application**](https://12factor.net/build-release-run)