jar使存储aws lambda函数的状态变得容易。

awsjar的Python项目详细描述


awsjar

PyPI versionDownloadsPython 3.6TravisCoverage Status

Jar Logo

AWSJar使保存来自aws lambda的数据变得容易。

数据(dict、list、float、int或string)可以作为环境变量保存在lambda中,也可以保存在s3上。

安装

pip install awsjar

示例

每次调用时递增一个和

import awsjar

def lambda_handler(event, context):
    jar = awsjar.Jar(context.function_name)
    data = jar.get()  # Will return an empty dict if state does not already exist.

    s = data.get("sum", 0)
    data["sum"] = s + 1

    jar.put(data)
    
    return data

确保您的网站24/7

import awsjar
import requests

# Set a CloudWatch Event to run this Lambda every minute.
def lambda_handler(event, context):
    jar = awsjar.Jar(context.function_name)
    data = jar.get()  # Will return an empty dict if state does not already exist.
    
    last_status_code = data.get("last_status_code", 200)
    
    result = requests.get('http://example.com')
    cur_status_code = result.status_code
    
    if last_status_code != 200 and cur_status_code != 200:
        print('Website might be down!')

    jar.put({'last_status_code': cur_status_code})

将数据保存到s3

import awsjar

# Save your data to an S3 object - s3://my-bucket/state.json 
bkt = awsjar.Bucket('my-bucket', key='state.json')

data = {'num_acorns': 50, 'acorn_hideouts': ['tree', 'lake', 'backyard']}
bkt.put(data)

state = bkt.get()
>> {'num_acorns': 50, 'acorn_hideouts': ['tree', 'lake', 'backyard']}

如何

  1. Jar
    1. Initialization
    2. Save Data
    3. Serialize Data
    4. IAM Role for Lambda
  2. Bucket
    1. Initialization
    2. Save data
    3. Specifying Keys
    4. S3 Versioning
    5. Serialize Data

罐子

Save your data within the Lambda itself, as an environment variable.

This method has no associated costs but AWS only allows you to store up to 4KB of data in the environment variables.

Jar can compress the data before storing it, allowing up to about 8KB of uncompressed data.

This may not seem like much, but it can cover a lot of use cases. It's also nice to not have to provision extra resources and keep everything self contained. Here's a 7KB list that will fit with Jar.

^{pr 5}$

Initialization

^{pr 6}$

Save data

^{pr 7}$

Serializing data

Jar comes with datetime encoders/decoders for you to use.

It uses the standard library json.dumps and json.loads to serialize data so it's possible to write your own encoder/decoders to serialize your data.

Here's some instructions

from awsjar import Jar, datetime_decoder, datetime_encoder
from datetime import datetime

jar = Jar(
    lambda_name=lambda_name,
    region=region,
    decoder=datetime_decoder,
    encoder=datetime_encoder,
)
time = datetime.now()

data = {"list": [1, 2, 3], "dt1": time}

jar.put(data)
x = jar.get()
>> {"list": [1, 2, 3], 'dt1': datetime.datetime(2019, 1, 9, 18, 49, 44, 847202)}

IAM角色

Any Lambda using Jar to save to an env var will need these permissions specified in the Role.

^{pr 9}$

Bucket

Save your data to S3.

Initialization

^{pr 10}$

Save data

^{pr 11}$

Specifying keys

You can specify the key to override the key that was used in initialization.

^{pr 12}$

Versioning

S3 has an eventual consistency data model

例如,这意味着在覆盖对象后立即获取该对象可能不会返回预期的数据。

要克服此问题,请启用versioning

如果s3 bucket启用了版本控制,bucket将自动检测它,并在任何get()调用中获取对象的最新版本。

# Check versioning status
bkt.is_versioning_enabled()

# Enable versioning
bkt.enable_versioning()

# Disable versioning
bkt.enable_versioning()

序列化数据

Same as Jar

Contributing

Please see the contributing guide了解更多细节。

联系/支持

请使用Issues

我非常感谢任何反馈/建议!电子邮件地址:yukisawa@gmail.com

许可证

在apache许可证2.0下发布。有关详细信息,请参见^{}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java生成随机浮点,包括两个边界   java三层体系结构风格是如何工作的?一些简单的例子   多线程可以使用线程。在Java中,在循环中使用sleep(),以便定期执行某些操作?   读取循环上的java HibernateMysql异常   java使用带有Apache Ivy的自定义存储库,未找到解析程序   filenotfoundexception在读取时出现问题。Java中的txt文件   嵌入式tomcat 8.0.21中的java Spring websocket   java为什么我需要创建一个类的引用,然后创建一个B类的对象   java Splashscreen动画在Mac OS中更新时闪烁   JavaSpring3。名为“zoneManagerDelegate”的x Bean必须是[com.ms.adsp.delegate.sapi.zoneManagerDelegate]类型,但实际上是[$Proxy20]类型   java SQLite:没有这样的专栏;不明错误   java将JTable定位到JFrame中JPanel中的(x,y)位置   java在导入组织方面面临挑战。知道。xchart*   xml读取Java中的SVG元素并跳过某些包含文本的元素   java Spring Redis问题:Redis缓存中的GetAllCacheNames不能与RedisCacheManager一起使用   java Vertex Hazelcast:集群问题   java如何编辑osgi托管服务实现使用的属性文件?   java Android活动并行启动?   java AWS Lambda用于将excel转储到数据库中