2015-02-15

Salesforceのデータバックアップ用Dockerfile作ったので公開してみた

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を選択して

dockerhub_automatedbuild1

gitのサービス選んで

dockerhub_automatedbuild2

リポジトリ選んで

dockerhub_automatedbuild3

テキトーに設定するだけ

dockerhub_automatedbuild4

あとはgithubとかのリモートリポジトリ側にwebhookの設定が自動で追加されるっぽいので

pushしたら都度ビルドしてくれます。

ただし通常のwebhookによる自動化と同様、README上げただけでもビルド走ります。

雑感

今更ですがherokuone-off dynoの考え方が良いなーと思っていて

環境変数の設定変更だけで色んな環境に対応できたり

Immutableで環境自体汚さなかったりするのが個人的には美しく感じます。

まぁ、この量のスクリプトならnpm install && node *** で事足りる感じもしますが…。

このエントリーをはてなブックマークに追加