在 aws-pulumi 上部署 lambda 函数

问题描述

我正在尝试在我的 AWS 账户上部署一个 lambda 函数,它将上传到“lambda-bucket-in”中的文件压缩到存储桶“lambda-bucket-out”上。我试图遵循的示例是 this 一个,特别是第二种方式(第一种方式正确地完成其工作)。

我的 pulumi 代码如下:

import * as aws from "@pulumi/aws";
import * as pulumi from "@pulumi/pulumi";


const tpsReports = new aws.s3.Bucket("lambda-bucket-in");
const tpsZips = new aws.s3.Bucket("lambda-bucket-out");


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

虽然是“app”文件,但带有 lambda 函数的是:

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

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

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)