cloud

AWS ECSとは? ECSの概念を図解で整理

  • POST
AWS ECSとは? ECSの概念を図解で整理 はじめに AWS(Amaon Web Service)には、ECS(Elastic Container Service)というコンテナサービスがあります。 AWS ECSは、起動タイプが2種類あり、複数の要素から構成されているため、初学者の方の場合、各構成要素の役割を理解するのに時間がかかってしまうケースがあります。 この記事では、初学者の方がECSの構成できるようECSの概念を解説します。 AWS ECSとは AWS上で複数のコンテナの実行、停止、管理をすることできるサービス (コンテナオーケストレーションサービス)です。 https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html ECSは、KubenetesというGoogleが設計したOSSのAWS版と考えていただくとイメージしやすいかと思います。 https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/ ECSの種類 ECSはEC2とFargateの2種類の起動タイプが用意されています。 EC2 起動タイプEC2はAWS EC2インスタンス上で起動します。 Fargateより価格は安いですが、ホストOSやDocker Engineなどへのアップデートなどはユーザーが自分で実施する必要があります。 Fargate 起動タイプFargateは、コンテナを実行するホストの管理をAWS側で管理してくれるため、EC2より価格が高額になる反面、 ホストOSのアップデートなどはAWS側で実施され、ユーザー側実施する必要がなくなります。 ECSの構成要素 ECSはタスク、サービス、クラスターという3要素から構成されています。 タスク タスクはタスク定義と呼ばれる設定内容に基づいてECS上でコンテナを起動する役割を担います。 タスク定義は起動タイプ、CPU、メモリ、イメージのURL、ネットワーク設定、環境変数などのコンテナの起動内容を定義したものです。 サービス サービスはECS上で起動するタスクを管理する役割を担います。 具体的にはどのタスクにどのタスク定義を使用するかを定義したり、設定したタスク数より起動したタスク数が少なくなった場合に自動的にタスクを起動させることができます。 クラスター クラスターはサービスや、タスクを実行する基盤で、サービスやタスクをグループ化する役割を担います。 クラスターを開発環境用クラスター、本番環境用クラスターの2種類を作成することで、サービスやタスクも開発環境用と本番環境用で論理的に分けることができます。 まとめ この記事ではECSの構成要素について紹介しました。 ECSはAWS上で複数のコンテナの実行、停止、管理をすることできるコンテナオーケストレーションサービス ECSはEC2とFargateの2種類の起動タイプがある 起動タイプEC2の場合、価格は安いがホストOSなどの管理はユーザーがする必要がある 起動タイプFargateの場合、価格が高額になる反面、ホストOSの管理はAWS側で実施してくれる ECSはタスク、サービス、クラスターという3要素から構成される タスク : タスク定義の内容に基づいてECS上でコンテナを起動する役割 タスク定義 : コンテナの起動内容を定義したもの(起動タイプ、CPU、メモリ、イメージのURL、ネットワーク設定、環境変数など) サービス : ECS上で起動するタスクを管理する(起動させるタスクの数や、使用するタスク定義を定義する) クラスター : サービスや、タスクを実行する基盤で、サービスや、タスクをグループ化する 本サイトへのご意見、お問い合わせなどありましたらこちらからご連絡下さい。 お問合せフォーム a8adscript('body').

AzureのOCRサービス「Azure Form Recognizer」入門

  • POST
AzureのOCRサービス「Azure Form Recognizer」入門 注意 サービス名称に伴い最新版の記事はこちらに記載しました。 https://ohina.work/post/azure_ocr_di/#google_vignette はじめに Azureには、Azure Cognitive ServicesとAI機能をWeb APIして提供するサービスがあります。 本記事では、Azure Cognitive Servicesのうち、OCRサービス「Azure Form Recognizer」の使い方について紹介します。 Azure Cognitive Servicesとは Azure Cognitive Servicesは、視覚、音声、言語、決定、検索の5ジャンルからなるAI機能をWeb APIとして利用できるAzureのサービスです。 https://azure.microsoft.com/ja-jp/services/cognitive-services/#overview Azure Form Recognizerとは 請求書、レシート、名刺などのドキュメントから文字情報を取得するAzure Cognitive ServicesのOCR機能の一つです。 Azure Form RecognizerのAPIを実行すると、リクエスト時で渡されたPDFファイルなどのドキュメントのURLを解析し、 解析したテキスト情報をHTTPレスポンスとして返します。 https://docs.microsoft.com/ja-jp/azure/applied-ai-services/form-recognizer/ もう一つのOCRサービス「Azure Computer Vision」 Azure Cognitive ServicesのOCRサービスには、Computer Visionというものもあります。 Computer Visonは画像やビデオのコンテンツを分析するAIサービスです。 こちらもOCRの機能がありますが、画像内のオブジェクトの検出、画像の説明の生成、顔認識などOCR以外にも、画像に対してより幅広いことができます。 PDFファイルの上の表にあるテキストの取得や、指定したテキストを取得したい場合は、Azure Form Recognizerの方が適しています。 https://stackoverflow.com/questions/71071309/ai-form-recognizer-vs-cognitiveservices-computervision https://azure.microsoft.com/ja-jp/services/cognitive-services/computer-vision/#overview https://www.alirookie.com/post/azure-ocr-with-pdf-files Azure Form Recognizerの機能 Azure Form Recognizerは、機能で、次のサービスで構成されています。 Layout API 事前構築済みモデル カスタムモデル Layout API Azure Form RecognizerのAPIを実行することで、ドキュメントから、テキストや、テーブルの構造、テキスト、バウンディングボックスの座標と共にドキュメントから抽出します。 事前構築済みモデル(Prebuilt Model) 事前構築済みモデルは請求書、レシート、名刺などMicrosoftが事前に用意している特定のドキュメント専用のAIモデルを使用して、フォームを解析する機能です。

