Skip to content

Commit 624f9c2

Browse files
author
Marco Franceschi
committed
feat: Included layers for aws_lambda_layers
1 parent 8496b43 commit 624f9c2

4 files changed

Lines changed: 59 additions & 6 deletions

File tree

src/services/lambda/data.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import Lambda, {
1313
ListEventSourceMappingsResponse,
1414
EventSourceMappingConfiguration,
1515
ListFunctionEventInvokeConfigsResponse,
16-
FunctionEventInvokeConfig
16+
FunctionEventInvokeConfig,
17+
Layer
1718
} from 'aws-sdk/clients/lambda'
1819
import { AWSError } from 'aws-sdk/lib/error'
1920
import { Config } from 'aws-sdk/lib/config'
@@ -41,6 +42,7 @@ export interface RawAwsLambdaFunction extends FunctionConfiguration {
4142
}
4243
EventSourceMappings?: EventSourceMappingConfiguration[]
4344
EventInvokeConfigs?: FunctionEventInvokeConfig[]
45+
Layers?: Layer[]
4446
}
4547

4648
const listFunctionsForRegion = async ({
@@ -251,8 +253,9 @@ export default async ({
251253
logger.debug(lt.fetchedLambdas(lambdaData.length))
252254

253255
// get all tags and policy for each Lambda
254-
lambdaData.map(({ FunctionArn: arn, region, FunctionName: name }, idx) => {
256+
lambdaData.map(({ FunctionArn: arn, region, FunctionName: name, Layers }, idx) => {
255257
const lambda = new Lambda({ ...config, region, endpoint })
258+
256259
const additionalMetadataPromise = new Promise<void>(async resolveData => {
257260
const envTags: TagMap = await getResourceTags(lambda, arn)
258261
lambdaData[idx].Tags = envTags
@@ -262,6 +265,7 @@ export default async ({
262265
lambdaData[idx].EventSourceMappings = eventSourceMappings
263266
const eventInvokeConfigs = await getEventInvokeConfigs(lambda, name)
264267
lambdaData[idx].EventInvokeConfigs = eventInvokeConfigs
268+
lambdaData[idx].Layers = Layers
265269
resolveData()
266270
})
267271
tagsPromises.push(additionalMetadataPromise)

src/services/lambda/format.ts

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { generateUniqueId } from '@cloudgraph/sdk'
22
import isEmpty from 'lodash/isEmpty'
33
import t from '../../properties/translations'
4-
import { AwsLambda, AwsLambdaEventInvokeConfig, AwsLambdaEventSourceMappings } from '../../types/generated'
4+
import { AwsLambda, AwsLambdaEventInvokeConfig, AwsLambdaEventSourceMappings, AwsLambdaLayerVersion } from '../../types/generated'
55
import { formatTagsFromMap, formatIamJsonPolicy } from '../../utils/format'
66
import { RawAwsLambdaFunction } from './data'
7-
import { EventSourceMappingConfiguration, FunctionEventInvokeConfig } from 'aws-sdk/clients/lambda'
7+
import { EventSourceMappingConfiguration, FunctionEventInvokeConfig, Layer } from 'aws-sdk/clients/lambda'
88

99
/**
1010
* Lambda
@@ -36,7 +36,8 @@ export default ({
3636
VpcConfig: vpcConfig,
3737
PolicyData: { Policy: policy = '', RevisionId: policyRevisionId = '' },
3838
EventSourceMappings: eventSourceMappings = [],
39-
EventInvokeConfigs: eventInvokeConfigs = []
39+
EventInvokeConfigs: eventInvokeConfigs = [],
40+
Layers: layers = []
4041
} = rawData
4142
const environmentVariables = []
4243
const secretNames = [t.pass, t.secret, t.private, t.cert]
@@ -154,6 +155,29 @@ export default ({
154155
)
155156
}
156157

158+
const formatLayers = (
159+
layers?: Layer[]
160+
): AwsLambdaLayerVersion[] => {
161+
return (
162+
layers?.map(l => {
163+
const arnParts = l.Arn?.split(':')
164+
// get layer name from arn:aws:lambda:_REGION_:_ACCOUNT_ID_:layer:_LAYER_NAME_:_LAYER_VERSION_
165+
const layerName = arnParts[arnParts.length - 2]
166+
return ({
167+
id: generateUniqueId({
168+
arn,
169+
...l,
170+
}),
171+
arn: l.Arn,
172+
name: layerName,
173+
codeSize: l.CodeSize,
174+
signingProfileVersionArn: l.SigningProfileVersionArn,
175+
signingJobArn: l.SigningJobArn,
176+
})
177+
}) || []
178+
)
179+
}
180+
157181
const functionName = arn.split(':').pop()
158182
const functionPolicy = formatIamJsonPolicy(policy)
159183
const policyStatementIds = functionPolicy?.statement?.map(s => s.sid) ?? []
@@ -183,6 +207,7 @@ export default ({
183207
policyStatementIds,
184208
tags: formatTagsFromMap(Tags),
185209
eventSourceMappings: formatEventSourceMappings(eventSourceMappings),
186-
eventInvokeConfigs: formatEventInvokeConfigs(eventInvokeConfigs)
210+
eventInvokeConfigs: formatEventInvokeConfigs(eventInvokeConfigs),
211+
layers: formatLayers(layers)
187212
}
188213
}

src/services/lambda/schema.graphql

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,19 @@ type awsLambdaEventSourceMappings
7575
selfManagedKafkaEventSourceConfig: awsLambdaEventSourceConfig
7676
}
7777

78+
type awsLambdaLayerVersion
79+
@generate(
80+
query: { get: false, query: true, aggregate: false }
81+
mutation: { add: false, delete: false }
82+
subscription: false
83+
) {
84+
id: String! @id
85+
arn: String @search(by: [hash, regexp])
86+
name: String @search(by: [hash, regexp])
87+
codeSize: Float
88+
signingProfileVersionArn: String @search(by: [hash, regexp])
89+
signingJobArn: String @search(by: [hash, regexp])
90+
}
7891

7992
type awsLambda implements awsBaseService @key(fields: "arn") {
8093
description: String @search(by: [hash, regexp, fulltext])
@@ -97,6 +110,7 @@ type awsLambda implements awsBaseService @key(fields: "arn") {
97110
policyStatementIds: [String] @search(by: [hash, regexp])
98111
eventSourceMappings: [awsLambdaEventSourceMappings]
99112
eventInvokeConfigs: [awsLambdaEventInvokeConfig]
113+
layers: [awsLambdaLayerVersion]
100114
tags: [awsRawTag]
101115
kms: [awsKms] @hasInverse(field: lambda)
102116
securityGroups: [awsSecurityGroup] @hasInverse(field: lambda)

src/types/generated.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3418,6 +3418,7 @@ export type AwsLambda = AwsBaseService & {
34183418
kms?: Maybe<Array<Maybe<AwsKms>>>;
34193419
kmsKeyArn?: Maybe<Scalars['String']>;
34203420
lastModified?: Maybe<Scalars['String']>;
3421+
layers?: Maybe<Array<Maybe<AwsLambdaLayerVersion>>>;
34213422
memorySize?: Maybe<Scalars['Int']>;
34223423
name?: Maybe<Scalars['String']>;
34233424
policy?: Maybe<AwsIamJsonPolicy>;
@@ -3491,6 +3492,15 @@ export type AwsLambdaEventSourceMappings = {
34913492
uuid?: Maybe<Scalars['String']>;
34923493
};
34933494

3495+
export type AwsLambdaLayerVersion = {
3496+
arn?: Maybe<Scalars['String']>;
3497+
codeSize?: Maybe<Scalars['Float']>;
3498+
id: Scalars['String'];
3499+
name?: Maybe<Scalars['String']>;
3500+
signingJobArn?: Maybe<Scalars['String']>;
3501+
signingProfileVersionArn?: Maybe<Scalars['String']>;
3502+
};
3503+
34943504
export type AwsLambdaSourceAccessConfiguration = {
34953505
id: Scalars['String'];
34963506
type?: Maybe<Scalars['String']>;

0 commit comments

Comments
 (0)