1

我正在尝试通过根据示例文档设置一个执行 Lambda 函数的 CampaignHook 来为我的 AWS Pinpoint 项目创建一个(测试版)自定义通道。

我的 lambda 函数似乎可以正常工作。但是,当我将 CampaignHook 指向 lambda 函数时,我收到此错误:

> aws lambda add-permission --function-name arn:aws:lambda:us-east-1:my-account-id:function:MyFunctionName \
    --statement-id s1 \
    --action lambda:InvokeFunction \
    --principal pinpoint.us-east-1.amazonaws.com \
    --source-arn 'arn:aws:mobiletargeting:us-east-1:my-account-id:/apps/my-pinpoint-project-id/campaigns/*'
=> 
{
    "Statement": "{\"Sid\":\"s1\",\"Effect\":\"Allow\",\"Principal\": {\"Service\":\"pinpoint.us-east-1.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:my-account-id:function:MyFunctionName\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:mobiletargeting:us-east-1:my-account-id:/apps/my-pinpoint-project-id/campaigns/*\"}}}"
}

> aws pinpoint update-application-settings \
    --application-id my-pinpoint-project-id \
    --write-application-settings-request '{\"CampaignHook\": { \"LambdaFunctionName\": \"arn:aws:lambda:us-east-1:my-account-id:function:MyFunctionName\", \"Mode\": \"DELIVERY\" }}'

=> An error occurred (BadRequestException) when calling the UpdateApplicationSettings operation: Could not properly invoke Lambda function specified in hook.

我的函数在 C# 中,处理程序的签名是:

public async Task<String> FunctionHandler(Object evt, ILambdaContext context)

知道错误消息是什么意思吗?我不确定这是权限问题还是命令本身有问题。

4

3 回答 3

4

Pinpoint项目的 SourceARN 应如下所示:

arn:aws:mobiletargeting:us-east-1:my-account-id:/apps/my-pinpoint-project-id

我错误地为广告系列ARN添加了通配符。正确的命令是:

aws lambda add-permission --function-name arn:aws:lambda:us-east-1:my-account-id:function:MyFunctionName \
    --statement-id s1 \
    --action lambda:InvokeFunction \
    --principal pinpoint.us-east-1.amazonaws.com \
    --source-arn 'arn:aws:mobiletargeting:us-east-1:my-account-id:/apps/my-pinpoint-project-id'
于 2019-08-13T19:23:34.670 回答
0

将 arn 用于自定义通道的最佳方法是:

arn:aws:mobiletargeting:us-east-1:account-id:/apps/*

这对我有用!

于 2020-01-20T16:56:23.467 回答
0

我在尝试在 CDK/Typescript 中创建 Pinpoint 项目活动挂钩时遇到了这个错误。

这是对我有用的语法:

pinpointProjectCampaignHookLambda.addPermission('pinpointProjectCampaignHookLambdaInvocation', {
    principal: new iam.ServicePrincipal(`pinpoint.${myRegion}.amazonaws.com`),
    action: 'lambda:InvokeFunction',
    sourceArn: `arn:aws:mobiletargeting:${myRegion}:${myAccount}:apps/${pinpointProject.ref}/campaigns/*`, // All Pinpoint campaigns in account.
    sourceAccount: myAccount
});

为 Lambda 函数生成的资源策略与下面的 AWS 文档相匹配。

“要编写更通用的策略,请使用多字符匹配通配符 (*)。例如,您可以使用以下 Condition 块来允许特定 Amazon Pinpoint 项目 (application-id) 中的任何活动调用该函数:”

"Condition": {
  "StringEquals": {
    "AWS:SourceAccount": "111122223333"
  },
  "ArnLike": {
    "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/*"
  }
}
于 2021-11-12T01:24:30.967 回答