aws lambda rust的sdk和自定义运行时
rust的aws sdk
参考资料
- https://docs.aws.amazon.com/sdk-for-rust/latest/dg/getting-started.html
- https://awslabs.github.io/aws-sdk-rust/
- https://github.com/awslabs/aws-sdk-rust
- https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rust_dev_preview
rus sdk获取凭证的顺序
- Environment variables:
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
, andAWS_REGION
- The default credentials files located in
~/.aws/config
and~/.aws/credentials
(location can vary per platform) - Web Identity Token credentials from the environment or container (including EKS)
- ECS Container Credentials (IAM roles for tasks)
- EC2 Instance Metadata Service (IAM Roles attached to instance)
以下是示例的列出s3桶代码
// Cargo.toml
[package]
name = "rusttour"
version = "0.1.0"
edition = "2021"[dependencies]
aws-config = "0.54.1"
aws-sdk-s3 = "0.24.0"
structopt = "0.3.26"
tokio = { version = "1.25.0", features = ["full"] }
tracing-subscriber = "0.3.16"// main.rs
use aws_config::meta::region::RegionProviderChain;
use aws_sdk_s3::{Client, Error, Region, PKG_VERSION};
use structopt::StructOpt;#[derive(Debug, StructOpt)]
struct Opt {#[structopt(short, long)]region: Option<String>,#[structopt(short, long)]bucket: String,#[structopt(short, long)]verbose: bool,
}
async fn show_objects(client: &Client, bucket: &str) -> Result<(), Error> {let resp = client.list_objects_v2().bucket(bucket).send().await?;for object in resp.contents().unwrap_or_default() {println!("{}", object.key().unwrap_or_default());}Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Error> {tracing_subscriber::fmt::init();let Opt {region,bucket,verbose,} = Opt::from_args();let region_provider = RegionProviderChain::first_try(region.map(Region::new)).or_default_provider().or_else(Region::new("cn-north-1"));println!();if verbose {println!("S3 client version: {}", PKG_VERSION);println!("Region: {}",region_provider.region().await.unwrap().as_ref());println!("Bucket: {}", &bucket);println!();}let shared_config = aws_config::from_env().region(region_provider).load().await;let client = Client::new(&shared_config);show_objects(&client, &bucket).await
}
lambda的rust自定义运行时
lambda自定义运行时
lambda自定义运行时是一个比较复杂的话题
运行时是一个程序,调用函数时程序将运行 Lambda 函数的处理程序方法。可以采用可执行文件(名为
bootstrap
)的形式, 将运行时包含在函数的部署程序包中
自定义运行时的入口点是一个名为 bootstrap
的可执行文件。引导文件可以是运行时,也可以调用创建运行时的另一个文件。运行时代码负责完成一些初始化任务。然后,它将在一个循环中处理调用事件直到被终止
(1)初始化任务
- 检索设置 – 读取环境变量以获取有关函数和环境的详细信息。
_HANDLER
– 处理程序的位置(来自函数的配置)。标准格式为file.method
,其中file
是没有表达式的文件的名称,method
是在文件中定义的方法或函数的名称。LAMBDA_TASK_ROOT
– 包含函数代码的目录。AWS_LAMBDA_RUNTIME_API
– 运行时 API 的主机和端口。- 初始化函数 – 加载处理程序文件并运行它包含的任何全局或静态代码。函数应该创建静态资源(如开发工具包客户端和数据库连接)一次,然后将它们重复用于多个调用。
- 处理错误 – 如果出现错误,请调用初始化错误 API 并立即退出。
(2)处理任务
- 获取事件 – 调用下一个调用 API 来获取下一个事件。响应正文包含事件数据。响应标头包含请求 ID 和其他信息。
- 传播跟踪标头 – 从 API 响应中的
Lambda-Runtime-Trace-Id
标头获取 X-Ray 跟踪标头。使用相同的值在本地设置_X_AMZN_TRACE_ID
环境变量。X-Ray SDK 使用此值在服务之间连接追踪数据。- 创建上下文对象 – 使用来自 API 响应中的环境变量和标头的上下文信息创建一个对象。
- 调用函数处理程序 – 将事件和上下文对象传递到处理程序。
- 处理响应 – 调用调用响应 API 以发布来自处理程序的响应。
- 处理错误 – 如果出现错误,请调用调用错误 API。
- 清理 – 释放未使用的资源,将数据发送到其他服务,或在获取下一个事件之前执行其他任务。
官方提供了一个自定义运行时的示例
Tutorial – Publishing a custom runtime
创建rust运行时函数
https://docs.aws.amazon.com/sdk-for-rust/latest/dg/lambda.html
https://github.com/awslabs/aws-lambda-rust-runtime#deployment
lambda托管环境目前没有对rust运行时的支持,因此无法直接创建。aws-lambda-rust-runtime
仓库提供了构建自定义lambda运行时的方式。
使用cargo-lambda
可以快速在本地创建rust运行时的lambda函数
https://www.cargo-lambda.info/guide/installation.html
pip3 install cargo-lambda
创建新的lambda项目
$ cargo lambda new myrustlambda
查看项目配置
$ cat Cargo.toml
[package]
name = "myrustlambda"
version = "0.1.0"
edition = "2021"[dependencies]
lambda_runtime = "0.7"
serde = "1.0.136"
tokio = { version = "1", features = ["macros"] }
tracing = { version = "0.1", features = ["log"] }
tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] }
创建示例的lambda函数
use lambda_runtime::{service_fn, LambdaEvent, Error};
use serde_json::{json, Value};#[tokio::main]
async fn main() -> Result<(), Error> {let func = service_fn(func);lambda_runtime::run(func).await?;Ok(())
}async fn func(event: LambdaEvent<Value>) -> Result<Value, Error> {let (event, _context) = event.into_parts();let first_name = event["firstName"].as_str().unwrap_or("world");Ok(json!({ "message": format!("Hello, {}!", first_name) }))
}
构建函数,当然还可以交叉编译为其他平台,默认情况CargoLambda 将构建在 x86 _ 64架构上运行的函数
$ cargo lambda build --release
$ # cargo lambda build --release --arm64
$ #cargo lambda build --release --target aarch64-unknown-linux-gnu.2.17
构建过程中出现以下错误
warning: spurious network error (2 tries remaining): [28] Timeout was reached
修改下载源为tuna
# `$HOME/.cargo/config`
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"replace-with = 'tuna'[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"[net]
git-fetch-with-cli=true
对于自定义运行时,AWS Lambda 在部署包 zip 中查找名为 bootstrap 的可执行文件。在 target/lambda 目录下找到函数的引导程序二进制文件
$ tree -L 3
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target├── CACHEDIR.TAG├── lambda│ └── myrustlambda //引导程序├── bootstrap.zip└── bootstrap├── release│ ├── build│ ├── deps│ ├── examples│ └── incremental└── x86_64-unknown-linux-gnu├── CACHEDIR.TAG└── release
部署函数
$ cargo lambda deploy \--iam-role arn:aws-cn:iam::037047667284:role/myLambdaRole
将函数打包为zip查看具体的内容,压缩包中只有一个bootstrap二进制文件
cargo lambda build --release --output-format zip
测试函数
$ aws lambda invoke \--cli-binary-format raw-in-base64-out \--function-name myrustlambda \--payload '{"command": "Say Hi!"}' \output.json
$ cat output.json
{"message":"Hello, world!"}
相关文章:
aws lambda rust的sdk和自定义运行时
rust的aws sdk 参考资料 https://docs.aws.amazon.com/sdk-for-rust/latest/dg/getting-started.htmlhttps://awslabs.github.io/aws-sdk-rust/https://github.com/awslabs/aws-sdk-rusthttps://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rust_dev_preview rus sd…...
[安装之3] 笔记本加装固态和内存条教程(超详细)
由于笔记本是几年前买的了,当时是4000,现在用起来感到卡顿,启动、运行速度特别慢,就决定换个固态硬盘,加个内存条,再给笔记本续命几年。先说一下加固态硬盘SSD的好处:1.启动快 2.读取延迟小 3.写…...
极客时间左耳听风-高效学习
左耳听风——高效学习篇 P95 | 高效学习:端正学习态度 本人真实⬇️⬇️⬇️⬇️ “ 大部分人都认为自己爱学习,但是: 他们都是只有意识没有行动,他们是动力不足的人。 他们都不知道自己该学什么,他们缺乏方向和目标。…...
MSR寄存器访问
1.介绍 MSR是CPU的一组64位寄存器,每个MSR都有它的地址值(如下图所示),可以分别通过RDMSR 和WRMSR 两条指令进行读和写的操作。 如图中为8个P-state寄存器,地址分别为0xC001 0064 ~ 0xC001 006B,每个寄存…...
ArcGIS:模型构建器实现批量按掩膜提取影像
用研究区域的矢量数据来裁剪栅格数据集时,一般我们使用ArcGIS中的【按掩膜提取工具】。如果需要裁剪的栅格数据太多,处理起来非常的麻烦,虽然ArcGIS中有批处理的功能,但是还是需要手动选择输入输出数据。 如下图,鼠标…...
算法刷题打卡第94天: 找出给定方程的正整数解
找出给定方程的正整数解 难度:中等 给你一个函数 f(x, y) 和一个目标结果 z,函数公式未知,请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满足条件的结果数对可以按任意顺序返回。 尽管函数的具体式子未知,但它是单调…...
浅析SAS协议(1):基本介绍
文章目录概述SAS协议发展历程SAS技术特性SAS设备拓扑SAS phySAS地址SAS设备类型SAS协议分层参考链接概述 SAS,全称Serial Attached SCSI,即串行连结SCSI,是一种采用了串行总线的高速互连技术。通过物理上使用串行总线连结,在链路…...
93.【Vue-细刷-02】
Vue-02(十六)、基本列表渲染 (v-for)1.使用v-for遍历数组2.使用v-for遍历对象3.使用v-for遍历字符串(十七)、列表过滤 (filter())1.⭐JS中Change属性的原生状态⭐2.使用watch监听实现3.const {xxx} this 在Vue的作用⭐⭐4.JS箭头函数参数的简写⭐5.使用computed进行计算实现(最…...
Allegro负片层不显示反盘的原因和解决办法
Allegro负片层不显示反盘的原因和解决办法 在用Allegro做PCB设计的时候,负片设计是较为常用的一种方式,有时会出现打开负片层却看不到反盘的情况,如下图 L2层是负片层 L2层仍然只能看到盘 如何才能看到反盘显示的效果,具体操作如下 首先确定L2层层叠里面设置的是负片...
ACM数论 裴蜀定理(贝祖定理)
一.内容定义 「裴蜀定理」,又称贝祖定理(Bzouts lemma)。是一个关于最大公约数的定理。其内容定义为:对于不全为零的任意整数 a 和 b,记二者的最大公约数为 g 即 gcd(a,b) g,则对于任意整数 x 和 y 都一定…...
基础篇—CSS Position(定位)解析
CSS Position(定位) position 属性指定了元素的定位类型。 position 属性的五个值: relativefixedabsolutesticky元素可以使用的顶部,底部,左侧和右侧属性定位。然而,这些属性无法工作,除非是先设定position属性。他们也有不同的工作方式,这取决于定位方法。 1、static…...
正则表达式与grep
基本正则表达式BRE集合 匹配字符匹配次数位置锚定 符号作用^尖角号,用于模式的最正常,如“^haha”,匹配以haha单词开头的行$美元符,用于模式的最右侧,如“haha$”,表示haha单词结尾的行^$组合符ÿ…...
开发必备的IDEA 插件!效率提升 50 倍!
日常开发中,面向百度编程的程序员,很多时候,你跟大佬级别的差距,可能不仅仅是知识面的差距,还有就是开发效率的差距。以下是我常用的几个IDEA插件,废话不多说,直接肝干货! 1. Codot…...
aws eks 集群访问ecr仓库拉取镜像的认证逻辑
本文主要讨论三个问题 ecr帮助程序在docker上如何配置eks集群访问ecr仓库的逻辑kubelet授权ecr的源码分析 ecr帮助程序 在docker环境下,可以通过在$HOME/.docker/config.json中指定凭证管理程序 docker login aws同样提供了证书助手,避免手动执行ecr认…...
Linux Socket Buffer介绍
一. 前言 Linux内核网络子系统的实现之所以灵活高效,主要是在于管理网络数据包的缓冲器-socket buffer设计得高效合理。在Linux网络子系统中,socket buffer是一个关键的数据结构,它代表一个数据包在内核中处理的整个生命周期。 二. Socket Bu…...
ACL与NAT
ACL---访问控制列表,是一种策略控制工具 功能:1.定义感兴趣流量(数据层面 ) 2.定义感兴趣路由(控制层面) ACL 条目表项组成: 编号规则:步数或者跳数默认值为5,…...
使用gdb来debug程序并查找Segmentation fault原因
GDB 调试前言GDB基础用法1.启动及退出调试2.设置参数3.执行程序4.流程控制5.设置断点6.输出信息7.查看栈帧8.info命令9.显示源码GDB调试coredump文件关注公众号【程序员DeRozan】,回复【1207】,免费获取计算机经典资料及现金红包 前言 在开发程序时&…...
vbs简单语法及简单案例
文章目录一、简单语法1、变量2、输入3、输出4、选择语句5、循环二、用记事本编译中文乱码问题三、制作一个简单vbs脚本表白一、简单语法 1、变量 语法: dim 变量名例: dim a,b a1 b2 msgbox ab运行: 2、输入 语法:InputBox(…...
学板绘课程学费一般多少钱
学板绘课程学费一般多少钱?培训机构的费用和师资、模式有关,价格贵不贵要结合相同类型的机构多多对比。因为好些平台做了很多的宣传广告,运营成本很高, 终羊毛出在羊身上,这样的机构知名度很高,但是性价比不…...
48.在ROS中实现local planner(1)- 实现一个可以用的模板
有了之前45.在ROS中实现global planner(1)- 实现一个可以用模板的global planner的经验, 现在再去创建一个local planner的包就容易多了 1. 创建包 创建 cd ~/pibot_ros/ros_ws/src # 这里可以使用自己的ros workspace catkin_create_pkg sample_loc…...
jenkins基础部署
一、jenkins是什么1.Jenkins的前身是Hudson,采用JAVA编写的持续集成开源工具。Hudson由Sun公司在2004年启动,第一个版本于2005年在java.net发布。2007年开始Hudson逐渐取代CruiseControl和其他的开源构建工具的江湖地位。在2008年的JavaOne大会上在开发者…...
Unity3D -知识点(1)
1.场景视图鼠标滚轮:场景放大缩小鼠标右键:场景左右平移场景编辑器中,能看到什么?网格,每一格大小为1unit,建模不同,规定不同,(对应屏幕上100个像素)世界坐标系y轴向上为正x轴向右为…...
【学习笔记】NOIP暴零赛3
博弈(game) 观察到博弈过程中胜负态不会发生改变,那么求出从每个棋子出发能走的最长链,然后背包即可。 复杂度O(nm)O(nm)O(nm)。 #include<bits/stdc.h> #define ll long long #define pb push_back using namespace std; const int mod9982443…...
Java JSR规范列表
Java JSR规范列表目录概述需求:设计思路实现思路分析1.JSR2.JSR方法3.web service4.Webservice:5.数据处理器拓展实现参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,m…...
Java必备小知识点1
Java程序类型: Applications和AppletApplications:是指在计算机操作系统中运行的程序。是完整的程序,能独立运行。被编译后,用普通的Java解释器就可以使其边解释边执行。必定含有一个main方法,程序执行时,首先寻找main方法&#x…...
JavaScript作用域、闭包
文章目录作用域、作用域链作用域作用域链循环中的作用域自由变量、闭包自由变量闭包的定义、表现、应用如何确定在闭包中获取正确的变量总结作用域、作用域链 作用域 编程语言中存储、访问、修改变量当中的值是一项基本能力、存储变量、访问变量必须按照一定的规则࿰…...
JavaScript Date(日期) 对象
JavaScript Date 对象是 JavaScript 中用于处理日期和时间的内置对象。它可以用于获取当前时间、设置日期和时间、计算日期和时间之间的差异、以及将日期和时间格式化为各种字符串格式。在本文中,我们将详细介绍 JavaScript Date 对象的作用和在实际工作中的用途。 …...
rust过程宏 proc-macro-workshop解题-4-sorted
名字版本号rust1.69.0OSubuntu 22.04这一大关卡介绍的是属性式过程宏。 第一关:01-parse-enum 还是简单的看我们是否已经实现了一个属性式过程宏的空架子,如果有这个空架子,就直接通过了。 use proc_macro::TokenStream; use proc_macro2; use syn;#[proc_macro_attribut…...
数据结构与算法—队列
队列 队列介绍 有序列表,可以用数组或者链表实现。遵循先进先出原则。 数组实现队列 public class ArrayQueue {public static void main(String[] args) {ArrayQueue queue new ArrayQueue(3);// 接收用户输入char key ;Scanner sc new Scanner(System.in);…...
AcWing3416.时间显示——学习笔记
目录 题目 代码 AC结果 思路 关键步骤 题目 3416. 时间显示 - AcWing题库https://www.acwing.com/problem/content/description/3419/ 代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner input new Scanner(System.in…...
企业网站建设服务哪家好/策划方案怎么做
目录 前言 易混淆点记录 前言 博主顺利读研了,为了之后的工作需要现在要把C在学一遍,就是简单记录一些容易错而且个人感觉很重要的知识点,后面也会涉及到很多算法知识,有代码了会以资源的形式上传,需要的自取即可。 易…...
冠县网站建设电话/高端大气网站建设
利用jenkins的远程构建功能,我们可以使用任何脚本,甚至定制一个Web页来控制Job的执行,但是远程构建你如果直接使用的话,老是需要登录才能执行,如何避免登录?稍微折腾了一下,调通了。 1、点击右上…...
推荐做幻灯片搜图网站/seo是什么服务
盘点 GitHub 上那些神级指南!本次盘点都是 GitHub 上标星 10K 的开源指南。都是由中国的开发者开源,除了技术、教程类的指南,还有一些花里胡哨的东西。本期推荐开源项目目录:1. 计算机自学指南2. 大数据入门指南3. 程序员延寿指南…...
网站建设运营/2019年 2022疫情爆发
前言:不少人都知道高速收费站将会逐步取消人工收费,而改为ETC收费,这样提升了效率的通行的效率同时,也让一部分人士将会失业,因为没有了“人工收费”,意味着岗位将会消失,那这一部分人何去何从&…...
赣县企业网站建设/产品营销策划方案
Linux 性能测试与分析 Revision History Version Date Author Description 1.0 2011/5/26 dengwutaobao.com 初稿 1.1 2011/6/23 dengwutaobao.com 添加CPU分析 1.2 2012/2/20 dengwutaobao.com 添加MEM,IO分析 1.3 2012/2/23 dengwutaobao.com 更新工作原…...
关于动物自己做的网站/seo优化方案模板
1、字符型输入框: (1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符,特别要注意单引号和&符号。不要直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。 (2࿰…...