1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
| import * as cdk from '@aws-cdk/core';
import * as lambda from "@aws-cdk/aws-lambda"
import * as stepfunctions from "@aws-cdk/aws-stepfunctions"
import * as tasks from "@aws-cdk/aws-stepfunctions-tasks"
import * as logs from "@aws-cdk/aws-logs"
import * as s3 from "@aws-cdk/aws-s3"
import * as ec2 from "@aws-cdk/aws-ec2"
import * as dotenv from 'dotenv';
export class CdkLambdaStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// 將裡面比較敏感的資訊用env 包起來, 注意後面的path 要正確
dotenv.config({path:__dirname+'/../.env'})
// 我要上傳音檔的S3 目標 arn:aws:s3:::test 為虛構(我忘了把這個也包env了哈哈)
const bucket = s3.Bucket.fromBucketArn(this,"test","arn:aws:s3:::test")
// 負責前面呼叫step function 的 lambda
const downloadAudioLambda = new lambda.Function(this, "downloadAudioLambda", {
runtime: lambda.Runtime.NODEJS_12_X,
timeout: cdk.Duration.seconds(25),
handler: "index.handler",
code: lambda.Code.fromAsset("lambda/downloadAudioLambda")
});
bucket.grantPut(downloadAudioLambda)
const downloadAudioJob = new tasks.LambdaInvoke(this,'Calllambda',{
lambdaFunction: downloadAudioLambda,
outputPath: "$.Payload"
})
const map = new stepfunctions.Map(this, 'ExampleMapState');
map.iterator(downloadAudioJob);
const logGroup = new logs.LogGroup(this, 'StepFunctionLogs')
const stateMachine = new stepfunctions.StateMachine(this, 'StateMachine', {
definition: map,
logs: {
destination: logGroup,
level: stepfunctions.LogLevel.ERROR
}
});
const testVpc = ec2.Vpc.fromLookup(this,"vpc-dev",{
vpcId: process.env.VPCID
});
const processorLambda = new lambda.Function(this, "processorLambda", {
runtime: lambda.Runtime.NODEJS_12_X,
handler: "index.handler",
timeout: cdk.Duration.seconds(25),
code: lambda.Code.fromAsset("lambda/processor"),
vpc: testVpc,
environment: {
ENDPOINT: process.env.ENDPOINT ?? 'localhost',
DATABASE: process.env.DATABASE ?? 'db',
DBUSERNAME: process.env.DBUSERNAME ?? 'root',
PASSWORD: process.env.PASSWORD ?? 'password',
NODE_ENV: process.env.NODE_ENV ?? 'test',
statemachine_arn: stateMachine.stateMachineArn
}
});
stateMachine.grantStartExecution(transferLambda)
}
}
|