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第三方库


热门话题
Android Studio Java将输入存储在一个文本文件中,所有输入在一行中加载后显示在屏幕上   在我的Java应用程序中记录日志配置   java在将socket从Localhost构建到google时出错。通用域名格式   在java中通过SOAP发送附件   java Tomcat的JspWriter编码不正确   java应用程序在截击StringRequest时不断崩溃   java需要一个保持顺序并具有“顺序敏感”equals/hashCode的映射   Java框架地址栏元素   java如何从特定范围生成4个不重复的数字?   googleappenginejava。安全AccessControlException:拒绝访问(java.io.FilePermission)   加载游戏时java Fabric入口点异常崩溃   java Python我如何读入和读出,以便其他读者可以阅读它以便进一步购买?