Skip to content

Commit 0d808e6

Browse files
committed
feat(aws): Add ssm parameter service and update redshift
1 parent f8895e0 commit 0d808e6

15 files changed

Lines changed: 748 additions & 0 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
},
3333
"dependencies": {
3434
"@aws-sdk/client-elastic-beanstalk": "^3.338.0",
35+
"@aws-sdk/client-ssm": "^3.341.0",
3536
"@aws-sdk/credential-providers": "^3.256.0",
3637
"@aws-sdk/shared-ini-file-loader": "^3.254.0",
3738
"@cloudgraph/sdk": "^0.22.1",

src/enums/schemasMap.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ export default {
104104
[services.sns]: 'awsSns',
105105
[services.systemsManagerInstance]: 'awsSystemsManagerInstance',
106106
[services.systemsManagerDocument]: 'awsSystemsManagerDocument',
107+
[services.systemsManagerParameter]: 'awsSystemsManagerParameter',
107108
[services.transitGateway]: 'awsTransitGateway',
108109
[services.transitGatewayAttachment]: 'awsTransitGatewayAttachment',
109110
[services.transitGatewayRouteTable]: 'awsTransitGatewayRouteTable',

src/enums/serviceAliases.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export default {
7474
[services.subnet]: 'subnets',
7575
[services.systemsManagerDocument]: 'systemsManagerDocuments',
7676
[services.systemsManagerInstance]: 'systemsManagerInstances',
77+
[services.systemsManagerParameter]: 'systemsManagerParameters',
7778
[services.transitGateway]: 'transitGateways',
7879
[services.transitGatewayAttachment]: 'transitGatewayAttachments',
7980
[services.transitGatewayRouteTable]: 'transitGatewayRouteTables',

src/enums/serviceMap.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ import DmsReplicationInstance from '../services/dmsReplicationInstance'
9898
import SageMakerNotebookInstance from '../services/sageMakerNotebookInstance'
9999
import SystemsManagerInstance from '../services/systemsManagerInstance'
100100
import SystemsManagerDocument from '../services/systemsManagerDocument'
101+
import SystemsManagerParameter from '../services/systemsManagerParameter'
101102
import RdsClusterSnapshot from '../services/rdsClusterSnapshot'
102103
import VpcEndpoint from '../services/vpcEndpoint'
103104
import APIGatewayDomainName from '../services/apiGatewayDomainName'
@@ -218,5 +219,6 @@ export default {
218219
[services.wafV2WebAcl]: WafV2WebAcl,
219220
[services.systemsManagerInstance]: SystemsManagerInstance,
220221
[services.systemsManagerDocument]: SystemsManagerDocument,
222+
[services.systemsManagerParameter]: SystemsManagerParameter,
221223
tag: AwsTag,
222224
}

src/enums/services.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export default {
9595
subnet: 'subnet',
9696
systemsManagerInstance: 'systemsManagerInstance',
9797
systemsManagerDocument: 'systemsManagerDocument',
98+
systemsManagerParameter: 'systemsManagerParameter',
9899
transitGateway: 'transitGateway',
99100
transitGatewayAttachment: 'transitGatewayAttachment',
100101
transitGatewayRouteTable: 'transitGatewayRouteTable',

src/services/redshift/format.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export default ({
4545
id: arn,
4646
accountId: account,
4747
arn,
48+
name: id,
4849
region,
4950
allowVersionUpgrade,
5051
automatedSnapshotRetentionPeriod,

src/services/redshift/schema.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
type awsRedshiftCluster implements awsBaseService @key(fields: "arn") {
2+
name: String @search(by: [hash, regexp])
23
allowVersionUpgrade: Boolean @search
34
automatedSnapshotRetentionPeriod: Int @search
45
availabilityZone: String @search(by: [hash, regexp])
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import {
2+
DescribeParametersCommand,
3+
DescribeParametersCommandInput,
4+
ParameterMetadata,
5+
SSMClient,
6+
} from '@aws-sdk/client-ssm'
7+
import CloudGraph from '@cloudgraph/sdk'
8+
import { Config } from 'aws-sdk'
9+
import isEmpty from 'lodash/isEmpty'
10+
import awsLoggerText from '../../properties/logger'
11+
import AwsErrorLog from '../../utils/errorLog'
12+
13+
const lt = { ...awsLoggerText }
14+
const { logger } = CloudGraph
15+
const serviceName = 'SystemsManagerParameter'
16+
const errorLog = new AwsErrorLog(serviceName)
17+
const MAX_ITEMS = 50
18+
19+
const listParameters = async (ssm: SSMClient): Promise<ParameterMetadata[]> =>
20+
new Promise(async resolve => {
21+
const parameters: ParameterMetadata[] = []
22+
23+
const input: DescribeParametersCommandInput = {
24+
MaxResults: MAX_ITEMS,
25+
}
26+
27+
const listAllParameters = (token?: string): void => {
28+
if (token) {
29+
input.NextToken = token
30+
}
31+
const command = new DescribeParametersCommand(input)
32+
ssm
33+
.send(command)
34+
.then(data => {
35+
if (isEmpty(data)) {
36+
return resolve([])
37+
}
38+
39+
const { Parameters = [], NextToken: nextToken } = data || {}
40+
41+
parameters.push(...Parameters)
42+
43+
if (nextToken) {
44+
logger.debug(lt.foundAnotherThousand)
45+
listAllParameters(nextToken)
46+
} else {
47+
resolve(parameters)
48+
}
49+
})
50+
.catch(err => {
51+
errorLog.generateAwsErrorLog({
52+
functionName: 'ssm:describeParameters',
53+
err,
54+
})
55+
resolve([])
56+
})
57+
}
58+
listAllParameters()
59+
})
60+
61+
export default async ({
62+
regions,
63+
config,
64+
}: {
65+
regions: string
66+
config: Config
67+
}): Promise<{ [property: string]: ParameterMetadata[] }> =>
68+
new Promise(async resolve => {
69+
const { credentials } = config
70+
const output: { [property: string]: ParameterMetadata[] } = {}
71+
72+
await Promise.all(
73+
regions.split(',').map(region => {
74+
const ssm = new SSMClient({
75+
credentials,
76+
region,
77+
})
78+
output[region] = []
79+
return new Promise<void>(async resolveRegion => {
80+
const params = (await listParameters(ssm)) || []
81+
output[region] = params
82+
resolveRegion()
83+
})
84+
})
85+
)
86+
errorLog.reset()
87+
88+
resolve(output)
89+
})
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { ParameterMetadata } from '@aws-sdk/client-ssm'
2+
import { AwsSystemsManagerParameter } from '../../types/generated'
3+
import { ssmParameterArn } from '../../utils/generateArns'
4+
5+
/**
6+
* Systems Manager Parameter
7+
*/
8+
export default ({
9+
account,
10+
region,
11+
service: parameter,
12+
}: {
13+
account: string
14+
region: string
15+
service: ParameterMetadata
16+
}): AwsSystemsManagerParameter => {
17+
const { Name: name } = parameter
18+
19+
const arn = ssmParameterArn({ region, account, name })
20+
21+
return {
22+
accountId: account,
23+
arn,
24+
id: arn,
25+
name,
26+
region,
27+
}
28+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Service } from '@cloudgraph/sdk'
2+
import BaseService from '../base'
3+
import format from './format'
4+
import getData from './data'
5+
import mutation from './mutation'
6+
7+
export default class SystemsManagerParameter extends BaseService implements Service {
8+
format = format.bind(this)
9+
10+
getData = getData.bind(this)
11+
12+
mutation = mutation
13+
}

0 commit comments

Comments
 (0)