terraform

A collection of 28 posts

Generate bolt targets from Terraform state
bolt

Generate bolt targets from Terraform state

現在個人サーバーの管理を Terraform で、サーバーのプロビジョニングを Bolt で行なっています。 terraform - ゆるふわキャンパー bolt - ゆるふわキャンパー Bolt ではインベントリファイルを使用してターゲットとなるサーバーを指定できます。インベントリファイルは例えば以下のような内容です。 groups: - name: production targets: - web.example.com - db.example.com - app.

Cloud provisioning with Bolt
bolt

Cloud provisioning with Bolt

このブログを動かしているサーバーは Terraform で構築しています。 Nomad クラスターを作成する とりあえずでプロビジョニングも Terraform で行なっていたのですが、いいかげん辛くなってきたので Bolt を使ったプロビジョニングに移行しました。 Welcome to Bolt ツールとしては Ansible を今まで個人サーバーを構築する際に使っていたのですが、Bolt を今まで使ったことがなかったので選んでみました。 Bolt の概念 Bolt は Puppet Lab の開発した割と新しめのオーケストレーションツールです。Puppet との違いは対象のサーバーにエージェントソフトウェアを入れなくても使える点です。 Puppet の知識がなくても使う事ができ、

Split DigitalOcean project
digitalocean

Split DigitalOcean project

最近このブログを Nomad クラスター環境へ移行しました。 Nomad クラスターを作成する Nomad クラスター上で Ghost ブログを動作させる クラスターは DigitalOcean 上に構築しており、構築は Terraform で自動化しています。ウェブサーバーやブログなどのアプリケーションの配備や管理は Nomad に任せています。 DigitalOcean ではプロジェクトという単位でリソースをまとめることが出来ます。 Projects :: DigitalOcean Product Documentation とりあえず Nomad クラスター関連のリソースをまとめる意図で Nomad Cluster というプロジェクトを作成し

Create Nomad Cluster on DigitalOcean
nomad

Create Nomad Cluster on DigitalOcean

Nomad 上にこのブログ (Ghost) を移そうと考えています。 Nomad by HashiCorp そこで、まずは Nomad クラスターを DigitalOcean 上に作成してみました。 この記事の一番最後にクラスター作成に使用している Terraform のファイルを貼っておきます。 Nomad とは Nomad とは Docker コンテナや Qemu 仮想マシン、 Java アプリケーション等のデプロイ、それらによる処理の実行の管理を自動的に行うツールです。 つまり、ワークロードオーケストレーターです。 Introduction

Summary of Terraform v0.10
terraform

Summary of Terraform v0.10

terraformのv0.10が出ましたね。 ✨ HashiCorp Terraform 0.10 | HashiCorp v0.10の概要とv0.9からの移行方法をメモしておきます。 v0.10の概要 以下の大きめの変更があるようです。 プロバイダの分離 多数のプロバイダの改善 State Environmentsの名前の変更 プロバイダの分離がだいぶ大きな変更ですね。今まではterraformのバイナリにプロバイダのリソースが含まれていましたが、これからはtarraformのコアのバイナリとプロバイダのバイナリが分離されます。 プロバイダのリソースはそれぞれのプロバイダ毎の単一のバイナリファイルとなり、terraformにインクルードされて使われる様になります。 また、terraformのリポジトリもコアのリポジトリとプロバイダのリポジトリで分離されるようになります。 Terraform Providers · GitHub このような変更を行った目的として、terraformを改善していく速度を加速させることが挙げられています。 今まではプロバイダのリソースがterraformのバイナリに含まれていたのでプロバイダのリソースに問題があれば都度修正バージョンを出さなければいけませんでしたが、

Terraform state file removed by S3 Lifecycle
aws

Terraform state file removed by S3 Lifecycle

こんにちわ。最近キャンプばっかり行っているのでブログ更新が滞っています。あかん! さて、このブログが動いているサーバはterraformでインフラの管理をしています。 terraformのstateファイルの管理はS3バックエンドを使っています。 Migration from terraform remote command to terraform backend system また、S3の設定でバージョニングとライフサイクルの設定をしていました。 Versioning terraform.tfstate この設定が原因でtfstateファイルが消えてしまったので記録しておきます…。 起きたこと terraform planを実行したら全てのリソースがcreateされる差分が出てしまいました。 急いでS3のバケットを見たところ、なんと空になっていました…。泣きながら削除済みオブジェクトを表示してみたところ、以下のように削除マーカーが設置されていました。削除マーカー以前のバージョンのtfstateファイルも見れる状態でした。 とりあえずtfstateファイルが見れる状態ではあったので落ち着きを取り戻しました…

DigitalOcean released Cloud Firewalls
digitalocean

DigitalOcean released Cloud Firewalls

