たれみみの備忘録

たれみみの備忘録です。仕事と酒がメインになりそう。

東雲堂 にわかせんぺい

一日髭を剃らなかったら即座にやまおとこになるおじさんが買ってきてくれたお土産。

 

二○加煎餅 | にわかせんぺい本舗 東雲堂


f:id:mimitare100per:20220214154913j:image

(写真撮る前にあらかた食ってしまうのが、あたくしのウィークポイント)

(『にわかせん「ぺ」い』なんやね!初めて知った・・・)

 

コレ、前にスライム版があったの覚えてる!

 

堅めのせんべい?せんべいにしては塩気が無いし、なにより堅いから、何て言ったらええんやろう?不思議なお菓子。

懐かしい素朴な味がする。ほのかに甘い。

気分関係無く、安定して食べられる。歯が痛いとき以外は。

 

ウインク(^_-)-☆ している可愛い顔も入ってたよ!

 

紅茶、緑茶、ほうじ茶、ジャスミン茶など、大抵のお茶とは相性いいと思う。

あたくしはハイボールのアテにして食べたりもしたなぁ。

パイプライン手動実行に必要な権限について

個人的に結構 ( ゚д゚)ハッ! とした内容。
最初「そんなことあるん!?」と思ったけど、運用を考えると全然あるなぁと。
アタリはついてたけど、お客さんに説明するのに確証が持てなかったので、中の人に聞いてみた。

一番手っ取り早いのは、「閲覧者」組み込みロールをベースに「Microsoft.DataFactory/factories/pipelines/createrun/action」を許可すること。
コレだと、該当するユーザーは Data Factory UI(作成と監視)における全項目の閲覧とパイプラインのみ実行(今すぐトリガー)が実行可能。
もっと絞った権限のつけ方は後述。


以下、質問と回答。


<質問内容>

特定の一般ユーザーに ETL ジョブ(パイプライン)「のみ」を実行させたい場合、特定の一般ユーザーのデータ ファクトリ リソースにどのような権限を持ったカスタムロールを当てれば良いでしょうか。

現状では、Data Factory UI を利用することを想定して、以下のようなカスタムロールを想定しておりますが、認識は合っておりますでしょうか。
~想定~
「閲覧者」組み込みロール +「Microsoft.DataFactory/factories/pipelines/createrun/action」を許可。
【参考:Microsoft.DataFactory

<回答>

以下の認識で OK。
この方法だと、該当するユーザーは Data Factory UI(作成と監視)における全項目の閲覧とパイプラインのみ実行(今すぐトリガー)が実行可能。

~想定~
「閲覧者」組み込みロール +「Microsoft.DataFactory/factories/pipelines/createrun/action」を許可。


「今すぐトリガー」を実行する場合、最低限以下の権限が必要となる。

  • Microsoft.DataFactory/factories/read
  • Microsoft.DataFactory/factories/pipelines/read
  • Microsoft.DataFactory/factories/datasets/read
  • Microsoft.DataFactory/factories/linkedServices/read
  • Microsoft.DataFactory/factories/pipelines/createrun/action

上記 5 つの権限を付与した場合、該当するユーザーが Data Factory UI(作成と監視)において閲覧できるのは「パイプライン」「データセット」「リンクされたサービス」となる。
パイプラインは手動実行できるが、実行結果の確認はできない。
該当ユーザーが Data Factory UI(作成と監視)で「モニター」の「パイプライン実行」より、自分が手動実行したパイプラインの実行結果を確認したい場合、上記 5 つの権限にプラスして「Microsoft.DataFactory/factories/querypipelineruns/read」を追加する。

ただし、「Microsoft.DataFactory/factories/querypipelineruns/read」だけだと、パイプラインのアクティビティの実行結果を確認することはできない(アクティビティの一覧や、アクティビティ詳細確認のメガネマークが出ない)。
アクティビティの実行結果について確認するための権限が必要な場合は、「Microsoft.DataFactory/factories/pipelineruns/queryactivityruns/read」も追加が必要となる。

