Skip to content

Commit f5cd42c

Browse files
authored
feat(aws): AppRunner Resources: VPC Connector, VPC Ingress Connection And Autotscaling (#3450)
#### Summary <!-- Explain what problem this PR addresses --> <!--
1 parent b6c17a2 commit f5cd42c

15 files changed

Lines changed: 588 additions & 0 deletions

plugins/source/aws/codegen/recipes/apprunner.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,65 @@ func ApprunnerResources() []*Resource {
4444
Relations: []string{
4545
"Operations()",
4646
"CustomDomains()"},
47+
}, {
48+
SubService: "auto_scaling_configuration",
49+
Struct: &types.AutoScalingConfiguration{},
50+
Description: "https://docs.aws.amazon.com/apprunner/latest/api/API_AutoScalingConfiguration.html",
51+
SkipFields: []string{"AutoScalingConfigurationArn"},
52+
Multiplex: `client.ServiceAccountRegionMultiplexer("apprunner")`,
53+
PreResourceResolver: "getAutoScalingConfiguration",
54+
ExtraColumns: append(
55+
defaultRegionalColumns,
56+
[]codegen.ColumnDefinition{
57+
{
58+
Name: "arn",
59+
Type: schema.TypeString,
60+
Resolver: `schema.PathResolver("AutoScalingConfigurationArn")`,
61+
Options: schema.ColumnCreationOptions{PrimaryKey: true},
62+
},
63+
}...),
64+
},
65+
{
66+
SubService: "vpc_connector",
67+
Struct: &types.VpcConnector{},
68+
Description: "https://docs.aws.amazon.com/apprunner/latest/api/API_VpcConnector.html",
69+
SkipFields: []string{"VpcConnectorArn"},
70+
Multiplex: `client.ServiceAccountRegionMultiplexer("apprunner")`,
71+
ExtraColumns: append(
72+
defaultRegionalColumns,
73+
[]codegen.ColumnDefinition{
74+
{
75+
Name: "arn",
76+
Type: schema.TypeString,
77+
Resolver: `schema.PathResolver("VpcConnectorArn")`,
78+
Options: schema.ColumnCreationOptions{PrimaryKey: true},
79+
},
80+
}...),
81+
}, {
82+
SubService: "vpc_ingress_connection",
83+
Struct: &types.VpcIngressConnection{},
84+
Description: `https://docs.aws.amazon.com/apprunner/latest/api/API_VpcIngressConnection.html
85+
86+
Notes:
87+
- 'account_id' has been renamed to 'source_account_id' to avoid conflict with the 'account_id' column that indicates what account this was synced from.`,
88+
SkipFields: []string{"VpcIngressConnectionArn", "AccountId"},
89+
Multiplex: `client.ServiceAccountRegionMultiplexer("apprunner")`,
90+
PreResourceResolver: "getVpcIngressConnection",
91+
ExtraColumns: append(
92+
defaultRegionalColumns,
93+
[]codegen.ColumnDefinition{
94+
{
95+
Name: "arn",
96+
Type: schema.TypeString,
97+
Resolver: `schema.PathResolver("VpcIngressConnectionArn")`,
98+
Options: schema.ColumnCreationOptions{PrimaryKey: true},
99+
},
100+
{
101+
Name: "source_account_id",
102+
Type: schema.TypeString,
103+
Resolver: `schema.PathResolver("AccountId")`,
104+
},
105+
}...),
47106
}, {
48107
SubService: "operations",
49108
Struct: &types.OperationSummary{},

plugins/source/aws/docs/tables/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
| [aws_apprunner_services](aws_apprunner_services.md) |
3939
|[aws_apprunner_operations](aws_apprunner_operations.md) |
4040
|[aws_apprunner_custom_domains](aws_apprunner_custom_domains.md) |
41+
| [aws_apprunner_auto_scaling_configuration](aws_apprunner_auto_scaling_configuration.md) |
42+
| [aws_apprunner_vpc_connector](aws_apprunner_vpc_connector.md) |
43+
| [aws_apprunner_vpc_ingress_connection](aws_apprunner_vpc_ingress_connection.md) |
4144
| [aws_appsync_graphql_apis](aws_appsync_graphql_apis.md) |
4245
| [aws_athena_data_catalogs](aws_athena_data_catalogs.md) |
4346
|[aws_athena_data_catalog_databases](aws_athena_data_catalog_databases.md) |
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Table: aws_apprunner_auto_scaling_configuration
2+
3+
https://docs.aws.amazon.com/apprunner/latest/api/API_AutoScalingConfiguration.html
4+
5+
The primary key for this table is **arn**.
6+
7+
8+
## Columns
9+
| Name | Type |
10+
| ------------- | ------------- |
11+
|_cq_source_name|String|
12+
|_cq_sync_time|Timestamp|
13+
|_cq_id|UUID|
14+
|_cq_parent_id|UUID|
15+
|account_id|String|
16+
|region|String|
17+
|arn (PK)|String|
18+
|auto_scaling_configuration_name|String|
19+
|auto_scaling_configuration_revision|Int|
20+
|created_at|Timestamp|
21+
|deleted_at|Timestamp|
22+
|latest|Bool|
23+
|max_concurrency|Int|
24+
|max_size|Int|
25+
|min_size|Int|
26+
|status|String|
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Table: aws_apprunner_vpc_connector
2+
3+
https://docs.aws.amazon.com/apprunner/latest/api/API_VpcConnector.html
4+
5+
The primary key for this table is **arn**.
6+
7+
8+
## Columns
9+
| Name | Type |
10+
| ------------- | ------------- |
11+
|_cq_source_name|String|
12+
|_cq_sync_time|Timestamp|
13+
|_cq_id|UUID|
14+
|_cq_parent_id|UUID|
15+
|account_id|String|
16+
|region|String|
17+
|arn (PK)|String|
18+
|created_at|Timestamp|
19+
|deleted_at|Timestamp|
20+
|security_groups|StringArray|
21+
|status|String|
22+
|subnets|StringArray|
23+
|vpc_connector_name|String|
24+
|vpc_connector_revision|Int|
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Table: aws_apprunner_vpc_ingress_connection
2+
3+
https://docs.aws.amazon.com/apprunner/latest/api/API_VpcIngressConnection.html
4+
5+
Notes:
6+
- 'account_id' has been renamed to 'source_account_id' to avoid conflict with the 'account_id' column that indicates what account this was synced from.
7+
8+
The primary key for this table is **arn**.
9+
10+
11+
## Columns
12+
| Name | Type |
13+
| ------------- | ------------- |
14+
|_cq_source_name|String|
15+
|_cq_sync_time|Timestamp|
16+
|_cq_id|UUID|
17+
|_cq_parent_id|UUID|
18+
|account_id|String|
19+
|region|String|
20+
|arn (PK)|String|
21+
|source_account_id|String|
22+
|created_at|Timestamp|
23+
|deleted_at|Timestamp|
24+
|domain_name|String|
25+
|ingress_vpc_configuration|JSON|
26+
|service_arn|String|
27+
|status|String|
28+
|vpc_ingress_connection_name|String|

plugins/source/aws/resources/plugin/tables.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/aws/resources/services/apprunner/auto_scaling_configuration.go

Lines changed: 83 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package apprunner
2+
3+
import (
4+
"context"
5+
6+
"github.com/aws/aws-sdk-go-v2/service/apprunner"
7+
"github.com/aws/aws-sdk-go-v2/service/apprunner/types"
8+
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
9+
"github.com/cloudquery/plugin-sdk/schema"
10+
)
11+
12+
func fetchApprunnerAutoScalingConfiguration(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- interface{}) error {
13+
var config apprunner.ListAutoScalingConfigurationsInput
14+
svc := meta.(*client.Client).Services().Apprunner
15+
paginator := apprunner.NewListAutoScalingConfigurationsPaginator(svc, &config)
16+
for paginator.HasMorePages() {
17+
output, err := paginator.NextPage(ctx)
18+
if err != nil {
19+
return err
20+
}
21+
res <- output.AutoScalingConfigurationSummaryList
22+
}
23+
return nil
24+
}
25+
func getAutoScalingConfiguration(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error {
26+
c := meta.(*client.Client)
27+
svc := c.Services().Apprunner
28+
asConfig := resource.Item.(types.AutoScalingConfigurationSummary)
29+
30+
describeTaskDefinitionOutput, err := svc.DescribeAutoScalingConfiguration(ctx, &apprunner.DescribeAutoScalingConfigurationInput{AutoScalingConfigurationArn: asConfig.AutoScalingConfigurationArn})
31+
if err != nil {
32+
return err
33+
}
34+
35+
resource.Item = describeTaskDefinitionOutput.AutoScalingConfiguration
36+
return nil
37+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package apprunner
2+
3+
import (
4+
"testing"
5+
6+
"github.com/aws/aws-sdk-go-v2/service/apprunner"
7+
"github.com/aws/aws-sdk-go-v2/service/apprunner/types"
8+
"github.com/cloudquery/cloudquery/plugins/source/aws/client"
9+
"github.com/cloudquery/cloudquery/plugins/source/aws/client/mocks"
10+
"github.com/cloudquery/plugin-sdk/faker"
11+
"github.com/golang/mock/gomock"
12+
)
13+
14+
func buildApprunnerAutoScalingConfigurationsMock(t *testing.T, ctrl *gomock.Controller) client.Services {
15+
m := mocks.NewMockApprunnerClient(ctrl)
16+
as := types.AutoScalingConfiguration{}
17+
err := faker.FakeObject(&as)
18+
if err != nil {
19+
t.Fatal(err)
20+
}
21+
22+
m.EXPECT().ListAutoScalingConfigurations(gomock.Any(), gomock.Any(), gomock.Any()).Return(
23+
&apprunner.ListAutoScalingConfigurationsOutput{
24+
AutoScalingConfigurationSummaryList: []types.AutoScalingConfigurationSummary{
25+
{AutoScalingConfigurationArn: as.AutoScalingConfigurationArn},
26+
},
27+
}, nil)
28+
29+
m.EXPECT().DescribeAutoScalingConfiguration(gomock.Any(), gomock.Any(), gomock.Any()).Return(
30+
&apprunner.DescribeAutoScalingConfigurationOutput{
31+
AutoScalingConfiguration: &as,
32+
}, nil)
33+
34+
return client.Services{
35+
Apprunner: m,
36+
}
37+
}
38+
39+
func TestApprunnerAutoScalingConfigurations(t *testing.T) {
40+
client.AwsMockTestHelper(t, AutoScalingConfiguration(), buildApprunnerAutoScalingConfigurationsMock, client.TestOptions{})
41+
}

0 commit comments

Comments
 (0)