Azure Functionsのソケット数をモニタリング

  • POST
はじめに Azure Functionsには、同時に利用できるTCPソケット数に上限数が設定されています。 そのため、同時利用するソケット数を抑えるようにアプリを実装していないと、処理量が増えた際に、 ソケットが枯渇してしまう可能性があります。 この記事では、Functionsが利用しているソケット数をモニタリングする方法を紹介します。 Functionsのソケット数の上限 従量課金プランのFunctionsの場合、送信接続数は、インスタンスあたり600アクティブに設定されています。 上記のように同時接続数に上限があるので、Functionsアプリケーションを開発する際は、 利用後終わったソケットは開き放しにせずに、すぐにクローズするなどベストプラクティスに基づいた実装が必要です。 https://docs.microsoft.com/ja-jp/azure/azure-functions/manage-connections?tabs=csharp https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-best-practices Functionsのソケット数をモニタリング ソケット数は、Azureポータルを使って、Functionsの診断設定や、Azure Monitorのメトリックからモニタリングできます。 取得できる接続数として、以下の2つがあります。 Connections : Functionsごとの接続するの瞬間値 TCP Established : 仮想マシン単位(App Service Plan)の瞬間値 Connections Connections Azure Monitor の Connectionsから取得できる項目です。 Functionsの関数アプリが利用している接続数をモニタリングできます。 TCP Established App Service Planの接続上限を超過する可能性がございます。 https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-monitoring おわりに 本記事ではAzure Functionsでの同時に利用できるTCPソケット数をモニタリングする方法を紹介しました。 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"}});

Azure FunctionsにLog4Jの脆弱性の暫定対策を実施

  • POST
Azure FunctionsにLog4Jの脆弱性の暫定対策を実施 はじめに 2021年12月10日に発覚したJavaのログ出力ライブラリ「Apache Log4j」にて、深刻な脆弱性「CVE-2021-44228」があることが発覚しています。 https://milestone-of-se.nesuke.com/sv-advanced/sv-security/cve-2021-44228-log4shell-logjam/ 上記について、暫定的な回避策として、以下の2点が公開されています。 Log4j バージョン 2.10 およびそれ以降 Log4j を実行する Java 仮想マシンを起動時に「log4j2.formatMsgNoLookups」という JVM フラグオプションを指定する 環境変数「LOG4J_FORMAT_MSG_NO_LOOKUPS」を「true」に設定する Log4j バージョン2.10 より前 JndiLookup クラスをクラスパスから削除する https://msrc-blog.microsoft.com/2021/12/11/microsofts-response-to-cve-2021-44228-apache-log4j2/ 通常の物理サーバまたは、仮想サーバ上でJavaアプリケーションを動作させているケースと違い、 サーバレスのAzure Functionsの場合、どのように設定すればいいのか分からないという方もいるかと思われます。 本記事では、Azure Functions に対して、上記の1.Log4j バージョン 2.10 およびそれ以降への回避策を設定する方法を紹介します。 Azure Functionsのアプリケーション設定に環境変数を追加 Azure Functionsには、アプリケーション設定という、Functions内で利用することができる環境変数を定義することができる項目があります。 以下のAzure CLIコマンドを実行することで、Azure Functionsのアプリケーション設定に変数を追加することができます。 az webapp config appsettings set -g "リソースグループ名" -n "関数アプリ名" --settings JAVA_OPTS='-Dlog4j2.formatMsgNoLookups=true' az webapp config appsettings set -g "リソースグループ名" -n "関数アプリ名" --settings LOG4J_FORMAT_MSG_NO_LOOKUPS='true' おわりに 本記事では、Azure FunctionsにLog4Jの脆弱性の暫定対策を設定する方法を紹介しました、

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"}});

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