kinesis-firehose-stream
This component provisions a Kinesis Firehose delivery stream and at this time supports CloudWatch to S3 delivery. It enables you to stream logs from EKS CloudWatch to an S3 bucket for long-term storage and analysis.
Usage
Stack Level: Regional
Here's an example of how to set up a Firehose stream to capture EKS CloudWatch logs and deliver them to an S3 bucket:
components:
  terraform:
    # First, ensure you have the required dependencies:
    eks/cluster:
      vars:
        name: eks-cluster
        # ... other EKS cluster configuration
    eks/cloudwatch:
      vars:
        name: eks-cloudwatch
        # ... other CloudWatch configuration
    s3-bucket/cloudwatch:
      vars:
        name: cloudwatch-logs-bucket
        # ... other S3 bucket configuration
    # Then configure the Firehose stream:
    kinesis-firehose-stream/basic:
      metadata:
        component: kinesis-firehose-stream
      vars:
        name: cloudwatch-logs
        # Source CloudWatch component name
        source_cloudwatch_component_name: eks/cloudwatch
        # Destination S3 bucket component name
        destination_bucket_component_name: s3-bucket/cloudwatch
        # Optional: Enable encryption for the Firehose stream
        encryption_enabled: true
This configuration will:
- Create a Kinesis Firehose delivery stream
- Configure it to receive logs from the specified EKS CloudWatch component
- Deliver the logs to the specified S3 bucket
- Optionally enable encryption for the stream
Variables
Required Variables
- region(- string) required
- AWS Region 
Optional Variables
- destination_bucket_component_name(- string) optional
- The name of the component that will be using the destination bucket - Default value: - "s3-bucket/cloudwatch"
- encryption_enabled(- bool) optional
- Enable encryption for the Kinesis Firehose Delivery Stream - Default value: - true
- source_cloudwatch_component_name(- string) optional
- The name of the component that will be using the source cloudwatch - Default value: - "eks/cloudwatch"
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.- additional_tag_map(- map(string)) optional
- Additional key-value pairs to add to each map in - tags_as_list_of_maps. Not added to- tagsor- id.
 This is for some rare cases where resources want additional configuration of tags
 and therefore take a list of maps with tag key, value, and additional configuration.- Required: No - Default value: - { }
- attributes(- list(string)) optional
- ID element. Additional attributes (e.g. - workersor- cluster) to add to- id,
 in the order they appear in the list. New attributes are appended to the
 end of the list. The elements of the list are joined by the- delimiter
 and treated as a single ID element.- Required: No - Default value: - [ ]
- context(- any) optional
- Single object for setting entire context at once. 
 See description of individual variables for details.
 Leave string and numeric variables as- nullto use default value.
 Individual variable settings (non-null) override settings in context object,
 except for attributes, tags, and additional_tag_map, which are merged.- Required: No - Default value: - {
 "additional_tag_map": {},
 "attributes": [],
 "delimiter": null,
 "descriptor_formats": {},
 "enabled": true,
 "environment": null,
 "id_length_limit": null,
 "label_key_case": null,
 "label_order": [],
 "label_value_case": null,
 "labels_as_tags": [
 "unset"
 ],
 "name": null,
 "namespace": null,
 "regex_replace_chars": null,
 "stage": null,
 "tags": {},
 "tenant": null
 }
- delimiter(- string) optional
- Delimiter to be used between ID elements. 
 Defaults to- -(hyphen). Set to- ""to use no delimiter at all.- Required: No - Default value: - null
- descriptor_formats(- any) optional
- Describe additional descriptors to be output in the - descriptorsoutput map.
 Map of maps. Keys are names of descriptors. Values are maps of the form
 - \{<br/> format = string<br/> labels = list(string)<br/> \}
 (Type is- anyso the map values can later be enhanced to provide additional options.)
 - formatis a Terraform format string to be passed to the- format()function.
 - labelsis a list of labels, in order, to pass to- format()function.
 Label values will be normalized before being passed to- format()so they will be
 identical to how they appear in- id.
 Default is- {}(- descriptorsoutput will be empty).- Required: No - Default value: - { }
- enabled(- bool) optional
- Set to false to prevent the module from creating any resources 
 Required: No- Default value: - null
- environment(- string) optional
- ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT' 
 Required: No- Default value: - null
