1
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?

AWS Lambdaを使ってHULFT Squareを実行してみた

Last updated at Posted at 2024-08-30

はじめに

こんにちは。すぎもんです:grinning:
以前、「コマンドを使って外部からHULFT Squareを実行する方法」をご紹介しました。
HULFT Squareは他のクラウド製品と合わせて活用することでサーバーを持たずに稼働させることが出来ます。

そこで今回はサーバーレスコンピューティングサービスであるAWS Lambdaを使用して、HULFT Square を実行することが出来るか試してみます。
これにより、AWSや他のサービスから任意のタイミングでHULFT Squareを実行させることが出来ます。

今回やること

image.png
今回は、AWSのLambdaを使用してHULFT Squareを実行してみたいと思います。
また、他のサーバーから任意のタイミングで動かすために、API Gatewayで実行するためのリンクを発行し実際に動かしてみたいと思います。

実施するのに必要な設定

HULFT Square側の設定
1.実行したいプログラム(スクリプト)作成
2.WebAPI公開(APIマネジメント)作成

AWS側の設定
3.公開されたHULFT SquareのAPIを実行するLambdaを作成
4.外部(PC)からLambdaを実行するAPI Gateway作成

HULFT Square側の設定

1.実行したいプログラム(スクリプト)作成

image.png

前回使用したBoxドライブにあるファイルをAmazonS3にアップロードするスクリプトを実行します。
※前回:➀外部からのHTTPリクエストで実行するスクリプトの作成
・プロジェクト名 :プロジェクト
・スクリプト名  :Cloud

image.png

実際に扱うCSVファイルには、このようなデータが格納されています。
image.png

2.WebAPI公開(APIマネジメント)作成

image.png

HULFT SquareのWebAPIを公開する設定も前回作成した物と同じ物を使用します。

※前回:「➁APIプロジェクト作成」「➂APIクライアント作成」「➃REST APIジョブ作成」「➄リフレッシュトークンの取得」
➀APIプロジェクト
 ・プロジェクト :プロジェクト
 ・バージョン  :※最新バージョン 
 ・スクリプト  :Cloud
➁APIクライアント
 ・名前 : API_client
➂REST APIジョブ
 ・名前     : API_Project_Path
 ・発行したURL : https://<サンプル>.com/Default/API_Project_Path
           ※<サンプル>は実施に発行した値をいれてください
➃リフレッシュトークン

➀APIプロジェクト
mojikyo45_640-2.gif

➁APIクライアント
mojikyo45_640-2.gif

➂REST APIジョブ
mojikyo45_640-2.gif

➃リフレッシュトークン
mojikyo45_640-2.gif

AWS側の設定

3. 公開されたHULFT SquareのAPIを実行するAWS Lambdaを作成

image.png

AWS Lambdaを作成するうえで下記のステップで作成していきます。

3‐1 IAMロール作成
3-2 AWS Lambda関数作成
 3-2-➀ Pythonのインストール
 3-2-➁ Requestsライブラリをインポート
 3-2-➂ RequestsライブラリとPythonファイルをZip圧縮
 3-2-➃ AWS Lambda関数の作成

3‐1IAMロール作成

AWS Lambdaを実行するためには、IAMロールを作成し紐づける必要があります。

「IAM」を検索し「ロール」を選択します。
image.png

「ロールを作成」を押下します。
image.png

ここから、3つのステップでロールを作成していきます。

➀ 信頼されたエンティティを選択
ここでは下記のように設定します。
信頼されたエンティティを選択:AWSのサービス を選択
ユースケース:Lambda を選択
mojikyo45_640-2.gif

➁ 許可を追加
ここでは下記のように設定します。
ポリシー名:AWSLambdaBasicExecutionRole を選択
  ※CloudWatchへログ出力するのに必要なポリシーです
mojikyo45_640-2.gif

➂ 名前、確認、および作成
ここでは下記のように設定します。
ロール名:iamroles ※任意の名前で問題ございません
mojikyo45_640-2.gif

IAMロール作成完了
image.png
※このロールをLambda関数に設定していきます。

3-2 AWS Lambda関数作成

今回はPythonを使って実行するので作成には下記の4つのステップが必要になります。
3-2-➀ Pythonのインストール
3-2-➁ Requestsライブラリをインポート
3-2-➂ RequestsライブラリとPythonファイルをZip圧縮
3-2-➃ AWS Lambda関数の作成

AWS LambdaでHTTPリクエストを送るには、PythonのRequestsライブラリが必要になります。

3-2-➀ Pythonのインストール

Python公式サイトからモジュールインストールして必要なモジュールを取得します。
※今回は、「python-3.12.4-amd64」を使用します。

3-2-➁ Requestsライブラリをインポート

Requestsライブラリをインポートするために下記のコマンドを実行します
コマンド:pip install requests
作成されたファイルパス:C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python312\Lib\site-packages

Requestsモジュールは、PythonでHTTPリクエストを実行可能にするライブラリです。Pythonには標準で付属していないので、「pip install requests」コマンドなどを実行して別途インストールした上でインポートする必要があります。

Requestsライブラリをインストール
image.png

3-2-➂ RequestsライブラリとPythonファイルをZip圧縮

次に、実行したいPythonのコードをRequestsライブラリのファイルと一緒にZip圧縮します。
今回は下記のコードを使用します。

import json
import requests
import os  # osモジュールをインポート

