嘗試 AWS Lambda for Python

十月的 AWS 大會(huì)發(fā)布了 AWS Lambda 對 Python 的支持,正好手頭有個(gè)小任務(wù)適合這個(gè)場景。任務(wù)的需求很簡單,如果給定 receipt 和 shared password,訪問 Apple In-App Purchase Validation Sandbox 來驗(yàn)證。

Lambda function 本身當(dāng)然很簡單:

# lambda_function.py
import itunesiap

def lambda_handler(event, context):
    receipt = event['receipt-data']
    password = event.get('password')
    with itunesiap.env.sandbox:
         r = itunesiap.verify(receipt, password)._
    return r

麻煩在于使用了一個(gè) itunes-iap 模塊, 需要按照 AWS 官方文檔創(chuàng)建個(gè)部署包。
具體步驟是:

  • 實(shí)現(xiàn) lambda function 的文件叫 lambda_function.py,而且此文件得存在于 <code_dir> 文件夾的根
  • pip install itunes-iap -t <code_dir>
  • cd <code_dir>; zip -r ../r01.zip *

然后把打包生成的 r01.zip 通過 Lambda Console 上傳發(fā)布即可。

通常你不會(huì)去注意 site-packages 下都安裝了哪些依賴包,所以如果你看到 <code_dir> 文件夾里的內(nèi)容,也許會(huì)嚇你一跳。我們只用了一個(gè)依賴,居然實(shí)際引入了這么多包。

r01.zip 里的內(nèi)容

為了運(yùn)行不到十行代碼,最終得上傳將近 5MB 的壓縮包。如果你的網(wǎng)絡(luò)上傳到 S3 也不夠快的話,建議在 EC2 instance 上用 s3 copy 等手段來快速上傳。

完成效果如下:

? http POST https://u0m4f1nca2.execute-api.us-west-2.amazonaws.com/sandbox/test_iap < test.json

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 626
Content-Type: application/json
Date: Mon, 28 Dec 2015 15:02:24 GMT
Via: 1.1 b84e1462f13daaeb732c61ea2aa9b852.cloudfront.net (CloudFront)
X-Amz-Cf-Id: XWSIdlbxL6Y32aTNrkQ79AZ6VafoV5WgTDsw4oa1zAAc38Iwg6A0iQ==
X-Cache: Miss from cloudfront
x-amzn-RequestId: ff58ec27-ad73-11e5-9c46-f75ab4034ce2

{
    "receipt": {
        "bid": "com.vanillabreeze.igunbattle",
        "bvrs": "1.0",
        "item_id": "554499305",
        "original_purchase_date": "2012-09-21 01:31:38 Etc/GMT",
        "original_purchase_date_ms": "1348191098192",
        "original_purchase_date_pst": "2012-09-20 18:31:38 America/Los_Angeles",
        "original_transaction_id": "1000000056161764",
        "product_id": "BattleGold50",
        "purchase_date": "2012-09-21 01:31:38 Etc/GMT",
        "purchase_date_ms": "1348191098192",
        "purchase_date_pst": "2012-09-20 18:31:38 America/Los_Angeles",
        "quantity": "1",
        "transaction_id": "1000000056161764",
        "unique_identifier": "42c1b3d45563820dd9a59c79a75641001fc85e39"
    },
    "status": 0
}

其他:

還好這段代碼的依賴樹中都是純 Python 包。如果是有 C 模塊的依賴,步驟就要更為復(fù)雜些了。

原來叫 JAWS,現(xiàn)在改名為 serverless 的項(xiàng)目,也正在加入對 Python 的支持。等這個(gè)項(xiàng)目再完善些,開發(fā)和使用 AWS Lambda 就能有更好的工具和框架支持。

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容