最近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というロググループの中に下記のようなログが出力されます
秘匿値の管理方法
コンテナを立ち上げる時に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で確認すると
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を使って管理する
があるようです