Go 静的解析 & 単体テスト on GitHub Actions
以前、複数の AWS Account EC2 インスタンスへの接続を EC2 Instance Connect を使用しインタラクティブに ssh 接続できるツールを作成しました。
以前、複数の AWS Account EC2 インスタンスへの接続を EC2 Instance Connect を使用しインタラクティブに ssh 接続できるツールを作成しました。
このようなコードを書いていると errcheck
を実行した場合、 defer f.Close()
と指摘されてしまいます。
1 | func hoge() error { |
f.Close()
は返り値が error
であり、その error
の返り値をチェックしていない、という警告です。
gosec で警告される os.Open() に対応した話です。
Ruby で関数のデフォルト引数を設定する場合は以下のように指定できます。
1 | def hoge(a, b = 2) |
Golang だと以下の様なデフォルト引数の定義ができません。
備忘録です。
AWS 向けの go ライブラリが乱立していて
どれ使ったらいい?という感じだったので
本家の launchpad.net/goamz/aws
を利用して
実装することにしました。
画像アップロード部分を component 化しました。
本当に小技です。
が、割と使ってみると作業時間の短縮となって便利という声を頂き
peco 関連でよく使うものを記事にしました。
1 | macOS %$ brew install peco |
前提条件として ~/.ssh/config
で接続ホストを管理しています。
上記を ~/.bashrc
などに貼り付けて source ~/.bashrc
すれば使えます ♪
1 | macOS %$ git clone https://gist.github.com/kenzo0107/06b3b1e202f36b70815cfe0207292a66 |
上記の様に順調に進むと候補がリストされます。
モザイクしかなくすいません (>_<)
こちらも同様、
1 | macOS %$ git clone https://gist.github.com/kenzo0107/e460e31ae2478341cc7a39859ad7fefd |
他にも様々な箇所で peco を利用させて頂いてます。
こんな peco の使い所あるよーという方、是非教えてください ♪
zsh ですが dotfile をまとめてます。
Golang オフィシャルサイトに書かれているそのままです。
他 Golang 関連記事説明の為に、また、備忘録として記述します。
Golang Official - Downloads から環境に合わせ
最新バージョンをインストールすることをお勧めします。
1 | $ cd /usr/local/src |
1 | $ sudo cat << 'EOF' | sudo tee /etc/profile.d/golang.sh |
1 | $ go version |
以上で Golang のインストール完了です。
リモートサーバとローカルサーバとの差分のあるファイル情報を取得するツールを Golang で作成しました。
この 1 点のみです。
整備されたデプロイ環境では発生しにくいケースです。
ですが意外と多いです。
それはこんなケース
上記のケースに当たる案件にたまたま担当してしまって
デグレった、バグったとならない為に個人的に作ってました。
デフォルトの対象拡張子は php,tpl,js,css,html を対象としています。
会社で PHP プロジェクトを扱うことが多いので m(_ _)m
元々 Python で書いてましたが Go にしたところ
4~5 倍程度パフォーマンスアップしました!
並行処理についても
Python も multiprocessing がありますが
書き易さは Go かなと思いました。
実装に当たってこちら拝読させていただきました。
基礎的な Go 言語の構文や環境構築、
Semaphore を意識した設計はとても参考になりました。
簡易的なパフォーマンス測定覚書です。
よく使うので備忘録的に保存。
1 | package main |
まず成果物から
1 | # vim /usr/lib/systemd/system/revel.service |
1 | [Unit] |
※After … 上記では nginx と mysqld 起動後に revel を起動させるという設定です。
※ExecStart … /bin/bash /var/golang/run.sh
については
以前の記事でローカルビルドによる
デプロイ方法を採用しているというお話をしましたが
その際に作成される run.sh
のパスを指しています。
1 | # systemctl enable revel.service |
1 | # systemctl start revel.service |
1 | # systemctl start revel.service |
以上です。
AWS での運用をしていると検証環境は
検証時のみに利用し余計なコストは掛けたくないものです。
なので、しょっ中、起動・停止を繰り返します。
Revel フレームワークは起動スクリプトが標準装備されていない為
インスタンス起動時に手動で起動する手間が発生していました。
その為、デザインの修正でもシステムさんお願いします〜というような依頼があり
相互に手間が発生していたのでその解決として作成しました。
現在は Slack 経由で hubot から Jenkins ジョブを実行させ
Revel の乗ってる AWS インスタンスの起動・停止できるようにしています。
ip も ElasticIP は使用せず、No-IP を利用して Public IP が変更されても
同ドメインでアクセスできるようにしています。
こちらもインスタンス起動時にドメイン管理している No-ip へ Public IP を通知し
動的にドメインと IP を紐付けるようにしています。
極力費用を抑えた、AWS における検証環境構築の参考にもしていただければと思います。
以上です。
※ 検証環境 はローカル開発環境と異なり、あくまで本番デプロイ前の検証用という認識です。