AMAZON and serverless(1)Python 3.6

AMAZON and serverless(1)Python 3.6

serverless framework
https://github.com/serverless/serverless

All examples
https://github.com/serverless/examples

Install via NPM
> npm install -g serverless

Upgrade npm
> npm i -g npm

Understand the serverless framework
https://github.com/serverless/serverless/blob/master/docs/providers/aws/guide/intro.md

Python DynamoDB sample
https://github.com/serverless/examples/tree/master/aws-python-rest-api-with-dynamodb
More information about serverless
https://serverless.com/framework/docs/providers/aws/guide/intro/

Download the Python Example
> serverless install -u https://github.com/serverless/examples/tree/master/aws-python-rest-api-with-dynamodb -n aws-python-rest-api-with-dynamodb

The codes is quite straightforward.
serverless.yaml will be my resources template, it generate the cloud formation during deploy

Here is how to run the tests
>pip install pytest-sugar
>pytest tests.py
https://pivotfinland.com/pytest-sugar/

Understand the Dynamodb Stream
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html

Understand how it mock
https://www.cnblogs.com/fnng/p/5648247.html

Show the logging in console
> py.test --capture=no tests.py

Or

> pytest --capture=no tests.py

Dynamodb Datatype
https://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html#DynamoDB.Client.put_item

Here is how the mock work on tests.py

import json
import handler
from unittest.mock import patch

with open("event_sample.json") as example_event_buffer:
    example_event = json.load(example_event_buffer)

def test_process_record():
    with patch.object(handler, "notify") as patched_notify:
        handler.process_record(example_event['Records'][0])
        assert patched_notify.call_count == 0

        handler.process_record(example_event['Records'][1])
        assert patched_notify.call_count == 1

        handler.process_record(example_event['Records'][2])
        assert patched_notify.call_count == 2

        handler.process_record(example_event['Records'][3])
        assert patched_notify.call_count == 2

Install AWS command line tool on MAC
> sudo pip install awscli —upgrade —user

Check version
> aws --version
aws-cli/1.14.56 Python/3.6.4 Darwin/17.4.0 botocore/1.9.9

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.SET.ModifyingAttributes

Tried this, but not working
> aws dynamodb put-item --table-name Monitoringservice__int__devicestate --item file:///Users/hluo/company/code/services.deviceprocess/item.json

Command with the region
> aws dynamodb list-tables --region=us-west-1

This will work
> aws dynamodb put-item --table-name Monitoringservice__int__devicestate --item file:///Users/hluo/company/code/services.deviceprocess/item.json --region=us-west-1

Update Command
> aws dynamodb update-item --table-name Monitoringservice__int__devicestate --key '{ "deviceKey" : { "S" : "icon:KQ6A290A0F1842"}}' --update-expression "SET process = :process" --expression-attribute-values file:///Users/hluo/company/code/services.deviceprocess/update.json  --return-values ALL_NEW —region=us-west-1


References:
https://aws.amazon.com/cn/sdk-for-python/
https://aws.amazon.com/cloudformation/
http://www.cnblogs.com/huang0925/p/3384596.html
https://aws.amazon.com/cn/documentation/cloudformation/
https://aws.amazon.com/cn/cloudformation/
https://github.com/serverless/examples/tree/master/aws-python-rest-api-with-dynamodb



猜你喜欢

转载自sillycat.iteye.com/blog/2413259
今日推荐