使用 Amplify 从 iOS swift 调用 aws lambda 函数
Calling aws lambda functions from iOS swift with Amplify
平台
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代码=0 "AccessDeniedException"用户信息={StatusCode=403,responseStatusCode=403,responseHeaders={type = immutable dict,count = 5,
条目=>
2 : x-amzn-requestid = {内容 = "83047425-06c6-4193-b5c6-ac8461d84aa0"}
3:内容长度= 243
4:内容类型={内容="application/json"}
5 : x-amzn-errortype = {内容 = "AccessDeniedException"}
6 : 日期 = {内容 = "Thu, 07 May 2020 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,并且文档在基本用例之外非常稀疏。
可接受的解决方案
使 lambdaInvoker
按原样工作,而不管关于 Amplify
.
的声明
指出我或提供在 Amplify 中调用 lamda 的代码示例 API
[1] https://docs.aws.amazon.com/aws-mobile/latest/developerguide/how-to-ios-lambda.html
首先请检查您是否使用正确的策略创建了 lambda:
f. Under Lambda function handler and role, select Create new role from template(s). Type a Role name. Select the Policy template named Simple Microservice permissions.
平台
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代码=0 "AccessDeniedException"用户信息={StatusCode=403,responseStatusCode=403,responseHeaders={type = immutable dict,count = 5, 条目=> 2 : x-amzn-requestid = {内容 = "83047425-06c6-4193-b5c6-ac8461d84aa0"} 3:内容长度= 243 4:内容类型={内容="application/json"} 5 : x-amzn-errortype = {内容 = "AccessDeniedException"} 6 : 日期 = {内容 = "Thu, 07 May 2020 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,并且文档在基本用例之外非常稀疏。
可接受的解决方案
使
lambdaInvoker
按原样工作,而不管关于Amplify
. 的声明
指出我或提供在 Amplify 中调用 lamda 的代码示例 API
[1] https://docs.aws.amazon.com/aws-mobile/latest/developerguide/how-to-ios-lambda.html
首先请检查您是否使用正确的策略创建了 lambda:
f. Under Lambda function handler and role, select Create new role from template(s). Type a Role name. Select the Policy template named Simple Microservice permissions.