This terraform module sends a daily cost report and the cost delta in a 7 day rolling period, scheduled on a CRON to a slack or teams channel of your choice.
The module also reports on the top 5 services attributing to the daily cost. Its a very rudimentary means of managing the cost of your AWS bill, but it does provide a 1000 ft view of the current expenses for the previous day. More on this module can be found on our blog on Medium.
The Lambda function is deployed using a .zip deployment package. The package is contained within this module and also attached to the GitHub release.
You may choose one of the following options for the deployment:
- default: If no
s3_*variables are specified, then the package is used by the lambda directly. - recommended:
s3_bucketcan be specified to upload the package to the S3 bucket, for the lambda to use.s3_prefixcan be specified to override the default location.upload_deployment_to_s3=falsecan be specified to disable the upload, in which case the package must be placed on s3 manually.
See examples dropdown on Terraform Cloud, or browse here.
| Name | Description | Type | Default | Required |
|---|---|---|---|---|
| account_name | Name of your account to Identify your account in the notification message | string |
n/a | yes |
| amber_threshold | Percentage exceeded threshold to send an amber alert and notify the slack channel | string |
"20" |
no |
| cloudwatch_logs_retention_in_days | Specifies the number of days you want to retain log events in the specified log group. Possible values are: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, and 3653. | number |
14 |
no |
| create_role | Controls whether IAM role for Lambda Function should be created | bool |
true |
no |
| emails_for_notifications | List of emails to receive cost notifier notifications | list(string) |
[] |
no |
| kms_key_arn | The alias, alias ARN, key ID, or key ARN of an AWS KMS key used to encrypt all resources. | string |
null |
no |
| lambda_description | Lambda function description. | string |
"This function sends AWS cost notifications. Source: github.com/cloudandthings/terraform-aws-costnotifier" |
no |
| lambda_role | IAM role ARN attached to the Lambda Function. This governs both who / what can invoke your Lambda Function, as well as what resources our Lambda Function has access to. See Lambda Permission Model for more details. | string |
"" |
no |
| lambda_runtime | The lambda runtime to use. One of: ["python3.9", "python3.8", "python3.7"] |
string |
"python3.8" |
no |
| naming_prefix | Naming prefix used to name all resources | string |
n/a | yes |
| notification_schedule | CRON expression to schedule notification | string |
"cron(0 20 ? * MON-SUN *)" |
no |
| permissions_boundary | ARN of the policy that is used to set the permissions boundary for the role. | string |
null |
no |
| red_threshold | Percentage exceeded threshold to send a red alert and notify the slack channel | string |
"50" |
no |
| s3_bucket | S3 bucket for deployment package. | string |
null |
no |
| s3_key | S3 object key for deployment package. Otherwise, defaults to var.naming_prefix/local.deployment_filename. |
string |
null |
no |
| security_group_ids | List of VPC security group IDs associated with the Lambda function. | list(string) |
[] |
no |
| subnet_ids | List of VPC subnet IDs associated with the Lambda function. | list(string) |
[] |
no |
| tags | A mapping of tags to assign to the resources. | map(string) |
{} |
no |
| upload_deployment_to_s3 | If true, the deployment package within this module repo will be copied to S3. If false then the S3 object must be uploaded separately. Ignored if s3_bucket is null. |
bool |
true |
no |
| webhook_type | Either "slack" or "teams". | string |
"slack" |
no |
| webhook_urls | Webhook URLs to receive daily cost notifications on either Slack or Teams | list(string) |
n/a | yes |
| Name | Source | Version |
|---|---|---|
| billing_notifier_lambda | terraform-aws-modules/lambda/aws | 4.9.0 |
| Name | Description |
|---|---|
| cost_notfier_lambda_name | Created lambda's name |
| Name | Version |
|---|---|
| aws | ~> 4.9 |
| Name | Version |
|---|---|
| terraform | >= 0.15.0 |
| aws | ~> 4.9 |
| null | ~> 3.1 |
| Name | Type |
|---|---|
| aws_cloudwatch_event_rule.billing_notifier_lambda_event_rule | resource |
| aws_cloudwatch_event_target.billing_notifier_lambda_event_target | resource |
| aws_lambda_permission.billing_notifier_lambda_permission | resource |
| aws_s3_object.deployment | resource |
| aws_sns_topic.cost_notifier | resource |
| aws_sns_topic_subscription.cost_notifier | resource |
| aws_caller_identity.current | data source |