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?

HULFT Square でAWSマイクロサービスと連携してみた

Last updated at Posted at 2024-03-08

はじめに

こんにちは。すぎもんです。😀

AWSマイクロサービスとは、AWSにおいて実行される小規模かつ独立したサービスのことです。

AWSマイクロサービス環境は、Amazon ECSやAWS Lambda、Amazon API GatewayなどのAWSの各種サービスを使用して構築することが可能です。異なる機能をサービス単位で個別に開発、テスト、デプロイすることができるため、柔軟性と拡張性を向上させることが可能です。

本記事ではAWSでのマイクロサービスの構築とHULFT Squareからの連携手順を紹介します。

今回やること

HULFT SquareからAmazon API Gatewayで作成したAWSのマイクロサービス環境の玄関口であるREST APIへ接続し、Amazon DynamoDBのレコードを取得します。
Amazon DynamoDBからのレコード取得にはAWS Lambda関数を使用します。

HULFT SquareにはAWS Lamdba、Amazon DynamoDBの専用コネクタが用意されています。そのためAmazon API Gatewayを経由しなくても、「今回やること」の目的の実現は可能です。
当ブログは、AWSマイクロサービス環境へREST API経由で外部からアクセスする方法の一例 としてご参照ください。
また、AWSマイクロサービス環境構築のパートを必要に応じて分割してご参照頂ければ幸いです。

image.png

検証手順

AWSマイクロサービス環境構築

1.Amazon DynamoDB構築

まずAmazon DynamoDB(以下、DynamoDB)で検証用データを格納するテーブルを作成していきます。
image.png

AWSマネジメントコンソールより、[DynamoDB] 画面へ遷移し、「テーブルの作成] をクリックします。

image.png

image.png

今回は「users」というユーザ情報を管理するテーブルを作成します。
[テーブル名] に任意のテーブル名、今回はusersと入力し [パーティションキー] にプライマリーキーとなる項目、今回はユーザIDを意味するidを入力します。
image.png
[デフォルトテーブル設定] は今回変更せず、画面下部へスクロールしテーブルの作成をクリックします。

image.png

10秒ほどでテーブルが作成されます。[テーブル] 画面でテーブル名usersをクリックします。
image.png

[テーブルアイテムの探索] をクリックします。
image.png

テーブルに検証用のデータを格納します。[項目を作成] をクリックします。
属性名 [id-パーティションキー] に任意の値、今回は001を入力し、項目の属性を追加するため [新しい属性 の追加] をクリックします。
image.png

image.png

必要なデータの属性と値を入力します。今回は下記のように入力後、右下の [項目を作成] をクリックします。

属性名 タイプ 説明
name 文字列型 root ユーザ名
mail 文字列型 root@example.com メールアドレス

image.png

テーブルに検証用のデータを追加します。[項目を作成] をクリックします。
image.png

属性名 [id-パーティションキー] に任意の値、今回は002を入力し、項目の属性を追加するため [新しい属性 の追加] をクリックし、今回は下記のように入力後、右下の [項目を作成] をクリックします。

属性名 タイプ 説明
id- パーティションキー 文字列型 002 ユーザID
name 文字列型 admin ユーザ名
mail 文字列型 admin@example.com メールアドレス

image.png

[項目を作成] をクリック後、[テーブルアイテムの探索] 画面で入力した項目が表示されればデータの準備は完了です。

image.png

2.IAMロール作成

次に作成したAWS Lambda関数にDynamoDBへアクセスする権限を付与するためIAMロールを新規作成していきます。
image.png

AWSマネジメントコンソールより、[IAM] 画面 へ遷移し 画面左の [ロール] をクリック後 [ロールを作成] クリックします。
image.png

image.png

信頼されたエンティティタイプは [AWSのサービス] 、ユースケースは [Lambda] を選択し、[次へ] をクリックします。

image.png

ロールに追加する許可ポリシーを選択します。
以下の今回は以下の2つの許可ポリシーを選択し、[次へ] をクリックします。

