Skip to content

Commit

Permalink
create import serice
Browse files Browse the repository at this point in the history
  • Loading branch information
Siranush Zakaryan committed Jan 22, 2024
1 parent d4ff591 commit 5992ec1
Show file tree
Hide file tree
Showing 15 changed files with 6,341 additions and 5 deletions.
8 changes: 8 additions & 0 deletions import-service/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
*.js
!jest.config.js
*.d.ts
node_modules

# CDK asset staging directory
.cdk.staging
cdk.out
6 changes: 6 additions & 0 deletions import-service/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
*.ts
!*.d.ts

# CDK asset staging directory
.cdk.staging
cdk.out
14 changes: 14 additions & 0 deletions import-service/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Welcome to your CDK TypeScript project

This is a blank project for CDK development with TypeScript.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

## Useful commands

* `npm run build` compile typescript to js
* `npm run watch` watch for changes and compile
* `npm run test` perform the jest unit tests
* `npx cdk deploy` deploy this stack to your default AWS account/region
* `npx cdk diff` compare deployed stack with current state
* `npx cdk synth` emits the synthesized CloudFormation template
18 changes: 18 additions & 0 deletions import-service/bin/import-service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/usr/bin/env node
import "source-map-support/register";
import * as cdk from "@aws-cdk/core";
import { ImportServiceStack } from "../lib/import-service-stack";

const app = new cdk.App();
new ImportServiceStack(app, "ImportServiceStack", {
/* If you don't specify 'env', this stack will be environment-agnostic.
* Account/Region-dependent features and context lookups will not work,
* but a single synthesized template can be deployed anywhere. */
/* Uncomment the next line to specialize this stack for the AWS Account
* and Region that are implied by the current CLI configuration. */
// env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION },
/* Uncomment the next line if you know exactly what Account and Region you
* want to deploy the stack to. */
// env: { account: '123456789012', region: 'us-east-1' },
/* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */
});
5 changes: 5 additions & 0 deletions import-service/cdk.context.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"acknowledged-issue-numbers": [
19836
]
}
64 changes: 64 additions & 0 deletions import-service/cdk.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"app": "npx ts-node --prefer-ts-exts bin/import-service.ts",
"watch": {
"include": [
"**"
],
"exclude": [
"README.md",
"cdk*.json",
"**/*.d.ts",
"**/*.js",
"tsconfig.json",
"package*.json",
"yarn.lock",
"node_modules",
"test"
]
},
"context": {
"@aws-cdk/aws-lambda:recognizeLayerVersion": true,
"@aws-cdk/core:checkSecretUsage": true,
"@aws-cdk/core:target-partitions": [
"aws",
"aws-cn"
],
"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
"@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
"@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
"@aws-cdk/aws-iam:minimizePolicies": true,
"@aws-cdk/core:validateSnapshotRemovalPolicy": true,
"@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
"@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
"@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
"@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
"@aws-cdk/core:enablePartitionLiterals": true,
"@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
"@aws-cdk/aws-iam:standardizedServicePrincipals": true,
"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
"@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
"@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
"@aws-cdk/aws-route53-patters:useCertificate": true,
"@aws-cdk/customresources:installLatestAwsSdkDefault": false,
"@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
"@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
"@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
"@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
"@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true,
"@aws-cdk/aws-redshift:columnId": true,
"@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true,
"@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
"@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
"@aws-cdk/aws-kms:aliasNameRef": true,
"@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
"@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
"@aws-cdk/aws-efs:denyAnonymousAccess": true,
"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true,
"@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true,
"@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true,
"@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true,
"@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true,
"@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true,
"@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true
}
}
8 changes: 8 additions & 0 deletions import-service/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
testEnvironment: 'node',
roots: ['<rootDir>/test'],
testMatch: ['**/*.test.ts'],
transform: {
'^.+\\.tsx?$': 'ts-jest'
}
};
92 changes: 92 additions & 0 deletions import-service/lib/import-service-stack.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import * as s3 from "@aws-cdk/aws-s3";
import * as cdk from "@aws-cdk/core";
import * as lambda from "@aws-cdk/aws-lambda";
import * as apigateway from "@aws-cdk/aws-apigateway";
import { S3EventSource } from "@aws-cdk/aws-lambda-event-sources";

export class ImportServiceStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);

const existingBucketName = "siranush88-import-service-bucket";
const importBucket: any = s3.Bucket.fromBucketName(
this,
"ImportBucket",
existingBucketName
);

// const csvLayer = lambda.LayerVersion.fromLayerVersionArn(
// this,
// "CsvLayer",
// "arn:aws:lambda:eu-west-1:449355255930:layer:csvLayer:2"
// );

const importProductsFileLambda = new lambda.Function(
this,
"ImportProductsFileLambda",
{
runtime: lambda.Runtime.NODEJS_14_X,
handler: "handlers/import-handler.handler",
code: lambda.Code.fromAsset("src"),
// layers: [csvLayer],
environment: {
IMPORT_BUCKET_NAME: importBucket.bucketName,
},
}
);

importBucket.grantReadWrite(importProductsFileLambda);

const importFileParserLambda = new lambda.Function(
this,
"ImportFileParserLambda",
{
runtime: lambda.Runtime.NODEJS_14_X,
handler: "handlers/importFileParser.handler",
code: lambda.Code.fromAsset("src"),
environment: {
IMPORT_BUCKET_NAME: importBucket.bucketName,
},
}
);

importBucket.grantRead(importFileParserLambda);

importFileParserLambda.addEventSource(
new S3EventSource(importBucket, {
events: [s3.EventType.OBJECT_CREATED],
filters: [{ prefix: "uploaded/" }],
})
);

const api = new apigateway.RestApi(this, "ImportApi", {
restApiName: "Import API",
description: "API for importing products",
});

const importIntegration = new apigateway.LambdaIntegration(
importProductsFileLambda
);

const importResource = api.root.addResource("import");
importResource.addMethod("GET", importIntegration);

new cdk.CfnOutput(this, "ImportBucketOutput", {
value: importBucket.bucketName,
description: "Import S3 Bucket Name",
});

new cdk.CfnOutput(this, "ImportLambdaFunctionOutput", {
value: importProductsFileLambda.functionArn,
description: "Import Lambda Function ARN",
});

new cdk.CfnOutput(this, "ImportFileParserLambdaOutput", {
value: importFileParserLambda.functionArn,
description: "Import File Parser Lambda Function ARN",
});
}
}

const app = new cdk.App();
new ImportServiceStack(app, "ImportServiceStack");
Loading

0 comments on commit 5992ec1

Please sign in to comment.