Split DigitalOcean project
digitalocean

Split DigitalOcean project

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

  • Lorentzca
    Lorentzca
1 min read
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 - Nomad by

  • Lorentzca
    Lorentzca
9 min read
Manage state files on Terraform Cloud
terraform

Manage state files on Terraform Cloud

先日発表された Terraform Cloud の Remote State Management 機能、絶対いいやつなので試してみます。 Introducing Terraform Cloud Remote State Management Terraform Cloud とは Terraform Cloud とは terraform のために作られた SaaS です。 以下のような機能が (今後公開予定の機能も含め) あります。 state ファイル管理ストレージ terraform を複数人で運用するためのコラボレーション機能 terraform

  • Lorentzca
    Lorentzca
3 min read
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のコアのバージョンとは無関係にプロバイダの開発できるようになりました。的なイメージでしょうか。 このお陰でプロバイダのバージョンをロックすることもできるようになっています。

  • Lorentzca
    Lorentzca
3 min read
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ファイルが見れる状態ではあったので落ち着きを取り戻しました…。 原因 前述の通り、S3のライフサイクルの設定で「

  • Lorentzca
    Lorentzca
2 min read
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 Request #1 · terraform-providers/

  • Lorentzca
    Lorentzca
1 min read
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で管理されたリソースの状態(作成したリソースのIPアドレスのような実際の値)をどのように読み込むか、そしてapplyでどのような処理が実行されるかを決定する機構のようです。

  • Lorentzca
    Lorentzca
7 min read
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 by HashiCorp 移行方法

  • Lorentzca
    Lorentzca
2 min read
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ファイルを作成。 resource "arukas_

  • Lorentzca
    Lorentzca
5 min read
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と連携させる方法を考える 今回は例として、DigitalOceanのtagリソースに変更が加えられた場合、グラフに注釈を入れるようにしてみます。 「tagリソースに変更が加えられた場合何かを実行する」

  • Lorentzca
    Lorentzca
4 min read
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" "digitalocean"

  • Lorentzca
    Lorentzca
1 min read
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_source_generic_secret.

  • Lorentzca
    Lorentzca
1 min read
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_TOKEN="

  • Lorentzca
    Lorentzca
1 min read
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で使う機能(シークレットキーを取得したりとか) 注意事項 vaultと連携することによって、

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

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

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

  • Lorentzca
    Lorentzca
5 min read
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 your configuration. Please

  • Lorentzca
    Lorentzca
2 min read
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に以下の行を追記するだけ。terraform_fmt_on_

  • Lorentzca
    Lorentzca
1 min read
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 = "./modules/digitalocean/

  • Lorentzca
    Lorentzca
6 min read
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 動作確認 実際にdropletを立てて確認する(もっと楽な方法無いかな…

  • Lorentzca
    Lorentzca
1 min read
Backup Droplet
digitalocean

Backup Droplet

このblogのbackupどうしようか考えていて、ghostはwordpressみたいにバックアッププラグインがあって毎日S3に転送、みたいなことはできない。 バックアップスクリプト書いてcronで叩こうかと思ったものの、どうせそのうちblog以外もなんか動かすしサーバーごとバックアップとることにした digitaloceanのdropletのバックアップを取る方法は2つある 1つはsnapshotで、もう1つはbackups。違いはいくつかあって、 snapshot backups 費用 無料 対象droplet費用の20% 自動 No Yes 電源 シャットダウンされる シャットダウンされない みたいな感じ 世代は4世代らしい。もし何らかの理由でバックアップが失敗した場合は、その分の料金は発生しないとのこと。(4世代中1世代のバックアップが失敗したら、費用はdroplet費用の15%になる) バックアップの周期は1週間毎で、タイミングは指定したウインドウ内で実行される その辺の話は、以下のフォーラム・FAQでされていた(digitaloceanはなぜかAPI以外はまとまったドキュメントがない。

  • Lorentzca
    Lorentzca
2 min read
Use map of terraform
terraform

Use map of terraform

terraformで変数を条件によって使い分けたい場合、マップという仕組みを使うとうまく出来ることを知った。 例えば、awsでサブネットのCIDRを切りたい場合。 ap-northeast-1aの場合は10.0.0.0/24を、 ap-northeast-1cの場合は10.0.1.0/24としたい場合、以下のように変数をマップする。(って言い方で合ってるのかな?) variables.tf variable "subnets_cidr_block" { description = "subnets cidr block" default = { ap-northeast-1a = "

  • Lorentzca
    Lorentzca
1 min read