/var/log/laughingman7743.log

I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?

CloudwatchLogsのデータをKinesisを経由して、LambdaでDatadogLogsに送る

DatadogLogsを使い始めていて、ECSのログをCloudwatchLogsにログを集約して経路を作ったりしています。 ログをいろいろな出力先に出し分けしたいのですが、CloudwatchLogsのサブスクリプションフィルタはなんと1つのロググループに1つしか付けれないです😇 *1

出し分けをしたい場合は一旦Kinesisを経由して、KinesisからLambdaで出し分けすると良いです。
DatadogのGitHubオーガニゼーション*2を見ると、DatadogLogsに送るLambda*3が見つかりますが、Kinesisには対応していないです😭

公開されているLambdaをベースに、雑に書いてみました。

sourceやsourcecategory、tags等は適当です。JSON形式で送れるのは非常に楽ですね。
WARNやINFOといったログレベルは、DatadogLogsのパイプライン機能でパースして付加すると良いと思います。*4
DatadogLogs結構良さそうですね。

Enjoy!

オレオレTerraform構成

もともとは同僚がシェルで書いていたラッパーです。シェルつらいかつ、CIが回せなかったのでPythonで書き直したものです。
こういったのもこそGoで書くのが良さそうですね。Terraformつらいって感じが伝われば😩

ラッパースクリプト自体はTerraformのコマンドとオプションを指定できるようにして、サブプロセスでTerraformを実行しているだけです。 ロールは カテゴリ/ロール 形式で指定します。Slackへの通知は、SNSをSlackに投げるLambdaを作成しています。SNSには整形したメッセージを投げ、Lambdaはトークンを追加してSlackに投げるだけの非常に簡単なものです。

実行環境はPipenv*1を使うと楽に構築できます。Pipenvちょー便利です!

ディレクトリ構成は以下

ステートの管理はS3、カテゴリやロールといった概念を導入して、全体・カテゴリ単位で共通に使える変数やバックエンド、プロバイダ、バージョン等の設定をテンプレートとして切り出しています。 カテゴリはVPCVPCに依存しないリソースを、VPC名やS3やSNSといったAWSのリソース名をつけて管理することを想定しています。ロールはサブネット名や適当な利用用途や業務用途の名前をつけて管理することを想定しています。ステージングとプロダクションの2つの環境を、変数値を変えることによって構築をすることを想定した構成です。カテゴリの共通変数には別カテゴリに属するロールのリモートステートを定義したりすると色々と捗ります。
テンプレートファイルは実行時に各ロールのディレクトリにコピーされるので、gitignoreファイルは以下の様にしています。IntelliJのHCLプラグイン*2はモリモリ補完が効くのでオススメです。

CIはJenkinsでGHPRB*3とMultibranchPipeline*4を併用して、プルリクではステージングとプロダクションのplanを実行してSlackに通知、developブランチではステージング環境のみapplyを実行してSlackに通知、masterブランチではプロダクション環境のみplanを実行してSlackに通知をしています。プルリクコメントに所定の形式でロール名を書くと、そのロールのみ実行するようなこともできるようにしています。

JenkinsはMasterノードのみDockerで上げて(EFS早く東京リージョンに来て欲しい)、実行自体はCodeBuildを使っています。CodeBuildもちょー便利です!

Terraformが利用するAWSAPIキーは全てのリソースをさわるのでAdmin権限が必要になります。CodeBuildはパラメータストアの値を簡単に取ってこれるので、パラメータストアにセキュアストリングで格納しています。APIキーの発行はしたくなかったのですが、AssumeRoleを使うとリモートステートへのアクセスが上手く行かなくなったので、仕方なくAPIキーの発行をしています😭

もうTerraformなしでは生きられない体に。。。素敵なTerraformライフを。

Enjoy!

Amazon ECRのCLIツール作った

Dockerログインめんどくさいかつ、レジストリのURL長杉ってことでCLIツール作りました。便利!

使い方は README 参照してください。

TODO

  • プログレスバーの表示がおかしくなる。tqdm*1 の使い方の問題かなと。
  • Vacuumコマンドとして、CLIからオレオレライフサイクルポリシーでイメージを削除できるような実装。
  • テスト😭

Enjoy!

BigQueryのデータセット管理ツール作った

BigQuery のデータセットも Terraform で管理*1ができるのですが、権限の管理に対応していない。。。
ぶっちゃけ Terraform じゃなくて、もっとシンプルな形 (ステートファイルを持たず、設定ファイルのみ管理する形) で管理したいなと思い作ってみました。

使い方は README 参照してください。Terraform 的なコマンドとなっています。
YAMLファイルは GIT 等で管理して、CI回すと良いと思います。

テーブルの管理にも対応するかな。

Enjoy!