はじめに
こんにちは。すぎもんです。😀
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マイクロサービス環境構築のパートを必要に応じて分割してご参照頂ければ幸いです。
検証手順
AWSマイクロサービス環境構築
1.Amazon DynamoDB構築
まずAmazon DynamoDB(以下、DynamoDB)で検証用データを格納するテーブルを作成していきます。
AWSマネジメントコンソールより、[DynamoDB] 画面へ遷移し、「テーブルの作成] をクリックします。
今回は「users」というユーザ情報を管理するテーブルを作成します。
[テーブル名] に任意のテーブル名、今回はusers
と入力し [パーティションキー] にプライマリーキーとなる項目、今回はユーザIDを意味するid
を入力します。
[デフォルトテーブル設定] は今回変更せず、画面下部へスクロールしテーブルの作成をクリックします。
10秒ほどでテーブルが作成されます。[テーブル] 画面でテーブル名users
をクリックします。
テーブルに検証用のデータを格納します。[項目を作成] をクリックします。
属性名 [id-パーティションキー] に任意の値、今回は001
を入力し、項目の属性を追加するため [新しい属性 の追加] をクリックします。
必要なデータの属性と値を入力します。今回は下記のように入力後、右下の [項目を作成] をクリックします。
属性名 | タイプ | 値 | 説明 |
---|---|---|---|
name | 文字列型 | root | ユーザ名 |
文字列型 | root@example.com | メールアドレス |
テーブルに検証用のデータを追加します。[項目を作成] をクリックします。
属性名 [id-パーティションキー] に任意の値、今回は002
を入力し、項目の属性を追加するため [新しい属性 の追加] をクリックし、今回は下記のように入力後、右下の [項目を作成] をクリックします。
属性名 | タイプ | 値 | 説明 |
---|---|---|---|
id- パーティションキー | 文字列型 | 002 | ユーザID |
name | 文字列型 | admin | ユーザ名 |
文字列型 | admin@example.com | メールアドレス |
[項目を作成] をクリック後、[テーブルアイテムの探索] 画面で入力した項目が表示されればデータの準備は完了です。
2.IAMロール作成
次に作成したAWS Lambda関数にDynamoDBへアクセスする権限を付与するためIAMロールを新規作成していきます。
AWSマネジメントコンソールより、[IAM] 画面 へ遷移し 画面左の [ロール] をクリック後 [ロールを作成] クリックします。
信頼されたエンティティタイプは [AWSのサービス] 、ユースケースは [Lambda] を選択し、[次へ] をクリックします。
ロールに追加する許可ポリシーを選択します。
以下の今回は以下の2つの許可ポリシーを選択し、[次へ] をクリックします。
[AWSLambdaBasicExecutionRole]
Lambda関数を実行するための許可ポリシー、CloudWatchへログ出力するためにも必要です。
[AmazonDynamoDBFullAccess]
DynamoDBへフルアクセスする許可ポリシー
[ロール名] に任意の値、今回はusers-role
を入力し、[ロールを作成] をクリックします。
数秒でロールが作成されます。今回作成したusers-role
が [ロール] 画面より確認できればIAMロール作成は完了です。
3.AWS Lambda関数作成
DynamoDBからレコードを取得するLambda関数を作成します。
AWSマネジメントコンソールより、[Lambda] 画面 へ遷移し [関数の作成] クリックします。
[関数の作成] 画面 へ遷移し 以下の項目を入力後、[関数の作成] クリックします。
[一から作成] を選択
[関数名] 任意の関数名 今回はusers-get
と入力
[ランタイム] 実行プログラムの言語とバージョンを選択 今回はPython 3.9
を選択
[実行ロール] 既存 のロールを使用する
を 選択
[既存のロール] 今回作成したusers-role
を選択
数秒でLambda関数が作成されます。[テスト] タブより [新しいイベントを作成] を選択しイベント名、今回はtestusers
と入力後 [テスト] をクリックします。
画面上で成功を確認します。
次に関数で実行する内容のコードを [コード] 画面で下記のように貼り付けます。
users
テーブルから全ての情報を取得するという処理内容です。
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)
4.Amazon API Gateway設定
Amazon API Gateway(以下、API Gateway)でAWSのマイクロサービス環境の玄関口であるREST APIを作成していきます。
AWSマネジメントコンソールより、[API Gateway] 画面へ遷移し、「API作成] をクリックします。
今回はWebブラウザから認証なしでアクセスできるREST APIを作成していきます。
作成した後に認証機構を組み込むには、APIキーを付与することで実現可能です。
実装方法は下記公式リファレンスをご参照下さい。
API Gateway コンソールを使用して API キーをセットアップする
[API タイプを選択] 画面で [REST API] の [構築] をクリックします。
[REST APIを作成] 画面 へ遷移し 以下の項目を入力後、[APIを作成] クリックします。
[新しいAPI] を選択
[API名] 任意の関数名 今回はusers-api
と入力
[APIエンドポイントタイプ] 今回はリージョンが適用範囲となるリージョン
を選択
次にAPIに紐づくリソースを作成します。[リソースを作成] をクリックします。
引き続いてリソースの操作を実施するHTTPメソッドを作成していきます。[メソッドを作成] をクリックします。
[メソッドの詳細] 画面 へ遷移し 以下の項目を入力後、[メソッドを作成] クリックします。
[メソッドタイプ] 今回はレコードの取得が目的のため、出力を結果を返すメソッドタイプGET
を選択
[統合タイプ] Lambda関数を実行するため、Lambda関数
を選択
[Lambda関数] 作成したusers-get
を選択して入力
メソッド作成完了後、[APIをデプロイ] クリックします。
[Deploy API] 画面 へ遷移し 以下の項目を入力後、[デプロイ] クリックします。
[ステージ] 新しいステージ
を選択
[ステージ名] 任意の名称、今回はtest
を入力
[ステージ] 画面で URL、HTTP:*****/ステージ名/API名
のアドレスが作成されたことが確認できます。
URLをブラウザに張り付けて、DynamoDBに登録したデータが取得できれば、REST APIの作成は完了です。
URLは 後述するHULFT Square設定 1.コネクション作成 の箇所でも使用します。
HULFT Square設定
ここからはHULFT SquareからAWSで作成したREST APIへ接続する設定を実施していきます。
今回使用しているワークスペースはpersonal
です。以下の記述ではワークスペースの記載は省略します。
1.コネクション作成
AWSで作成したREST APIへ接続するためにREST接続のコネクションを新規作成していきます。
[名前] 任意の名前、今回はREST_AWSUSERS
を入力して**[次へ]**をクリック
[URL] にはAmazon API Gateway設定のステージで作成したURLを貼り付けます。
[接続テスト] の成功を確認後、[完了] をクリックし、コネクション作成は終了です。
2.スキーマ作成
REST APIのレスポンス用スキーマを新規作成します。
[名前] 任意の名前、今回はDynamoDB_USERS
を入力
[JSON定義] 出力構造体のJSON定義を入力します。今回は下記に準備したtestusers.json
の内容をコピー
[
{
"mail": "root@example.com",
"id": "001",
"name": "root"
}
]
入力内容を確認し、[完了] をクリックすると、スキーマ作成は終了です。
3.スクリプト作成
デプロイ単位であるプロジェクトを新規作成し、配下に実行用のスクリプトを作成していきます。
以下の項目を入力後、[次へ] クリックします。
[名前] 任意の名前、今回はtest_awsapi
を入力
[スクリプトを作成] にチェックを入れる
[スクリプト名] 任意の名前、今回はUSERSGET
を入力
[デザイナを起動] をクリックし、[HULFT Square Designer] を起動し、スクリプトを実行していきます。
1.REST接続用アイコンの配置
[ツールパレット] より [ネットワーク>REST>GET実行] アイコンを選択しドラッグ&ドロップしてスクリプトキャンバスへ配置します。
2.XMLファイル書き込みアイコンの配置
今回の検証では処理結果を確認するためにREST接続にてJSONで返却されるレスポンスをXMLファイルへ書き込みます。
[ツールパレット] より [ファイル>XML>XMLファイル書き込み] アイコンを選択しドラッグ&ドロップしてスクリプトキャンバスへ配置します。
3.マッピングアイコンの配置
GET実行結果とXMLファイルの書き込みを紐づける [マッピング] アイコンを配置します。
[ツールパレット] より [変換>基本>マッピング] アイコンを選択しドラッグ&ドロップしてスクリプトキャンバスへ配置します。
[マッピング] アイコンと配置済みの2つのアイコンを [プロセスフロー] と [データフロー] を引いて繋げます。
[マッピング] アイコンを開いて下記のようにマッピング設定を実施します。
下記のように [start] から [END] までドラッグ&ドロップでプロセスフローの矢印を繋ぐとスクリプトの完成です。
検証結果確認
1.スクリプト実行結果確認
作成したUSERSGET
スクリプトを実行し他結果、実行に成功したことが確認できます。
2.XML出力ファイル結果確認
出力先へ設定したXMLファイルにDynamoDBのデータが書き込まれていることが確認できます。
おわりに
いかがだったでしょうか。
HULFT SquareからAmazon API Gatewayで作成したAWSのマイクロサービス環境の玄関口であるREST APIへ接続し、DynamoDBのレコードを取得することができました。
特に HULFTSquareで専用コネクタが現時点で対応していないAmazon ECS等のサービスと連携するにはAmazon API GatewayでAWSへの各種サービスと連携することが必要です。
当ブログが、Amazon API Gateway経由でのAWSマイクロサービス環境とHULFT Squareとの連携構築の一助にもなれば幸いです。
ここまで読んでいただきありがとうございました。それでは、また!