0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3アップロードをトリガーにDataSpider Servistaのスクリプトを実行する

Last updated at Posted at 2024-12-16

はじめに

弊社製品のDataSpider Servista(以下DataSpider)にはファイルトリガーというファイル配置をトリガーに処理を実行する機能があります。

担当システムのクラウド移行に伴って、ファイル配置場所をS3に変更する案がありました。
大量のファイルトリガーで動く処理をいかに工数少なく移行するか、検証まで行いましたが、S3案はボツとなりお蔵入りになってしまいました。
せっかくなのでこの場でご紹介いたします。

構成

まず移行前の構成はこのようになります。

before.png

  1. 監視フォルダーでファイルを配置する
  2. DataSpiderのファイルトリガーが発火して処理が実行される

AWS移行後はこのような構成を検討しました。

after.png

  1. S3にファイルを配置する
  2. putイベントでLambdaを発火
  3. LambdaでDataSpiderに対してHTTPリクエストを行う
  4. DataSpiderのHTTPトリガーがじっこうS3からのファイルダウンロード処理が実行される
  5. ファイルダウンロードによるファイル配置により、DataSpiderのファイルトリガーが発火して処理が実行される

Lambda

Lambdaのコードはこのようになります。

import json
from urllib import request

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    url = 'http://【DataSPiderのパス】/dataspider/trigger/s3put_test?bucket='+bucket+'&key='+key
    res = req(url)
    
    return {
        'url': url,
        'res': res,
    }
    
def req(url):
    get_req = request.Request(url)
    with request.urlopen(get_req) as res:
        body = res.read()
        return body
  1. イベント情報から「バケット名」と「キー」を取得する
  2. DataSpiderに対してHTTPリクエストを投げる
    その際リクエストパラメータに「バケット名」と「キー」を設定する

特定のバケットからのputイベントでこちらのLambdaが発火するよう設定をしておきます。

DaraSpiderのスクリプト

DataSpiderの「S3ダウンロード」スクリプトはこのようになります。

DSS.png

  1. HTTPリクエストのパラメータの「バケット名」「キー」を元にS3から監視フォルダへファイルをダウンロードする
  2. ダウンロードが成功したらS3のファイルを削除する

まとめ

共通処理のLambdaとDataSpiderの処理を作成することで、ファイルトリガーで実行するDataSpiderの各処理の修正を不要とすることが出来ました。
今回利用機会はありませんでしたが、今後AWSを活用していく中で活用できればと考えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?