【发布时间】:2023-03-15 02:55:02
【问题描述】:
我有一个 iOS 购物应用,想调用一个 lambda 函数进行日志记录。但我不想通过 API 网关调用 lambda 函数来节省成本。是否可以使用亚马逊的 iOS SDK 向 Lambda 发送日志?
【问题讨论】:
-
我认为SDK无论如何只会包装API调用,它不会影响成本,您仍在使用该服务
标签: ios amazon-web-services lambda
我有一个 iOS 购物应用,想调用一个 lambda 函数进行日志记录。但我不想通过 API 网关调用 lambda 函数来节省成本。是否可以使用亚马逊的 iOS SDK 向 Lambda 发送日志?
【问题讨论】:
标签: ios amazon-web-services lambda
您可以使用 AWS iOS 开发工具包直接调用 lambda 函数。这是一个代码sn-p
AWSLambda *lambda = [AWSLambda defaultLambda];
AWSLambdaInvocationRequest *invocationRequest = [AWSLambdaInvocationRequest new];
invocationRequest.functionName = @"functionname";
invocationRequest.invocationType = AWSLambdaInvocationTypeRequestResponse;
NSDictionary *parameters = ...
invocationRequest.payload = [NSJSONSerialization dataWithJSONObject:parameters
options:kNilOptions
error:nil];
[lambda invoke:invocationRequest]
此处显示的集成测试 https://github.com/aws-amplify/aws-sdk-ios/blob/335e4d82a641fdb9cdc84773bf115951e850b884/AWSLambdaTests/AWSLambdaTests.m#L110 演示了如何调用 lamdba 函数并验证结果。
【讨论】:
您可以在 Swift 中使用 AWSLambda Pod :
import AWSLambda
// ...
let request = AWSLambdaInvocationRequest()!
request.functionName = "name of your lambda"
request.invocationType = .requestResponse
let params: [String: Any] = [:]
request.payload = try! JSONSerialization.data(withJSONObject: params, options: [])
AWSLambda.default().invoke(request) { response, error in
if let error = error {
print(error)
} else {
print(response!.debugDescription)
}
}
当然,您需要按照文档AWS Lambda permissions 中的说明设置正确的权限
【讨论】: