最近、家族と過ごす時間が増えて、生活の質が向上したのを感じます。世の中大変な状況ですが、個人的には悪いことばかりではないなと、前向きに捉えるようにしています。
さて、今回はAWS SAM(Step Functions + Lambda)を利用して複数のウェブサイトのレスポンスチェックするコードを書いたので、その紹介をしたいと思います。使用するコードはGitHubにアップしてありますのでそちらを利用します。
GitHub
https://github.com/yoshiokaCB/sf-map-sample
https://github.com/yoshiokaCB/sf-map-sample.git
cd sf-map-sample
今回はAWS SAM(CloudFormation)を実行して設定を行います。CloudFormationでStackを作成する際に、S3にファイルをアップロードして置くと便利ですので、アップロード用のバケットを作成します。
aws s3 mb s3://[bucket_name]
packageコマンドで必要ファイルのアップロードとtemplateファイルのコンバートをしたのちにデプロイを開始します。
sam package -t template.yaml --output-template-file packaged.yaml --s3-bucket [bucket_name] sam deploy --t packaged.yaml --stack-name response-check --capabilities CAPABILITY_IAM
下記のように表示されたら、デプロイ完了です。
Successfully created/updated stack - response-check
あとはAWSのコーンソールから Step Functions のステートマシンを選択肢して実行します。
サービスを選択します。
ステートマシンを選択します。
実行の開始をします。
実行時に渡すパラメーター(json)は以下のような内容になります。
{ "siteList": [ {"url": "https://hosting.redmine.jp/"}, {"url": "https://redmine.jp/"} ] }
実行中です。実行が終了するまでじっと待ちます。
全体の実行結果です。出力を変更したい場合は、functions/checke_response/app.rb のコードを変更してください。
個別に条件を指定して実行結果を確認することも可能です。
イベントごとに実行履歴を時系列に確認することもできます。
今回の処理の要点をかいつまんで補足説明したいと思います。
template.yamlについて
CheckResponseStateMachine: Type: AWS::Serverless::StateMachine Properties: DefinitionUri: statemachine/check_response.json DefinitionSubstitutions: CheckResponseFunctionArn: !GetAtt CheckResponseFunction.Arn Policies: - LambdaInvokePolicy: FunctionName: !Ref CheckResponseFunction
AWS SAM がStep Functionsに対応したおかげでめちゃくちゃ簡単に書けるようになりました。以前は実行に使用するpolicyは別に定義する必要があったのでそれだけでもかなり楽になります。また、DefinitionUri
のパラメータで、ステートマシンの設定値(json)を外部ファイルに分割できるようになったのも大きいです。
check_response.jsonについて
{ "Comment": "A state machine that check website response.", "StartAt": "Check Response", "States": { "Check Response": { "Type": "Map", "ItemsPath": "$.siteList", "MaxConcurrency": 1, "Iterator": { "StartAt": "IteratorState", "States": { "IteratorState": { "Type": "Task", "Resource": "${CheckResponseFunctionArn}", "End": true } } }, "End": true } } }
TypeにMapが追加されて、受け取った値を元に動的に並列処理が実行できるようになりました!これまでのparallelでも並列処理ができましたが、その場合、全ての処理を書いてやる必要があったので、この機能によってかなり処理の幅が広がったように思います。
今回はレスポンスのチェックをしただけですが、レスポンスの値が期待する値でなかった場合は通知処理が必要です。AWS SNS などを組み合わせて通知すると良いと思います。
以上、簡単でしたが、AWS SAM(Step Functions + Lambda)を利用して複数のウェブサイトのレスポンスチェックする処理について紹介させていただきました。サーバレスで色々なバッチ処理が簡単に実装できるので、運用を気にせず開発に集中できるのはすごく幸せになれそうです。
ご興味のある方は是非お試しください。
![]() |
AWSを利用したハンズオン講座で講師を務めました。当日は参加者全員が予定していた内容を全て体験することができ、大好評でした! |
![]() |
シャオミ(Xiaomi)のスマートウォッチを使ってみた感想。 |
![]() |
Redmineのガントチャートを改善するパッチを開発しました。さらなる改善には大掛かりな改修が必要かも。 |
![]() |
ファーエンドテクノロジーにおける新型コロナウイルスの影響や対応(テレワークなど)の記録。 |
![]() |
Gitでバージョン管理されたスクリプトをフックスクリプトとして実行するために core.hooksPath の設定を利用しました。 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |