Warning: Trying to access array offset on value of type bool in /home/r1029599/public_html/engineer-log.net/wp-content/themes/simplicity2/lib/customizer.php on line 5404

Hakoを使い始めた

目次

最近Hakoを使い始めたのでノウハウをためていく

Hakoとは??

Dockerコンテナをデプロイするためのツールです
Hakoがうまれた背景はECS を利用したデプロイ環境 by Kohei Suzukiによると

ECSを利用しつつ、秘匿値の注入や関連するリソースや設定を操作するデプロイツールが必要

だったからだそうです

今回のHakoの使い方

Dockerコンテナをデプロイする hako deployの他に hako oneshotというECSのRunTaskAPIを呼び出し単発の実行を行うものがあるのですが、今回はこのhako oneshotを使います

今回試すものとしては

  • 実行中のログをCloudWatch Logsになげる
  • 秘匿値の管理方法

の2つを確認していきます
なお今回ECSのクラスター名はtest-clusterというものを使用したとします

実行中のログをCloudWatch Logsになげる

まずコンテナのlogをCloudWatch Logsになげる設定に関しては公式のこちらを参考にします

test.yml

scheduler:
  type: ecs
  region: ap-northeast-1
  cluster: test-cluster
app:
  image: busybox
  log_configuration:
    log_driver: awslogs
    options:
      awslogs-group: test
      awslogs-region: ap-northeast-1

コマンドラインで

$ hako oneshot test.yml echo TEST!

と実行するとCloudWatch Logsのtestというロググループの中に下記のようなログが出力されます

f:id:hatappi1225:20170516194216p:plain

秘匿値の管理方法

コンテナを立ち上げる時にENVで情報を渡すことが出来る
例えばコンテナ内でDBにアクセスする必要がありコンテナ起動時にパスワードを渡したいとする

test.yml

scheduler:
  type: ecs
  region: ap-northeast-1
  cluster: test-cluster
app:
  image: my-app
  env:
    DB_PASSWORD: hogehoge
  log_configuration:
    log_driver: awslogs
    options:
      awslogs-group: test
      awslogs-region: ap-northeast-1

このようにenvを追加して

$ hako oneshot test.yml printenv

とすればCloudWatchLogsで確認すると

f:id:hatappi1225:20170516194605p:plain

DB_PASSWORDが環境変数としてわたっていることが確認できた
ただこれはちょっと微妙でyamlファイルはgitで管理していくのでDB_PASSWORDのhogehogeという秘匿値は含めたくない

これの解決策としてもHakoが提供してくれている

test.env

db_password=hogehoge

このようなgitで管理しない秘匿値を定義したファイルを用意して

test.yml

scheduler:
  type: ecs
  region: ap-northeast-1
  cluster: test-cluster
app:
  image: my-app
  memory: 256
  env:
    $providers:
      - type: file
        path: test.env
    DB_PASSWORD: '#{db_password}'
  log_configuration:
    log_driver: awslogs
    options:
      awslogs-group: test
      awslogs-region: ap-northeast-1

とすると実行時にtest.envをよみにいってそれを使って環境変数として渡せるようになる
これでymlだけをgitの管理下において安心して管理できる
今回はファイルベースで管理をしていたが
Hako作者の@eagletmtのリポジトリを見ると

Vaultを使って管理する

etcdを使って管理する

があるようです

最後に

Hakoを使うことで自分でAWS APIを何回も叩かなくてよくなりました

投稿日:May 16th 2017

元記事:http://hatappi.hateblo.jp/entry/2017/05/16/195433

– PR –
– PR –