Skip to content

Commit 89f3f5f

Browse files
Merge pull request #23 from oreillymedia/cl-858-aws-athena-support
CL-858 Adding Athena support for data catalogs and prepared statements
2 parents 89dc604 + fd49a6d commit 89f3f5f

File tree

2 files changed

+157
-0
lines changed

2 files changed

+157
-0
lines changed

resources/athena-data-catalogs.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package resources
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/aws/aws-sdk-go/aws"
7+
"github.com/aws/aws-sdk-go/aws/session"
8+
"github.com/aws/aws-sdk-go/service/athena"
9+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
10+
)
11+
12+
type AthenaDataCatalog struct {
13+
svc *athena.Athena
14+
name *string
15+
}
16+
17+
func init() {
18+
register("AthenaDataCatalog", ListAthenaDataCatalogs)
19+
}
20+
21+
func ListAthenaDataCatalogs(sess *session.Session) ([]Resource, error) {
22+
svc := athena.New(sess)
23+
resources := []Resource{}
24+
25+
params := &athena.ListDataCatalogsInput{
26+
MaxResults: aws.Int64(50),
27+
}
28+
29+
for {
30+
output, err := svc.ListDataCatalogs(params)
31+
if err != nil {
32+
return nil, err
33+
}
34+
35+
for _, catalog := range output.DataCatalogsSummary {
36+
resources = append(resources, &AthenaDataCatalog{
37+
svc: svc,
38+
name: catalog.CatalogName,
39+
})
40+
}
41+
42+
if output.NextToken == nil {
43+
break
44+
}
45+
46+
params.NextToken = output.NextToken
47+
}
48+
49+
return resources, nil
50+
}
51+
52+
func (f *AthenaDataCatalog) Properties() types.Properties {
53+
properties := types.NewProperties()
54+
properties.Set("Name", f.name)
55+
56+
return properties
57+
}
58+
59+
func (f *AthenaDataCatalog) Remove() error {
60+
61+
_, err := f.svc.DeleteDataCatalog(&athena.DeleteDataCatalogInput{
62+
Name: f.name,
63+
})
64+
65+
return err
66+
}
67+
68+
func (f *AthenaDataCatalog) Filter() error {
69+
if *f.name == "AwsDataCatalog" {
70+
return fmt.Errorf("cannot delete default data source")
71+
}
72+
return nil
73+
}
74+
75+
func (f *AthenaDataCatalog) String() string {
76+
return *f.name
77+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package resources
2+
3+
import (
4+
"github.com/aws/aws-sdk-go/aws"
5+
"github.com/aws/aws-sdk-go/aws/session"
6+
"github.com/aws/aws-sdk-go/service/athena"
7+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
8+
)
9+
10+
type AthenaPreparedStatement struct {
11+
svc *athena.Athena
12+
workGroup *string
13+
name *string
14+
}
15+
16+
func init() {
17+
register("AthenaPreparedStatement", ListAthenaPreparedStatements)
18+
}
19+
20+
func ListAthenaPreparedStatements(sess *session.Session) ([]Resource, error) {
21+
svc := athena.New(sess)
22+
resources := []Resource{}
23+
24+
workgroups, err := svc.ListWorkGroups(&athena.ListWorkGroupsInput{})
25+
if err != nil {
26+
return nil, err
27+
}
28+
29+
for _, workgroup := range workgroups.WorkGroups {
30+
params := &athena.ListPreparedStatementsInput{
31+
WorkGroup: workgroup.Name,
32+
MaxResults: aws.Int64(50),
33+
}
34+
35+
for {
36+
output, err := svc.ListPreparedStatements(params)
37+
if err != nil {
38+
return nil, err
39+
}
40+
41+
for _, statement := range output.PreparedStatements {
42+
resources = append(resources, &AthenaPreparedStatement{
43+
svc: svc,
44+
workGroup: workgroup.Name,
45+
name: statement.StatementName,
46+
})
47+
}
48+
49+
if output.NextToken == nil {
50+
break
51+
}
52+
53+
params.NextToken = output.NextToken
54+
}
55+
}
56+
57+
return resources, nil
58+
}
59+
60+
func (f *AthenaPreparedStatement) Properties() types.Properties {
61+
properties := types.NewProperties()
62+
properties.Set("StatementName", f.name)
63+
properties.Set("WorkGroup", f.workGroup)
64+
65+
return properties
66+
}
67+
68+
func (f *AthenaPreparedStatement) Remove() error {
69+
70+
_, err := f.svc.DeletePreparedStatement(&athena.DeletePreparedStatementInput{
71+
StatementName: f.name,
72+
WorkGroup: f.workGroup,
73+
})
74+
75+
return err
76+
}
77+
78+
func (f *AthenaPreparedStatement) String() string {
79+
return *f.name
80+
}

0 commit comments

Comments
 (0)