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如何访问Struts2中的请求参数?   java将大图像设置为背景   java如何使用子查询。在里面   java我希望我的计算器重新启动,直到我按下“q”字母   将Java Http服务器的响应写入jQuery   java JPA/HSQLDB仍然在消耗我所有的内存   使用MySql结果集数据在Java Swing应用程序中创建图形和图表   java创建一个程序,从用户那里获取输入并将其写入输出文件   java Windows无法删除具有大路径的文件   java方法运行它3次   java如何仅为Http状态代码500配置RetryTemplate?   java读取,从JAR写入外部xml文件   如何在安卓 java中实现自定义导航栏,如图所示   java使用ApacheCamel框架将数据持久化为Oracle DB中的BLOB/CLOB数据类型