Posts

Service Bus Queues Triggerのメッセージ処理順がFIFOにならない事象

  • POST
Service Bus Queues Triggerのメッセージ処理順がFIFOにならない事 はじめに Service Bus Queues Triggerを用いたAzure Functionsにおいて、メッセージ処理順がキューに送信された順番にならず、FIFOにならないケースがあります。 本記事では、Service Bus Queues Triggerのメッセージ処理順がFIFOにならない事象と対策について、ご紹介します。 Service Bus Queues Triggerのメッセージ処理順がFIFOにならない原因 Service Bus TriggerのFunctionsはPeek&LockというモードでService Busからのメッセージの受信とロックを行います。 https://docs.microsoft.com/ja-jp/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock Service Busを利用していると際に、Service BusとFunctionsからのネットワークが切断されたりすると、 Message processing errorというエラーログが出力されます。 https://stackoverflow.com/questions/65999984/azure-function-v3-net-core-3-1-servicebustrigger-message-processing-error-act Peek&Lockモードの場合、特定のスレッド/プロセスにて受信対象のメッセージのロック中に Message processing errorが発生すると、次回起動時に当該メッセージがロックされたままになっているために、後続のメッセージを先に受信してしまいます。 Service Busのセッションを用いた対策 上記のケースへの対応として、Service Busにはセッションという機能があります。 https://devblogs.microsoft.com/premier-developer/ordering-messages-in-azure-service-bus/ https://docs.microsoft.com/ja-jp/azure/service-bus-messaging/message-sessions 上記のドキュメントの内容を要約すると、以下のような挙動になるものと思われます。 Service Busのキューを作成する際に、セッションを有効にして作成すると、送信側はメッセージをキューに挿入する際に、セッションIDを付与することが可能になります。 受信側のFunctionsでService Bus Triggerの属性 IsSessionsEnabled を有効にすると、セッションが付与されたメッセージを受信することが可能になります。 https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=csharp#configuration セッションを有効にするとFunctionsはメッセージ受信時に、セッションIDが同じメッセージを全て、排他ロックします。 Message processing error などエラーが発生した場合は、メッセージのロックを解除して、同じメッセージを受信するため、FIFOを維持することができます。 おわりに この記事では、Service Bus Queues Triggerのメッセージ処理順がFIFOにならない事象と対策について、ご紹介しました。 Azureの各サービスは、多数のオプションが用意されているので、要件に応じて、適切なオプションを設定するようにしましょう。 本サイトへのご意見、お問い合わせなどありましたらこちらからご連絡下さい。 お問合せフォーム a8adscript('body').showAd({"req": {"mat":"3HREPM+6UHH82+279M+HUSFL","alt":"商品リンク","id":"3IzcOOW-g7-u2A1CfX"},"goods": {"ejp":"h"+"ttps://ebookjapan.yahoo.co.jp/books/789749/","imu":"h"+"ttps://cache2-ebookjapan.akamaized.net/contents/thumb/m/J6100281917861.jpg?1696410860000"}}); a8adscript('body').showAd({"req": {"mat":"3HREPM+6UHH82+279M+HUSFL","alt":"商品リンク","id":"3IzcOOW-g7-u2A2FzR"},"goods": {"ejp":"h"+"ttps://ebookjapan.yahoo.co.jp/books/721208/","imu":"h"+"ttps://cache2-ebookjapan.akamaized.net/contents/thumb/m/F0100169654961.jpg?1663322311000"}});

Phrase Expressに代わるスニペットツール! Windows版テキスト拡張ツール「aText」入門

  • POST
