如何在 android 中调用 lambda 函数?

How to invoke lambda function in android?

所以我做了这个 lambda 函数,在那个函数中我做了一个 if 语句,它在 dynamoDB 的用户 table 中为我创建了一个用户。我如何调用它 ONLY 在我的 lambda 函数中从 android 调用 if 语句?

这是我的 lambda 函数

exports.handler = function(event, context) 
{
    console.log('stageA');
    console.log(JSON.stringify(event, null, '  '));
    var responseCode = 200;
    var userTableName = "usersTable";
    var requestBody = event.body;
    var pathParams = event.path;
    var httpMethod = event.httpMethod;  // HTTP Method (e.g., POST, GET, HEAD)
    //User parameters
    var displayName;
    var email;
    var fbUserID;
    var firstName;
    var folders;
    var lastName;
    var origin;
    var profileImageRef;
    var level;
    var username;
    var birthdate;
    var experience;
    var folder;


    if (pathParams == "/user/createByEmail" && httpMethod == "POST") 
    {
        console.log('create by email action');
        requestBody = JSON.parse(requestBody);
         //Set variables
        firstName = requestBody.firstName;
        lastName = requestBody.lastName;
        email = requestBody.email;
        username = requestBody.username;
        experience = "0";
        birthdate = requestBody.birthdate;

        dynamodb.putItem(
            {
                "TableName": userTableName,
                "Item" : 
                {
                    "displayName":{"S": username},
                    "email":{"S": email},
                    "firstName" : {"S" : firstName},
                    "folderNames" : {"M" : { 
                        "My Cards": {"N": "0" } 
                                    } },
                    //"folders" : {"M" : {"My Cards": {}}},
                    "lastName" : {"S" : lastName},
                    "experience" : {"N" : experience},
                    "username": {"S": username},
                    "birthdate": {"S": birthdate}
                }
            }, 
            function(err, data) 
            { if (err) {
                    console.log(err);
                    context.done(err);
                } else {
                    var response = 
                    {
                        statusCode: responseCode,
                        headers: 
                        {
                            "x-custom-header" : "custom header value"
                        },
                        body: JSON.stringify(username)
                    };
                    console.log('great success: %j',data);
                    context.succeed(response);
                }
            });
    }

并且在 android 中,我创建了一个接口,该接口将在 AsyncTask 中调用以调用我的 lambda 函数:

  public interface MyInterface {

        /**
         * Invoke lambda function "echo". The function name is the method name
         */
        @LambdaFunction
        String user(String userEmail);

        /**
         * Invoke lambda function "echo". The functionName in the annotation
         * overrides the default which is the method name
         */
        @LambdaFunction(functionName = "myUserAPiFxnName")
        void noUser(NameInfo nameInfo);
    }

我是 AWS 和 lambda 的新手,非常希望得到您的指导。我不确定我是否在写这篇文章,希望有人有明确的步骤!

干杯!

您似乎会使用 Cognito 将用户身份映射到 IAM 角色,从而提供临时访问权限以直接调用该函数。我没有在生产中使用 Cognito,也没有开发 Android,但我的 Cognito 为您做了两件事:第一,它为许多联合身份服务(facebook、google、saml、oath2)提供身份验证和授权等),第二,它提供了一种用户访问模型,因此您不必自己编写程序。您可以从身份服务中提取显示名称、电子邮件、生日,而不必处理登录。您可以直接转到编写程序的部分。

您将在 cognito 中配置身份池并附加一些身份提供者,并首先调用身份提供者的 API,然后调用 AWS。最后,您的应用程序将能够调用您编写的 lambda 函数。

对 android 一无所知,我猜你已经访问了一些用户身份,可能是 google 身份。