小编Foo*_*ook的帖子

如何在AWS Lambda中加载npm模块?

我使用基于Web的编辑器创建了几个Lambda函数.到现在为止还挺好.我现在想开始扩展模块(例如Q for promises).我无法弄清楚如何将模块输出到Lambda,以便它们可以被我的函数使用.

我已经读完了这个但似乎涉及设置EC2并从那里运行Lambda函数.在创建函数时有一种上传zip的机制,但这似乎涉及发送本地开发的函数.因为我在基于Web的编辑器中工作,这似乎是一个奇怪的工作流程.

如何简单地部署一些模块以用于我的Lambda函数?

amazon-web-services npm aws-lambda

104
推荐指数
6
解决办法
6万
查看次数

Swift在为这个模块构建ast上下文时遇到了致命的错误

我在Xcode 7 beta(7A120f)中将我的项目升级到Swift 2并在lldb提示符下尝试po self时出现此错误:

警告:模块myApp中的Swift错误:

Swift在构造此模块的ast上下文时遇到致命错误:无法为"UIKit"加载底层模块调试器中将无法使用此模块中的调试信息.

然后我留下了一个残缺的调试器(没有值).无论我在哪里放置断点,都会发生这种情况.我试过了:

  • 清除派生数据
  • 产品>清洁
  • 重启xcode
  • 重启mac

我能够创建一个新项目并在其中查看调试输出,因此这可能与我的项目如何通过xcode迁移有关.

什么是上下文,我该如何纠正?

编辑: ast是'抽象语法树'.仍然不知道如何解决它.

xcode swift

45
推荐指数
2
解决办法
8753
查看次数

试图在Swift中将Firebase时间戳转换为NSDate

我正在尝试在Swift应用中使用Firebase时间戳.我想将它们存储在我的Firebase中,并在我的应用中将它们用作本机NSDate对象.

文档说他们是unix epoch时间,所以我尝试过:

NSDate(timeIntervalSince1970:FirebaseServerValue.timestamp)
Run Code Online (Sandbox Code Playgroud)

没有运气.

这个:

FirebaseServerValue.timestamp
Run Code Online (Sandbox Code Playgroud)

回报

0x00000001199298a0
Run Code Online (Sandbox Code Playgroud)

根据调试器.通过这些时间戳的最佳方法是什么?

ios firebase swift

18
推荐指数
3
解决办法
2万
查看次数

无法创建复合索引,卡在INSTALLED

我无法创建索引.我的Gremlin代码如下:

usernameProperty = mgmt.getPropertyKey('username')
usernameIndex = mgmt.buildIndex('byUsernameUnique', Vertex.class).addKey(usernameProperty).unique().buildCompositeIndex()
mgmt.setConsistency(usernameIndex, ConsistencyModifier.LOCK)
mgmt.commit()
Run Code Online (Sandbox Code Playgroud)

我收到两个错误后不久:

18:04:57 ERROR com.thinkaurelius.titan.graphdb.database.management.ManagementLogger - 从缓存中驱逐[1 @ 0a00009d2537-ip-10-0-0-1572]但等待交易结束的时间太长.过时的交易警报:[standardtitantx [0x6549ce71]] 18:04:57 ERROR com.thinkaurelius.titan.graphdb.database.management.ManagementLogger - 从缓存中驱逐[1 @ 0a00009d2537-ip-10-0-0-1572]但是等待交易结束的时间过长.过时的交易警报:[standardtitantx [0x2a2815cc],standardtitantx [0x025dc2c0]]

索引的状态停留在INSTALLED:

usernameIndex.getIndexStatus(usernameProperty)
==>INSTALLED
Run Code Online (Sandbox Code Playgroud)

我读到失败的实例可能会导致问题,但检查正在运行的实例只显示一个:

mgmt.getOpenInstances()
==>0a00009d3011-ip-10-0-0-1572(current)
Run Code Online (Sandbox Code Playgroud)

我也尝试发布一个REGISTER_INDEX动作,它也会从事务缓存中逐出,并带有类似的错误消息:

mgmt.updateIndex(usernameIndex, SchemaAction.REGISTER_INDEX).get()
mgmt.commit()
Run Code Online (Sandbox Code Playgroud)

我也尝试过多次重启服务器.

注册过程似乎只是超时,导致事务缓存"逐出".我等了48个小时才确定这不是一个缓慢的过程.对Titan的正常读取,写入和关联提交似乎工作正常,我只是无法创建此索引.我被卡住了,还有什么我可以尝试的吗?有没有办法延长该事务的超时?

我正在使用DynamoDB后端运行Titan 1.0.0(使用AWS提供的CloudFormation模板进行设置).

编辑:这是我正在粘贴Gremlin的完整命令,添加awaitGraphStatus了@MTA建议的步骤:

mgmt = graph.openManagement();
usernameIndex = mgmt.getPropertyKey('usernameIndex');
mgmt.buildIndex('byUsername',Vertex.class).addKey(usernameIndex).unique().buildCompositeIndex();
// I have tried with and without a commit here: mgmt.commit();
mgmt.awaitGraphIndexStatus(graph, 'byUsername').status(SchemaStatus.REGISTERED).timeout(10, java.time.temporal.ChronoUnit.MINUTES).call();
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

com.thinkaurelius.titan.graphdb.database.management.GraphIndexStatusWatcher.call(GraphIndexStatusWatcher.java:52)中的java.lang.NullPointerException,地址为com.thinkaurelius.titan.graphdb.database.management.GraphIndexStatusWatcher.call(GraphIndexStatusWatcher.java:18) )atg.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)中的java_util_concurrent_Callable $ call.call(未知来源)atg.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java) :110)org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:114)at groovysh_evaluate.run(groovysh_evaluate:3)at …

amazon-dynamodb gremlin titan

16
推荐指数
1
解决办法
1191
查看次数

UIImageView最初不会在UITableViewCell中显示图像

我有一个UITableView从服务加载图像.它获取URL并下载图像NSURLSession.sharedSession().dataTaskWithURL:

NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, _, error) -> Void in
                            guard
                                let data = data where error == nil,
                                let image = UIImage(data: data)
                                else {
                                    print(error?.localizedDescription)
                                    return
                            }
                            dispatch_async(dispatch_get_main_queue()) {
                                [unowned self] in
                                self.pictureView.image = image
                                self.pictureView.layoutIfNeeded()
                            }
                        }).resume()
Run Code Online (Sandbox Code Playgroud)

UIImageView是故事板场景的出口.该UIImageView内容模式是看点飞度.

UIImageView可见细胞最初显示为空(无图像),即使我已确认的图像设置.直到单元格在屏幕上滚动,单元格才会重绘(?)并显示图像.

所以这似乎是某种时间问题,但我无法弄明白.在dispatch_async设置图像后,我尝试在块中调用以下所有内容:

self.pictureView.setNeedsDisplay()
self.pictureView.setNeedsUpdateConstraints()
self.pictureView.setNeedsLayout()
self.pictureView.reloadInputViews()
Run Code Online (Sandbox Code Playgroud)

这些都没有解决问题.是什么导致此图像仅在单元格滚出/进入视图后显示?

编辑:可能需要注意的是,这是在笔尖和相关类中发生的.笔尖被加载,然后我开始下载.我想知道笔尖是否自行放置,当我的图像被下载并设置在UIImageView布局上时,通道已经完成.然后通过在屏幕上移动单元格(包含笔尖),单元格再次执行布局,并且所有内容都正确显示.只是一个猜测,我仍然坚持这一点.

编辑2:进一步澄清过程:

1)我的UIViewController包含一个UITableView.

2)这UITableView会从UITableViewCell名为PostCell 的自定义类中加载单元格.

3)PostCell的全部内容是从名为PostView(带有PostView类)的笔尖加载的单个视图.init:style:reuseIdentifier在PostCell 期间发生了这种负载:

postView …
Run Code Online (Sandbox Code Playgroud)

uitableview uiimageview ios swift

14
推荐指数
1
解决办法
1613
查看次数

You do not have the required role to enable Auto Scaling

I am seeing this alert when trying to create a table. I've added the AmazonDynamoDBFullAccess policy to my IAM user as per these instructions.

I've signed out/in, but still get this message. Is there an additional policy I need to enable autoscaling in DynamoDB?

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "dynamodb:*",
                "dax:*",
                "application-autoscaling:DeleteScalingPolicy",
                "application-autoscaling:DeregisterScalableTarget",
                "application-autoscaling:DescribeScalableTargets",
                "application-autoscaling:DescribeScalingActivities",
                "application-autoscaling:DescribeScalingPolicies",
                "application-autoscaling:PutScalingPolicy",
                "application-autoscaling:RegisterScalableTarget",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricAlarm",
                "datapipeline:ActivatePipeline",
                "datapipeline:CreatePipeline",
                "datapipeline:DeletePipeline",
                "datapipeline:DescribeObjects",
                "datapipeline:DescribePipelines",
                "datapipeline:GetPipelineDefinition",
                "datapipeline:ListPipelines",
                "datapipeline:PutPipelineDefinition",
                "datapipeline:QueryObjects",
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb

6
推荐指数
1
解决办法
1372
查看次数

如何在使用 CUSTOM_AUTH 身份验证流程登录期间保留 CognitoUser

我的 React Native 应用程序使用 Amplify 进行CUSTOM_AUTH身份验证流程。用户通过电子邮件收到链接以满足challengeAnswer 请求。过程是这样的:

用户发起登录:

const cognitoUser = await Auth.signIn(username);
Run Code Online (Sandbox Code Playgroud)

电子邮件通过 lambda 发送给用户。

用户离开应用程序以检索电子邮件。

用户单击电子邮件中的链接,该链接将通过 RN LinkingAPI 将用户路由回应用程序。

链接中的代码经过以下处理:

await Auth.sendCustomChallengeAnswer(
  cognitoUser,
  authChallengeAnswer
);
Run Code Online (Sandbox Code Playgroud)

