@ijin

[Michael H. Oshita]

LambdaでSSHやGitを使ってみよう

AWS Lambda上でsshgitを使えたら便利!思ったけど、そもそもバイナリ自体が入ってない上にパッケージのインストールが出来ないので回避方法を悩んでいたところ、幸いそれぞれ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ライフを!

Comments