def lambda_handler(event, context):
    # Step 1: メールとパスワードを使ってログインAPIでアクセストークンを取得する
    email = os.environ['mail']  # 環境変数からメールを取得
    password = os.environ['pass']  # 環境変数からパスワードを取得
    url = "https://app.square.hulft.com/v1/users/login"
    payload = json.dumps({"email": email, "password": password})
    headers = {"Content-Type": "application/json"}

    response = requests.request("POST", url, headers=headers, data=payload)
    print(response.text)  # 応答内容を出力
    
    # accessTokenの取得試行
    try:
        response_data = json.loads(response.text)
        access_token_email_password = response_data["accessToken"]
    except KeyError:
        print("accessTokenが見つかりません。レスポンス: ", response.text)
        return {'statusCode': 500, 'body': json.dumps('AccessToken not found')}  # accessTokenが見つからない場合の応答

    # Step 2: リフレッシュトークンを使用して、Login APIでアクセストークンを取得する
    refresh_token = os.environ['Tokens']  # 環境変数からリフレッシュトークンを取得
    url = "https://app.square.hulft.com/v1/rest-api-token"
    payload = json.dumps({"refreshToken": refresh_token})
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {access_token_email_password}"
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    access_token = json.loads(response.text)["accessToken"]

    # Step 3: 取得したアクセストークンを使ってHTTPクライアントからREST API Job Endpointを実行する
    url = os.environ['JobURL']
    headers = {"Authorization": f"Bearer {access_token}"}

    response = requests.request("GET", url, headers=headers)

    # 応答を出力する
    print(response.text)

    # Lambda関数からの応答形式
    return {
        'statusCode': 200,
        'body': json.dumps('Success')
    }

Pythonコードをテキストファイルに記載。
lambda_function.pyという名前のファイル名に変更し、Requestsモジュールと同じファイルパスに格納します。

image.png

上記ファイルをすべてZip圧縮します。
image.png

3-2-➃ AWS Lambda関数の作成

関数名:AWSlambda
ランタイム:Python3.12
※「既存のロールを使用する」を選択する
既存のロール:iamroles (➀IAMロール作成で作成したも)

image.png

作成されたら「アップロード元」でzipファイルを選択
※「3)RequestsモジュールとPythonファイルをZip圧縮」で作成したもの
image.png

image.png

「設定」タブから 環境変数 を選択し変数を設定していきます。
image.png
※キーの文字はサンプルコードで変数にしているので同じ値を入れるとそのまま使用可能です

キー
mail HULFT Squareにログインする際に使用したメールアドレス
pass HULFT Squareにログインする際に使用したパスワード
Tokens 「➃リフレッシュトークン」で取得したもの (2.WebAPI公開)
JobURL 「➂REST APIジョブ」で発行したURL (2.WebAPI公開)

下記のように登録し保存を押下します
イベント名:AWSlambda
mojikyo45_640-2.gif

テスト実行すると正常に実行出来ているみたいです。
image.png

4.外部(PC)からLambdaを実行するAPI Gateway作成

image.png

ここからは実行するためのAPI Gatewayを作成します。
まずは、API Gatewayを開きます。
image.png

「APIを作成」を押下します。
image.png

「API タイプを選択」 画面で 「REST API」 の [ 構築 ] を押下します。
mojikyo45_640-2.gif

「REST APIを作成」 画面 で 「新しいAPI」 を選択し今回は下記のように設定しました。

API名:HULFT Square ※任意の値を設定してください
APIエンドポイントタイプ:ap-northeast-1 ※適用範囲となるリージョンを選択してください
最後に、一番下にある「APIを作成」を押下します。
image.png

APIが作成されたら、APIに紐づくリソースを作成していきます。
「リソースを作成」 を押下します。
image.png

今回は、下記のように設定しました。
リソース名:iPaas ※任意の値を設定してください
設定したら「リソースを作成」 を押下します。
image.png

作成されたら次に、HTTPメソッドを作成していきます。「メソッドを作成」 を押下します。
image.png

下記のように設定していきます。
メソッドタイプ:POST を選択
統合タイプ:Lambda関数 を選択
Lambda関数:AWSlambda 作成したLambda関数名を選択してください
登録したら画面一番下にある「メゾットを作成」を押下してください
image.png

メソッド作成完了後、「APIをデプロイ」 を押下します。
image.png

Deploy API 画面で今回は下記のように設定しました。
ステージ:新しいステージ を選択
ステージ名:Job ※任意の値を設定してください
設定したら「デプロイ」を押下します。
mojikyo45_640-2.gif

「ステージ」 画面でURLが作成されました。
image.png

実行してみる

ここからは、発行したURLを使って実行してみたいと思います。
コマンドプロンプトを開き、下記のコマンドで実行します。

curl -X POST "https://<API Gatewayで発行したURLドメイン>.ap-northeast-1.amazonaws.com/Job/iPaas"

image.png

実行されたか、HULFT Squareのログを見ると、正常に実行されたことが確認できます。
image.png

AWS S3にも正常にファイルが格納されているのが確認できます。
image.png
実際のデータも問題ございません。
image.png

おわりに

最後まで見て頂きありがとうございます。
AWSのサービスから任意の動作をきっかけにHULFT Squareを実行させることで、他のサービスと組み合わせて使用する際に使い方の幅が広がるのではないでしょうか

今回は、外部から実行するためのAPIgatewayのリンクを出すところまで作成したのでコマンドプロンプト以外にも任意のシステムから実行出来ます。

本記事とは反対にHULFT SquareからAWS Lambdaを実行させたい場合は過去の記事も参照ください。

このブログでは、今後も様々なTopics記事や接続検証等、皆さんの参考になるような記事を投稿していきたいと思います!
それでは、また!:raised_hand:

1
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
1
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?