[AWSLambdaBasicExecutionRole]
Lambda関数を実行するための許可ポリシー、CloudWatchへログ出力するためにも必要です。
[AmazonDynamoDBFullAccess]
DynamoDBへフルアクセスする許可ポリシー

image.png
image.png

 [ロール名] に任意の値、今回はusers-roleを入力し、[ロールを作成] をクリックします。

image.png

image.png

数秒でロールが作成されます。今回作成したusers-role[ロール] 画面より確認できればIAMロール作成は完了です。

image.png

3.AWS Lambda関数作成

DynamoDBからレコードを取得するLambda関数を作成します。
image.png

AWSマネジメントコンソールより、[Lambda] 画面 へ遷移し [関数の作成] クリックします。
image.png

[関数の作成] 画面 へ遷移し 以下の項目を入力後、[関数の作成] クリックします。

image.png
[一から作成] を選択
[関数名] 任意の関数名 今回はusers-getと入力
[ランタイム] 実行プログラムの言語とバージョンを選択 今回はPython 3.9を選択
[実行ロール] 既存 のロールを使用するを 選択
[既存のロール] 今回作成したusers-roleを選択

image.png

image.png

数秒でLambda関数が作成されます。[テスト] タブより [新しいイベントを作成] を選択しイベント名、今回はtestusersと入力後 [テスト] をクリックします。

image.png

image.png

画面上で成功を確認します。

image.png

次に関数で実行する内容のコードを [コード] 画面で下記のように貼り付けます。

image.png

usersテーブルから全ての情報を取得するという処理内容です。

users-get-function.py
import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('users')

#ユーザ情報を返す
def get_users():
    response = table.scan()
    return response['Items']

users = get_users()

def lambda_handler(event, context):
    return get_users()

print(users)

[Deploy] をクリックし、コードを適用します。
image.png

4.Amazon API Gateway設定

Amazon API Gateway(以下、API Gateway)でAWSのマイクロサービス環境の玄関口であるREST APIを作成していきます。
image.png

AWSマネジメントコンソールより、[API Gateway] 画面へ遷移し、「API作成] をクリックします。

今回はWebブラウザから認証なしでアクセスできるREST APIを作成していきます。
作成した後に認証機構を組み込むには、APIキーを付与することで実現可能です。
実装方法は下記公式リファレンスをご参照下さい。
API Gateway コンソールを使用して API キーをセットアップする

image.png
image.png

[API タイプを選択] 画面で [REST API][構築] をクリックします。
image.png

[REST APIを作成] 画面 へ遷移し 以下の項目を入力後、[APIを作成] クリックします。

[新しいAPI] を選択
[API名] 任意の関数名 今回はusers-apiと入力
[APIエンドポイントタイプ] 今回はリージョンが適用範囲となるリージョンを選択
image.png

次にAPIに紐づくリソースを作成します。[リソースを作成] をクリックします。

image.png
image.png

数秒後にリソースの作成が完了します。
image.png

引き続いてリソースの操作を実施するHTTPメソッドを作成していきます。[メソッドを作成] をクリックします。

image.png
[メソッドの詳細] 画面 へ遷移し 以下の項目を入力後、[メソッドを作成] クリックします。

[メソッドタイプ] 今回はレコードの取得が目的のため、出力を結果を返すメソッドタイプGETを選択
[統合タイプ] Lambda関数を実行するため、Lambda関数を選択
[Lambda関数] 作成したusers-getを選択して入力
image.png
image.png

メソッド作成完了後、[APIをデプロイ] クリックします。

image.png
[Deploy API] 画面 へ遷移し 以下の項目を入力後、[デプロイ] クリックします。

[ステージ] 新しいステージを選択
[ステージ名] 任意の名称、今回はtestを入力

image.png

[ステージ] 画面で URL、HTTP:*****/ステージ名/API名のアドレスが作成されたことが確認できます。
URLをブラウザに張り付けて、DynamoDBに登録したデータが取得できれば、REST APIの作成は完了です。

image.png

URLは 後述するHULFT Square設定 1.コネクション作成 の箇所でも使用します。  

