-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* add code + cloudformation * lambda lib * update s3 key * fix yaml * fix yaml * fix yaml * fix yaml * fix yaml * fix yaml * remove field + fixes * remove sleep * added workflows * added github action * added cloudformation * update code + tests * readme * change bucket dir * change response time unit * fix * add consts * fix workflows * add types to on * added examples * added examples
- Loading branch information
1 parent
d0eec4d
commit 8b0d8c2
Showing
11 changed files
with
3,914 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,25 @@ | ||
# This is a basic workflow to help you get started with Actions | ||
|
||
name: CI | ||
|
||
# Controls when the workflow will run | ||
name: unit tests and code-coverage | ||
on: | ||
# Triggers the workflow on push or pull request events but only for the master branch | ||
workflow_dispatch: | ||
push: | ||
branches: [ master ] | ||
branches: | ||
- master | ||
pull_request: | ||
branches: [ master ] | ||
|
||
# Allows you to run this workflow manually from the Actions tab | ||
workflow_dispatch: | ||
|
||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | ||
types: | ||
- edited | ||
- opened | ||
- reopened | ||
- synchronize | ||
branches: | ||
- master | ||
jobs: | ||
# This workflow contains a single job called "build" | ||
build: | ||
# The type of runner that the job will run on | ||
run-tests: | ||
runs-on: ubuntu-latest | ||
|
||
# Steps represent a sequence of tasks that will be executed as part of the job | ||
steps: | ||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | ||
- uses: actions/checkout@v2 | ||
|
||
# Runs a single command using the runners shell | ||
- name: Run a one-line script | ||
run: echo Hello, world! | ||
|
||
# Runs a set of commands using the runners shell | ||
- name: Run a multi-line script | ||
- uses: actions/setup-go@v2 | ||
with: | ||
go-version: '1.x' | ||
- name: Run unit tests and code-coverage | ||
run: | | ||
echo Add other actions to build, | ||
echo test, and deploy your project. | ||
go test -race -covermode=atomic ./... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,32 @@ | ||
# This is a basic workflow to help you get started with Actions | ||
|
||
name: CI | ||
|
||
# Controls when the workflow will run | ||
name: upload auto-deployment and function zip files into AWS S3 bucket | ||
on: | ||
# Triggers the workflow on push or pull request events but only for the master branch | ||
push: | ||
branches: [ master ] | ||
pull_request: | ||
branches: [ master ] | ||
|
||
# Allows you to run this workflow manually from the Actions tab | ||
workflow_dispatch: | ||
|
||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | ||
push: | ||
branches: | ||
- master | ||
jobs: | ||
# This workflow contains a single job called "build" | ||
build: | ||
# The type of runner that the job will run on | ||
upload-files: | ||
runs-on: ubuntu-latest | ||
|
||
# Steps represent a sequence of tasks that will be executed as part of the job | ||
steps: | ||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | ||
- uses: actions/checkout@v2 | ||
|
||
# Runs a single command using the runners shell | ||
- name: Run a one-line script | ||
run: echo Hello, world! | ||
|
||
# Runs a set of commands using the runners shell | ||
- name: Run a multi-line script | ||
- uses: actions/setup-go@v2 | ||
with: | ||
go-version: '1.x' | ||
- name: Build and zip binary file | ||
run: | | ||
GOOS=linux go build -o bootstrap main.go | ||
zip function.zip ./bootstrap | ||
cp function.zip ./aws | ||
- name: Upload files into S3 bucket | ||
run: | | ||
echo Add other actions to build, | ||
echo test, and deploy your project. | ||
cd action | ||
go run run.go | ||
env: | ||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
AWS_REGION: us-east-1 | ||
BUCKET_NAME: logzio-aws-integrations-us-east-1 | ||
BUCKET_DIR: api-status-auto-deployment | ||
SRC_DIR: ../aws | ||
AUTO_DEPLOYMENT_FILE: auto-deployment.yaml | ||
FUNCTION_ZIP_FILE: function.zip |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,35 @@ | ||
# logzio-api-status | ||
Auto deployment of Lambda function for collecting api status metrics and shipping them to Logz.io. | ||
# API Status Auto-Deployment | ||
|
||
Auto-deployment of Lambda function that collects API status metrics of user API and sends them to Logz.io. | ||
|
||
* The Lambda function will be deployed with the layer LogzioLambdaExtensionLogs. | ||
For more information about the extension [click here](https://github.com/logzio/logzio-lambda-extensions/tree/main/logzio-lambda-extensions-logs). | ||
|
||
## Getting Started | ||
|
||
To start just press the button and follow the instructions: | ||
|
||
[![Deploy to AWS](https://dytvr9ot2sszz.cloudfront.net/logz-docs/lights/LightS-button.png)](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/template?templateURL=https://logzio-aws-integrations-us-east-1.s3.amazonaws.com/api-status-auto-deployment/auto-deployment.yaml&stackName=logzio-api-status-auto-deployment) | ||
|
||
### Parameters | ||
|
||
| Parameter | Description | Required/Optional | Default | | ||
| --- | --- | --- | --- | | ||
| ApiURL | Your API URL to collect status from (for example: https://example.api:1234). | Required | - | | ||
| Method | Your API HTTP request method. Can be `GET` or `POST` | Required | `GET` | | ||
| ApiResponseTimeout | Your API response timeout (seconds). | Required | `10 (seconds)` | | ||
| ExpectedStatusCode | The expected HTTP response status code your API should return. | Required | `200` | | ||
| ExpectedBody | The expected HTTP response body your API should return (leave empty if your API HTTP response body is empty). | Required | ` ` | | ||
| LogzioListener | The Logz.io listener URL for your region. (For more details, see the regions page: https://docs.logz.io/user-guide/accounts/account-region.html) | Required | `https://listener.logz.io` | | ||
| LogzioMetricsToken | Your Logz.io metrics token (Can be retrieved from the Manage Token page). | Required | - | | ||
| LogzioLogsToken | Your Logz.io logs token (Can be retrieved from the Manage Token page). | Required | - | | ||
| SchedulingInterval | The scheduling expression that determines when and how often the Lambda function runs. | Required | `rate(30 minutes)` | | ||
| Headers | Your API headers separated by comma and each header's key and value are separated by `=` (`header_key_1=header_value_1,header_key_2=header_value_2`). | Optional | - | | ||
| Body | Your API HTTP request body. | Optional | - | | ||
| BearerToken | Your API bearer token. | Optional | - | | ||
| Username | Your API username. | Optional | - | | ||
| Password | Your API password. | Optional | - | | ||
|
||
## Searching in Logz.io | ||
|
||
All metrics that were sent from the Lambda function will have the prefix `api_status` in their name. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
module github.com/logzio/logzio-api-status/action | ||
|
||
go 1.17 | ||
|
||
require ( | ||
github.com/aws/aws-sdk-go-v2/config v1.15.0 | ||
github.com/aws/aws-sdk-go-v2/service/s3 v1.26.0 | ||
github.com/aws/smithy-go v1.11.1 | ||
) | ||
|
||
require ( | ||
github.com/aws/aws-sdk-go-v2 v1.15.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/credentials v1.10.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.6 // indirect | ||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.7 // indirect | ||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/service/sso v1.11.0 // indirect | ||
github.com/aws/aws-sdk-go-v2/service/sts v1.16.0 // indirect | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
github.com/aws/aws-sdk-go-v2 v1.15.0 h1:f9kWLNfyCzCB43eupDAk3/XgJ2EpgktiySD6leqs0js= | ||
github.com/aws/aws-sdk-go-v2 v1.15.0/go.mod h1:lJYcuZZEHWNIb6ugJjbQY1fykdoobWbOS7kJYb4APoI= | ||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.0 h1:J/tiyHbl07LL4/1i0rFrW5pbLMvo7M6JrekBUNpLeT4= | ||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.0/go.mod h1:ohZjRmiToJ4NybwWTGOCbzlUQU8dxSHxYKzuX7k5l6Y= | ||
github.com/aws/aws-sdk-go-v2/config v1.15.0 h1:cibCYF2c2uq0lsbu0Ggbg8RuGeiHCmXwUlTMS77CiK4= | ||
github.com/aws/aws-sdk-go-v2/config v1.15.0/go.mod h1:NccaLq2Z9doMmeQXHQRrt2rm+2FbkrcPvfdbCaQn5hY= | ||
github.com/aws/aws-sdk-go-v2/credentials v1.10.0 h1:M/FFpf2w31F7xqJqJLgiM0mFpLOtBvwZggORr6QCpo8= | ||
github.com/aws/aws-sdk-go-v2/credentials v1.10.0/go.mod h1:HWJMr4ut5X+Lt/7epc7I6Llg5QIcoFHKAeIzw32t6EE= | ||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.0 h1:gUlb+I7NwDtqJUIRcFYDiheYa97PdVHG/5Iz+SwdoHE= | ||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.0/go.mod h1:prX26x9rmLwkEE1VVCelQOQgRN9sOVIssgowIJ270SE= | ||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.6 h1:xiGjGVQsem2cxoIX61uRGy+Jux2s9C/kKbTrWLdrU54= | ||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.6/go.mod h1:SSPEdf9spsFgJyhjrXvawfpyzrXHBCUe+2eQ1CjC1Ak= | ||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.0 h1:bt3zw79tm209glISdMRCIVRCwvSDXxgAxh5KWe2qHkY= | ||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.0/go.mod h1:viTrxhAuejD+LszDahzAE2x40YjYWhMqzHxv2ZiWaME= | ||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.7 h1:QOMEP8jnO8sm0SX/4G7dbaIq2eEP2wcWEsF0jzrXLJc= | ||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.7/go.mod h1:P5sjYYf2nc5dE6cZIzEMsVtq6XeLD7c4rM+kQJPrByA= | ||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.0 h1:uhb7moM7VjqIEpWzTpCvceLDSwrWpaleXm39OnVjuLE= | ||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.0/go.mod h1:pA2St3Pu2Ldy6fBPY45Azoh1WBG4oS7eIKOd4XN7Meg= | ||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.0 h1:IhiVUezzcKlszx6wXSDQYDjEn/bIO6Mc73uNQ1YfTmA= | ||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.0/go.mod h1:kLKc4lo+XKlMhENIpKbp7dCePpyUqUG1PqGIAXoxwNE= | ||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.0 h1:YQ3fTXACo7xeAqg0NiqcCmBOXJruUfh+4+O2qxF2EjQ= | ||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.0/go.mod h1:R31ot6BgESRCIoxwfKtIHzZMo/vsZn2un81g9BJ4nmo= | ||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.0 h1:i+7ve93k5G0S2xWBu60CKtmzU5RjBj9g7fcSypQNLR0= | ||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.0/go.mod h1:L8EoTDLnnN2zL7MQPhyfCbmiZqEs8Cw7+1d9RlLXT5s= | ||
github.com/aws/aws-sdk-go-v2/service/s3 v1.26.0 h1:6IdBZVY8zod9umkwWrtbH2opcM00eKEmIfZKGUg5ywI= | ||
github.com/aws/aws-sdk-go-v2/service/s3 v1.26.0/go.mod h1:WJzrjAFxq82Hl42oh8HuvwpugTgxmoiJBBX8SLwVs74= | ||
github.com/aws/aws-sdk-go-v2/service/sso v1.11.0 h1:gZLEXLH6NiU8Y52nRhK1jA+9oz7LZzBK242fi/ziXa4= | ||
github.com/aws/aws-sdk-go-v2/service/sso v1.11.0/go.mod h1:d1WcT0OjggjQCAdOkph8ijkr5sUwk1IH/VenOn7W1PU= | ||
github.com/aws/aws-sdk-go-v2/service/sts v1.16.0 h1:0+X/rJ2+DTBKWbUsn7WtF0JvNk/fRf928vkFsXkbbZs= | ||
github.com/aws/aws-sdk-go-v2/service/sts v1.16.0/go.mod h1:+8k4H2ASUZZXmjx/s3DFLo9tGBb44lkz3XcgfypJY7s= | ||
github.com/aws/smithy-go v1.11.1 h1:IQ+lPZVkSM3FRtyaDox41R8YS6iwPMYIreejOgPW49g= | ||
github.com/aws/smithy-go v1.11.1/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM= | ||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= | ||
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= | ||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= | ||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= | ||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= | ||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package main | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
"os" | ||
|
||
"github.com/aws/aws-sdk-go-v2/config" | ||
"github.com/aws/aws-sdk-go-v2/service/s3" | ||
"github.com/aws/aws-sdk-go-v2/service/s3/types" | ||
"github.com/aws/smithy-go/logging" | ||
) | ||
|
||
type s3Client struct { | ||
ctx context.Context | ||
logger logging.Logger | ||
client *s3.Client | ||
} | ||
|
||
func newS3Client() (*s3Client, error) { | ||
ctx := context.Background() | ||
cfg, err := config.LoadDefaultConfig(ctx) | ||
if err != nil { | ||
return nil, fmt.Errorf("error loading default config: %v", err) | ||
} | ||
|
||
client := s3.NewFromConfig(cfg) | ||
|
||
return &s3Client{ | ||
ctx: ctx, | ||
logger: cfg.Logger, | ||
client: client, | ||
}, nil | ||
} | ||
|
||
func (s3c *s3Client) uploadToAWS(bucket *string, key *string, filePath string) error { | ||
file, err := os.Open(filePath) | ||
if err != nil { | ||
return fmt.Errorf("error opening file: %v", err) | ||
} | ||
|
||
defer closeFile(file) | ||
|
||
putObjectInput := &s3.PutObjectInput{ | ||
Bucket: bucket, | ||
Key: key, | ||
ACL: types.ObjectCannedACLPublicRead, | ||
Body: file, | ||
} | ||
|
||
if _, err = s3c.client.PutObject(s3c.ctx, putObjectInput); err != nil { | ||
return fmt.Errorf("error putting file into S3 bucket: %v", err) | ||
} | ||
|
||
s3c.logger.Logf("INFO", "%s was uploaded successfully into S3 bucket", filePath) | ||
return nil | ||
} | ||
|
||
func closeFile(file *os.File) { | ||
if err := file.Close(); err != nil { | ||
panic(fmt.Errorf("error closing the file %s: %v", file.Name(), err)) | ||
} | ||
} | ||
|
||
func main() { | ||
s, err := newS3Client() | ||
if err != nil { | ||
panic(fmt.Errorf("error creating S3 client: %v", err)) | ||
} | ||
|
||
bucketName := os.Getenv("BUCKET_NAME") | ||
bucketDirectory := os.Getenv("BUCKET_DIR") | ||
srcDirectory := os.Getenv("SRC_DIR") | ||
autoDeploymentFile := os.Getenv("AUTO_DEPLOYMENT_FILE") | ||
functionZipFile := os.Getenv("FUNCTION_ZIP_FILE") | ||
autoDeploymentKey := bucketDirectory + "/" + autoDeploymentFile | ||
functionZipKey := bucketDirectory + "/" + functionZipFile | ||
autoDeploymentSrcPath := srcDirectory + "/" + autoDeploymentFile | ||
functionZipSrcPath := srcDirectory + "/" + functionZipFile | ||
|
||
if err = s.uploadToAWS(&bucketName, &autoDeploymentKey, autoDeploymentSrcPath); err != nil { | ||
panic(fmt.Errorf("error uploading auto deployment file into S3 bucket: %v", err)) | ||
} | ||
|
||
if err = s.uploadToAWS(&bucketName, &functionZipKey, functionZipSrcPath); err != nil { | ||
panic(fmt.Errorf("error uploading function zip file into S3 bucket: %v", err)) | ||
} | ||
} |
Oops, something went wrong.