
PulumiでSnowflakeの仮想ウェアハウスを作成してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
Infrastructure as Code のツール「Pulumi」はSnowflakeにも対応しており、下記の通りSnowflake用のパッケージが提供されています。
今回は、こちらのパッケージを利用してSnowflakeの仮想ウェアハウス作成を試してみたいと思います。
前提
Snowflakeのアカウントは既にセットアップ済みで利用できるものとします。
また、Pulumiについては下記のようにHomebrew経由でインストールされていることを前提としています。
% brew install pulumi % pulumi version v3.34.1
プロジェクトのセットアップ
まずは今回作成するプロジェクト用のフォルダを作成して移動します。
% mkdir pulumi-snowflake && cd pulumi-snowflake
次に、Pulumiのセットアップをするのですが、今回作成したい「Snowflake x Typescript」用のテンプレートは存在しないようでした。
そのため、代わりにpulumi new typescriptで、TypeScript用テンプレートを利用してプロジェクトを初期化しておきます。
% pulumi new typescript This command will walk you through creating a new Pulumi project. Enter a value or leave blank to accept the (default), and press <ENTER>. Press ^C at any time to quit. project name: (pulumi-snowflake) project description: (A minimal TypeScript Pulumi program) Created project 'pulumi-snowflake' Please enter your desired stack name. To create a stack in an organization, use the format <org-name>/<stack-name> (e.g. `acmecorp/dev`). stack name: (dev) Created stack 'dev' Installing dependencies... added 111 packages, and audited 112 packages in 5s 37 packages are looking for funding run `npm fund` for details found 0 vulnerabilities Finished installing dependencies Your new project is ready to go! ✨ To perform an initial deployment, run 'pulumi up'
プロジェクトを初期化したら、Snowflake用のパッケージを追加します。
% yarn add @pulumi/snowflake
また、以下のような感じでSnowflake用の設定も追加します。今回の例ではregionとroleはap-northeast-1.awsとSYSADMINを指定していますが、それぞれ適切なものを指定します。
% pulumi config set snowflake:account [アカウント名] % pulumi config set snowflake:region ap-northeast-1.aws % pulumi config set snowflake:username [ユーザー名] % pulumi config set snowflake:password [パスワード] % pulumi config set snowflake:role SYSADMIN
ここでの注意点としては、 region の設定になるかと思います。
PulumiがSnowflakeに接続する際には、以下の形式のURLへアクセスしようとします。
https://[account].[region].snowflakecomputing.com:443/
このため、regionにはap-northeast-1だけではなく、クラウドプロバイダのawsも含めています。
また、roleには接続に利用するロール名を指定しています。ここで明示的に指定をしていない場合には、Snowflakeユーザーの規定のロール(DEFAULT_ROLE)が利用されるようです。
なお、実はsnowflake:browserAuthという設定もあり「ブラウザ認証ができるかな?」と試してみたのですが、2022/06現在では私の環境ではうまく動かすことができなかったので、パスワード認証で試しています。
仮想ウェアハウスを作成するコードを記述する
では、準備ができたのでドキュメントを参考にしながら、以下のようにindex.tsを記述します。
import * as snowflake from "@pulumi/snowflake";
const warehouse = new snowflake.Warehouse("warehouse", {
name: "vwh-via-pulumi",
comment: "ootaka-pulumi-test",
warehouseSize: "xsmall",
autoSuspend: 60,
});
// Export Warehouse Info
export const warehouseInfo = warehouse;
Warehouseのオプションとして指定したnameが仮想ウェアハウスの名前になります。また、今回は明示的に自動サスペンドのパラメータautoSuspendを60秒に指定してみました。
デプロイしてみる
では、早速デプロイしてみます。デプロイにはpulumi upコマンドを実行します。
% pulumi up
Previewing update (dev)
View Live: https://app.pulumi.com/ootaka-daisuke/pulumi-snowflake/dev/previews/c56f6397-bf6f-40f6-b71f-fdb4d28fc7d4
Type Name Plan
+ pulumi:pulumi:Stack pulumi-snowflake-dev create
+ └─ snowflake:index:Warehouse warehouse create
Resources:
+ 2 to create
Do you want to perform this update? [Use arrows to move, enter to select, type to filter]
yes
> no
details
作成リソースのプレビュー後にyesを選択し、成功すると以下のように表示されます。
Do you want to perform this update? yes
Updating (dev)
View Live: https://app.pulumi.com/ootaka-daisuke/pulumi-snowflake/dev/updates/1
Type Name Status
+ pulumi:pulumi:Stack pulumi-snowflake-dev created
+ └─ snowflake:index:Warehouse warehouse created
Outputs:
warehouseInfo: {
autoResume : true
autoSuspend : 60
comment : "ootaka-pulumi-test"
id : "vwh-via-pulumi"
maxClusterCount : 1
maxConcurrencyLevel : 8
minClusterCount : 1
name : "vwh-via-pulumi"
resourceMonitor : "null"
scalingPolicy : "STANDARD"
statementQueuedTimeoutInSeconds: 0
statementTimeoutInSeconds : 172800
urn : "urn:pulumi:dev::pulumi-snowflake::snowflake:index/warehouse:Warehouse::warehouse"
warehouseSize : "X-Small"
}
Resources:
+ 2 created
Duration: 4s
実際にsnowsqlを利用してSQLで仮想ウェアハウスの情報を確認してみます。
SHOW WAREHOUSES LIKE 'vwh-via-pulumi'; +----------------+-----------+----------+---------+-------------------+-------------------+------------------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+----------+--------------------+------------------+---------+----------+--------+-----------+----------+----------------+ | name | state | type | size | min_cluster_count | max_cluster_count | started_clusters | running | queued | is_default | is_current | auto_suspend | auto_resume | available | provisioning | quiescing | other | created_on | resumed_on | updated_on | owner | comment | resource_monitor | actives | pendings | failed | suspended | uuid | scaling_policy | |----------------+-----------+----------+---------+-------------------+-------------------+------------------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+----------+--------------------+------------------+---------+----------+--------+-----------+----------+----------------| | vwh-via-pulumi | SUSPENDED | STANDARD | X-Small | 1 | 1 | 0 | 0 | 0 | N | N | 60 | true | | | | | 2022-06-12 23:46:17.998 -0700 | 2022-06-12 23:46:18.341 -0700 | 2022-06-12 23:46:18.341 -0700 | SYSADMIN | ootaka-pulumi-test | null | 0 | 0 | 0 | 1 | 11796761 | STANDARD | +----------------+-----------+----------+---------+-------------------+-------------------+------------------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+----------+--------------------+------------------+---------+----------+--------+-----------+----------+----------------+ 1 Row(s) produced. Time Elapsed: 0.543s
想定どおり作成できていますね!
なお、後片付けをするときには同様にpulumi destroyコマンドで仮想ウェアハウスを削除できます。簡単ですね。
まとめ
以上、PulumiでSnowflakeの仮想ウェアハウスを作成してみました。
今回はお試しで仮想ウェアハウスだけを作成してみましたが、その他にもPulumiのSnowflakeプラグインは色々なリソースに対応しているので、また試してみたいと思います。
どなたかのお役に立てば幸いです。それでは!







