2017年12月28日 星期四

在 AWS Lambda 的 Python 程式匯入額外的套件

AWS Lambda 的執行環境有預設匯入的套件
如果使用了其他的套件,Python 程式就會拋出找不到套件的錯誤。

從 AWS 的官方文件 [1] 中,可以看出關於這個問題的解決方法
就是事先把套件裝進程式裡,當成是程式自身的一部分,一起打包送進 AWS Lambda。

具體來說,也就是假設我的 Python 程式的資料夾是放在 D:\python\my_project
則可以使用以下的指令,把套件指定安裝到專案資料夾中。

pip install requests -t D:\python\my_project

而做完後,就會看到專案資料夾跑出一大堆資料夾和檔案
之後要上傳到 AWS Lambda 時,把整個資料夾(也就是 D:\python\mu_project\* )壓縮成 zip
一起上傳到 AWS Lambda 即可。

參考資料
  1. Creating a Deployment Package (Python)

2017年12月21日 星期四

AWS SDK v2 疑似是 BUG 的 exclusiveStartKey?

這只是快速先紀錄一下目前遇到的狀況,但還沒有嚴謹地確認是不是其他邏輯造成的…..。

2017年12月19日 星期二

SLF4J 與其他 logging framework 實作綁定與橋接的關聯

使用 SLF4J 的時候,同時使用很多開源函式庫,會很容易導致各種 log 跑不出來或者 dependency 衝突的問題
本質上是因為不同開源函式庫,各自使用了不同的 logging framework
因而導致了 log 被輸出到沒有被設定的實作,或者相同的實作被重複綁定等等。

2017年12月13日 星期三

AWS DynamoDB SDK v2 基礎使用(二):基礎開發環境建置

因為今年 AWS 推出了第二版的 AWS SDK [1],所以就來紀錄 AWS SDK v2 吧。

在用過第一版的 SDK 以後,其實覺得第二版的 SDK 寫得比較易用,而且還支援 Java Stream API。
不過實務上 AWS SDK v2 的文件 [2-3] 目前相當地不完整,而且網路上也沒太多資料
所以有很多情況是必須依靠第一版的經驗、Javadoc 跟 IDE 的提示來猜測使用方法…。

2017年12月12日 星期二

Jersey Test Framework 在 JUnit 5 的暫時解法

本來 Jersey Test Framework 是對應 JUnit 4 使用的 Jersey 測試環境
如果開發環境升級到 JUnit 5 的話,就會出現像下述這樣的 NullPointerException 的狀況。

java.lang.NullPointerException
     at org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:564)
     at org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:578)

2017年12月6日 星期三

DynamoDB 更新

更新 List/Set 裡的內容

首先需要注意 List 跟 Set 主要的不同點:

  1. List 可以包含重複的 Element,而更新時基本上也不會對重複的 Element 做什麼處理;而 Set 會自動合併相同的 Element,例如 String Set 在寫入重複的字串時,不會再出現第二個相同的 Element(也不會噴 Exception)。
  2. List 的內容更新,需要使用 SET 指令;但是 Set 內容的更新,則是使用 ADD 指令。
Attribute Value 不要直接寫在 Expression 裡
key 不存在時,list_append() 會失敗

可參考 [6],AWS 的 SDK 在嘗試附加內容到一個 list 裡時,如果這個 list 本身就不存在,會出現的錯誤其實不太能解釋狀況
出現的錯誤訊息會是:

software.amazon.awssdk.services.dynamodb.model.DynamoDBException: The provided expression refers to an attribute that does not exist in the item
參考資料
  1. Update Expression
  2. Working with Items: Java
  3. aws-doc-sdk-examples
  4. AWS SDK for Java 2.0 – Developer Preview
  5. How do I Append a string to a list using dynamodb sdk? (Java)
  6. Is it possible to combine if_not_exists and list_append in update_item