victorious-memory-43562
08/05/2022, 2:23 AMmillions-furniture-75402
08/05/2022, 9:05 PMconst eventBridgeRuleCloudTrailAction = new aws.cloudwatch.EventRule(`${appName}-cloudtrail-s3-action`, {
description: "CloudTrail event filtered down to S3 on the asset buckets",
eventPattern: pulumi
.all([assetInputBucket.id, assetOutputBucket.id])
.apply(([assetInputBucketName, assetOutputBucketName]) => {
return JSON.stringify({
source: ["aws.s3"],
"detail-type": ["AWS API Call via CloudTrail"],
detail: {
eventSource: ["<http://s3.amazonaws.com|s3.amazonaws.com>"],
eventName: [
"CompleteMultipartUpload",
"CopyObject",
"DeleteObject",
"DeleteObjects",
"PutObject",
"UpdateObject",
],
requestParameters: {
bucketName: [assetInputBucketName, assetOutputBucketName],
},
},
});
}),
});
new aws.cloudwatch.EventTarget(`${appName}-ebt-cloudtrail-action-sqs`, {
rule: eventBridgeRuleCloudTrailAction.name,
arn: cloudTrailEventQueue.arn,
inputTransformer: {
inputPaths: {
detailType: "$.detail-type",
eventName: "$.detail.eventName",
id: "$.id",
requestParameters: "$.detail.requestParameters",
source: "$.source",
},
inputTemplate: `{
"detail": {\
"eventId": <id>,\
"eventName": <eventName>,\
"eventSource": <source>,\
"messageType": "Event",\
"requestParameters": <requestParameters>,\
"version": "0"\
},
"detail-type": <detailType>,
"id": <id>,
"source": <source>
}`,
},
});
"I thought maybe I could run it from lambda, but that wasn’t working"This should work, what wasn't working?
victorious-memory-43562
08/05/2022, 9:49 PMERROR CommandError: code: -2
stdout:
stderr:
err?: Error: spawn pulumi ENOENT
at Object.createCommandError (/var/task/node_modules/@pulumi/automation/errors.ts:73:21)
at ChildProcess.<anonymous> (/var/task/node_modules/@pulumi/automation/cmd.ts:86:27)
at ChildProcess.emit (events.js:400:28)
at Process.ChildProcess._handle.onexit (internal/child_process.js:283:12)
at onErrorNT (internal/child_process.js:472:16)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
commandResult: CommandResult {
stdout: '',
stderr: '',
code: -2,
err: Error: spawn pulumi ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:277:19)
at onErrorNT (internal/child_process.js:472:16)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
errno: -2,
code: 'ENOENT',
syscall: 'spawn pulumi',
path: 'pulumi',
spawnargs: [Array]
}
}
}
millions-furniture-75402
08/08/2022, 12:13 PMconst lambdaImage = containerRepository.buildAndPushImage({
dockerfile: "lambda.Dockerfile",
env: {
DOCKER_BUILDKIT: "1",
},
});
const lambdaFunctionApi = new aws.lambda.Function(
`${appName}-api`,
{
imageUri: lambdaImage,
imageConfig: { commands: ["lambdaApiHandler.handler"] },
...
},
{ dependsOn: [applicationRole, lambdaImage] },
);
(lambda.Dockerfile
example)
FROM public.ecr.aws/lambda/nodejs:16
ARG FUNCTION_DIR="/var/task"
RUN mkdir -p ${FUNCTION_DIR}
COPY dist/app ${FUNCTION_DIR}
COPY dist/lambda-layer/nodejs/node_modules ${FUNCTION_DIR}/node_modules
Lambda layer method:
const lambdaLayer = new aws.lambda.LayerVersion(`${appName}-lambda-layer`, {
code: new pulumi.asset.FileArchive("./dist/lambda-layer"),
compatibleRuntimes: [aws.lambda.NodeJS12dXRuntime],
layerName: `${appName}-lambda-layer`,
});
const lambdaFunctionApi = new aws.lambda.Function(
`${appName}-api`,
{
code: new pulumi.asset.FileArchive("./dist/app"),
handler: "lambdaApiHandler.handler",
layers: [lambdaLayer.arn],
...
},
{ dependsOn: [applicationRole, lambdaLayer] },
);