packages/@aws-cdk/aws-pipes-enrichments-alpha/lib/api-gateway.ts (55 lines of code) (raw):
import { EnrichmentParametersConfig, IEnrichment, IPipe, InputTransformation } from '@aws-cdk/aws-pipes-alpha';
import { IRestApi } from 'aws-cdk-lib/aws-apigateway';
import { IRole, PolicyStatement } from 'aws-cdk-lib/aws-iam';
import { CfnPipe } from 'aws-cdk-lib/aws-pipes';
/**
* Properties for a ApiGatewayEnrichment
*/
export interface ApiGatewayEnrichmentProps {
/**
* The input transformation for the enrichment
* @see https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes-input-transformation.html
* @default - None
*/
readonly inputTransformation?: InputTransformation;
/**
* The method for API Gateway resource.
*
* @default '*' - ANY
*/
readonly method?: string;
/**
* The path for the API Gateway resource.
*
* @default '/'
*/
readonly path?: string;
/**
* The deployment stage for the API Gateway resource.
*
* @default - the value of `deploymentStage.stageName` of target API Gateway resource.
*/
readonly stage?: string;
/**
* The headers that need to be sent as part of request invoking the API Gateway REST API.
*
* @default - none
*/
readonly headerParameters?: Record<string, string>;
/**
* The path parameter values used to populate the API Gateway REST API path wildcards ("*").
*
* @default - none
*/
readonly pathParameterValues?: string[];
/**
* The query string keys/values that need to be sent as part of request invoking the EventBridge API destination.
*
* @default - none
*/
readonly queryStringParameters?: Record<string, string>;
}
/**
* An API Gateway enrichment for a pipe
*/
export class ApiGatewayEnrichment implements IEnrichment {
public readonly enrichmentArn: string;
private readonly inputTransformation?: InputTransformation;
private readonly headerParameters?: Record<string, string>;
private readonly pathParameterValues?: string[];
private readonly queryStringParameters?: Record<string, string>;
constructor(private readonly restApi: IRestApi, props?: ApiGatewayEnrichmentProps) {
this.enrichmentArn = restApi.arnForExecuteApi(
props?.method,
props?.path || '/',
props?.stage || this.restApi.deploymentStage.stageName,
);
this.inputTransformation = props?.inputTransformation;
this.headerParameters = props?.headerParameters;
this.queryStringParameters = props?.queryStringParameters;
this.pathParameterValues = props?.pathParameterValues;
}
bind(pipe: IPipe): EnrichmentParametersConfig {
const httpParameters: CfnPipe.PipeEnrichmentHttpParametersProperty | undefined =
this.headerParameters ??
this.pathParameterValues ??
this.queryStringParameters
? {
headerParameters: this.headerParameters,
pathParameterValues: this.pathParameterValues,
queryStringParameters: this.queryStringParameters,
}
: undefined;
return {
enrichmentParameters: {
inputTemplate: this.inputTransformation?.bind(pipe).inputTemplate,
httpParameters,
},
};
}
grantInvoke(pipeRole: IRole): void {
pipeRole.addToPrincipalPolicy(new PolicyStatement({
resources: [this.enrichmentArn],
actions: ['execute-api:Invoke'],
}));
}
}