in event-driven-developers-tale/infrastructure/lib/infrastructure-stack.js [16:192]
constructor(scope, id, props) {
super(scope, id, props);
// GLOBAL ENVIRONMENT VARIABLES
// !!!!
// REPLACE WITH YOUR OWN VALUES AFTER AMPLIFY PUSH
// !!!!
//
var TableNameEnv = "VacationRequest-ckp2905llfbhvp3rzplgpjpocm-twitch"; // this is just an example. not a real value.
var appSyncEndpointEnv = "https://5lex5fzaciqulcx4d5h67xgyz4.appsync-api.eu-west-1.amazonaws.com/graphql"; // this is just an example. not a real value.
var evb = new eventbridge.EventBus(this, "VacationTrackerEventBus", {
eventBusName: "VacationTrackerEvents"
});
var dynamoPolicyStatement = new iam.PolicyStatement({
actions: [
"dynamodb:BatchGetItem",
"dynamodb:BatchWriteItem",
"dynamodb:ConditionCheckItem",
"dynamodb:PutItem",
"dynamodb:DescribeTable",
"dynamodb:DeleteItem",
"dynamodb:GetItem",
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:UpdateItem"
],
resources: ["*"],
effect: iam.Effect.ALLOW
});
var cloudwatchLogsStatement = new iam.PolicyStatement({
actions: [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents",
"logs:GetLogEvents",
"logs:FilterLogEvents"
],
resources: ["*"],
effect: iam.Effect.ALLOW
});
var EventableRole = new iam.Role(this, "dynamoAndEventBridgePutRole", {
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName("AWSXrayWriteOnlyAccess"),
iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonEventBridgeFullAccess")
],
inlinePolicies: [
new iam.PolicyDocument({
statements: [
dynamoPolicyStatement,
cloudwatchLogsStatement
]
})
]
});
var appSyncStatement = new iam.PolicyStatement({
actions: [
"appsync:*"
],
resources: ["*"],
effect: iam.Effect.ALLOW
});
var AppSyncIntegrationRole = new iam.Role(this, "appSyncIntegrationRole", {
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName("AWSXrayWriteOnlyAccess")
],
inlinePolicies: [
new iam.PolicyDocument({
statements: [
appSyncStatement,
cloudwatchLogsStatement
]
})
]
});
const createVacationRequestAsset = new assets.Asset(this, 'createVacationRequestBundledAsset', {
path: '../functions/createVacationRequest/'
});
const updateVacationRequestAsset = new assets.Asset(this, 'updateVacationRequestBundledAsset', {
path: '../functions/updateVacationRequest/'
});
const validateVacationRequestAsset = new assets.Asset(this, 'vacationRequestValidationBundledAsset', {
path: '../functions/vacationRequestValidation/'
});
var createVacationRequestFunction = new lambda.Function(this, "createVacationRequestFunction", {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'app.handler',
code: lambda.Code.fromBucket(createVacationRequestAsset.bucket, createVacationRequestAsset.s3ObjectKey),
role: EventableRole,
functionName: "createVacationRequestFunction",
environment: {
"TABLE_NAME": TableNameEnv,
"EVENT_BUS_NAME": evb.eventBusName
},
tracing: lambda.Tracing.ACTIVE,
timeout: Duration.seconds(15),
memorySize: 512
});
var updateVacationRequestFunction = new lambda.Function(this, "updateVacationRequestFunction", {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'app.handler',
code: lambda.Code.fromBucket(updateVacationRequestAsset.bucket, updateVacationRequestAsset.s3ObjectKey),
role: EventableRole,
functionName: "updateVacationRequestFunction",
environment: {
"TABLE_NAME": TableNameEnv,
"EVENT_BUS_NAME": evb.eventBusName
},
tracing: lambda.Tracing.ACTIVE,
timeout: Duration.seconds(15),
memorySize: 512
});
var validateVacationRequestFunction = new lambda.Function(this, "validateVacationRequestFunction", {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'app.handler',
code: lambda.Code.fromBucket(validateVacationRequestAsset.bucket, validateVacationRequestAsset.s3ObjectKey),
role: AppSyncIntegrationRole,
functionName: "validateVacationRequestFunction",
environment: {
"APP_SYNC_API_URL": appSyncEndpointEnv
},
tracing: lambda.Tracing.ACTIVE,
timeout: Duration.seconds(15),
memorySize: 512
});
var vacationRequestSubmitedRule = new eventbridge.Rule(this, "ValidateVacationRequestOnSubmission", {
enabled: true,
eventBus: evb,
ruleName: "ValidateVacationRequestOnSubmission",
eventPattern: {
source: ["VacationTrackerApp"],
detailType: ["VacationRequestSubmited"]
},
targets: [
new targets.LambdaFunction(validateVacationRequestFunction)
]
});
var vacationRequestValidatedRule = new eventbridge.Rule(this, "VacationRequestValidated", {
enabled: true,
eventBus: evb,
ruleName: "VacationRequestValidated",
eventPattern: {
source: ["VacationTrackerApp"],
detailType: ["VacationRequestValidated"]
}
});
var vacationRequestApprovedRule = new eventbridge.Rule(this, "VacationRequestApproved", {
enabled: true,
eventBus: evb,
ruleName: "VacationRequestApproved",
eventPattern: {
source: ["VacationTrackerApp"],
detailType: ["VacationRequestApproved"]
}
});
}