Skip to content

Commit

Permalink
feat: Typescript conversion of GlueTransformStage (#152)
Browse files Browse the repository at this point in the history
* add glue transform stage & simple test case

* pr feedback

* run build & prettier
  • Loading branch information
kukushking committed Aug 22, 2022
1 parent 6b5beb3 commit 041ad13
Show file tree
Hide file tree
Showing 5 changed files with 390 additions and 2 deletions.
13 changes: 11 additions & 2 deletions .projenrc.js
@@ -1,9 +1,12 @@
const { awscdk, javascript } = require('projen');
const { awscdk, DependencyType, javascript } = require('projen');

const CDK_VERSION = '2.38.1';

const project = new awscdk.AwsCdkConstructLibrary({
author: 'AWS Professional Services',
authorAddress: 'aws-proserve-orion-dev@amazon.com',

cdkVersion: '2.38.1',
cdkVersion: CDK_VERSION,
defaultReleaseBranch: 'main',
release: false,
name: 'aws-ddk-core',
Expand Down Expand Up @@ -33,4 +36,10 @@ const project = new awscdk.AwsCdkConstructLibrary({
gitignore: ['.vscode/'],
});

// Experimental modules
[].forEach((dep) => {
project.deps.addDependency(`${dep}@^${CDK_VERSION}-alpha.0`, DependencyType.PEER);
project.deps.addDependency(`${dep}@${CDK_VERSION}-alpha.0`, DependencyType.DEVENV);
});

project.synth();
311 changes: 311 additions & 0 deletions API.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 44 additions & 0 deletions src/stages/glue-transform.ts
@@ -0,0 +1,44 @@
import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
import { Construct } from 'constructs';
import { StateMachineStage, StateMachineStageProps } from '../pipelines/stage';

export interface GlueTransformStageProps extends StateMachineStageProps {
readonly jobName: string;
readonly jobArgs?: { [key: string]: any };
readonly crawlerName: string;
}

export class GlueTransformStage extends StateMachineStage {
private readonly jobName: string;
private readonly jobArgs?: { [key: string]: any };
private readonly crawlerName: string;

constructor(scope: Construct, id: string, props: GlueTransformStageProps) {
super(scope, id, props);

this.jobName = props.jobName;
this.jobArgs = props.jobArgs;
this.crawlerName = props.crawlerName;
}

protected createStateMachineSteps(): sfn.IChainable {
const startJobRun = new tasks.GlueStartJobRun(this, 'Start Job Run', {
glueJobName: this.jobName,
integrationPattern: sfn.IntegrationPattern.RUN_JOB,
arguments: this.jobArgs ? sfn.TaskInput.fromObject(this.jobArgs) : undefined,
resultPath: sfn.JsonPath.DISCARD,
});

const crawlObject = new sfn.CustomState(this, 'Crawl Object', {
stateJson: {
Type: 'Task',
Resource: 'arn:aws:states:::aws-sdk:glue:startCrawler',
Parameters: { Name: this.crawlerName },
Catch: [{ ErrorEquals: ['Glue.CrawlerRunningException'], Next: 'Success' }],
},
});

return startJobRun.next(crawlObject.next(new sfn.Succeed(this, 'Success')));
}
}

0 comments on commit 041ad13

Please sign in to comment.