Module: efs
Terraform module to provision an AWS EFS Network File System.
NOTE: Release 0.32.0 contains breaking changes. To preserve the SG, follow the instructions in the 0.30.1 to 0.32.x+ migration path.
Usage
Include this repository as a module in your existing terraform code:
module "efs" {
source = "cloudposse/efs/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
namespace = "eg"
stage = "test"
name = "app"
region = "us-west-1"
vpc_id = var.vpc_id
subnets = var.private_subnets
zone_id = [var.aws_route53_dns_zone_id]
allowed_security_group_ids = [var.security_group_id]
}
Variables
Required Variables
region(string) requiredAWS Region
subnets(list(string)) requiredSubnet IDs
vpc_id(string) requiredVPC ID
Optional Variables
access_points(map(map(map(any)))) optionalA map of the access points you would like in your EFS volume
See [examples/complete] for an example on how to set this up.
All keys are strings. The primary keys are the names of access points.
The secondary keys areposix_userandcreation_info.
The secondary_gids key should be a comma separated value.
More information can be found in the terraform resource efs_access_point.Default value:
{ }additional_security_group_rules(list(any)) optionalA list of Security Group rule objects to add to the created security group, in addition to the ones
this module normally creates. (To suppress the module's rules, setcreate_security_groupto false
and supply your own security group viaassociated_security_group_ids.)
The keys and values of the objects are fully compatible with theaws_security_group_ruleresource, except
forsecurity_group_idwhich will be ignored, and the optional "key" which, if provided, must be unique and known at "plan" time.
To get more info see https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule .Default value:
[ ]allow_all_egress(bool) optionalPassed to the security group module (if one is created).
Default value:
trueallowed_cidr_blocks(list(string)) optionalThe CIDR blocks from which to allow
ingresstraffic to the EFSDefault value:
[ ]allowed_ipv6_cidr_blocks(list(string)) optionalList of IPv6 CIDR blocks allowed to access the cluster
Default value:
[ ]allowed_security_group_ids(list(string)) optionalA list of IDs of Security Groups to allow access to the security group created by this module.
Default value:
[ ]associated_security_group_ids(list(string)) optionalA list of IDs of Security Groups to associate the EFS Mount Targets with, in addition to the created security group.
These security groups will not be modified and, ifcreate_security_groupisfalse, must have rules providing the desired access.Default value:
[ ]availability_zone_name(string) optionalAWS Availability Zone in which to create the file system. Used to create a file system that uses One Zone storage classes. If set, a single subnet in the same availability zone should be provided to
subnetsDefault value:
nullbypass_policy_lockout_safety_check(bool) optionalA flag to indicate whether to bypass the
aws_efs_file_system_policylockout safety check.Default value:
falsecreate_security_group(bool) optionalSet
trueto create and configure a new security group. If false,associated_security_group_idsmust be provided.Default value:
truedns_name(string) optionalName of the CNAME record to create
Default value:
""efs_backup_policy_enabled(bool) optionalIf
true, it will turn on automatic backups.Default value:
falseefs_file_system_policy(string) optionalEFS policy to attach.
Default value:
""encrypted(bool) optionalIf true, the file system will be encrypted
Default value:
truekms_key_id(string) optionalIf set, use a specific KMS key
Default value:
nullmount_target_ip_address(string) optionalThe address (within the address range of the specified subnet) at which the file system may be mounted via the mount target
Default value:
nullmount_target_ip_address_type(string) optionalIP address type for the mount target. Valid values are IPV4_ONLY (only IPv4 addresses), IPV6_ONLY (only IPv6 addresses), and DUAL_STACK (dual-stack, both IPv4 and IPv6 addresses). Defaults to IPV4_ONLY.
Default value:
"IPV4_ONLY"mount_target_ipv6_address(string) optionalIPv6 address to use. Valid only when mount_target_ip_address_type is set to IPV6_ONLY or DUAL_STACK.
Default value:
nullperformance_mode(string) optionalThe file system performance mode. Can be either
generalPurposeormaxIODefault value:
"generalPurpose"preserve_security_group_id(bool) optionalIf
true, instruct the underlying security group module to attempt to preserve
the security group ID across rule changes. See the upstream CloudPosse
terraform-aws-security-groupmodule README for details and caveats.Default value:
falseprovisioned_throughput_in_mibps(number) optionalThe throughput, measured in MiB/s, that you want to provision for the file system. Only applicable with
throughput_modeset to provisionedDefault value:
0security_group_create_before_destroy(bool) optionalSet
trueto enable Terraformcreate_before_destroybehavior on the created security group.
Note that changing this value will always cause the security group to be replaced.Default value:
truesecurity_group_create_timeout(string) optionalHow long to wait for the security group to be created.
Default value:
"10m"security_group_delete_timeout(string) optionalHow long to retry on
DependencyViolationerrors during security group deletion from
lingering ENIs left by certain AWS services such as Elastic Load Balancing.Default value:
"15m"security_group_description(string) optionalThe description to assign to the created Security Group.
Warning: Changing the description causes the security group to be replaced.Default value:
"EFS Security Group"security_group_name(list(string)) optionalThe name to assign to the created security group. Must be unique within the VPC.
If not provided, will be derived from thenull-label.contextpassed in.
Ifcreate_before_destroyis true, will be used as a name prefix.Default value:
[ ]security_groups(list(string)) optionalDEPRECATED: Use
allowed_security_group_idsinstead.
A list of Security Group IDs to associate with EFS.Default value:
[ ]throughput_mode(string) optionalThroughput mode for the file system. Defaults to bursting. Valid values:
bursting,provisioned,elastic. When usingprovisioned, also setprovisioned_throughput_in_mibpsDefault value:
"bursting"transition_to_archive(list(string)) optionalIndicates how long it takes to transition files to the Glacier storage class. Valid values: AFTER_1_DAY, AFTER_7_DAYS, AFTER_14_DAYS, AFTER_30_DAYS, AFTER_60_DAYS, AFTER_90_DAYS, AFTER_180_DAYS, AFTER_270_DAYS and AFTER_365_DAYS. Default (no value) means "never".
Default value:
[ ]transition_to_ia(list(string)) optionalIndicates how long it takes to transition files to the Infrequent Access (IA) storage class. Valid values: AFTER_1_DAY, AFTER_7_DAYS, AFTER_14_DAYS, AFTER_30_DAYS, AFTER_60_DAYS, AFTER_90_DAYS, AFTER_180_DAYS, AFTER_270_DAYS and AFTER_365_DAYS. Default (no value) means "never".
Default value:
[ ]transition_to_primary_storage_class(list(string)) optionalDescribes the policy used to transition a file from Infrequent Access (IA) storage to primary storage. Valid values: AFTER_1_ACCESS.
Default value:
[ ]zone_id(list(string)) optionalRoute53 DNS Zone ID as list of string (0 or 1 items). If empty, no custom DNS name will be published.
If the list contains a single Zone ID, a custom DNS name will be pulished in that zone.
Can also be a plain string, but that use is DEPRECATED because of Terraform issues.Default value:
[ ]
Context Variables
The following variables are defined in the context.tf file of this module and part of the terraform-null-label pattern.
context.tf file of this module and part of the terraform-null-label pattern.Outputs
access_point_arnsEFS AP ARNs
access_point_idsEFS AP ids
arnEFS ARN
dns_nameEFS DNS name
hostRoute53 DNS hostname for the EFS
idEFS ID
mount_target_dns_namesList of EFS mount target DNS names
mount_target_idsList of EFS mount target IDs (one per Availability Zone)
mount_target_ipsList of EFS mount target IPs (one per Availability Zone)
mount_target_ipv6_addressesList of EFS mount target IPv6 addresses (one per Availability Zone)
network_interface_idsList of mount target network interface IDs
security_group_arnEFS Security Group ARN
security_group_idEFS Security Group ID
security_group_nameEFS Security Group name
Dependencies
Requirements
terraform, version:>= 1.1.0aws, version:>= 5.32.0
Providers
aws, version:>= 5.32.0
Modules
| Name | Version | Source | Description |
|---|---|---|---|
dns | 0.13.0 | cloudposse/route53-cluster-hostname/aws | n/a |
security_group | 2.2.0 | cloudposse/security-group/aws | n/a |
this | 0.25.0 | cloudposse/label/null | n/a |
Resources
The following resources are used by this module:
aws_efs_access_point.default(resource)aws_efs_backup_policy.policy(resource)aws_efs_file_system.default(resource)aws_efs_file_system_policy.policy(resource)aws_efs_mount_target.default(resource)
Data Sources
The following data sources are used by this module: