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_bucket
can be specified to upload the package to the S3 bucket, for the lambda to use.s3_prefix
can be specified to override the default location.upload_deployment_to_s3=false
can 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 |