HULFT Square設定

ここからはHULFT SquareからAWSで作成したREST APIへ接続する設定を実施していきます。
image.png

今回使用しているワークスペースはpersonalです。以下の記述ではワークスペースの記載は省略します。

1.コネクション作成

AWSで作成したREST APIへ接続するためにREST接続のコネクションを新規作成していきます。

image.png

[名前] 任意の名前、今回はREST_AWSUSERSを入力して**[次へ]**をクリック

image.png

[URL] にはAmazon API Gateway設定のステージで作成したURLを貼り付けます。

image.png

[接続テスト] の成功を確認後、[完了] をクリックし、コネクション作成は終了です。
image.png

2.スキーマ作成

REST APIのレスポンス用スキーマを新規作成します。

[名前] 任意の名前、今回はDynamoDB_USERSを入力
[JSON定義] 出力構造体のJSON定義を入力します。今回は下記に準備したtestusers.jsonの内容をコピー

image.png

testusers.json
[
    {
        "mail": "root@example.com",
        "id": "001",
        "name": "root"
    }
]

入力内容を確認し、[完了] をクリックすると、スキーマ作成は終了です。

image.png

3.スクリプト作成

デプロイ単位であるプロジェクトを新規作成し、配下に実行用のスクリプトを作成していきます。
以下の項目を入力後、[次へ] クリックします。

[名前] 任意の名前、今回はtest_awsapiを入力
[スクリプトを作成] にチェックを入れる
[スクリプト名] 任意の名前、今回はUSERSGETを入力

image.png
image.png

[デザイナを起動] をクリックし、[HULFT Square Designer] を起動し、スクリプトを実行していきます。

image.png

1.REST接続用アイコンの配置

[ツールパレット] より [ネットワーク>REST>GET実行] アイコンを選択しドラッグ&ドロップしてスクリプトキャンバスへ配置します。

image.png
image.png

以下のように設定します。
image.png

image.png

出力スキーマで指定するJSONファイルはあらかじめ [ストレージ] へ登録してあります。
image.png

2.XMLファイル書き込みアイコンの配置
今回の検証では処理結果を確認するためにREST接続にてJSONで返却されるレスポンスをXMLファイルへ書き込みます。
[ツールパレット] より [ファイル>XML>XMLファイル書き込み] アイコンを選択しドラッグ&ドロップしてスクリプトキャンバスへ配置します。

image.png

image.png

3.マッピングアイコンの配置
GET実行結果とXMLファイルの書き込みを紐づける [マッピング] アイコンを配置します。
[ツールパレット] より [変換>基本>マッピング] アイコンを選択しドラッグ&ドロップしてスクリプトキャンバスへ配置します。

image.png

[マッピング] アイコンと配置済みの2つのアイコンを [プロセスフロー] と [データフロー] を引いて繋げます。

image.png

[マッピング] アイコンを開いて下記のようにマッピング設定を実施します。
image.png

image.png

下記のように [start] から [END] までドラッグ&ドロップでプロセスフローの矢印を繋ぐとスクリプトの完成です。
image.png

検証結果確認

1.スクリプト実行結果確認

作成したUSERSGETスクリプトを実行し他結果、実行に成功したことが確認できます。

image.png

2.XML出力ファイル結果確認

出力先へ設定したXMLファイルにDynamoDBのデータが書き込まれていることが確認できます。
image.png

おわりに

いかがだったでしょうか。
HULFT SquareからAmazon API Gatewayで作成したAWSのマイクロサービス環境の玄関口であるREST APIへ接続し、DynamoDBのレコードを取得することができました。

特に HULFTSquareで専用コネクタが現時点で対応していないAmazon ECS等のサービスと連携するにはAmazon API GatewayでAWSへの各種サービスと連携することが必要です。

当ブログが、Amazon API Gateway経由でのAWSマイクロサービス環境とHULFT Squareとの連携構築の一助にもなれば幸いです。

ここまで読んでいただきありがとうございました。それでは、また!

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?