~まとめるとこう~
以下で『「閲覧者」組み込みロール +「Microsoft.DataFactory/factories/pipelines/createrun/action」を許可』と同じような権限になる。
※「同じような」って書いたのは、「閲覧者」組み込みロールだから、他のリソースも見れちゃうから。

  • Microsoft.DataFactory/factories/read
  • Microsoft.DataFactory/factories/pipelines/read
  • Microsoft.DataFactory/factories/datasets/read
  • Microsoft.DataFactory/factories/linkedServices/read
  • Microsoft.DataFactory/factories/pipelines/createrun/action
  • Microsoft.DataFactory/factories/querypipelineruns/read
  • Microsoft.DataFactory/factories/pipelineruns/queryactivityruns/read




コレはスッキリした!!
結構アタリつけてたからなー。伊達に Azure インフラかじってないってことよ!
権限問題はだいぶ悩まされたからね。。。
もっと細かい権限のつけ方まで教えてくれたのは有難かったなぁ。

夢を叶えた日

今日は久々に食料品以外のお買い物デー。

ユニクロで気になってたカーディガンを買って、無印で基礎化粧品を買った。

 

そして、子供の頃からの夢を叶える時が来た。

 

サーティワンアイスクリームのアイスケーキを1人で食べること。

 

ほんまは長い冬休み中に実現しようと思ってたんやけど、そこまで行く用事が無かったんよね ;

でも今日は荷物も少なかったし、サーティワンも空いてた時間帯だったので、いざ購入。

 

アイスケーキコーナーを見てたら、店員のお姉さんが早速来てくれた。

いろんな味が食べたい&あらかじめ切れてるのがよかったんよね。

ピカチュウとか可愛いのあったんやけど、顔を切るのにめちゃくちゃ抵抗あるんよね。。。切った瞬間『ビ”ガ”チ”ュ”ヴ”!!!』とか言われそうで。

甥とか姪に買うとかだったらええんやけど、食うのはあたくしだけやからな。

 

『この「パレット6(ろく)ください」』

お姉さん「パレット6(シックス)ですね?在庫見てきますので、少々お待ちください〜」

 

あぁ〜あたくし、なんてBBA…

こんなオシャンティーなアイスクリーム屋なのに、6(ろく)なわけねーじゃん。

何の疑いもなく6(ろく)って言ってもーたわ。

 

無事、在庫があったのでそのまま購入しようとしたんやけど…思わぬ試練が。

 

お姉さん「お誕生日ですか?お誕生日でしたらハッピーバースデーのチョコプレートがございます。他にも文字が書けるプレートがありまして、好きなメッセージを入れることができます!」

 

えっ…独身アラフォー女が、なんも無いときに独りでアイスケーキ食ったらアカンのん…!?

 

『いえ…誕生日とかお祝いごととかでは無く、仲間うちでちょっと食べようってもんなので…すみません…』

お姉さん「あっ(察し)、では、後で描けるように、無地のプレートとチョコペンをお入れしておきますね!」

『あっ、ありがとうございます〜』

お姉さん「では、ろうそくも不要ですかね…?」

『あっ、はい。結構です〜』

お姉さん「メッセージカードは…」

『あっ、そちらも結構です〜』

お姉さん「かしこまりました。それでは準備して参りますので、少々お待ちください!」

 

アラフォー独女がアイスケーキ買うのはこんなハードル高いんや……

 

ちょっと悲しみながら家に帰り、早速アイスケーキを食す。

…美味い!けど、甘い!

 

アイスケーキ、こんな甘かったっけ?

子供の頃は1ホールでも余裕って感じだったのに。

確かに美味しいんやけど、2個が限界。

 

しかも、結構お腹いっぱいになった。

アイスなんて甘くて美味しい空気のようなもんやん?

スポンジのせいかなぁ?

 

結局、晩ごはんを豆餅のみにして調整(したつもり)。

残りのアイスケーキは、明日以降味わって食べよう。

パイプライン内のトランザクションについて

コレ、前から気になってたこと。
案件でハマりそうだったので、中の人に聞いてみた。

結論は以下。


以下、質問と回答。
※いろいろ前提事項を書いてたけど、ここでは端折ってる。


<質問内容>

コピーアクティビティを使ってデータの洗い替えを実施しようと考えています。
(オンプレの SQL Server → SQLDB )
洗い替えのデータ削除部分はコピーアクティビティのシンクにある「事前コピースクリプト」に DELETE 処理を記載して実現しようとしており、データ追加部分はコピーアクティビティのソースにある「クエリ」で実現しようとしています。

上記の条件で ETL ジョブ全体(パイプライン全体)でトランザクション管理を実施したい場合は、どのようにすれば良いのでしょうか。
Mapping Data Flow では「Transaction Commit(トランザクション コミット)」を設定できる箇所があるのは認識しているのですが、コピーアクティビティではトランザクション管理はできない、という認識でよろしいでしょうか。

<回答>

現在の Azure Data Factory のコピーアクティビティにおいて、トランザクションの制御はできない。
Mapping Data Flow では、一つの操作(insert/delete/upsert/update)に対してトランザクション制御は可能だが、複数の操作を一つのトランザクションとして制御することはできない。
例えば、データ削除とデータ挿入のデータフローを構成する場合、データ削除後、データコピーが失敗した際にデータ削除後の状態に戻るが、データ削除前の状態に戻すことはできない。

その代替案として、ストアドプロシージャアクティビティの利用を提案する。
ストアドプロシージャアクティビティを使用して、SQLDB のストアドプロシージャを呼び出すことができる。
SQLDB のストアドプロシージャにてトランザクション制御を定義することが可能であるため、Azure Data Factory ストアドプロシージャアクティビティから SQLDB のストアドプロシージャを呼び出すことで、要望の動作が実現できる。

~ストアドプロシージャの処理仕様~
1. SQL Server から SQLDB のバックアップ用テーブル A に、対象となるデータをコピー。
2. SQLDB のストアドプロシージャを呼び出すことで、SQLDB 側の更新対象となるテーブル B に対してデータの削除と挿入を行う。


SQLDB のストアドプロシージャにて、以下の処理を行う。
* トランザクションを開始。
* SQLDB のテーブル B に対して指定した期間のデータを削除。
* テーブル A からテーブル B にデータコピーを行う。
* コピーが成功した場合、トランザクションをコミット。
* コピーが失敗した場合、トランザクションロールバック


SQLDB 側のトランザクションに関する情報は以下を参照のこと。
【参考:トランザクション (Transact-SQL)



うん、想定した答えだったな。
できないならできないって知りたいもんね。
今回は「コケたらもう一回やり直せばええやん」って考えで押し切ったわ。

ベビー母恵夢 くるみショコラ

前にグランスタで、チョコスチームケーキメープルバタークッキーを買って送った際のお礼が妹夫婦からやってきた!!

母恵夢祭りや~!!

 

ベビー母恵夢「くるみショコラ」 6個入袋 | 商品一覧 | 株式会社母恵夢本舗


f:id:mimitare100per:20220214154846j:image

(当然の如くラス 1)

(HP によってはあるところとないところがあるのもレア感増してる)

 

あたくしが今まで見たことが無い母恵夢

妹の夫(あたくしから見ると義理の弟になるんかね?)曰く、「空港にしか無かったから買ってきた」とのこと。とりあえず、アンタ最高。また何か買うてきちゃる。

 

こちらも母恵夢の優しさはそのままに、ショコラ(ココア?)の風味とくるみの食感が美味な一品でした。

 

「『ベビー母恵夢 冬のショコラ』と何が違うん?」と思うかもしれんけど・・・

食べ比べてみたけど、正直、くるみが入っとる以外で違いが分からんかった;

ただ一つ言えるのは、どっちも美味いということ!

強いて言うなら、あたくしくるみ好きなので、こっちの方が手が伸びるかなぁと。

 

コレも『午後の紅茶 おいしい無糖』or ジャスミン茶と一緒にいただきました!

ベビー母恵夢 冬のショコラ

前にグランスタで、チョコスチームケーキメープルバタークッキーを買って送った際のお礼が妹夫婦からやってきた!!

母恵夢祭りや~!!

 

ベビー母恵夢冬のショコラ袋6個入: ベビー母恵夢冬のショコラ


f:id:mimitare100per:20220214154011j:image

(もちろんラス 1)

 

母恵夢の優しいお味はそのままに、ショコラ感というかココア感っぽい風味。

甘いんだけどほのかな甘さ。

 

こんな洒落た母恵夢、あたくしが子供の頃は無かったでぇ。

 

