カスタムランタイムを使ってLambdaでAWSCLIを動かす

AWS運用自動化サービス「Cloud Automator」

こんにちは、技術一課の加藤です。

先々週ごろにLambda上でAWSCLIを動かしてS3 Syncする – サーバーワークスエンジニアブログというブログを書きました。
この記事ではAWS CLIをローカルインストールしてPythonのコード上から呼び出すという実装をしています

ですがそもそもAWS CLIはCLIコマンドで呼び出すもの。Pythonからサブプロセスを切ってコマンドを叩くのはやや冗長な気がします。

ならbashから直接呼ぶ方が中間層がなくてスマートなのでは…?

ということで、カスタムランタイムを使ってbashから直接AWS CLIを呼び出してみることにしました。

前提

今回はカスタムランタイムでAWS CLIを動かすのが主題なので、処理はAQWS CLIのバージョン出力にとどめます。S3 Syncなどしたい場合は、 aws —version の箇所を任意のコードに変更してください。

またカスタムランタイム自体の説明については、公式をご覧ください。
カスタム AWS Lambda ランタイム – AWS Lambda
簡単に言えば、あらゆる言語をLambdaで動かせるよ、というものになります。

手順

AWS CLIをLayerにおき、ハンドラー関数から呼ぶ構成にします。

  1. bootstrapファイルを作成
  2. bootstrapファイルをLayerとして登録
  3. ハンドラー関数を書いたfunction.shファイルを作成
  4. Lambdaを作成

bootstrapファイルを作成

bootstrapファイルはカスタムランタイムのエントリポイントとなり、必ず用意する必要があるファイルになります。このファイルでAWS CLIのインストールとメイン関数の呼び出しを行います。

bootstrapファイルをLayerとして登録

作成したbootstrapファイルをLayerとして登録します。以下はbashのコマンドになります。

ハンドラー関数を書いたfunction.shファイルを作成

次に実際にAWS CLIを使って処理を行うハンドラー関数を作成します。
先述の通り今回はバージョン出力のみを行いますが、実際にはS3 Syncなど行いたい処理をここに書いていくことになります。

Lambdaを作成

ハンドラー関数を作ったので、Lambdaをデプロイしてみます。
Lambdaの実行用ロールを用意しておいてください。

では実行してみます。

無事、aws cliのバージョンを取得することができました。
他のメソッドも試して遊んでみてください。

AWS コマンドラインインターフェイス

おわりに

前回に引き続き、Lambda上でAWS CLIを呼ぶというややアクロバティックな実装をご紹介しました。

利用場面はかなり限られるとは思いますし、本番稼働するシステムに組み込むのはやや微妙な気がします。
とはいえやってできないものではないことがわかりましたので、もし必要になった場合は参考にしてみてください。

AWS運用自動化サービス「Cloud Automator」