Phrase Expressに代わるスニペットツール! Windows版テキスト拡張ツール「aText」入門 はじめに aTextは、Tran Ky Nam Softwareが開発した特定のキーを入力することで、予め設定したスニペット(定型文)を挿入したり、設定したスクリプトを起動させることができるテキスト拡張ツールです。 https://www.trankynam.com 2011年Mac OS用に提供されていましたが、2021年現在、Windowsでも利用できるようになっています。 本記事では、Windwos版のaTextのインストール方法と、使い方について紹介します。 インストール方法 Windwos版はMSストアからインストールすることができます。 https://www.microsoft.com/ja-jp/p/atext/9n68hc1srr0k?rtc=1&activetab=pivot:overviewtab インストールは以下の画面遷移に従って、インストールします。 インストール後は、スタートメニューから、すべてのプログラム→ アプリ → aTextの画面遷移することで、アプリを起動することができます。 aTextの使い方 aTextではスニペットをグループ単位で管理することができます。 デフォルトではExamplesグループの配下に、Basic、Arrows、Date/Time Variable、Field、Scriptsというサブグループが用意されており、 各サブグループ配下にスニペットが登録されています。 グループとサブグループには配下のスニペットに対して、共通の設定をすることができます。 グループの作成は以下のように実施します。 サブグループの作成は対象のグループ配下で右クリックを実施し、 New SubGroupを選択します。 スニペットを作成するときは、New Snipettをクリックします。 Abbreviationにスニペットを起動する際の略語を指定します。 以下の例では、hlwと入力することで、Hello World.というテキストを挿入することができます。 Tips デフォルトで登録されているExamplesは、画面上部のHelpメニューからいつでも追加することができます。 そのため、aTextに慣れたらExamplesは、削除しても問題ありません。 スニペットの種類 aTextでは以下の5種類のスニペットを登録することができます。 Plain Text Rich Text Html Script Picture Plain Text Plain Textは事前に登録した平文のテキストを挿入する場合に使用するスニペットです。 Rich Text Rich Textは文字の色や大きさなどフォント情報を含んだ装飾テキストを挿入する場合に使用するスニペットです。 また、テキストだけでなく、画像も挿入することができます。 Html HtmlはHTML形式で指定した装飾テキストを挿入する場合に使用するスニペットです。 Script Scriptは、Windows Batchや、Linux shell、Python、JavaScriptなどスニペットに指定したスクリプト言語を実行する場合に使用するスニペットです。 以下の例は、\rpwと入力した際に、ランダムな文字列を出力するWindwos Batchを実行するスニペットです。 Picture Picureは指定した画像を挿入する場合に使用するスニペットです。 画像自体を挿入するか、画像のファイルパスをテキストとして挿入するかを指定することができます。 組み込みスニペットを追加 aTextにはいくつかのスニペットがデフォルトで用意されています。

Intellij IDEAのVMプラグインでCtrl + VおよびCtrl + Cが機能しない場合の対象

  • POST
Intellij IDEAのVMプラグインでCtrl + VおよびCtrl + Cが機能しない場合の対象 はじめに 本記事では、Intellij IDEAのVMプラグインでCtrl + VおよびCtrl + Cが機能しない場合の対処法について紹介します。 原因 Intellij IDEAのVMプラグインが有効になっていると、 Ctrl + VおよびCtrl + Cを使って、貼り付けおよびコピーができなくなります。 https://pleiades.io/help/idea/using-product-as-the-vim-editor.html これは、VIMプラグインをインストールしたことによってIDEAのショートカット設定でCtrl + VおよびCtrl + CのハンドラーがデフォルトのIDEではなく、VIMに変更されているためです。 IDEの設定画面からEditorでVim Emulationを実行すると、 それぞれのショートカットに割り当てられているハンドラーが確認できます。 上記の画像にあるように、ハンドラーがVIMプラグインに変更されてしまっていることが分かります。 対処方法 対処方法は至ってシンプルで、以下のように別のショートカットを使用します。 コピー : Ctrl + Cの代わりに、Ctrl + Insert 貼り付け : Ctrl + Vの代わりに、Shift + Insert 通常VMを使用する場合は、コピーはy、貼り付けはpですが、 上記のショートカットを使用するとVIMのクリップボードではなく、システムのクリップボードからコピー・アンド・ペーストを行うことができるようになります。 https://qastack.jp/ubuntu/568662/ctrl-v-and-ctrl-c-doesnt-work-in-intellij-idea-14-0-2

Azure DevOpsのパイプラインからAppServiceのデプロイ

  • POST
