aws / aws/aws-cdk

(aws-appsync): Need an option for passing a Service Role to AppSync GraphQL Lambda Data Source

Open
#16,225 9 comments 2 reactions 0 assignees View on GitHub
@aws-cdk/aws-appsync effort/small feature-request p2
Dominant language
TypeScript
Stars
12.9k
Forks
4.6k
Avg merge
1d 19h
Merged PRs (30d)
74

Description

I have a **GraphQL AppSync** and a **Lambda Function data source**.

I want to use **existing IAM Roles** as the data source **Service Role**.

Currently, there appears to be no way to specify the service role.

## I have this Typescript CDK Code:

```typescript

const figaroLambda = new NodejsFunction(this, 'FigaroLambda', {
memorySize: 1024,
timeout: cdk.Duration.seconds(5),
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'handler',
role: figaroLambdaRole,
entry: path.join(__dirname, `figaro/index.ts`),
vpc,
vpcSubnets,
securityGroups: [figaroLambdaSecurityGroup],
});

// https://docs.aws.amazon.com/cdk/api/latest/typescript/api/aws-appsync/graphqlapi.html#aws_appsync_GraphqlApi
// https://docs.aws.amazon.com/cdk/api/latest/typescript/api/aws-appsync/graphqlapiprops.html#aws_appsync_GraphqlApiProps
const api = new appsync.GraphqlApi(this, 'NeptuneGraphQLApi', {
schema: appsync.Schema.fromAsset('schema.graphql'),
authorizationConfig: {
defaultAuthorization: {
authorizationType: appsync.AuthorizationType.USER_POOL,
userPoolConfig: {
userPool: userPool,
},
}
},
})

// https://docs.aws.amazon.com/cdk/api/latest/typescript/api/aws-appsync/graphqlapibase.html#aws_appsync_GraphqlApiBase_addLambdaDataSource
api.addLambdaDataSource('LambdaDatasourceFigaro', figaroLambda);

```

## Which creates:

```yaml
NeptuneGraphQLApiLambdaDatasourceFigaroServiceRoleCCBC152B:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Action: sts:AssumeRole
Effect: Allow
Principal:
Service: appsync.amazonaws.com
Version: "2012-10-17"

NeptuneGraphQLApiLambdaDatasourceFigaroServiceRoleDefaultPolicyB39D9AB9:
Type: AWS::IAM::Policy
Properties:
PolicyDocument:
Statement:
- Action: lambda:InvokeFunction
Effect: Allow
Resource:
Fn::GetAtt:
- FigaroLambdaA18864CC
- Arn
Version: "2012-10-17"
PolicyName: NeptuneGraphQLApiLambdaDatasourceFigaroServiceRoleDefaultPolicyB39D9AB9
Roles:
- Ref: NeptuneGraphQLApiLambdaDatasourceFigaroServiceRoleCCBC152B

NeptuneGraphQLApiLambdaDatasourceFigaro8722E995:
Type: AWS::AppSync::DataSource
Properties:
ApiId:
Fn::GetAtt:
- NeptuneGraphQLApi8AAC1DF5
- ApiId
Name: LambdaDatasourceFigaro
Type: AWS_LAMBDA
LambdaConfig:
LambdaFunctionArn:
Fn::GetAtt:
- FigaroLambdaA18864CC
- Arn
ServiceRoleArn:
Fn::GetAtt:
- NeptuneGraphQLApiLambdaDatasourceFigaroServiceRoleCCBC152B
- Arn
```

## Need an option for passing a `ServiceRole` to `addLambdaDataSource`

Please consider this a feature request to update either [`addLambdaDataSource(id, lambdaFunction, options)`](https://docs.aws.amazon.com/cdk/api/latest/typescript/api/aws-appsync/graphqlapibase.html#aws_appsync_GraphqlApiBase_addLambdaDataSource) or [`DataSourceOptions`](https://docs.aws.amazon.com/cdk/api/latest/typescript/api/aws-appsync/datasourceoptions.html#aws_appsync_DataSourceOptions) to include an option for specifying a service role:
```typescript

addLambdaDataSource(
id: string,
lambdaFunction: IFunction,
serviceRole: IRole,
options?: DataSourceOptions
): LambdaDataSource;

```

---

This is a :rocket: Feature Request

Contributor guide

Open the contributing guide

Research direction

Start with GraphqlApiBase.addLambdaDataSource(id, lambdaFunction, options) and DataSourceOptions, which are the entry points named in the issue. Trace how the Lambda data source creates its ServiceRoleArn and identify the existing role-handling patterns in this API. Done means callers can provide an existing IRole and the generated AppSync data source uses that role instead of creating a new one.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, typescript
Domain
api, cloud
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.