Open7
初めての Azure メモ
Google Cloud とマッピングしたくなる、まずは IAM 周り
- リソースグループ:サービスをまとめるグループ群
- グループ:権限付与対象、ユーザーとかグループとかいくつか種類がありそう
- AIPJ-Developers というグループに t.hayashi ユーザーがぶちこまれてる
- what 相当のリソースグループに対して who 相当のユーザーやグループに how 相当のロールを割りあてるイメージ?
- 所有者や共同作成者は組み込みロールで広めの権限がまとまってる感じ
→ 独自のリソースグループを作っておく
続いて、ストレージ周り
- ストレージアカウント:ストレージサービスとは別にどのストレージサービスを使うを宣言するアカウント
- ストレージサービス:Azure Blob, Azure Disks etc
→ リソースグループにストレージアカウントを追加
Blob Storage を触ってみる
ファイルを格納したい
- Blob Storage を利用するにはストレージアカウントでコンテナを作成する必要がある
- ストレージアカウントかコンテナに権限を付与する必要がある
- 今回はストレージアカウントに権限を付与した
- もしかしたらストレージのネットワークアクセスを遮断していたから操作できなかったのかもしれない
- Portal の画面で 403 が出た
→ ストレージアカウントの設定が紐付いているストレージサービスに反映される
-
今回はセキュリティとネットワークの設定によるものだった
-
Portal でもいじれるけど、Storage Explore という専用のアプリもある
→ ADLS Gen2 に対してクエリができたら便利かも、確認する
→ ネットワークとセキュリティ(権限付与)をクリアしてコンテナ(Blob Storage ?)にファイル格納できた
ストレージアカウント
-
Azure ではストレージサービスを利用するためにはストレージアカウントを作成する必要がある
-
ストレージアカウントのタイプによって Blog Storage, Table Storage, Queue Storage, File Share を利用できるか決まる
- 汎用を選択していると、すべて利用可能
-
ストレージアカウントにネットワーク設定やアクセスキー設定が集約されている
Azure Functions を動かす
VS Code の拡張を使うとスムーズに開発できる
- Azure Functions & Azurite という拡張を入れる
- Azure Functions はサインインすることで Azure Functions へのデプロイや実行が可能になる
- Azurite はローカルのエミュレーターを起動できる
- Azure Functions Core Tools を入れるとローカル実行できる
- https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=macos[…]trigger%2Ccontainer-apps&pivots=programming-language-python
- エミュレーター起動後に実際に Functions を動かすのに必要なのがこのツール
- うまく起動できるとローカルホストで作成したスクリプトの挙動確認が可能となる
→ 事前に Azure Functions の大枠は Portal で作成しておく、VS Code のパッケージでプロジェクト作成~テンプレ適用~Functions へのデプロイ~Functions の実行を実施することでできた
コマンドベース
- https://qiita.com/saurus12/items/cb10678c5f39c8917615
- 一つのリポジトリにディレクトリをきって、それぞれを Azure Functions 用のプロジェクトを作成する場合に VS Code の拡張を使うとうまく開発しづらい
- コマンドベースで
func init
を実行して functions のようディレクトリを作成、func new
によって必要な資材を作成 - コマンドベースで
func start
を実行したディレクトリでローカル実行が可能- venv で仮想環境を立ち上げて、pip などでさせるとよい
- コマンドベースで
func azure functionapp publish [関数名]
で指定の Azure Functions にデプロイ可能
Functions の特徴
- Functions なのでエンドポイントは払い出されないと思ったが、払い出せれる
- 作成したコードのルートがそのまま https://hoge/api/[route] に置き換わり、1 つのファイルで複数のエンドポイントパスに紐付く関数を作成できる
Azure Key Vault との連携
- シークレット情報は Azure Key Vault に保存し、Azure Functions に環境変数で連携可能
- https://qiita.com/shunexe/items/0ca65cf7262111bc62a0
- Functions のシステム割り当てのオブジェクト ID を払い出す
- Key Vault にシークレット情報を保存して、その情報に対して払い出したオブジェクト ID とロールを設定することで読み込み可能とする
- ユーザーに対する Key Vault の権限が割り当てられていないと一覧を見ることができないため、共同作成者でも必要な権限付与を見直す
Azure Data Factory を動かす
パイプラインの中に作成した Azure Functions を組み込みたい
- Portal で Azure Data Factory を作成する
- 専用のコンソールにとぶ
- 作成済みの Azure Functions を利用するには「管理」からリンクサービスを作成する
- おそらく Azure Data Factory から各種サービスを呼び出すためのコネクタ的なもの
- リンクサービスで Azure Functions を選択して、必要な情報を入れる
→ リンクサービス作成が完了したら、パイプライン作成画面に戻る
- パイプラインの中に Azure Functions を配置して設定の中で作成したリンクサービスを指定して、Azure Data Factory から Azure Functions を呼び出せるようにする
- リンクサービスの Azure 関数 URL には気を付ける
→ 細かいセキュリティベスプラはわからないが動くところまでいった
ハマったところ
- Azure Functions の URL を設定する際に
?code=
を尻につけるよう必要があった
ネットワーク
- とりあえずは Azure Blob Storage はパブリック開放、Azure Functions も誰でも叩ける、という状態で Azure Data Factory から動かした
望ましい状態
- Azure Functions を VPC と統合?ネットワークを紐づける
- Azure Blob Storage もパブリック開放ではなく、プライベート IP から接続でアクセスできるようにする
- その状態で Azure Data Factory からどうキックできるかはわからない・・要調査
Azure Data Lake Storage Gen2
- Blog Storage と ADLS Gen1 が合体したもの
- レイクハウスのデータレイクの役割を担う
- つまり、オープンストレージフォーマットに対応しており、そのフォーマットで格納されたデータを Synapse や Spark のクエリエンジンを使って処理できる
- その際にデータの読み取り/書き込みが単にデータレイクに格納されているものよりも最適化されている
→ シンプルなパターンなら Blob Storage にデータ格納するだけで Functions で加工するだけでもよい、Synapse や Databricks 使うならストレージとして ADSL Gen2 を利用するのがよさそう
Azure SQL Database
- リソース構造は SQL サーバー → SQL データベース となっている
- ストレージアカウント → [ Table Storage, Queue Storage, Blob Storage ] 的な構造と同じ
- ネットワークやセキュリティなどの設定は SQL サーバーに集約されている
- これもストレージアカウントに集約されているのと同じ
- SQL サーバーは完全パブリック公開はできずに、公開する場合にはファイアウォールの設定が必須となっている
- 接続文字列は SQL データベースに設定されている
- ブラウザから内部を見るには SQL データベースのクエリエディターから可能
- 各自のブラウザから見るには端末が接続されている IP による穴あけ必要