通常这效果很好,但不能保证cognitoUser在用户检索电子邮件时应用程序进入后台后该对象将存在。iOS 在此期间转储应用程序的可能性非零,并且cognitoUservar 将消失,迫使用户重新启动登录过程。我正在寻找一种cognitoUser以某种方式持久保存对象的方法,因此如果 iOS 决定应用程序需要终止,则可以从缓存中检索此 var。

我可以将对象缓存到 Amplify 缓存(AsyncStorage)中

await Cache.setItem("cognitoUser", cognitoUser);
Run Code Online (Sandbox Code Playgroud)

然后获取

await Cache.getItem("cognitoUser");
Run Code Online (Sandbox Code Playgroud)

失败了

类型错误:user.sendCustomChallengeAnswer 不是函数

因为缓存的过程失去了它的所有__proto__功能。它只是作为基本对象检索。

我怀疑原因是我没有使用 TypeScript,并且该对象以某种方式丢失了一些类型信息。

有没有更好的方法来持久化这个 CognitoUser 对象,以便我可以保证它在用户根据流程需要离开/返回应用程序后存在CUSTOM_AUTH

react-native aws-amplify

6
推荐指数
2
解决办法
2027
查看次数

如何在React Native和Node中计算校验和?

我正在将图像文件从React Native上传到AWS Lambda(Node 10.x),并想验证我发送的文件的哈希与收到的文件匹配。为此,我在React Native和Lambda中再次使用了哈希,但是哈希值始终不匹配。这是我尝试过的相关代码。

反应本机

import RNFS from "react-native-fs";
const contentChecksum = await RNFS.hash(post.contentUrl, "md5");
Run Code Online (Sandbox Code Playgroud)

Lambda(节点)

import AWS from "aws-sdk";
const crypto = require("crypto");
const s3 = new AWS.S3();

const data = await s3
    .getObject({
      Bucket: file.bucket,
      Key: file.key
    })
    .promise();
const contentChecksum = crypto
    .createHash("md5")
    .update(data.Body)
    .digest("hex");
Run Code Online (Sandbox Code Playgroud)

这些校验和永远不匹配。我试过base64在Node(data.Body.toString("base64"))中也使用编码sha256。计算校验和以便它们在React Native和Node中匹配的诀窍是什么?

编辑:这是最近一次测试的结果。

post.contentUrlfile:///Users/xxxxxxx/Library/Developer/CoreSimulator/Devices/2F2F4FD3-574E-40D7-BE6B-7080E926E70A/data/Containers/Data/Application/65A3FF67-98B2-444D-B75D-3717C1274FBC/Library/Caches/Camera/FDCD8F90-D24F-4E64-851A-96AB388C4B59.jpg

(该文件在iPhone上是本地的)

contentChecksum 来自React Native:48aa5cdb30f01719a2b12d481dc22f04

contentChecksum 来自Node(Lambda):7b30b61a55d2c39707082293c625fc10

data.Body是一个Buffer

我还注意到,S3对象上的eTag属性与我在Node中计算的md5校验和匹配。由于eTag 通常是文件的md5哈希值,因此这告诉我在React Native中可能会错误地计算哈希值,但是我不确定如何。我正在使用react-native-fs包中的哈希函数。

javascript node.js aws-lambda react-native react-native-fs

6
推荐指数
1
解决办法
405
查看次数

如何使用 Amplify 将大文件流式传输到 S3

我需要使用 Amplify 库将大型视频文件从 React Native 应用程序上传到 S3。我一直无法找到任何如何使用流来执行此操作的示例。现在我可以使用 rn-fetch-blob 读取文件,然后将put其读取到 S3,但我想改用流。我不明白如何将其转换为流方法。

const blob = await RNFetchBlob.fs
  .readFile(localurl, "base64")
  .then(data => Buffer.from(data, "base64"));

Storage.put(my-video.mp4, blob, {
  contentType,
  bucket
});
Run Code Online (Sandbox Code Playgroud)

Amplify 是否可以实现这一点?如果可以,您能提供一个示例吗?我宁愿避免为此导入整个 AWS SDK。

amazon-s3 react-native aws-amplify

6
推荐指数
0
解决办法
903
查看次数

限制特定应用程序客户端的 API 访问

我已经构建了一个 iOS 和 Android 应用程序。这些应用程序使用 Cognito 用户池来允许经过身份验证和未经身份验证的公共访问 API Gateway。

我正在尝试阻止第三方应用程序访问此 API。我只需要我授权具有 API 访问权限的应用程序。是否可以将对 APIG 的访问限制为仅限我的应用程序?

Cognito 在用户池的设置中提供了应用程序客户端 ID 和应用程序客户端密钥的概念。这是限制 Cognito 登录白名单客户端/应用程序的首选机制吗?这些文档几乎没有说明此配置的目的或在野外保持这些密钥安全的最佳实践。

是否有其他方法可以实现我正在尝试的目标?这个目标有可能实现吗?我相信应用程序可以对这些密钥进行逆向工程,或者可以通过网络嗅探器发现它们。

我是 API 安全方面的新手,因此非常感谢您的见解。

amazon-cognito aws-api-gateway

5
推荐指数
1
解决办法
2477
查看次数