はじめに
こんにちは。すぎもんです
以前、「コマンドを使って外部からHULFT Squareを実行する方法」をご紹介しました。
HULFT Squareは他のクラウド製品と合わせて活用することでサーバーを持たずに稼働させることが出来ます。
そこで今回はサーバーレスコンピューティングサービスであるAWS Lambdaを使用して、HULFT Square を実行することが出来るか試してみます。
これにより、AWSや他のサービスから任意のタイミングでHULFT Squareを実行させることが出来ます。
今回やること
今回は、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.実行したいプログラム(スクリプト)作成
前回使用したBoxドライブにあるファイルをAmazonS3にアップロードするスクリプトを実行します。
※前回:➀外部からのHTTPリクエストで実行するスクリプトの作成
・プロジェクト名 :プロジェクト
・スクリプト名 :Cloud
実際に扱うCSVファイルには、このようなデータが格納されています。
2.WebAPI公開(APIマネジメント)作成
HULFT SquareのWebAPIを公開する設定も前回作成した物と同じ物を使用します。
※前回:「➁APIプロジェクト作成」「➂APIクライアント作成」「➃REST APIジョブ作成」「➄リフレッシュトークンの取得」
➀APIプロジェクト
・プロジェクト :プロジェクト
・バージョン :※最新バージョン
・スクリプト :Cloud
➁APIクライアント
・名前 : API_client
➂REST APIジョブ
・名前 : API_Project_Path
・発行したURL : https://<サンプル>.com/Default/API_Project_Path
※<サンプル>は実施に発行した値をいれてください
➃リフレッシュトークン
AWS側の設定
3. 公開されたHULFT SquareのAPIを実行するAWS Lambdaを作成
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ロールを作成し紐づける必要があります。
ここから、3つのステップでロールを作成していきます。
➀ 信頼されたエンティティを選択
ここでは下記のように設定します。
信頼されたエンティティを選択:AWSのサービス
を選択
ユースケース:Lambda
を選択
➁ 許可を追加
ここでは下記のように設定します。
ポリシー名:AWSLambdaBasicExecutionRole
を選択
※CloudWatchへログ出力するのに必要なポリシーです
➂ 名前、確認、および作成
ここでは下記のように設定します。
ロール名:iamroles
※任意の名前で問題ございません
IAMロール作成完了
※このロールを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
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モジュールと同じファイルパスに格納します。
3-2-➃ AWS Lambda関数の作成
関数名:AWSlambda
ランタイム:Python3.12
※「既存のロールを使用する」を選択する
既存のロール:iamroles
(➀IAMロール作成で作成したも)
作成されたら「アップロード元」でzipファイル
を選択
※「3)RequestsモジュールとPythonファイルをZip圧縮」で作成したもの
「設定」タブから 環境変数
を選択し変数を設定していきます。
※キーの文字はサンプルコードで変数にしているので同じ値を入れるとそのまま使用可能です
キー | 値 |
---|---|
mail |
HULFT Squareにログインする際に使用したメールアドレス |
pass |
HULFT Squareにログインする際に使用したパスワード |
Tokens |
「➃リフレッシュトークン」で取得したもの (2.WebAPI公開) |
JobURL |
「➂REST APIジョブ」で発行したURL (2.WebAPI公開) |
下記のように登録し保存
を押下します
イベント名:AWSlambda
4.外部(PC)からLambdaを実行するAPI Gateway作成
ここからは実行するためのAPI Gatewayを作成します。
まずは、API Gatewayを開きます。
「API タイプを選択」 画面で 「REST API」 の [ 構築 ] を押下します。
「REST APIを作成」 画面 で 「新しいAPI」 を選択し今回は下記のように設定しました。
API名:HULFT Square
※任意の値を設定してください
APIエンドポイントタイプ:ap-northeast-1
※適用範囲となるリージョンを選択してください
最後に、一番下にある「APIを作成」を押下します。
APIが作成されたら、APIに紐づくリソースを作成していきます。
「リソースを作成」 を押下します。
今回は、下記のように設定しました。
リソース名:iPaas
※任意の値を設定してください
設定したら「リソースを作成」 を押下します。
作成されたら次に、HTTPメソッドを作成していきます。「メソッドを作成」 を押下します。
下記のように設定していきます。
メソッドタイプ:POST
を選択
統合タイプ:Lambda関数
を選択
Lambda関数:AWSlambda
作成したLambda関数名を選択してください
登録したら画面一番下にある「メゾットを作成」を押下してください
Deploy API 画面で今回は下記のように設定しました。
ステージ:新しいステージ
を選択
ステージ名:Job
※任意の値を設定してください
設定したら「デプロイ」を押下します。
実行してみる
ここからは、発行したURLを使って実行してみたいと思います。
コマンドプロンプトを開き、下記のコマンドで実行します。
curl -X POST "https://<API Gatewayで発行したURLドメイン>.ap-northeast-1.amazonaws.com/Job/iPaas"
実行されたか、HULFT Squareのログを見ると、正常に実行されたことが確認できます。
AWS S3にも正常にファイルが格納されているのが確認できます。
実際のデータも問題ございません。
おわりに
最後まで見て頂きありがとうございます。
AWSのサービスから任意の動作をきっかけにHULFT Squareを実行させることで、他のサービスと組み合わせて使用する際に使い方の幅が広がるのではないでしょうか
今回は、外部から実行するためのAPIgatewayのリンクを出すところまで作成したのでコマンドプロンプト以外にも任意のシステムから実行出来ます。
本記事とは反対にHULFT SquareからAWS Lambdaを実行させたい場合は過去の記事も参照ください。
このブログでは、今後も様々なTopics記事や接続検証等、皆さんの参考になるような記事を投稿していきたいと思います!
それでは、また!