みなさんどうもこんにちは堀です!
最近はBreakingDown(ブレイキングダウン)という格闘技のイベントにハマっています。「1分間最強を決める。」をキャッチフレーズに色々なバックグラウンドを持った選手たちが登場しバズってます。興味ある方は見一度見てみて下さい!!!
概要
今回はAWS Step Functions(以下、Step Functions)を初めて触ってみたのでちょっと紹介できればと思います。
Step Functionsはワークフローサービスであり、Lambdaはもちろん、その他様々なAWSのAPIを実行することなどができます。 Microsoftでいうところの Azure Logic Apps に似ています。
今回作成するワークフローは、実行時にパラメータとして渡した文字列がポジティブな言葉なのかネガティブな言葉なのかをLambdaが判別します。Lambdaの中ではAmazon Comprehendを利用しています。Comprehendは、機械学習を使用して、テキストからインサイトや関係性を発見するための自然言語処理 (NLP) サービスです。その後、Lambdaから返された感情に基づいてフローをスイッチして、DynamoDBへ保存します。
作成していくワークフローの全体像がこちら!
AWS Lambdaの作成
まず、Lambdaの作成していきます。
冒頭で説明した通り、パラメータで渡された文字列からComprehendのAPIを利用して感情分析を行い、結果を返却する関数となっています。返却される感情にはポジティブ、中立、ネガティブ、または混合があるようです。また、今回はLambdaを利用していますが、Step FunctionsのアクションにComprehendは用意されていますので、そちらを利用しても構いません。
.NET 6 (C#/PowerShell)
の環境でLambdaの作成し、デプロイまで行います。
コードの説明やデプロイ方法等まで記述すると少し長くなってしまうので、割愛させていただきます🙇
using System.Threading.Tasks;
using Amazon.Comprehend;
using Amazon.Comprehend.Model;
using Amazon.Lambda.Core;
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace HelloWorld
{
public class Function
{
public async Task<object> FunctionHandler(Param param, ILambdaContext context)
{
var text = param.InputText;
var comprehendClient = new AmazonComprehendClient(Amazon.RegionEndpoint.APNortheast1);
var detectSentimentRequest = new DetectSentimentRequest()
{
Text = text,
LanguageCode = "ja",
};
var detectSentimentResponse = await comprehendClient.DetectSentimentAsync(detectSentimentRequest);
context.Logger.LogLine($"Sentiment: {detectSentimentResponse.Sentiment}");
return detectSentimentResponse;
}
}
public class Param
{
public string InputText { get; set; }
}
}
Step Functionsから Lambda を呼び出す
AWSアカウントに[ログイン] → [Step Functions] → [ステートマシン] → [ステートマシンの作成]を選択します。「ワークフローを視覚的に設計」と「標準」を選んで[次へ]を選択します。
下図のような画面に遷移するかと思いますので、Step FunctionsでAWS Lambda「Invoke」アクションを追加します。アクションの追加はドラッグ&ドロップで簡単に追加できます。APIパラメータから先ほど作成したLambdaを選択します。ここまで、できたら一度保存して処理を実行させてみたいと思います。
保存の過程で「ステートマシン設定を指定」の画面に遷移しますが、デフォルト値でそのまま作成して問題ありません。作成ができたら「実行の開始」をクリックしてみましょう。入力パラメータを求められるのでLambdaの実行に必要なパラメータを入力して実行スタート!!!
{
"inputText": "チョコパイ美味しいな"
}
以下のようになったら成功です!
ワード「チョコパイ美味しいな」はポジティブな感情であることが分かります。
長くなってきたので今回はここまでにします。ワークフローといいながらLambdaを呼び出すだけで終わりになってしまった。。。続きは書きます!
いつか必ず!!!(なんかフラグみたい、、、)