yasudacloudの日記

札幌に住むソフトウェアエンジニア

自作Terraformプロバイダーを公開した話

以前からTerraformプロバイダーを作ってみたいと思っていたのですが、題材やタイミングがなかなか合わず出来ていませんでした。ですが、日々実装や公開について地道に調べていて何とか公開までいけました。

その名も、Chrome Headless Providerというプロバイダーです。

リンクはこちら

registry.terraform.io

今までAWSやCloudflareといった大御所プロバイダーで見てきた画面だったので、自分のページが出来るのはなかなか感慨深いです🤗

どんなことが出来るかというと、TerraformのコードからChromeをヘッドレスで呼び出して特定のURLにアクセス(スクショも可)できるという機能になります。

サンプルコード

プロバイダーをこのように記述します。

terraform {
required_providers {
headless = {
source = "yasudacloud/headless-chrome"
version = "~> 1.0"
}
}
}

url先の画面をスクショするコード

data "headless_chrome_request" "example" {
url = "https://yasudacloud.github.io"
screenshot = {
dist_path = var.dist_path
file_name = "example.png"
}
}
出力
output "response" {
value = {
"file_name" : data.headless_chrome_request.example.screenshot.file_name
"status_code" : data.headless_chrome_request.example.status_code
"response_headers" : data.headless_chrome_request.example.response_headers
}
}
 

使い方の詳細はTerraform Registryに記載しています。

何に使うのか🤔

例えば他のプロバイダーと組み合わせてインフラ構築のサイクルの中に組み込むことができます。単体で使うこともでき、サイトの魚拓を取るような使い方が考えられますね。
他にはe2eツールとして利用できれば良いのですが、Webページのボタンをクリックさせたり入力値をいじるようなことが現状できません。今後実装していきたい機能です。

まとめ

情報が基本英語なのでちょっと大変でしたが、GoRelaserやGPGといった使ったことないものを知るきっかけになったのは良かったです。他の人のプロバイダーの実装、特にテストやバリデーション周りは結構参考になったのでお勧めです。

資料やリンクは公開時にどう見えるか分からず、色々不備がありそうです。。
需要があれば公開までの手順をまとめようと思いますm(._.)m