今回はいつもの午後の紅茶おいしい無糖か、ジャスミン茶と一緒にいただきました!

パイプライン実行時のサービスプリンシパルエラーについて

パイプライン実行時にサービスプリンシパル絡みのエラーが出る場合の対処法。
開発中にこのエラーが 2 回も出てきてしまい、お客さんへ説明がつかないので、中の人に聞いてみた。

コレはちょっと恥ずかしかったな。。。
Azure AD の設定&Azure Data Factory でリンクされたサービスまではお客さん側だったから、絶対ウチの責では無いと思ってた。まぁ、結局は MS の責なんだが。
夜間定期実行分にも、手動実行分にも、再実行処理を入れてなかったからな。。。
クラウドの原則を忘れていたよ。。。


以下、詳細。


<エラー内容>

エラーコード:2200
詳細:UserErrorFaildToGetAccessTokenByServicePrincipal …

<現象>

  • 上記エラーが不定期に出る。エラーなのでパイプライン処理は実行されていない。
  • 上記エラーが出た後、何も修正せずに再度パイプラインを実行すると、問題無くパイプラインが成功する。
  • 再現性が不明。


<対処法>

Azure Data Factory のアクティビティに再実行処理を入れる。
再実行処理を入れると、通常のサービスプリンシパルの認証処理が最初から実施されるため、上記エラーになった際でももう一度最初から認証処理を実施できる。

項目 説明
再試行(Retry) リトライ回数。
再試行間隔(Retry interval) 再試行の間隔(秒)。エラー発生後、再試行間隔で設定した秒後に再試行する。


<原因>

本件のサービスプリンシパルエラーは、『サービスプリンシパルの認証を利用、かつ、最新でないセルフホステッド IR を使ったとき』に生じることが確認できている不具合とのこと。
認証処理時のライブラリが、初回認証時とリトライ認証時で異なることに起因している。

一時的なクラウドの障害等に対応するため、Azure Data Factory はサービスプリンシパルの認証が失敗した際に、内部でサービスプリンシパルの認証リトライ処理を実施している。
セルフホステッド IR の認証リトライ時に、1 度目の認証処理時に使用したライブラリとは異なる認証ライブラリを使用しているため、上記のエラーとなる。

認証ライブラリを統一するという話もあったようだが、結果的に「クラウドで生じうる一時的なエラーの 1 つ」と判断され、ライブラリ統一は見送った模様。
理由:リトライ処理さえ組み入れてくれたら両方とも使えるから。今のアーキテクチャを変更するメリットが無いからかも。
【参考:一時的な障害の処理

認証 ライブラリ
初回認証 Microsoft Authentication Library(MSAL)
リトライ認証 Active Directory Authentication Library(ADAL)


※MSAL の方が新しい。ADAL を使っている場合、MSAL に移行しないとやばそう。ADF 内では今後どうなるんだろう?

ADAL → MSAL に移行しないとヤバいよという注意
ADAL → MSAL への移行案内


<特記事項>

  • このエラーは Azure AD に対して API を使用した認証を実施した際、数%以下の確率で起こる。
    →ということは、あたくし、SSR を 2 日連続で引いたってことになるね!

  • Azure Data Factory 内部のリトライ処理は、1 度目の認証処理の失敗直後に実施される。認証処理は Azure Data Factory で扱うデータ量とは相関が無いため、処理時間の長さによる影響は無い。

  • サービスプリンシパル認証利用時に上記エラーが起こる可能性があるということは、マネージド ID 認証でも同様の可能性がある。
    →マネージド ID 認証も内部ではサービスプリンシパル認証を使っているため。
    SQL 認証なら上記エラーは出ないかも・・・?(未検証)セキュリティの観点でリスクはあるけど。

  • Azure Data Factory の機能として、パイプラインをまとめて再実行する機能は無い。パイプラインを構成するアクティビティごとに再実行を設定すること。
    例)パイプラインにアクティビティ 1、アクティビティ 2、アクティビティ 3 があり、アクティビティ 2 でコケた場合、
      アクティビティ 2 の再実行が実施される。
      アクティビティ 1 は完了扱いとなる。




これはなかなか勉強になったな。
文面だけじゃなく、Teams でも直接打合せして説明してくれたから、とても分かりやすかったし印象深いわ。