TerraformでSpotifyプレイリストを作成して、TwitterでつぶやけばHashicorp Tシャツがもらえるだって??
そもそもTerraformにSpotify用のProviderがあったことがビックリですね。
参考にしたページ
Windows想定の記事でしたので、こちらをM1 Mac用にカスタマイズして実施していきます。
環境準備
-
Macbook Air(M1)でターミナルを起動
-
Gitをインストール
$ brew install git
$ git version
git version 2.37.0
- Terraformをインストール
$ brew install terraform
$ terraform version
Terraform v1.2.4
on darwin_arm64
- Docker Desktopのインストール
- VS Codeのインストール
- Spotifyアカウント作成
ハンズオン手順
Spotify開発者アプリを作成
- Spotify Developers Dashboardにログインし、利用許諾に同意する
-
Create an app をクリック
- App name:
tfspot
など適当な名前を入れる - App description:
tfspot
など適当な説明を入れる
- App name:
-
Edit settings をクリック
- Redirect URLs:
http://localhost:27228/spotify_callback
を入力しAddをクリック - Saveをクリック
- Redirect URLs:
認証プロキシ用コンテナを起動
- Macのターミナルを起動し、環境変数をセット
$ set SPOTIFY_CLIENT_REDIRECT_URI=http://localhost:27228/spotify_callback
- ホーム配下にワークフォルダー
tfspot
を作成
$ cd ~
$ mkdir tfspot
- テキストファイル
.env
を作成し、tfspot配下に配置
SPOTIFY_CLIENT_ID=Spotify Developer Dashboardの「ClientID」
SPOTIFY_CLIENT_SECRET=Spotify Developer Dashboardの「Client Secret」
- 認証プロキシ用コンテナを起動
$ docker run --rm -it -p 27228:27228 --env-file .env ghcr.io/conradludgate/spotify-auth-proxy
Terraformを準備
-
コンテナ実行中のターミナルはそのままにし、新規ターミナルのウィンドウを開く
-
以下コマンドを実行し、Spotify用Terraformのチュートリアルファイルをクローンする
$ git clone https://github.com/hashicorp/learn-terraform-spotify.git
$ cd learn-terraform-spotify
-
main.tf
ファイルを編集する-
data
ブロック-
artist
、album
、name
の値を変更して、プレイリストに追加する曲の検索条件を絞り込んでみる
-
-
resource
ブロック-
name
を好きなプレイリスト名に変更してみる -
tracks
は検索結果の曲数より行数が少なくなるよう、適宜コメントアウト
-
-
terraform {
required_providers {
spotify = {
version = "~> 0.2.6"
source = "conradludgate/spotify"
}
}
}
provider "spotify" {
api_key = var.spotify_api_key
}
data "spotify_search_track" "by_artist" {
artist = "Nana Mizuki"
album = "POP MASTER"
name = "UNBREAKABLE"
}
resource "spotify_playlist" "playlist" {
name = "お奈々"
description = "This playlist was created by Terraform"
public = true
tracks = [
data.spotify_search_track.by_artist.tracks[0].id,
# data.spotify_search_track.by_artist.tracks[1].id,
# data.spotify_search_track.by_artist.tracks[2].id,
]
}
-
terraform.tfvars.example
ファイルを修正する- ファイル名を
terraform.tfvars
に変更 - ファイル内の
...
の部分を、Dockerコンテナ起動後のターミナルに出力されているAPIKeys
の値で置き換える
- ファイル名を
Terraformの実行
- 以下コマンドでワークスペースの初期化を実施
$ terraform init
(中略)
Terraform has been successfully initialized!
- 以下コマンドでTerraformによるリソース作成を実施
$ terraform apply
Terraformユーザーにはおなじみの「Plan」結果が表示される。+の記号でどのようなリソースが作成されるのかを教えてくれています。
Terraform used the selected providers to generate the following execution plan. Resource actions
are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# spotify_playlist.playlist will be created
+ resource "spotify_playlist" "playlist" {
+ description = "This playlist was created by Terraform"
+ id = (known after apply)
+ name = "お奈々"
+ public = true
+ snapshot_id = (known after apply)
+ tracks = [
+ "3IY2GIqcVAYhaM2zn5r3vh",
]
}
Plan: 1 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ playlist_url = (known after apply)
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
- 問題なさそうなら
yes
と入力し実行。以下が表示されれば成功。
(前略)
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
playlist_url = "https://open.spotify.com/playlist/16bua5a1CXLQpI8vg5asJo"
無事にプレイリスト作成できたら
Twitterでハッシュタグ付けてつぶやきましょう。Hashicorp Tシャツがもらえるかも!?
Terraform楽しい…けど普通にプレイリスト作った方が早いなと思いましたw
大量操作や自動化など、何らかのアイディアをもって活用すればきっと有効な使い道があるはず!!
後日談(オチ)
実はこの記事、諸事情あり2ヶ月ほど寝かせていたのですが、まだTシャツが送られてこないのでキャンペーン終了している疑惑がありそうです。苦笑
なんじゃそりゃ!
(最近見かけた、Tシャツ届きましたツイートは何だったんだろう…)