こんにちは。ひつじです。
AlibabaCloudのFaasサービスのFunctionComputeでRDSインサートをやってみました。
各メガクラウドでのFaasサービスは以下の通りです。AWS Lambdaとかは有名ですよね。
| AWS | Azure | GCP | Alibaba |
|---|---|---|---|
| AWS Lambda | Azure Functions | Cloud Functions | Function Compute |
ゴール
Function Computeで1分間隔でRDSにインサートを実行する
サービスの作成
FunctionComputeで最初にやることはサービスの作成です。
今回は何も考えずにデフォルトで作成しますが、VPCに所属させたり、他のプロダクトへのアクセス権限を細かく設定したり、ログサービスと連携させたり設定ができます。
このサービスという定義の中に複数の関数を登録できます。
関数の作成
ここから実際にプログラムの作成工程に入ります。
今回は、以下の仕様で作成していきたいと思います。
・1分に1回起動するプログラムとする。
・ランタイムはPython2.7とする。
・pymysqlライブラリを利用しRDSにアクセスする。
関数テンプレート
今回は空の関数を使います。
トリガーの設定
今回はトリガータイプを「タイムトリガー」にします。
トリガー名を任意で入力、間隔を「1」に設定します。
こうすることで1分間隔でプログラムが実行されます。
関数の設定
ここで実際のプログラムを記述できます。
今回はpymysqlライブラリを利用するため、コード設定の「Zipファイルのアップロード」からpymysqlライブラリをアップロードしましょう。
その後、「オンライン編集」にてRDSへのインサートの処理を記述していきます。
# -*- coding: utf-8 -*-
import logging
import json
import time
import re
from aliyun.log.logitem import LogItem
from aliyun.log.logclient import LogClient
from aliyun.log.getlogsrequest import GetLogsRequest
from aliyun.log.putlogsrequest import PutLogsRequest
from aliyun.log.listlogstoresrequest import ListLogstoresRequest
from aliyun.log.gethistogramsrequest import GetHistogramsRequest
from datetime import datetime
import pymysql.cursors
nowstr=datetime.now().strftime("%Y/%m/%d %H:%M:%S")
connection = pymysql.connect(
host='rm-e9bx176258xp97945xo.mysql.japan.rds.aliyuncs.com',
user='scsk_cho',
password='Pub12345',
db='pacro',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
def handler(event, context):
logger = logging.getLogger()
sql="insert into t_fc(name,date) values ('sheep','"+nowstr+"')"
#表示テスト1
logger.info(sql)
try:
with connection.cursor() as cursor:
#表示テスト2
print "print display test"
cursor.execute(sql)
connection.commit()
except:
connection.rollback()
#表示テスト3
return "return display test"
結果確認
Execution Result にて実行結果を確認していきます。
Execution Resultが表示されていない場合が、Viewタブから開きましょう。
確認ポイント
- Status200であること
- ResponseにてReturnで指定した引数が表示される
- loger.infoで出力した文字列(今回SQL)が表示される
- printで指定した文字列が表示される。
最後にRDSの中身をみてみましょう。
最後に
いかがでしたでしょうか。
基本的なとこですが、なんとかうまくいきましたね。
それではご査収ください : )