Azure DevOpsのパイプラインからAppServiceへのデプロイ はじめに 本記事では、マイクロソフトから提供されているサンプルWebアプリケーションを使って,Azure DevOpsでのリポジトリの作成~パイプラインの作成からAppServiceの デプロイを行うまでの一連の操作を記載する。 AppServiceにWebアプリケーションを作成 以下の手順で、Webアプリケーションを作成。 DebOpsで組織を作成 DevOps用のプロジェクトの作成 リポジトリの作成 サービスコネクションを作成 サンプルプログラムを取得。 以下のサイトから、サンプルプログラムを取得してZIPダウンロードする。 先程クローンしたローカルリポジトリに展開する。 https://github.com/MicrosoftDocs/pipelines-java コミットを行い、その後リモートリポジトリにPushする。 $ git add . $ git commit -m "Sample WebAppを追加" $ git push パイプラインYAML作成 以下のパイプラインを作成する。 trigger: - master variables: # Azure Resource Manager connection created during pipeline creation azureSubscription: '作成したサービスコネクション名を指定' # Web app Type webAppType : 'webAppLinux' # Web app name webAppName: 'sample-web-application' # Environment name environmentName: 'sample-enviroment' # Agent VM image name vmImageName: 'ubuntu-latest' stages: - stage: Build displayName: 'Build stage' jobs: - job: Debug displayName: 'Show debug message' steps: - script: | echo "Subscription : $(azureSubscription)" echo "Web App Name : $(webAppName)" echo "Environment Name : $(environmentName)" echo "Vm Image Name : $(vmImageName)" echo "Pipeline Workspace Name : $(Pipeline.

SQL Serverに登録日時と更新日時を自動で設定する方法

  • POST
はじめに 本記事は、SQL Serverにおいて、INSERT時に登録日時を、UPDATE時に更新日時を自動で登録する方法を紹介します。 INSERT時に登録日時を自動登録 対象のテーブルに対して、以下のSQLを実行することで、レコードの登録日時の自動登録が可能になります。 ALTER TABLE [テーブル名] ADD DEFAULT (GETDATE()) FOR [登録日時のカラム名] ADD DEFAULT はテーブルのカラムにデフォルト値を設定することができます。 GETDATE() はデータベースシステムのタイムスタンプを返しており、ADD DEFAULT のデフォルト値に指定することで、レコードの登録日時を自動登録することができます。 UPDATE時に更新日時を自動登録 対象のテーブルに対して、以下のSQLを実行することで、レコードの更新日時の自動登録が可能になります。 CREATE OR ALTER TRIGGER [トリガー名] ON [テーブル名] AFTER UPDATE AS BEGIN UPDATE [テーブル名] SET [更新日時のカラム名] = GETDATE() WHERE [プライマリキー] IN (SELECT [プライマリーキー] FROM inserted) END CREATE TRIGGER でレコードがUPDATEされたときに更新日時を自動登録するトリガーを作成することができます。 SELECT [プライマリーキー] FROM inserted の箇所についてですが、 insertedテーブルには、INSERT ステートメントおよび UPDATE ステートメントの実行で影響を受けた行のコピーが格納されています。 上記のSQLを実行すると、inserted テーブル内に存在するレコードを更新する際に、更新日時を自動登録するトリガーが作成されます。 おわりに 本記事は、SQL Serverにおいて、INSERT時に登録日時を、UPDATE時に更新日時を自動で登録する方法を紹介しました。 本記事が、SQL Serverを利用しているエンジニアの参考になれば、幸いです。 本サイトへのご意見、お問い合わせなどありましたらこちらからご連絡下さい。 お問合せフォーム a8adscript('body').

Azure Administrator対策「Azure オンプレミスのデータの取り込み」

  • POST
