Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "terraform"
directory: "/"
schedule:
interval: "weekly"
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "terraform"
directory: "/"
schedule:
interval: "weekly"
98 changes: 49 additions & 49 deletions .github/release-drafter.yml
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
---
name-template: "$RESOLVED_VERSION"
tag-template: "$RESOLVED_VERSION"
template: |
# Changelog
$CHANGES
---
See details of [all code changes](https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...$RESOLVED_VERSION) since previous release.
categories:
- title: ":warning: Breaking Changes"
labels:
- "major"
- title: "🚀 Features"
labels:
- "minor"
- title: "🔧 Fixes"
collapse-after: 3
labels:
- "patch"
autolabeler:
- label: "major"
branch:
- '/(patch|bug|fix|feature|chore)!\/.+/'
- label: "minor"
branch:
- '/feature\/.+/'
- label: "patch"
branch:
- '/(patch|bug|fix|chore)\/.+/'
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
version-resolver:
major:
labels:
- "major"
minor:
labels:
- "minor"
patch:
labels:
- "patch"
- "dependencies"
default: patch
---
name-template: "$RESOLVED_VERSION"
tag-template: "$RESOLVED_VERSION"
template: |
# Changelog

$CHANGES

---

See details of [all code changes](https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...$RESOLVED_VERSION) since previous release.

categories:
- title: ":warning: Breaking Changes"
labels:
- "major"
- title: "🚀 Features"
labels:
- "minor"
- title: "🔧 Fixes"
collapse-after: 3
labels:
- "patch"

autolabeler:
- label: "major"
branch:
- '/(patch|bug|fix|feature|chore)!\/.+/'
- label: "minor"
branch:
- '/feature\/.+/'
- label: "patch"
branch:
- '/(patch|bug|fix|chore)\/.+/'

change-template: "- $TITLE @$AUTHOR (#$NUMBER)"

