AWS Lambda上でssh
やgit
を使えたら便利!思ったけど、そもそもバイナリ自体が入ってない上にパッケージのインストールが出来ないので回避方法を悩んでいたところ、幸いそれぞれPython nativeの実装があったので先人の肩に乗っかる事で事無きを得ました。
SSH
SSHはParamikoというライブラリを利用。s3上にSSE-KMSで暗号化されたキーファイルをダウンロードし、それを使ってサーバと認証しログイン。
注意点
- Lambdaの実行環境にはデフォルトでParamikoが入ってないので、deployment packageに含める必要がある
- Mac上ではpythonライブラリの互換性が衝突する為、Linux(EC2等)上でpackageを作成する必要がある
- 最近発表されたVPC対応を使ってprivate networkで通信をしたい場合、外部への経路はそのままでは不可なので、s3の場合はVPC endpointを作成するかNATが必要になってくる。詳しくはこの記事を。
Git
Gitはdulwich
というライブラリを利用。sshプロトコルの場合、デフォルトではシステム上のsshが利用されるのでPython版のParamikoSSHVendor
クラスを使えばすんなりいくと思いきや、キーファイル指定が出来なかったのでそこを少し改変。また、Lambda上での特殊な環境の為かsys.stderr
のencode周りがうまく検出されなかったので、dulwich.porcelain.push
methodも若干修正。
Paramikoを使っているので、上記同様パッケージ作成はLinux上で。
以下はprivate repositoryをclone後、別branchに新規ファイルを追加後にcommitし、githubへpushする例。
それでは、良いLambdaライフを!