Azure Administrator対策「オンプレミスのデータの取り込み」 はじめに AZ-103「Azure Administrator」対策として、Microsoft Learnなどを要約したものを記載。 Azure Import/Export 物理ディスクドライブから、Azure Blob Storage と Azure Filesに大量のデータをインポートすることができるサービス。 Azureデータセンターにデータをコピーした物理ディスクドライブを送付することで、インポートが行われる。 逆にAzure Blob Storageから物理ディスクにデータを転送し、オンプレミスの拠点に送付することでエクスポートを行うことも可能。 Microsoft 提供のディスク ドライブを使用してデータを転送する場合は、Azure Data Box Diskを使用してデータをAzureにインポート。 https://docs.microsoft.com/ja-jp/azure/storage/common/storage-import-export-service#how-does-importexport-work ディスクドライブ ソリッドステートドライブ (SSD) またはハードディスクドライブ (HDD)に対応。 https://docs.microsoft.com/ja-jp/azure/storage/common/storage-import-export-requirements#supported-hardware 構成 以下の2つの機能が用意されている。 Import/Exportサービス Azure Portalからインポートジョブとエクスポートジョブを作成するGUIツール。 WAImportExportツール インポート、エクスポートを支援するコマンドラインツール。 以下の機能を提供する。 ディスクドライブの配送準備 データをドライブにコピーする ドライブ上のデータを暗号化 インポート作成中に使用されるドライブのジャーナルファイルを生成 エクスポートジョブに必要なドライブの数を特定 データセットCSV インポート、エクスポート対象のファイル、ディレクトリの一覧と、インポート、エクスポート設定を記載したCSVファイル。 https://docs.microsoft.com/ja-jp/previous-versions/azure/storage/common/storage-import-export-tool-preparing-hard-drives-import ジョブ Import/Exportサービスを利用にする場合、‘ Azure Portalなどでインポート、エクスポートジョブを作成する必要がある。 各ジョブは、1つのストレージアカウントに関連付けられる。 インポートジョブ Azure Blobsまたは Azure Filesにデータをインポートするためのジョブ。 手順は以下の通り。 インポートするデータ、必要ドライブ数、インポート先のBlobの場所を決定 WAImportExportツールで、データをディスクドライブにコピー

Azure Administrator対策「リソースへの操作まとめ」

  • POST
Azure Administrator対策「リソースへの操作まとめ」 はじめに AZ-103「Azure Administrator」対策として、Microsoft Learnなどを要約したものを記載。 デプロイ デプロイ履歴の表示 Azureポータルから「リソースグループ」⇒「デプロイ」でデプロイ履歴の一覧が表示できる。 https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/deployment-history?tabs=azure-portal デプロイされた日時を表示 リソース履歴に表示されている最終更新日時から、各リソースがデプロイが行われた日時を表示できる。 デプロイに使用したテンプレートの表示 リソース履歴画面から「対象リソース」 ⇒ 「テンプレート」の順に選択すると、デプロイに使用したテンプレートが表示される https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/export-template-portal Cloud-initを利用したデプロイ Linuxには、Cloud-initというVM作成時にのみ、 パッケージのインストールや、任意のスクリプトを実行し、構築作業を自動化してくれるOSSがある。 AzureポータルからVirtual Maschineをデプロイする際に、詳細タブにあるカスタムデータ欄にcloud-init用構成ファイルを記載すると、 VM作成時にパッケージのインストールや、任意のスクリプトを自動実行することが可能。 https://docs.microsoft.com/en-us/azure/virtual-machines/linux/tutorial-automate-vm-deployment Application Gatewayのデプロイ時間 Application Gatewayはアプリケーション層のロードバランサー。 Application Gateway v1 SKU 最大20分。 Application Gateway v2 SKU 基本的には、約6分。 構成によっては、6分以上かかることもある。 VMのネットワークインターフェースのデタッチ ネットワークインターフェイスをデタッチする場合は、 仮想マシンを先に停止しておく必要がある。 – リソースの移動 リソースを新しいリソースグループまたはサブスクリプションに移動しても、 リソースが配置されるリージョンは変わらない。 https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/management/move-resource-group-and-subscription 仮想マシンを別のサブスリクションまたは、リソースグループに移動 VMは別のサブスリクションまたは、別のリソースグループに移動することができる。 VMを移動するためにVMを停止する必要はなく、起動した状態で移行することができる。 移動が完了するとVMには新しいリソースIDが発行される。 https://docs.microsoft.com/en-us/azure/virtual-machines/windows/move-vm AppServiceを別のサブスリクションまたは、リソースグループに移動 Web アプリをサブスクリプション間で移動する場合には、以下の制約が適用される。 移動先リソースグループに既存のApp Serviceリソースが含まれていてはいけない App Service リソースには次のものがある。 Web Apps