フォーム読み込み中
本記事では、Alibaba CloudのサーバレスプロダクトFunction ComputeにはRDSトリガーが実装されていましたが、2023年1月に廃止されてしまいました。
今後はどうすれば RDS 製品のイベントで Function Compute を実行させられるのかを紹介します。
Function Compute は Alibaba Cloud が提供するフルマネージド型のイベント駆動型コンピューティングサービスです。利用者がサーバーなどのインフラストラクチャを管理する必要がなく、コード開発に集中できるのが特徴です。詳細はFunction Computeの公式ドキュメントを参照してください。
Function Compute 関数は手動実行方式以外、様々なトリガーもサポートしています。例えば、指定時刻になったら実行する時間トリガー、専用の URL が呼び出されたら実行する HTTP トリガー、また OSS にファイルがアップロードされたら実行するような製品イベントトリガーがあります。
その中には、RDS 製品のイベントが Function Compute のトリガーになってくれる RDS トリガーも存在していましたが、2023年1月に廃止されました。
では、今後はどうすれば良いかというと、 RDS 製品のイベントで Function Compute を実行させたい場合、EventBridge 製品を経由するワークアラウンドがありますので、今回はそれを検証していきたいと思います。
今回の検証では、RDS の API 操作を Function Compute のトリガーに設定します。具体的には、対象 RDS の「ModifyDBInstanceDescription」という API をコールし、APIをコールしたイベントがEventBridge 経由で Function Compute に到達し、関数の起動を確認します。
注意点として、トリガーになれるにはインスタンスレベルのイベントのみです。RDS 内データベースレベルの操作はトリガー対象外になります。現在EventBridge 経由で Function ComputeのトリガーになれるRDSイベントは以下の通りです。
イベント名 | 説明 |
rds:ActionTrail:AliyunServiceEvent | プラットフォームによるリソース操作 |
rds:ActionTrail:ApiCall | API操作 |
rds:ActionTrail:ConsoleOperation | コンソール操作 |
rds:CloudMonitor:InstanceFailover | フェールオーバー(故障) |
rds:CloudMonitor:InstanceFailureEnd | 故障終了 |
rds:CloudMonitor:InstanceFailureStart | 故障開始 |
rds:CloudMonitor:InstanceSwitchover | フェールオーバー(手動) |
rds:CloudMonitor:Instance[System Maintenance.MinorVersionUpgrade:Canceled] | マイナーバージョンアップ(キャンセル) |
rds:CloudMonitor:Instance[System Maintenance.MinorVersionUpgrade:Executed] | マイナーバージョンアップ(完了) |
rds:CloudMonitor:Instance[System Maintenance.MinorVersionUpgrade:Executing] | マイナーバージョンアップ(開始) |
rds:CloudMonitor:Instance[System Maintenance.MinorVersionUpgrade:Scheduled] | マイナーバージョンアップ(設定済) |
rds:CloudMonitor:Instance[System Maintenance.ScheduledOperation:Canceled] | メンテナンス操作(キャンセル) |
rds:CloudMonitor:Instance[System Maintenance.ScheduledOperation:Executed] | メンテナンス操作(完了) |
rds:CloudMonitor:Instance[System Maintenance.ScheduledOperation:Executing] | メンテナンス操作(開始) |
rds:CloudMonitor:Instance[System Maintenance.ScheduledOperation:Scheduled] | メンテナンス操作(設定済) |
rds:CloudMonitor:Instance[System Maintenance.Transfer:Canceled] | マイグレーション(キャンセル) |
rds:CloudMonitor:Instance[System Maintenance.Transfer:Executed] | マイグレーション(完了) |
rds:CloudMonitor:Instance[System Maintenance.Transfer:Executing] | マイグレーション(開始) |
rds:CloudMonitor:Instance[System Maintenance.Transfer:Scheduled] | マイグレーション(設定済) |
rds:Config:ConfigurationItemChangeNotification | 設定項目変更 |
rds:Config:NonCompliantNotification | 異常検知 |
今回検証対象である RDS トリガーが正常に Function Compute を起動させるかを確認するため、呼び出し先の関数を作成します。
1-1. Function Compute のコンソールを開きます。
1-2. サービスを作成しますので、「Create Service」をクリックします。
1-3.下記内容をを入力し、「OK」をクリックします。
Name:任意入力
Description:任意入力
Logging:Enable
1-4.関数を作成しますので、「Create Function」をクリックします。
1-5.下記内容をを入力し、「Create」をクリックします。
Method:Use Built-in Runtime
Function Name:任意入力
Handler Type:Event Handler
Runtime:Python3.6
Code Upload Method:Use Sample Code
Sample Code Description:Hello, world!
1-6.関数作成完了後に、サンプルコードが表示されますので、下記コード(機能:呼び出し元のイベント情報を表示)で入れ替えて「Deploy」をクリックします。
import logging
def handler(event, context):
logger = logging.getLogger()
logger.info(event)
return
1-7.「Test Function」をクリックして関数を実行します。「Logs ー 1番目のレコード ー Request Logs」をクリックし、実行ログを確認します。
1-8.実行ログに、テストイベントのデータが表示されていることを確認します。
EventBridge の有効化とトリガー元の RDS を作成し、構築手順-1で作成した関数に RDS のイベントをトリガーに指定します。
2-1.EventBridgeのコンソールから、「Enable For Free」をクリックし、EventBridge 製品の有効化をします。
2-2.公式ドキュメント「Create an ApsaraDB RDS for MySQL instance」の購入手順に沿って、RDS を作成し、インスタンスID を記録します。
Billing Method:Pay-As-You-Go
Region:Tokyo
Database Engine:MySQL5.7
Edition:Basic
Instance Type:mysql.n2.medium.1
Capacity:20GB
2-3. 手順1-6 で作成した関数に戻り、「Triggers ー Create Trigger」をクリックします。
2-4.EventBridge から Function Compute に送信用ロールが存在しない場合、下記ポップアップが表示されますので、ロール「AliyunServiceRoleForEventBridgeSendToFC」の作成を承認します。
2-5.下記のように、トリガー情報を入力します。
Trigger Type:ApasaDB RDS
Name:任意入力
Event Type:Custom Event Types
Event Name:rds:ActionTrail:ApiCall
Invocation Method:Synchronous Invocation
Trigger State:Enable Trigger
2-6.デフォルトでアカウント配下全 RDS がトリガー対象になります。特定 RDS を絞りたい場合、「Event Mode Configurations」をクリックし、下記構文を追加します。
"data": {
"referencedResources": {
"ACS::RDS::DBInstance": [
"「手順2-2で記録した RDS のインスタンスID」"
]
}
}
2-7.作成した RDS トリガーを確認します。
今回は RDS の「ModifyDBInstanceDescription」という API をコールして、呼び出し元になる「ModifyDBInstanceDescription」イベントが Function Compute の出力ログに記録されるかを確認します。
3-1.Alibaba Cloud が Web 版 API テストツールを提供していますので、OpenAPIを開きます。
3-2.下記内容を入力し、「Call Now」をクリックします。
DBInstanceId:「手順2-2で記録した RDS のインスタンスID」
DBInstanceDescription:任意入力
3-3. EventBridge コンソールにて、該当 API コールの履歴を確認します。
3-4.「Event Trace」をクリックし、手順2-7 で作成した RDS トリガーに転送されたことを確認します。
3-5.手順1-6 で作成した関数に戻り、「Logs ー 1番目のレコード ー Request Logs」をクリックし、実行ログを確認します。
3-6.実行ログに、「ModifyDBInstanceDescription」イベントのデータが表示されていることを確認します。
今回は、EventBridge を経由した、Function Compute の RDS トリガーの検証をやってみました。
設定自体に難しいところがなく、想定通りに動作してくれました。ただ、対応できるイベントは限られ、希望するトリガーがサポートできない可能性もあります。
もし RDS イベントが Function Compute のトリガーになる環境を構築したい場合、ぜひ本記事を参考にしてみてください。
条件に該当するページがございません