Tag: lambda

Swift的无服务器计算

为什么选择无服务器Swift? 与无服务器计算是否值得追求的问题不同,为什么要在Swift中实现无服务器系统? 有三个主要原因使Swift成为Lambda实现语言的理想选择。 首先,Swift是一种功能强大,健壮且富有表现力的语言,旨在在包括服务器端计算在内的各种环境中发挥作用。 就其本身而言,区别不大,因为可以用这种方式描述其他几种语言(Rust,Go)。 但是,Swift提供了两种附加的可能性-利用现有开发人员资源的机会,以及在系统的多个层(尤其是后端和移动客户端)之间共享代码的机会。 让我们考虑一个示例场景。 一个例子 我决定组建一家初创公司-这是我可以做的酵母菌,一家专门提供美味面包的在线面包店。 由于没有健壮的云基础架构,没有任何自重的面包店会被杀死,因此我的首要任务是构建微服务来处理向客户发送收据的工作。 具体来说,我想要一种服务,其输入是要订购的项目列表。 物品是面包的种类和数量。 例如三个羊角面包。 输入以JSON编码。 输出是收据的字符串表示形式。 它列出了每个订购的项目,其小计以及整个订单的总计。 现在,我不必担心收据太漂亮。 首先,我忽略了网络连接并编写了可用作命令行工具的代码。 首先,我将创建一个新目录,并使用Swift Package Manager(SPM)创建一个Swift应用程序。 请注意,该应用程序将命名为bru 。 姆迪尔布鲁 光盘布鲁 快速包初始化—type = executable 现在,我指定数据类型。 考虑到可重用性,我在与主应用程序不同的模块中定义它们。 我创建一个目录Sources / bruModels,并在该目录中使用以下代码创建Item.swift , Order.swift和Receipt.swift文件(完整列表可在https://gist.github.com/profburke/2e951f48542a9a1ff470515725727751c中找到): // Item.swift 枚举样式:字符串,可编码{ 羊角面包 凯恩 裸露镍 黑麦 } 结构项目:可编码{ 出租数量:整数 let style:样式 } // Order.swift struct顺序:可编码{ 公共私有(设置)各种商品:[商品] … } // […]

使用SNS,Lambda和Node.js创建推送通知作业

页面出现时,单击“创建平台应用程序”: 接下来,您需要为您的应用程序创建一个名称,为您的Push通知平台选择Apple生产或Apple开发,然后从您已经创建的证书中上传信息(请参阅先决条件)。 在查找器中选择您的证书,如果使用一个证书将其导出,请输入密码,然后单击“从文件加载凭据”。 您的证书和私钥应该自动填充。 单击创建平台应用程序。 创建应用程序后,记下应用程序ARN(Amazon资源名称)。 我们将在步骤3中使用它。 2.创建SNS主题: 导航到左侧导航菜单中的主题,单击创建新主题。 填写主题名称和显示名称。 就我而言,我只想创建一个推送通知,该通知将发送给整个用户群,因此我创建了一个名为all_app_users的主题。 创建主题后,请记下ARN。 我们将在步骤3中使用它。 3.配置程序访问 在我们的node.js代码中,我们将需要配置一个具有适当权限的用户aws-sdk,以创建SNS终结点并订阅我们的all_app_users主题。 返回AWS控制台,导航至IAM,然后单击Users。 创建一个新用户,选择一个名称,然后选中“访问类型”的“编程访问”,然后单击“下一步”:权限: 在权限屏幕上,单击附加现有策略,然后单击创建策略: 在弹出的IAM屏幕上,选择“策略生成器”。 然后在Edit Permissions中,选择适用于AWS Service的Amazon SNS,在Actions字段下检查CreatePlatformEndpoint,然后从步骤1插入应用程序ARN: 单击“添加语句”,然后重复上述步骤以创建允许该用户创建all_app_users主题的订阅的all_app_users 。 再次为AWS服务选择Amazon SNS,为“操作”选择“订阅”,然后从步骤2插入SNS主题ARN。单击下一步,将策略名称更改为sns-programmatic-access,然后单击创建策略。 返回创建用户的窗口,搜索sns-programmatic-access(您可能需要单击刷新按钮),然后单击其旁边的复选框以将其选中。 单击“下一步:查看”,然后单击按钮以完成创建用户。 在下一个屏幕上,将显示您的访问密钥ID和秘密访问密钥。 现在记下这些凭据,因为您将无法再次访问密钥*。 我们会将这些凭证插入到我们的node.js代码中,以配置我们的AWS客户端。 *如果您最终丢失了密钥,则可以通过IAM管理控制台创建新密钥。 4.向平台注册用户: 这部分取决于您当前如何处理设备令牌的注册。 在本例中,我们当前正在将设备令牌发送到服务器,以将它们存储在数据库中。 为了实现SNS,我们将需要在包含该设备令牌的SNS应用程序上创建一个平台终结点,然后将该设备预订到我们的all_app_users主题。 为此,我们将需要aws-sdk npm模块: npm install -save aws-sdk 在我们的代码中,让我们使用在上一步中创建的凭证来配置我们的AWS客户端: 在“配置触发器”屏幕上,单击“下一步”。 我们将在确认该功能正常工作后再设置触发器。 在“配置功能”屏幕上,我们需要在all_app_users主题上设置具有SNS:Publish权限的角色。 向下滚动到Lambda函数处理程序和角色部分。 在角色下,选择创建自定义角色: 在打开的IAM窗口中,将“角色名称”更改为所需的名称(我使用notificationsRole)。 然后单击允许。 现在,您的Lambda角色应设置为刚创建的角色。 最后,单击下一步,然后完成创建函数。 现在,我们只需要使用策略生成器添加SNS:Publish权限。 导航到IAM管理控制台,在左侧导航菜单中单击“角色”,然后选择我们刚刚创建的角色(如果使用该名称,则为“ […]

使用lambda通过Node.js进行iOS Receiptvalidation

我正在Swift中开发一个iOS应用程序,并尝试实现应用内购买的接收validation。 我无法弄清楚如何在Swift中实现这个function,所以我试着在看到Giulio Roggero的例子之后,让我的应用程序通过Node.js中的Lambda函数写入请求。 我的Swift代码如下所示: let receiptPath = Bundle.main.appStoreReceiptURL?.path if FileManager.default.fileExists(atPath: receiptPath!){ var receiptData:NSData? do{ receiptData = try NSData(contentsOf: Bundle.main.appStoreReceiptURL!, options: NSData.ReadingOptions.alwaysMapped) } catch{ print("ERROR: " + error.localizedDescription) } let receiptString = receiptData?.base64EncodedString(options: .endLineWithLineFeed) let invocationRequest = AWSLambdaInvokerInvocationRequest() invocationRequest?.functionName = "sendReceiptRequest" invocationRequest?.invocationType = AWSLambdaInvocationType.requestResponse invocationRequest?.payload = ["receipt-data" : receiptString!, "password" : SUBSCRIPTION_SECRET] let lambdaInvoker = AWSLambdaInvoker.default() […]