Infrastructure as Code変遷 ~ やるようになったこと・やらなくなったこと
TIME rest time current/total
TopicsPlaceHolder

Infrastructure as Code変遷 ~ やるようになったこと・やらなくなったこと

Infra Study Meetup #1

Apr 24th, 2020

Profile

songmu

【宣伝】Nature Remo買ってください!

【宣伝】github.com/natureglobal/realip

【宣伝】ghq handbookをよろしくおねがいします

本題

アジェンダ

なぜInfractracture as Codeなのか

人間には信頼性がないことが知られています
-- データ指向アプリケーションデザイン

全てをコード化する

Define everything as code
-- Infrastructure as Code 2nd Edition

理想と現実

どう付き合っていくか

私とInfrastructure as Code

当初のIaC

Chefの感動

今からすると困っていたこと

仮想マシンからクラウドへ

Server Configuration Tool(Provisioningツール)こそがIaCか?

書籍「Infrastructure as Code」の4象限

ただし、2nd Editionではこの言及は消えている

ゲームチェンジャー

クラウドがもたらしたもの

コンテナがもたらしたもの

Nature社ではどうしているか

現状の構成

方針

Provisioningしなくなった

ECS Task Definitions as Code

アプリケーション以外のコンポーネントも全てコンテナとして配置

監視のコード化は「やるようになった」こと

アプリケーションの計測を始めれば、もう病みつきになります
-- 入門監視

health endpoint patternとOpen Metrics

Datadog agentによる監視対象のディスカバリ

Open Metricsの場合

アプリケーションサーバーの場合。

  "dockerLabels": {
    "com.datadoghq.ad.instances": "[{\"prometheus_url\":
      \"http://%%host%%:%%port%%/status/metrics\",
      \"namespace\":\"api\",\"metrics\":[\"*\"]}]",
    "com.datadoghq.ad.check_names": "[\"openmetrics\"]",
    "com.datadoghq.ad.init_configs": "[{}]",
    "name": "api"
  },

katsubushiの場合

katsubushiはmemcachedプロトコルをしゃべる採番デーモンで監視もmemcachedプロトコルでできるスグレモノ。

"dockerLabels": {
  "com.datadoghq.ad.check_names": "[\"mcache\"]",
  "com.datadoghq.ad.init_configs": "[{}]",
  "com.datadoghq.ad.instances": "[{\"url\": \"%%host%%\",\"port\": \"11212\"}]"
},

元々はSTATはtext protocolにしか対応していなかったが、datadog agentがbinaryプロトコルで取りに来るので、pull requestを送って対応してもらった。


https://github.com/kayac/go-katsubushi/pull/40

Nginxの場合

Dockerfileのラベルに直接指定(特に理由はない)

LABEL "com.datadoghq.ad.check_names"='["nginx"]'
LABEL "com.datadoghq.ad.instances"='[{"nginx_status_url":"http://%%host%%:%%port%%/nginx_status"}]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'

まとめ

Infrastructure as Codeを実現する上での個人的ポイント

今後の展望

結論

以上