- id_length_limit(- number) optional
- Limit - idto this many characters (minimum 6).
 Set to- 0for unlimited length.
 Set to- nullfor keep the existing setting, which defaults to- 0.
 Does not affect- id_full.- Required: No - Default value: - null
- label_key_case(- string) optional
- Controls the letter case of the - tagskeys (label names) for tags generated by this module.
 Does not affect keys of tags passed in via the- tagsinput.
 Possible values:- lower,- title,- upper.
 Default value:- title.- Required: No - Default value: - null
- label_order(- list(string)) optional
- The order in which the labels (ID elements) appear in the - id.
 Defaults to ["namespace", "environment", "stage", "name", "attributes"].
 You can omit any of the 6 labels ("tenant" is the 6th), but at least one must be present.- Required: No - Default value: - null
- label_value_case(- string) optional
- Controls the letter case of ID elements (labels) as included in - id,
 set as tag values, and output by this module individually.
 Does not affect values of tags passed in via the- tagsinput.
 Possible values:- lower,- title,- upperand- none(no transformation).
 Set this to- titleand set- delimiterto- ""to yield Pascal Case IDs.
 Default value:- lower.- Required: No - Default value: - null
- labels_as_tags(- set(string)) optional
- Set of labels (ID elements) to include as tags in the - tagsoutput.
 Default is to include all labels.
 Tags with empty values will not be included in the- tagsoutput.
 Set to- []to suppress all generated tags.
 Notes:
 The value of the- nametag, if included, will be the- id, not the- name.
 Unlike other- null-labelinputs, the initial setting of- labels_as_tagscannot be
 changed in later chained modules. Attempts to change it will be silently ignored.- Required: No - Default value: - [
 "default"
 ]
- name(- string) optional
- ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'. 
 This is the only ID element not also included as a- tag.
 The "name" tag is set to the full- idstring. There is no tag with the value of the- nameinput.- Required: No - Default value: - null
- namespace(- string) optional
- ID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique 
 Required: No- Default value: - null
- regex_replace_chars(- string) optional
- Terraform regular expression (regex) string. 
 Characters matching the regex will be removed from the ID elements.
 If not set,- "/[^a-zA-Z0-9-]/"is used to remove all characters other than hyphens, letters and digits.- Required: No - Default value: - null
- stage(- string) optional
- ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release' 
 Required: No- Default value: - null
- tags(- map(string)) optional
- Additional tags (e.g. - {'BusinessUnit': 'XYZ'}).
 Neither the tag keys nor the tag values will be modified by this module.- Required: No - Default value: - { }
- tenant(- string) optional
- ID element (Rarely used, not included by default). A customer identifier, indicating who this instance of a resource is for 
 Required: No- Default value: - null
Outputs
- kinesis_firehose_stream_arn
- The ARN of the Kinesis Firehose stream 
- kinesis_firehose_stream_id
- The ID of the Kinesis Firehose stream 
- kinesis_firehose_stream_name
- The name of the Kinesis Firehose stream 
Dependencies
Requirements
- terraform, version:- >= 1.0.0
- aws, version:- >= 4.1, < 6.0.0
Providers
- aws, version:- >= 4.1, < 6.0.0
Modules
| Name | Version | Source | Description | 
|---|---|---|---|
| cloudwatch | 1.8.0 | cloudposse/stack-config/yaml//modules/remote-state | n/a | 
| cloudwatch_subscription_role | 0.22.0 | cloudposse/iam-role/aws | n/a | 
| firehose_role | 0.22.0 | cloudposse/iam-role/aws | n/a | 
| iam_roles | latest | ../account-map/modules/iam-roles | n/a | 
| s3_bucket | 1.8.0 | cloudposse/stack-config/yaml//modules/remote-state | n/a | 
| stream_label | 0.25.0 | cloudposse/label/null | n/a | 
| this | 0.25.0 | cloudposse/label/null | n/a | 
Resources
The following resources are used by this module:
- aws_cloudwatch_log_subscription_filter.firehose_delivery(resource)
- aws_kinesis_firehose_delivery_stream.this(resource)
Data Sources
The following data sources are used by this module:
- aws_iam_policy_document.cloudwatch_to_firehose(data source)
- aws_iam_policy_document.firehose_to_s3(data source)
- aws_kms_alias.s3(data source)