8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Synapse Analytics workspace成果物の Azure DevOps によるCI/CD【基本編(yamlパイプライン)】

Posted at

Azure Synapse Analytics 成果物の Azure DevOps によるCI/CD【基本編(yamlパイプライン)】

はじめに

Synapse Analytics (workspace)の開発環境から本番環境への反映方法についてまとめます。

いくつかオプションがあるのですが、今回は 基本編 です

2022/05時点の情報です。

参考

Azure Synapse Analytics ワークスペースの継続的インテグレーションとデリバリー

How to use CI/CD integration to automate the deploy of a Synapse Workspace to multiple environments

Synapse workspace deployment

CI CD in Azure Synapse Analytics Part 5 - Deploying Azure Synapse Workspace from ARM

Azure/Synapse-workspace-deployment

Azure Synapse Studio CICD using YAML pipelines

santiagxf/synapse-cicd

概念

Data Factory / Synapse workspaceのgit構成時のイメージ

Data Factory と Synapse workspaceをgit構成すると、このようなイメージになります。

2022-06-01-08-19-56.png

DevOps組織/プロジェクト/リポジトリ : ソースコードを管理するリポジトリ

コラボレーションブランチ : 各作業ブランチを統合して、Data Factory / Synapse workspace のリソースに反映するブランチ。 main ブランチやdevelopment ブランチが該当することになります。

発行ブランチ : Data Factory / Synapse workspace のリソースに反映する際にテンプレートを配置するブランチ。発行ボタンを押すと更新されます。

Data Factory と Synapse workspaceの違い

Data Factoryの考え方

Data Factoryで作成した成果物(パイプラインなど)はすべてAzure Resource Manager にてサブリソースとして管理され、ARM テンプレートファイルで操作可能な状態になっています。

したがって、adf_publishブランチのテンプレートを手動ARMテンプレートファイルによるデプロイでの一括反映に利用ができます。(自動の場合は、ARM テンプレートデプロイタスクが利用可能)

2022-06-01-08-30-10.png

Synapse workspace での違い

Synapse workspaceでは、作成した成果物は基本的に ARMで操作できない、リソース固有のデータ として扱われています。

このため、workspace_publish 内に保管されたテンプレートはSynapse workspaceのdevエンドポイントを通してしか利用ができず、Data Factory のようにARMテンプレートファイルによる手動での一括反映は不可となっています。

2022-06-01-08-31-23.png

自動反映構成方法

Github上にハンズオンのリポジトリを作成したのでこれを利用していきます。一旦リソースのデプロイ後、git構成まで進めておきます。※DevOpsが利用しているサービスプリンシパルを Synapse 管理者 にするのを忘れないようにしてください。

DevOpsパイプラインの構成

1.開発環境側をgit構成すると以下のような状態となります。

2022-06-01-08-45-27.png

2.発行ボタンを押すと、workspace_publishブランチが作成され、テンプレートファイル(ARM用ではない)と対応したパラメータファイルが作成されます。

2022-06-01-08-48-13.png

3.CICDパイプラインをセットアップします。

https://github.com/ryoma-nagata/SynapseCICD-HOL/blob/master/.ado/synapse/azure-pipelines.yml ファイルをuploadし、変数を編集します。

変数では、開発環境のSynapse Workspaceと ステージング環境のSynapse Workspaceの名称とリソースグループ名などを入れます。

2022-06-01-09-00-37.png

4.workspace_publishにはテンプレートのパラメータファイルがありますので、これをrenameして内容を編集します。※次に発行した際に再度元のファイルが作成されます。

2022-06-01-09-08-18.png

名称は TemplateParametersForWorkspace_stg.json としましょう。パイプラインから参照させる予定です。

5.パイプラインを作成し、Run します。※詳細手順はGithubリポジトリを参照

woskspace_publishブランチ上のパイプラインを選択するので注意です。

2022-06-01-09-01-24.png

2022-06-01-09-03-39.png

パイプラインの内容

マルチステージパイプラインとなっています。

2022-06-01-09-05-16.png

PublishArtifact

成果物として、workspace_publish内のテンプレートファイルを synapse という名称で発行しています。
発行したファイルはpublishedから確認できます。

2022-06-01-09-09-39.png

Deployment STG

以下を順番に実行しています。

1.成果物のダウンロード:前ステージで発行した成果物をダウンロードします。(deploymentステージでは既定で実行されます)

2.Synapse WorkspaceのIPフィルタのホワイトリストにDev OpsエージェントのパブリックIPを追加します。(認証が成功してからネットワーク許可をするゼロトラスト的発想)

3.Triggerを全停止します。

4.ダウンロードしたテンプレートファイルを利用してデプロイします。

5.Triggerを全再開します。

6.DevOpsエージェントのパブリックIPをホワイトリストから削除します。

どうもファイアウォールの変更が非同期に動いてしまうようなので、waitを入れていたりもします。

開発環境

パイプラインが正常実行できたら、OKなわけですが、パラメータファイルの使い方を抑えるためにリンクサービスの追加をしてみます。

ナレッジセンターに移動します。

2022-06-01-08-42-21.png

データセットを追加します。

2022-06-01-09-43-27.png

リンクサービスが追加されているはずです。

2022-06-01-09-44-39.png

SAS トークンが初期化されていると思いますが、パブリックなblobのため、トークンに '' (空文字)を入力します。

2022-06-01-09-45-25.png

テンプレートファイルをインポートしてみます。

2022-06-01-09-48-50.png

2022-06-01-09-55-10.png

デバッグの成功確認後、発行ボタンを押すとworkspace_publishブランチが更新され、CICDが自動実行されます。

2022-06-01-10-14-46.png

stg環境

自動デプロイ後、成果物の反映を確認できます。

2022-06-01-10-24-09.png

が、リンクサービスがつながらない状態となります。

2022-06-01-10-24-28.png

理由はパラメータファイルです。

パラメータファイルの編集

パラメータファイル内の接続情報は機密情報としてみなされるため、空となります。
既定で出力されるTemplateParametersForWorkspace.json をみてみます。

2022-06-01-10-15-57.png

デプロイの際には _stg.jsonを利用していますが、そこには新しく追加したリンクサービス情報がありません。

2022-06-01-10-19-01.png

これを正しい形に編集します。

開発環境のリンクサービス内容を確認します。

2022-06-01-10-20-13.png

sasUriの値をコピーします。

2022-06-01-10-20-32.png

sasトークンは空文字を設定しているので、以下のようにします。

参考:Azure Data Factory でパブリック公開されているAzure Storageに接続する方法

2022-06-01-10-22-31.png

※なお、Defaultと入っている情報はデプロイ対象外となるので変更不要です。

Commitすると再度パイプラインが実行されます。

2022-06-01-10-32-09.png

完了後、リンクサービスを確認すると接続が成功します。

2022-06-01-10-28-29.png

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?