在 aws-pulumi 上部署 lambda 函数

And*_*lai 5 amazon-web-services typescript pulumi

我正在尝试在我的 AWS 帐户上部署 lambda 函数,该函数将上传到“lambda-bucket-in”的文件压缩到存储桶“lambda-bucket-out”上。我试图遵循的例子就是这个,特别是第二种方式(第一种方式可以正常工作)。

\n

我的 pulumi 代码如下:

\n
import * as aws from "@pulumi/aws";\nimport * as pulumi from "@pulumi/pulumi";\n\n\nconst tpsReports = new aws.s3.Bucket("lambda-bucket-in");\nconst tpsZips = new aws.s3.Bucket("lambda-bucket-out");\n\n\n// First, create some IAM machinery:\nconst zipFuncRole = new aws.iam.Role("zipTpsReportsFuncRole", {\n    assumeRolePolicy: {\n       Version: "2012-10-17",\n       Statement: [{\n          Action: "sts:AssumeRole",\n          Principal: {\n             Service: "lambda.amazonaws.com",\n          },\n          Effect: "Allow",\n          Sid: "",\n       }],\n    },\n });\n new aws.iam.RolePolicyAttachment("zipTpsReportsFuncRoleAttach", {\n    role: zipFuncRole,\n    policyArn: aws.iam.ManagedPolicy.AWSLambdaExecute,\n });\n \n // Next, create the Lambda function itself:\n const zipFunc = new aws.lambda.Function("zipTpsReportsFunc", {\n    environment: {\n       variables: {\n          "TPS_ZIP_BUCKET": tpsZips.bucket,\n       },\n    },\n    code: new pulumi.asset.AssetArchive({\n       ".": new pulumi.asset.FileArchive("app"),\n    }),\n    runtime: "nodejs12.x",\n    role: zipFuncRole.arn,\n });\n \n // Finally, register the Lambda to fire when a new TPS report arrives:\n tpsReports.onObjectCreated("zipTpsReports", zipFunc);\n
Run Code Online (Sandbox Code Playgroud)\n

而“app”文件中,带有 lambda 函数的是:

\n
   const AdmZip = require("adm-zip");\n   const s3 = new aws.sdk.S3();\n   for (const rec of e.Records || []) {\n      const zip = new AdmZip();\n      const [ buck, key ] = [ rec.s3.bucket.name, rec.s3.object.key ];\n      console.log(`Zipping ${buck}/${key} into ${tpsZips.bucket.get()}/${key}.zip`);\n      const data = await s3.getObject({ Bucket: buck, Key: key }).promise);\n      zip.addFile(key, data.Body);\n      await s3.putObject({\n         Bucket: tpsZips.bucket.get(),\n         Key: `${key}.zip`,\n         Body: zip.toBuffer(),\n      }).promise();\n   }\n
Run Code Online (Sandbox Code Playgroud)\n

使用命令运行 pulumi 时pulumi up --yes,插入密码后,它返回:

\n
Previewing update (my-lambda):\n     Type                                  Name                         Plan       Info\n +   pulumi:pulumi:Stack                   bucket-my-lambda-my-lambda   create     1 error; 48 messages\n +   \xe2\x94\x9c\xe2\x94\x80 aws:s3:Bucket                      lambda-bucket-out            create     \n +   \xe2\x94\x9c\xe2\x94\x80 aws:s3:Bucket                      lambda-bucket-in             create     \n +   \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 aws:s3:BucketEventSubscription  zipTpsReports                create     \n +   \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 aws:s3:BucketNotification       zipTpsReports                create     \n +   \xe2\x94\x9c\xe2\x94\x80 aws:iam:Role                       zipTpsReportsFuncRole        create     \n +   \xe2\x94\x94\xe2\x94\x80 aws:iam:RolePolicyAttachment       zipTpsReportsFuncRoleAttach  create     \n \nDiagnostics:\n  pulumi:pulumi:Stack (bucket-my-lambda-my-lambda):\n    TypeError: Cannot read property \'split\' of undefined\n        at deserializeProperty (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/rpc.js:472:48)\n        at Object.deserializeProperties (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/rpc.js:126:24)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:524:43\n        at Generator.next (<anonymous>)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:21:71\n        at new Promise (<anonymous>)\n        at __awaiter (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:17:12)\n        at resolveOutputs (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:519:12)\n        at Object.<anonymous> (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:321:19)\n        at Generator.throw (<anonymous>)\n    TypeError: Cannot read property \'split\' of undefined\n        at deserializeProperty (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/rpc.js:472:48)\n        at Object.deserializeProperties (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/rpc.js:126:24)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:524:43\n        at Generator.next (<anonymous>)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:21:71\n        at new Promise (<anonymous>)\n        at __awaiter (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:17:12)\n        at resolveOutputs (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:519:12)\n        at Object.<anonymous> (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:321:19)\n        at Generator.throw (<anonymous>)\n \n    unhandled rejection: CONTEXT(1251): monitor.registerResource(resource:zipTpsReports[aws:lambda/permission:Permission])-initial\n    STACK_TRACE:\n    Error:\n        at Object.debuggablePromise (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/debuggable.js:69:75)\n        at runAsyncResourceOp (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:634:75)\n        at Object.<anonymous> (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:257:9)\n        at Generator.next (<anonymous>)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:21:71\n        at new Promise (<anonymous>)\n        at __awaiter (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:17:12)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:219:63\n        at runMicrotasks (<anonymous>)\n        at processTicksAndRejections (internal/process/task_queues.js:93:5)\n    unhandled rejection: CONTEXT(1251): monitor.registerResource(resource:zipTpsReports[aws:lambda/permission:Permission])-initial\n    STACK_TRACE:\n    Error:\n        at Object.debuggablePromise (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/debuggable.js:69:75)\n        at runAsyncResourceOp (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:634:75)\n        at Object.<anonymous> (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:257:9)\n        at Generator.next (<anonymous>)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:21:71\n        at new Promise (<anonymous>)\n        at __awaiter (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:17:12)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:219:63\n        at runMicrotasks (<anonymous>)\n        at processTicksAndRejections (internal/process/task_queues.js:93:5)\n \n    error: Running program \'/home/andrea/Piratech/pulumi/bucket-my-lambda\' failed with an unhandled exception:\n    TypeError: Cannot read property \'split\' of undefined\n        at deserializeProperty (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/rpc.js:472:48)\n        at Object.deserializeProperties (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/rpc.js:126:24)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:524:43\n        at Generator.next (<anonymous>)\n        at /home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:21:71\n        at new Promise (<anonymous>)\n        at __awaiter (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:17:12)\n        at resolveOutputs (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:519:12)\n        at Object.<anonymous> (/home/andrea/Piratech/pulumi/bucket-my-lambda/node_modules/@pulumi/pulumi/runtime/resource.js:321:19)\n        at Generator.throw (<anonymous>)\n
Run Code Online (Sandbox Code Playgroud)\n

有谁知道如何解决这个问题,它代表什么?\n感谢您的帮助。

\n