Skip to content

Commit 0dc0146

Browse files
committed
feat: add support for region setting changes
1 parent b4029c5 commit 0dc0146

File tree

3 files changed

+112
-45
lines changed

3 files changed

+112
-45
lines changed

fixtures/samples.json

Lines changed: 62 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -442,52 +442,69 @@
442442
}
443443
},
444444
{
445-
"version": "0",
446-
"id": "d415609e-5f35-d9a2-76d1-613683e4e024",
447-
"detail-type": "Backup Vault State Change",
448-
"source": "aws.backup",
449-
"account": "1112233445566",
450-
"time": "2020-06-24T23:18:19Z",
451-
"region": "us-west-2",
452-
"resources": [
453-
"arn:aws:backup:us-west-2:1112233445566:backup-vault:d8864642-155c-4283-a168-a04f40e12c97"
454-
],
455-
"detail": {
456-
"backupVaultName": "d8864642-155c-4283-a168-a04f40e12c97",
457-
"state": "CREATED"
458-
}
459-
},
445+
"version": "0",
446+
"id": "d415609e-5f35-d9a2-76d1-613683e4e024",
447+
"detail-type": "Backup Vault State Change",
448+
"source": "aws.backup",
449+
"account": "1112233445566",
450+
"time": "2020-06-24T23:18:19Z",
451+
"region": "us-west-2",
452+
"resources": [
453+
"arn:aws:backup:us-west-2:1112233445566:backup-vault:d8864642-155c-4283-a168-a04f40e12c97"
454+
],
455+
"detail": {
456+
"backupVaultName": "d8864642-155c-4283-a168-a04f40e12c97",
457+
"state": "CREATED"
458+
}
459+
},
460460
{
461-
"version": "0",
462-
"id": "1a2b3cd4-5e6f-7g8h-9i0j-123456k7l890",
463-
"detail-type": "Backup Vault State Change",
464-
"source": "aws.backup",
465-
"account": "1112233445566",
466-
"time": "2020-06-24T23:18:19Z",
467-
"region": "us-west-2",
468-
"resources": [
469-
"arn:aws:backup:us-west-2:1112233445566:backup-vault:nameOfTestBackup"
470-
],
471-
"detail": {
472-
"backupVaultName": "vaultName",
473-
"state": "MODIFIED",
474-
"isLocked": "true"
475-
}
476-
},
461+
"version": "0",
462+
"id": "1a2b3cd4-5e6f-7g8h-9i0j-123456k7l890",
463+
"detail-type": "Backup Vault State Change",
464+
"source": "aws.backup",
465+
"account": "1112233445566",
466+
"time": "2020-06-24T23:18:19Z",
467+
"region": "us-west-2",
468+
"resources": [
469+
"arn:aws:backup:us-west-2:1112233445566:backup-vault:nameOfTestBackup"
470+
],
471+
"detail": {
472+
"backupVaultName": "vaultName",
473+
"state": "MODIFIED",
474+
"isLocked": "true"
475+
}
476+
},
477477
{
478-
"version": "0",
479-
"id": "344bccc1-6d2e-da93-3adf-b3f82460294d",
480-
"detail-type": "Backup Vault State Change",
481-
"source": "aws.backup",
482-
"account": "1112233445566",
483-
"time": "2020-06-22T02:42:37Z",
484-
"region": "us-west-2",
485-
"resources": [
486-
"arn:aws:backup:us-west-2:1112233445566:backup-vault:e8189629-1f8e-4ed2-af7d-b32415d04db1"
487-
],
488-
"detail": {
489-
"backupVaultName": "e8189629-1f8e-4ed2-af7d-b32415d04db1",
490-
"state": "DELETED"
478+
"version": "0",
479+
"id": "344bccc1-6d2e-da93-3adf-b3f82460294d",
480+
"detail-type": "Backup Vault State Change",
481+
"source": "aws.backup",
482+
"account": "1112233445566",
483+
"time": "2020-06-22T02:42:37Z",
484+
"region": "us-west-2",
485+
"resources": [
486+
"arn:aws:backup:us-west-2:1112233445566:backup-vault:e8189629-1f8e-4ed2-af7d-b32415d04db1"
487+
],
488+
"detail": {
489+
"backupVaultName": "e8189629-1f8e-4ed2-af7d-b32415d04db1",
490+
"state": "DELETED"
491+
}
492+
},
493+
{
494+
"version": "0",
495+
"id": "e7ed82ba-4955-4de5-10d6-dbafcfb68b4f",
496+
"detail-type": "Region Setting State Change",
497+
"source": "aws.backup",
498+
"account": "1112233445566",
499+
"time": "2020-06-24T22:55:03Z",
500+
"region": "us-west-2",
501+
"resources": [],
502+
"detail": {
503+
"modifiedAt": "2020-06-24T22:54:57.161Z",
504+
"ResourceTypeOptInPreference": {
505+
"Aurora": true
506+
},
507+
"state": "MODIFIED"
508+
}
491509
}
492-
}
493510
]

internal/app/app.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ func (a *App) ParseEvent(e awsEvent.CloudWatchEvent) (events.StateChangeEvent, e
3333
return events.NewBackupVaultStateChange(e.Detail)
3434
case "Copy Job State Change":
3535
return events.NewCopyJobStateChange(e.Detail)
36+
case "Region Setting State Change":
37+
return events.NewRegionSettingStateChange(e.Detail)
3638
case "Restore Job State Change":
3739
return events.NewRestoreJobStateChange(e.Detail)
3840
default:

internal/events/region-setting.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package events
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
7+
"github.com/slack-go/slack"
8+
)
9+
10+
type RegionSettingStateChange struct {
11+
StateChangeEvent
12+
State string `json:"state"`
13+
StatusMessage string `json:"statusMessage"`
14+
Raw string `json:"-"`
15+
}
16+
17+
func (sce *RegionSettingStateChange) SlackMessage() (slack.MsgOption, slack.MsgOption) {
18+
var blocks []slack.Block
19+
20+
header := slack.NewHeaderBlock(slack.NewTextBlockObject("plain_text", "Region Setting Change", false, false))
21+
blocks = append(blocks, header)
22+
23+
var details []*slack.TextBlockObject
24+
details = append(details, slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*State*\n%s", sce.State), false, false))
25+
blocks = append(blocks, slack.NewSectionBlock(nil, details, nil))
26+
27+
if sce.StatusMessage != "" {
28+
desc := slack.NewSectionBlock(
29+
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("```\n%s\n```", sce.StatusMessage), false, false),
30+
nil, nil,
31+
)
32+
blocks = append(blocks, desc)
33+
}
34+
return slack.MsgOptionText(sce.StatusMessage, false), slack.MsgOptionBlocks(blocks...)
35+
}
36+
37+
func (sce *RegionSettingStateChange) IsAlertable() bool {
38+
return true
39+
}
40+
41+
func NewRegionSettingStateChange(raw json.RawMessage) (*RegionSettingStateChange, error) {
42+
var sce RegionSettingStateChange
43+
if err := json.Unmarshal(raw, &sce); err != nil {
44+
return &RegionSettingStateChange{}, err
45+
}
46+
sce.StatusMessage = "AWS Backup service region settings changed. Please confirm it was intended."
47+
return &sce, nil
48+
}

0 commit comments

Comments
 (0)