go-aws-news

February 21, 2026 ยท View on GitHub

Fetch what's new from AWS and send out notifications on social sites.

Build Status PkgGoDev Go Report Card GitHub release (latest by date) codecov

App Install

go-aws-news can be executed as an application that sends out notifications to social sites like Discord. To configure providers, modify the config.yaml file to enable a provider.

go-aws-news is designed to be run on a schedule, once a day (displaying the previous day's AWS News). See the install options for examples on how to install and run.

Notification Providers

Currently supported providers:

Install Options

Install With Crontab

The simplest way to run go-aws-news is via crontab.

Type crontab -e on Mac or Linux and add a line:

# Binary
0 2 * * * /path/to/go-aws-news-binary
# Docker
0 14 * * * docker run -d --rm --name aws-news \
  -v your_config.yaml:/config.yaml \
  circa10a/go-aws-news

The above example will execute go-aws-news at 2PM UTC (8AM CST) each day.

Install As Kubernetes CronJob

go-aws-news can be run as a CronJob in a Kubernetes cluster.

Example cronjob.yaml:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: go-aws-news
spec:
  schedule: "0 14 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: go-aws-news
            image: circa10a/go-aws-news
            volumeMounts:
            - name: config
              mountPath: /config.yaml
              subPath: config.yaml
          volumes:
          - name: config
            configMap:
              name: awsnews-config
          restartPolicy: OnFailure

The ConfigMap can be created from the config.yaml file itself:

kubectl create configmap awsnews-config --from-file=config.yaml

To apply the cronjob.yaml example above:

kubectl apply -f cronjob.yaml

Install As AWS Lambda

A Terraform module is provided for one-command deployment. See the full Terraform README for all options.

Prerequisites: Terraform >= 1.0, AWS credentials configured.

  1. Create a new directory with a config.yaml (enable at least one provider) and a main.tf:

    provider "aws" {
      region = "us-east-1"
    }
    
    module "go_aws_news" {
      source      = "github.com/circa10a/go-aws-news//terraform"
      config_yaml = file("${path.module}/config.yaml")
    }
    
  2. Deploy:

    terraform init && terraform apply
    
  3. Verify it works:

    aws lambda invoke --function-name go-aws-news /dev/stdout
    
  4. Tear down

    terraform destroy
    

Module Install

go-aws-news can be installed as a module for use in other Go applications:

go get -u "github.com/circa10a/go-aws-news/news"

Module Usage

Methods return a slice of structs which include the announcement title, a link, and the date it was posted as well an error. This allows you to manipulate the data in whichever way you please, or simply use Print() to print a nice ASCII table to the console.

Get Today's news

package main

import (
  awsnews "github.com/circa10a/go-aws-news/news"
)

func main() {
    news, err := awsnews.Today()
    if err != nil {
      // Handle error
    }
    news.Print()
}

Get Yesterday's news

news, _ := awsnews.Yesterday()

Get all news for the month

news, _ := awsnews.ThisMonth()

Get from a previous month

// Custom timeframe(June 2019)
news, err := awsnews.Fetch(2019, 06)

Get from a previous year

// Custom timeframe(2017)
news, err := awsnews.FetchYear(2017)
news, _ := awsnews.ThisMonth()
news.Print()
// Console output
// +--------------------------------+--------------+
// |          ANNOUNCEMENT          |     DATE     |
// +--------------------------------+--------------+
// | Amazon Cognito now supports    | Jan 10, 2020 |
// | CloudWatch Usage Metrics       |              |
// +--------------------------------+--------------+
// | Introducing Workload Shares in | Jan 10, 2020 |
// | AWS Well-Architected Tool      |              |
// +--------------------------------+--------------+
//

Loop over news data

// Loop slice of stucts of announcements
// For your own data manipulation
news, _ := awsnews.Fetch(time.Now().Year(), int(time.Now().Month()))
for _, v := range news {
    fmt.Printf("Title: %v\n", v.Title)
    fmt.Printf("Link: %v\n", v.Link)
    fmt.Printf("Date: %v\n", v.PostDate)
}

Limit news results count

news, _ := awsnews.ThisMonth()
// Last 10 news items of the month
news.Last(10).Print()

Get news as JSON

news, _ := awsnews.ThisMonth()
json, jsonErr := news.JSON()
if jsonErr != nil {
    log.Fatal(err)
}
fmt.Println(string(json))

Get news as HTML

news, _ := awsnews.ThisMonth()
html := news.HTML()
fmt.Println(html)

Get news about a specific product

news, err := awsnews.Fetch(2019, 12)
if err != nil {
    fmt.Println(err)
} else {
    news.Filter([]string{"EKS", "ECS"}).Print()
}

Google Assistant

Development

Test

# Unit/Integration tests
make
# Get code coverage
make coverage