version-resolver:
major:
labels:
- "major"
minor:
labels:
- "minor"
patch:
labels:
- "patch"
- "dependencies"
default: patch
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
terraform.*
.terraform/
.repo/
components/
.semverbot.toml
Expand Down
19 changes: 18 additions & 1 deletion .pre-commit-config.yaml
10 changes: 5 additions & 5 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
conftest 0.56.0
golang 1.24.2
golangci-lint 2.2.1
pre-commit 4.2.0
golang 1.25.4
golangci-lint 2.6.2
pre-commit 4.4.0
regula 3.2.1 # https://github.com/launchbynttdata/asdf-regula
terraform 1.12.2
terraform 1.14.0
terraform-docs 0.20.0
tflint 0.57.0
tflint 0.60.0
26 changes: 22 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,26 @@ A Terraform primitive module for creating and managing AWS Elastic File System (
- **Comprehensive Tagging**: Support for custom tags with automatic ManagedBy tag and optional Name tag
- **Input Validation**: Built-in validation for performance mode and throughput mode values

## Recent Changes

### Output Optimization (Breaking Change)
To prevent idempotency issues when this module is used in collection modules, the following computed/dynamic outputs have been removed:
- `file_system_availability_zone_id`
- `file_system_availability_zone_name`
- `file_system_number_of_mount_targets`
- `file_system_owner_id`
- `file_system_size_in_bytes`

These values change independently of input variables and can cause unnecessary plan differences in parent modules. If you need these values, query them directly using the AWS SDK or CLI after resource creation.

### Dependency Updates
- **Go**: Updated to version 1.25.4
- **AWS SDK for Go v2**: Updated to latest versions for improved performance and security
- `aws-sdk-go-v2` v1.40.1
- `aws-sdk-go-v2/service/efs` v1.41.7
- **Terratest**: Updated to v0.54.0
- **LCAF Testing Library**: Updated to v1.0.4

## Usage

### Basic Example
Expand Down Expand Up @@ -391,6 +411,7 @@ terraform destroy -var-file=test.tfvars
- Use clear, descriptive output names.
- Include descriptions for all outputs.
- Consider downstream module needs.
- **Avoid computed/dynamic outputs** that change independently of input changes, as these can cause idempotency issues when this module is used in collection modules. Only expose static outputs that are directly derived from input variables.

### Tags

Expand Down Expand Up @@ -529,7 +550,7 @@ No modules.
| <a name="input_performance_mode"></a> [performance\_mode](#input\_performance\_mode) | The file system performance mode. Valid values: 'generalPurpose' (default, lower latency for most workloads) or 'maxIO' (higher aggregate throughput for highly parallelized workloads) | `string` | `"generalPurpose"` | no |
| <a name="input_throughput_mode"></a> [throughput\_mode](#input\_throughput\_mode) | Throughput mode for the file system. Valid values: 'bursting' (scales with file system size), 'elastic' (automatically scales based on workload), or 'provisioned' (fixed throughput - requires provisioned\_throughput\_in\_mibps to be set) | `string` | `"bursting"` | no |
| <a name="input_provisioned_throughput_in_mibps"></a> [provisioned\_throughput\_in\_mibps](#input\_provisioned\_throughput\_in\_mibps) | The throughput, measured in MiB/s, that you want to provision for the file system. Only applicable when throughput\_mode is set to 'provisioned' | `number` | `null` | no |
| <a name="input_lifecycle_policy"></a> [lifecycle\_policy](#input\_lifecycle\_policy) | Lifecycle policy for the file system. Supports transition\_to\_ia (AFTER\_7\_DAYS, AFTER\_14\_DAYS, AFTER\_30\_DAYS, AFTER\_60\_DAYS, AFTER\_90\_DAYS, AFTER\_1\_DAY, AFTER\_180\_DAYS, AFTER\_270\_DAYS, AFTER\_365\_DAYS), transition\_to\_primary\_storage\_class (AFTER\_1\_ACCESS), and transition\_to\_archive (AFTER\_1\_DAY, AFTER\_7\_DAYS, AFTER\_14\_DAYS, AFTER\_30\_DAYS, AFTER\_60\_DAYS, AFTER\_90\_DAYS, AFTER\_180\_DAYS, AFTER\_270\_DAYS, AFTER\_365\_DAYS) | <pre>object({<br/> transition_to_ia = optional(string)<br/> transition_to_primary_storage_class = optional(string)<br/> transition_to_archive = optional(string)<br/> })</pre> | `null` | no |
| <a name="input_lifecycle_policy"></a> [lifecycle\_policy](#input\_lifecycle\_policy) | Lifecycle policy for the file system. | <pre>object({<br/> transition_to_ia = optional(string)<br/> transition_to_primary_storage_class = optional(string)<br/> transition_to_archive = optional(string)<br/> })</pre> | `null` | no |
| <a name="input_protection"></a> [protection](#input\_protection) | Protection configuration for the file system. Supports replication\_overwrite (ENABLED, DISABLED, REPLICATING) | <pre>object({<br/> replication_overwrite = optional(string)<br/> })</pre> | `null` | no |
| <a name="input_tags"></a> [tags](#input\_tags) | A map of tags to assign to the EFS file system | `map(string)` | `{}` | no |

Expand All @@ -543,8 +564,5 @@ No modules.
| <a name="output_file_system_creation_token"></a> [file\_system\_creation\_token](#output\_file\_system\_creation\_token) | The creation token of the EFS file system |
| <a name="output_file_system_availability_zone_id"></a> [file\_system\_availability\_zone\_id](#output\_file\_system\_availability\_zone\_id) | The identifier of the Availability Zone in which the file system's One Zone storage classes exist |
| <a name="output_file_system_availability_zone_name"></a> [file\_system\_availability\_zone\_name](#output\_file\_system\_availability\_zone\_name) | The Availability Zone name in which the file system's One Zone storage classes exist |
| <a name="output_file_system_number_of_mount_targets"></a> [file\_system\_number\_of\_mount\_targets](#output\_file\_system\_number\_of\_mount\_targets) | The current number of mount targets that the file system has |
| <a name="output_file_system_owner_id"></a> [file\_system\_owner\_id](#output\_file\_system\_owner\_id) | The AWS account that created the file system |
| <a name="output_file_system_size_in_bytes"></a> [file\_system\_size\_in\_bytes](#output\_file\_system\_size\_in\_bytes) | The latest known metered size (in bytes) of data stored in the file system |
| <a name="output_file_system_name"></a> [file\_system\_name](#output\_file\_system\_name) | The value of the file system's Name tag |
<!-- END_TF_DOCS -->
3 changes: 0 additions & 3 deletions examples/complete/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -317,8 +317,5 @@ No resources.
| <a name="output_file_system_creation_token"></a> [file\_system\_creation\_token](#output\_file\_system\_creation\_token) | The creation token of the EFS file system |
| <a name="output_file_system_availability_zone_id"></a> [file\_system\_availability\_zone\_id](#output\_file\_system\_availability\_zone\_id) | The identifier of the Availability Zone in which the file system's One Zone storage classes exist |
| <a name="output_file_system_availability_zone_name"></a> [file\_system\_availability\_zone\_name](#output\_file\_system\_availability\_zone\_name) | The Availability Zone name in which the file system's One Zone storage classes exist |
| <a name="output_file_system_number_of_mount_targets"></a> [file\_system\_number\_of\_mount\_targets](#output\_file\_system\_number\_of\_mount\_targets) | The current number of mount targets that the file system has |
| <a name="output_file_system_owner_id"></a> [file\_system\_owner\_id](#output\_file\_system\_owner\_id) | The AWS account that created the file system |
| <a name="output_file_system_size_in_bytes"></a> [file\_system\_size\_in\_bytes](#output\_file\_system\_size\_in\_bytes) | The latest known metered size (in bytes) of data stored in the file system |
| <a name="output_file_system_name"></a> [file\_system\_name](#output\_file\_system\_name) | The value of the file system's Name tag |
<!-- END_TF_DOCS -->
15 changes: 0 additions & 15 deletions examples/complete/outputs.tf
Original file line number Diff line number Diff line change
Expand Up @@ -40,21 +40,6 @@ output "file_system_availability_zone_name" {
value = module.efs_complete.file_system_availability_zone_name
}

output "file_system_number_of_mount_targets" {
description = "The current number of mount targets that the file system has"
value = module.efs_complete.file_system_number_of_mount_targets
}

output "file_system_owner_id" {
description = "The AWS account that created the file system"
value = module.efs_complete.file_system_owner_id
}

output "file_system_size_in_bytes" {
description = "The latest known metered size (in bytes) of data stored in the file system"
value = module.efs_complete.file_system_size_in_bytes
}

output "file_system_name" {
description = "The value of the file system's Name tag"
value = module.efs_complete.file_system_name
Expand Down
7 changes: 3 additions & 4 deletions examples/simple/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ After successful deployment, you'll receive:
- `file_system_arn`: Full ARN of the file system
- `file_system_dns_name`: DNS name for mounting (e.g., `fs-12345678.efs.us-east-1.amazonaws.com`)
- `file_system_creation_token`: The unique creation token
- Additional outputs for availability zones, mount targets, size, etc.
- `file_system_name`: The friendly name assigned to the file system

**Note**: Dynamic computed outputs (such as availability zones, mount target count, owner ID, and size in bytes) have been intentionally removed to prevent idempotency issues when this module is used in collection modules.

## Next Steps

Expand Down Expand Up @@ -174,8 +176,5 @@ No resources.
| <a name="output_file_system_creation_token"></a> [file\_system\_creation\_token](#output\_file\_system\_creation\_token) | The creation token of the EFS file system |
| <a name="output_file_system_availability_zone_id"></a> [file\_system\_availability\_zone\_id](#output\_file\_system\_availability\_zone\_id) | The identifier of the Availability Zone in which the file system's One Zone storage classes exist |
| <a name="output_file_system_availability_zone_name"></a> [file\_system\_availability\_zone\_name](#output\_file\_system\_availability\_zone\_name) | The Availability Zone name in which the file system's One Zone storage classes exist |
| <a name="output_file_system_number_of_mount_targets"></a> [file\_system\_number\_of\_mount\_targets](#output\_file\_system\_number\_of\_mount\_targets) | The current number of mount targets that the file system has |
| <a name="output_file_system_owner_id"></a> [file\_system\_owner\_id](#output\_file\_system\_owner\_id) | The AWS account that created the file system |
| <a name="output_file_system_size_in_bytes"></a> [file\_system\_size\_in\_bytes](#output\_file\_system\_size\_in\_bytes) | The latest known metered size (in bytes) of data stored in the file system |
| <a name="output_file_system_name"></a> [file\_system\_name](#output\_file\_system\_name) | The value of the file system's Name tag |
<!-- END_TF_DOCS -->
15 changes: 0 additions & 15 deletions examples/simple/outputs.tf
Original file line number Diff line number Diff line change
Expand Up @@ -40,21 +40,6 @@ output "file_system_availability_zone_name" {
value = module.efs.file_system_availability_zone_name
}

output "file_system_number_of_mount_targets" {
description = "The current number of mount targets that the file system has"
value = module.efs.file_system_number_of_mount_targets
}

output "file_system_owner_id" {
description = "The AWS account that created the file system"
value = module.efs.file_system_owner_id
}

output "file_system_size_in_bytes" {
description = "The latest known metered size (in bytes) of data stored in the file system"
value = module.efs.file_system_size_in_bytes
}

output "file_system_name" {
description = "The value of the file system's Name tag"
value = module.efs.file_system_name
Expand Down
Loading
Loading