Apex書くのに飽きたため業務の効率を上げるため、Salesforceの各オブジェクトごとの
レコードをCSVでフルバックアップするスクリプト書いてDockerfileにしてみました。
S3の設定をすれば各csvをgzip化して、S3にアップロードするようにもなっていたり。
DataLoader使えば良いじゃん説がありますがJavaとXMLの設定がめんどかった
+herokuみたいなone offでクリーンなエクスポートをしてみたかったってのが動機っす。
完成品はこちら。
Dockerhubにも登録してます→tzmfree/sfdc-exportjs
使い方は、ログ用のディレクトリを作成して
mkdir /var/log/sfdc-exportjs
環境変数セットしたDocker走らせるだけ
docker run --rm -t \
-e SFDC_USERNAME="hoge@example.com" \
-e SFDC_PASSWORD="fuga123" \
-e SFDC_LOGINURL="https://login.salesforce.com" \
-e SFDC_TARGETOBJECT="Account;Contact" \
-e SFDC_LIMIT="500000" \
-e S3_BUCKET="backup" \
-e AWS_ACCESS_KEY_ID="AKI***************" \
-e AWS_SECRET_ACCESS_KEY="********************" \
-e MODE="parallel" \
-v /var/log/sfdc-exportjs:/var/log/sfdc-exportjs \
tzmfree/sfdc-exportjs /sbin/my_init -- ./export.sh
ボリュームで指定したディレクトリ(ホスト側に作ったディレクトリ)にログとかCSVファイルが格納される仕様っす。
CSVファイルをごにょりたい場合はdocker run後の処理でそのCSVを煮るなり焼くなりすればOK。
スケジュール起動したい場合はホスト側のcrondでdocker runごとブン回してください。
以下はDockerfileの備忘っす。
Dockerfileの書き方
MAINTAINERは作った人の名前。FROMはベースとなるDockerイメージ。
今回ベースとしているphusion/baseimageはDocker使う時のハマりどころを色々と回避してくれてる
ベースイメージで、sshdとかcrondとかも初期装備されてる便利なDockerイメージ。
Dockerfileでよく使うのはRUNとADD。
RUNは実行するコマンドで大体パッケージインストールやgit clone等のセットアップ系を行います。
ADDは実行ディレクトリ配下にある特定のファイルをアップロードする操作で
今回はエクスポート担当のNode.jsスクリプトをアップロードしてます。
Dockerhubへの登録とか
今回はgithubやbitbucketにpushしたら自動的にビルドしてDockerhubにアップロードしてくれるAutomated Buildという機能を利用しました。
設定は超簡単で、Dockerhubにログイン後にAdd Repositoryのボタンから
Automated Buildを選択して
gitのサービス選んで
リポジトリ選んで
テキトーに設定するだけ
あとはgithubとかのリモートリポジトリ側にwebhookの設定が自動で追加されるっぽいので
pushしたら都度ビルドしてくれます。
ただし通常のwebhookによる自動化と同様、README上げただけでもビルド走ります。
雑感
今更ですがherokuのone-off dynoの考え方が良いなーと思っていて環境変数の設定変更だけで色んな環境に対応できたり
Immutableで環境自体汚さなかったりするのが個人的には美しく感じます。
まぁ、この量のスクリプトならnpm install && node *** で事足りる感じもしますが…。