【问题标题】:Calling aws lambda functions from iOS swift with Amplify使用 Amplify 从 iOS swift 调用 aws lambda 函数
【发布时间】:2020-08-22 05:09:16
【问题描述】:

平台

Swift 4、iOS 13、Xcode 11。使用 Amplify、GraphQL、Cognito

问题

我想触发一个名为 onCall 的 AWS lambda 函数。它已经写好了,只是一个简单的空白函数。在客户端,我关注 [1] 并拥有:

    let lambdaInvoker = AWSLambdaInvoker.default()

    let jsonObject: [String: Any] = [
        "key1" : "value1",
         "key2" : 2 ,
         "key3" : [1, 2],
         "isError" : false
    ]

    lambdaInvoker.invokeFunction("onCall", jsonObject: jsonObject)
        .continueWith(block: {(task:AWSTask<AnyObject>) -> Any? in
        if( task.error != nil) {
            print("Error: \(task.error!)")
            return nil
        }

        print(">> lambda \(task)")

        // Handle response in task.result
        return nil
    })

但我收到权限被拒绝错误:

错误:错误域=com.amazonaws.AWSLambdaErrorDomain Code=0 "AccessDeniedException" UserInfo={StatusCode=403, responseStatusCode=403, responseHeaders={type = immutable dict, count = 5, 条目 => 2:x-amzn-requestid = {内容 =“83047425-06c6-4193-b5c6-ac8461d84aa0”} 3:内容长度 = 243 4:内容类型= {内容=“应用程序/json”} 5:x-amzn-errortype = {contents = "AccessDeniedException"} 6:日期 = {contents =“星期四,2020 年 5 月 7 日 02:18:00 GMT”} } , Message=User: arn:aws:sts::870560247484:assumed-role/amplify-alpha-alphaenv-123654-authRole/CognitoIdentityCredentials 无权执行:资源上的 lambda:InvokeFunction:arn:aws:lambda:us-east -1:870560247484:function:onCall, responseDataSize=243, NSLocalizedFailureReason=AccessDeniedException}

我的 awsconfiguration.json 文件中有这一行

"LambdaInvoker" : {
  "Default" : {
       "Region": "us-east-1"
  }
}

现在在文档中说我应该使用 Amplify API,但我找不到任何用于触发 lambda 的放大 API,而且文档非常稀疏,超出了基本用例。

可接受的解决方案

  1. 不管关于Amplify的声明如何,都让lambdaInvoker按原样工作。

  2. 指点我或提供在 Amplify API 中调用 lamdas 的代码示例

[1]https://docs.aws.amazon.com/aws-mobile/latest/developerguide/how-to-ios-lambda.html

【问题讨论】:

    标签: ios swift amazon-web-services aws-amplify


    【解决方案1】:

    首先请检查您是否使用正确的策略创建了 lambda:

    From the documentation

    f. 在 Lambda 函数处理程序和角色下,选择从模板创建新角色。键入角色名称。选择名为Simple Microservice permissionsPolicy模板

    【讨论】:

    • 您也可以使用网关 API 并通过他触发 lambda。同时,我会努力寻找缺失的政策。
    • 我还尝试将 lambda-role 作为策略。同样的错误信息。基本上 cognito 帐户未配置为从该区域调用 lambda 函数。
    • 如果您尝试使用“允许”操作“invokeFunction”设置策略并设置主体:"Principal": { "Federated": "cognito-identity.amazonaws.com" }。也许朝这个方向钻探是有意义的
    • 我应该在哪里指定?在 awsconfiguation.json 或 console.aws.amazon.com/lambda/ 中?
    • 你需要调整 lambda 的执行角色,可以在 aws web console -> lambda -> tab Permissions 中找到
    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2018-08-21
    • 2021-09-19
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多