DigitalOceanにマネージドなファイアウォールが追加されました! ✨ Cloud Firewalls: Secure Droplets by Default 管理画面やAPIから設定できるファイアウォールで、設定はDigitalOceanのネットワーク層で適用されます(フィルタされたパケットはドロップレットまで届かない)。 この機能によってドロップレット毎にiptablesやfirewalldを設定する必要がなくなるのがうれしいですね。 sourceもしくはdestinationにはIPv4, IPv6, タグ, ドロップレット, ロードバランサを指定することができます。tagを指定することで楽かつ柔軟にスケールできそうですね。 terraformでも近いうち実装されそう。 resource_digitalocean_firewall.go: Add DO Cloud Firewalls (#15124) by keinohguchi · Pull

Summary of Terraform v0.9
terraform

Summary of Terraform v0.9

terraform0.9が出ました。 Terraform 0.9 | HashiCorp tfstateの管理を設定する方法が変わって、これは今のところは後方互換性がありますが0.11で旧方式が廃止されるみたいなので先日移行しました。 Migration from terraform remote command to terraform backend system 今回はほかに追加された機能についてもためしてみます。本家ブログの流れにだいたい沿って見ていきました。 Terraform 0.9 | HashiCorp うまく訳せず理解が追いつかないところも多いですがφ(..)メモメモ Backendsについて Backendsという概念が追加されて、これが結構重要そうなので先にまとめてみます。 Backendsとはterraformで管理されたリソースの状態(

Migration from terraform remote command to terraform backend system
terraform

Migration from terraform remote command to terraform backend system

先日terraform 0.9がリリースされました。 Terraform 0.9 | HashiCorp いくつかの面白そうな機能追加・変更がありますが、そのうちの一つとしてtfstateファイル(terraformで管理しているリソースの状態を記録しているjsonファイル)をクラウド管理するためのremoteコマンドが廃止され、代わりにbackendが実装されました。 Backends - Terraform by HashiCorp backend以外の諸々の機能も気になりますが、今回はひとまずremoteコマンドからbackendへの移行をしてみます。 terraformのドキュメントには各メジャーバージョン毎のアップグレード手順が用意されており、0.9のアップグレード手順でremoteコマンドからbackendへの移行方法を見ることができます。 Upgrading to Terraform 0.9 - Terraform

Arukas provider with Terraform
terraform

Arukas provider with Terraform

以前Windows環境で実行できないという理由で消えてしまったterraformのArukasプロバイダですが、terraform v0.8.7で無事復活したようです!(コメントで気づいた!) terraform v0.8.3でArukasがサポートされたがv0.8.4で削除されていた 早速使ってみます。 準備 まずArukasのトークンとシークレットキーを取得します。 ドキュメントを見ると環境変数からトークンとシークレットキーを読み込ませられるので設定しておきます。 export ARUKAS_JSON_API_TOKEN=XXXXXXXX export ARUKAS_JSON_API_SECRET=YYYYYYYY 使ってみる 以下のようなtfファイルを作成。

Add annotation to Mackerel when changed infrastructure with Terraform
terraform

Add annotation to Mackerel when changed infrastructure with Terraform

mackerelにグラフアノテーション機能が追加されました。 グラフアノテーションをリリースしました! ほか - Mackerel ブログ #mackerelio Mackerel API ドキュメント(v0) - Mackerel API ドキュメント (v0) グラフアノテーション機能とは先日のmackerelミートアップでも紹介があった通り、デプロイや何かしらの事象をmackerelのグラフ上で注釈することができる機能です。 Mackerel Meetup #9 Tokyo #mackerelio 今回はterraformで特定のリソースに変更があった場合、それをグラフ上に表示させてみます。 まずは普通にAPIを叩いてみる 鬼のようなcurlを実行します。 できた。 Terraformと連携させる方法を考える 今回は例として、

Arukas provider was added in terraform v0.8.3, but removed in v0.8.4
terraform

Arukas provider was added in terraform v0.8.3, but removed in v0.8.4

terraformのアップデートが来ていたのでv0.8.5にアップデートがてらChangeLogを流し読み。 ん!?v0.8.3でArukasがサポートされてるやんけ!!Arukasユーザとして嬉しい。 ん?でもv0.8.4はずいぶん差分が少ないな...。 アッ We have removed the Arukas provider that was added in v0.8.3 for this release. Unfortunately

Read access key from Vault with Terraform
terraform

Read access key from Vault with Terraform

ここ最近terraformのvaultプロバイダについて試していました。 terraformのvaultプロバイダを試す terraformでvaultから値を取得する方法 Solved Vault data source error その成果として、terraformで管理している個人サーバのアクセスキーをvaultで管理し、terraformで利用してみます。 これまで main.tfのあるディレクトリでdirenvを使い、アクセスキーを環境変数で設定していました。 export DIGITALOCEAN_TOKEN="XXXXXXXX" これから vaultにアクセスキーを格納し、terraformから呼び出すようにしました。 data "vault_generic_secret"

Solved Vault data source error
terraform

Solved Vault data source error

terraformからvaultを使う際にうまくいかなかった問題が解決できたっぽいのでメモ。 terraformのvaultプロバイダを試す これ。* Resource 'data.vault_generic_secret.test' does not have attribute 'data' for variable 'data.vault_generic_secret.test.data' vaultのバージョンを0.6.0から0.6.4に上げたら解消した! terraformのvaultプロバイダのコードを見るとvaultのapiライブラリをインポートして使っている。 terraform/data_

Get value from Vault with Terraform
vault

Get value from Vault with Terraform

この前terraformのvaultプロバイダを使おうとした所うまくいきませんでした。 terraformのvaultプロバイダを試す そこで、もう少し単純なコードで書き直して検証してみたところ、うまくvaultから値を取ってこれたのでその方法をメモしておきます。 準備 MacでVaultを起動しておきます。検証なのでdevモードで起動します。起動したら、出力に出るRoot Tokenの値をメモしておきます。 brew install vault vault server -dev 環境変数に必要な値をセットしておきます。 export VAULT_ADDR="http://127.0.0.1:8200" export

Vault provider by Terraform v0.8
terraform

Vault provider by Terraform v0.8

terraform 0.8がリリースされました。 Terraform 0.8 | HashiCorp 幾つかの新機能が追加さました!!!その中でVaultとの連携を試してみます。 が、うまく動きませんでした。orz できた。✨ → Read access key from Vault with Terraform やったところまで書く。 Vault providerが提供する2つの機能 vault providerが提供する機能は2つあります。 terraformからvaultそのものを変更する機能(新しいkey/valueの追加とか) vaultから機密情報をreadし、terraformで使う機能(

去年より個人ブログのポスト数を2倍くらい増やせたのでなぜなのか書く
ghost

去年より個人ブログのポスト数を2倍くらい増やせたのでなぜなのか書く

この記事はfeedforceアドベントカレンダーの11日目の記事なんだからね! feedforce Advent Calendar 2016 - Adventar 昨日は@tmd45さんのターンでした。私も脂肪が増えてきた気がするので減らしていこうと思います(戒め)。まずは野菜だ!(ちなみに最初フト「れ」ない話に空目して関連する人物が3人ほど脳内サジェストされました。) フトらない話 - TMD45'β'LOG!!! さて、今回は「分散惑星間データセンター(Grid Interplanetary Data Center)時代のデータ通信技術」について書こうとしたのですが、すごい難しそうなので諦めました。 公転の関係で季節によって通信先の惑星とのレイテンシが変わったり、公転の関係で通信先の惑星が太陽の向こう側に隠れると通信できなくなったり、

Improve my terraform modules
terraform

Improve my terraform modules

以前terraformのmain.tfをモジュールに分割した際に、モジュール同士で変数をやり取りする方法について書きました。 モジュール間の変数のやり取りはregion = "${droplet_region}"みたいに書く Split main.tf into modules, my server was dead しかし、最近になって以下のようなエラーが出るようになっていました。 $ terraform plan There are warnings and/or errors related to

Auto formatting with Vim for Terraform
vim

Auto formatting with Vim for Terraform

terraform v0.6.15からfmtコマンドが追加されてました!(最近知った) terraform/CHANGELOG.md at master · hashicorp/terraform · GitHub terraform fmtコマンドを実行すると、カレントディレクトリ以下のtfファイルをフォーマッティングしてくれます。 自然にフォーマッティングしたいので、vimでファイル保存時にフォーマッティングしてくれるようにしてみます。 vim-terraformプラグインを使います。 GitHub - hashivim/vim-terraform: basic vim/terraform integration インストール、設定方法は.vimrcに以下の行を追記するだけ。

Split main.tf into modules, my server was dead
terraform

Split main.tf into modules, my server was dead

このサイトが動いているサーバはDigitalOceanで、terraformで管理しています。 最近、main.tfを見ていて見づらいなと感じたので(行数は100行もないけれど大半が変更しない行だしいつも目で飛ばしてる行だった。)moduleを使ってスッキリさせようと思い立ちました。 Modules - Terraform by HashiCorp 結果、main.tfが大分すっきりしました。 variable "default_key" {} variable "mailgun_key" {} module "droplet" { source

Create swap with cloud-config
swap

Create swap with cloud-config

digitaloceanでcloud-configを使ってサーバ初期起動時にswapが有効になるようにしてみる。 How to enable linux swap on boot? cloud-configの作成 こんな感じのcloud-config.ymlを書く。fstabへの記述はansibleでやっているので端折ったが、ここまでやるならfstabの編集までcloud-configの責務にしたほうが良さそう。 #cloud-config runcmd: - fallocate -l 2G /swapfile - chmod 600 /swapfile - mkswap /swapfile - swapon /swapfile