この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
今回は、AWS Step FunctionsステートマシンでCloudWatchメトリクスを発行してみました。
構成
下記のような構成を作成します。
やってみた
Lambda関数の作成
発行するメトリクスの値はLambda関数を使用してランダムな値を生成することにします。
下記のコードでLambda関数randomTemperature
を作成します。0
から30
の間のtemperatureの値を返します。
exports.handler = async () => {
const max = 30;
return {temperature: Math.floor( Math.random() * max )};
};
ステートマシンの作成
Step Functions Workflow Studioでステートマシンを作成します。
Step Functionsのマネジメントコンソールでステートマシンの作成を開始します。
[次へ]をクリックします。
[アクション]からAWS Lambda Invoke
をドラッグして追加します。
[Lambda Invoke]の[設定]で、[APIパラメータ]-[Function name]で先程のLambda関数を指定し、[ペイロード]でNo payload
を指定します。
続いて[action]をPutMetricData
で検索して[CloudWatch System Manager GetParameter]をLambda Invokeの下の位置にドラッグして追加します。
[PutMetricData]の[設定]で、[APIパラメータ]で下記のJSONを指定します。これによりLambda関数が生成したtemperatureの値をメトリクスとして発行できます。[次へ]をクリックします。
{
"MetricData": [
{
"MetricName": "temperature",
"Value.$": "$.temperature"
}
],
"Namespace": "StateMachinePublish"
}
生成されたコードを確認します。Lambda実行のリトライの処理は既定で設定されるようですね。[次へ]をクリックします。
今回生成されたコード(ステートマシン定義)は下記のようになります。
{
"Comment": "A description of my state machine",
"StartAt": "Lambda Invoke",
"States": {
"Lambda Invoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:randomTemperature:$LATEST"
},
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"Next": "PutMetricData"
},
"PutMetricData": {
"Type": "Task",
"End": true,
"Parameters": {
"MetricData": [
{
"MetricName": "temperature",
"Value.$": "$.temperature"
}
],
"Namespace": "StateMachinePublish"
},
"Resource": "arn:aws:states:::aws-sdk:cloudwatch:putMetricData"
}
}
}
[ステートマシンの作成]をクリックして作成を完了します。(PutMetricDataの権限が不足しているとのことなので、後で追加します。)
ステートマシンを作成できました。不足しているパラメータストアへのアクセス権限を付与するために[IAMでロールを編集]をクリックします。
今回はAWS管理ポリシーのCloudWatchFullAccess
をアタッチしました。(実際の利用では必要に応じて権限を絞ってください)
EventBridgeルールの作成
前述のステーマシンを「1分毎(rate(1 minute))」で実行するEventBridgeルールを作成します。
作成方法については以前の下記エントリに詳しく紹介しています。
動作
CloudWatchのコンソールでグラフ化されたメトリクスを確認することができます。1分毎に0
から30
の間の値が発行されていますね。
参考
以上