Вызов aws лямбда-функций из iOS swift с помощью Amplify - PullRequest
0 голосов
/ 07 мая 2020

Платформа

Swift 4, iOS 13, Xcode 11. Использование Amplify, GraphQL, Cognito

Проблема

Я хочу вызвать лямбда-функцию AWS позвонил onCall. Он был написан и представляет собой простую пустую функцию. На стороне клиента я следую [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
    })

Но я получаю ошибку отказа в разрешении:

Ошибка: Error Domain = com.amazon aws .AWSLambdaErrorDomain Code = 0 "AccessDeniedException" UserInfo = {StatusCode = 403, responseStatusCode = 403, responseHeaders = {type = immutable dict, count = 5, entries => 2: x-amzn-Requestid = {contents = "83047425-06c6-4193-b5c6 -ac8461d84aa0 "} 3: Content-Length = 243 4: Content-Type = {contents =" application / json "} 5: x-amzn-errortype = {contents =" AccessDeniedException "} 6: Date = {contents = "Thu, 07 May 2020 02:18:00 GMT"}}, Message = User: arn: aws: sts :: 870560247484: allowed-role / ampify-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"
  }
}

Сейчас в д ocs говорится, что я должен использовать Amplify API, но я не могу найти никакого API-интерфейса для активации лямбда-выражения, а do c очень редок за пределами базовых случаев использования c.

Приемлемые решения

  1. Заставить lambdaInvoker работать как есть, независимо от утверждения о Amplify.

  2. Укажите мне или предоставьте пример кода для вызова lamdas в Amplify API

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

1 Ответ

1 голос
/ 07 мая 2020

Прежде всего, проверьте, правильно ли вы создали лямбда-выражение:

Из документации

f. Под Обработчик и роль лямбда-функции, выберите Создать новую роль из шаблона (ов). Введите имя роли. Выберите шаблон политики с именем Простые разрешения микросервиса .

...