Help us understand the problem. What is going on with this article?

cli-kintoneをAWS Lambdaで実行する

やること

cli-kintoneをAWS Lambdaで実行。
kintoneのレコード全件をCSV形式で出力してS3へアップロードするまで。

cli-kintoneとは

サイボウズが提供しているkintone公式のCLI(Command Line Interface)
kintone APIでは実現できないようなデータ全件取得などが提供されているのが特徴。
2019/09/18時点でv0.94だが問題なく動作するレベルだが本番環境への導入は慎重に!

環境

  • ローカル(MAC)
  • kintone
  • cli-kintone v0.94
  • AWS Service (Lambda, S3, IAM Role)
  • Python 3.7

手順

cli-kintoneをダウンロード

公式cli-kintoneから最新版Linux実行ファイルlinux-x64.zipをダウンロードする。

解凍するとbuild/linux-x64フォルダの中に実行ファイルが含まれているため、
フォルダなし版でzipを作り直す。

cd ~/Downloads
unzip linux-x64.zip
zip -jr cli-kintone.zip build/linux-x64/cli-kintone

cli-kintoneをAWS lambdaにアップロード

Lambdaのコードエントリタイプで.zipファイルをアップロードを指定するとzipファイルをアップロードできるようになる。前項で作ったcli-kintone.zipファイルをアップロードする。

Lambda_Management_Console.jpg

S3バケットの作成

S3に適当な名前でバケットを作成。
デフォルトのままの設定でOK!!

IAMロールにS3に配置する権限を付与

AWS Lambdaに紐づいているIAMロールに対して以下の権限を付与する。

Key Description
サービス S3
権限 PutObject
Bucket name 作成したバケット名
Object name *

IAM_Management_Console.jpg

環境変数を設定

Key Description
DOMAIN kintoneのサブドメイン名
APP_ID API ID
API_KEY API毎に発行したAPIキー
BUCKET s3バケット名(ARNではない)
FILE_NAME s3に配置するファイル名

Let's コーディング!!

ファイル名をlambda_function.pyで新規作成する。

import json
import subprocess
import os
import boto3

# 環境変数の読み込み
DOMAIN = os.environ["DOMAIN"]
APP_ID = os.environ["APP_ID"]
API_KEY = os.environ["API_KEY"]

BUCKET = os.environ["BUCKET"]
FILE_NAME = os.environ["FILE_NAME"]

# S3オブジェクト操作
s3 = boto3.resource("s3")
bucket = s3.Bucket(BUCKET)

def lambda_handler(event, context):
    # 出力ファイル定義
    file_name = FILE_NAME
    output_file = f"/tmp/%s" % file_name

    # cli-kintoneを実行してkintoneのアプリ情報を一時ファイルに出力する
    with open(output_file, "w") as f:
        cmd = f"./cli-kintone -a %s -d %s -t %s" % (APP_ID, DOMAIN, API_KEY)
        res = subprocess.check_call(cmd.split(), stdout=f)

    # 作成した一時ファイルをS3へファイルへアップロード
    bucket.upload_file(output_file, file_name)

    # レスポンス
    return {
        'statusCode': 200,
        'body': json.dumps('OK')
    }

テスト

ソースコードと適当なテストコードを保存して実行するとS3バケットにCSVファイルが出力される。

S3_Management_Console.jpg

まとめ

以外と簡単にkintoneからCSVを出力してS3にアップロードできますね。

これでCloudWatchEventと組み合わせれば、CSV出力が定期的に実行できるようになります。
今回は何も触れていませんがDynamoDBと組み合わせれば、CSVで出力した内容をDynamoDBに連携することも実現できそうです。

cli-kintoneで実行するコマンドを変化させればkintoneからレコードを取得、登録も容易になります。
違うコマンド(オプション)は公式を確認してね!

良いkintone, AWSライフを!!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした