AWS Lambdaからkintoneのアプリケーションレコードを更新してみたのでその備忘録。
前提
- AWS Lambda Pythonを使います。
- LambdaはVPC内には配置しません。
- kitoneのアプリケーションにはデフォルトで用意されている「備品在庫管理」を利用します。
kintone側の設定
手動で登録したこのレコード(ボールペン)をAWS Lambdaから変更したいと思います。
基本的にはこちらのサイトを参考にさせてもらいました。とてもわかりやすかったです。バージョンの違いなのか若干書き方が異なるところがあったりしましたが、なんとかなりました。
Lambdaの実装
以下のような実装になります。一応メソッドによって処理を変更できるような作りにはしてはみましたが、実運用で使うならきちんと設計したほうが良いですね。
def kintone_operator(event, context):
KINTONE_URL = "https://{kintone_domain}/k/v1/record.json"
url = KINTONE_URL.format(
kintone_domain=os.environ['KINTONE_DOMAIN'],
kintone_app=os.environ['KINTONE_APP']
)
headers_key = os.environ['KINTONE_HEADERS_KEY']
api_key = os.environ['KINTONE_API_KEY']
basic_headers_key = os.environ['KINTONE_BASIC_HEADERS_KEY']
basic_headers_value =os.environ['KINTONE_BASIC_HEADERS_VALUE']
headers = {headers_key: api_key}
headers["Content-Type"] = "application/json"
if basic_headers_value != '':
headers[basic_headers_key] = basic_headers_value
if event['api'] == 'PUT':
result = put_record(headers, url, event['data'])
else:
result = 'NO KEY'
return result
def put_record(headers, url, data):
response_record = requests.put(url, json=data, headers=headers)
record_data = json.loads(response_record.text)
return record_data
全て大文字の変数は環境変数としてLambdaで定義しました。API Keyなどを公開しなくて済むので非常に楽です。
実行時には以下のようなデータを送付しました。
{
"api": "PUT",
"data": {
"app": 498,
"id": 1,
"record": {
"文字列__1行_": {
"value": "シャープペンシル"
}
}
}
}
で、実行してみたところ、無事更新されたようです。
まとめ
いろいろなサイトをベースにさせてもらい、更新機能を作ってみました。うまくAPI Gatewayやら他の機能やらと連携できれば、kintoneとAWSでどんどんとできることが増えてきますね。