手動で作った lambda を code として管理する

tl;dr;

既存の lambda をダウンロードし、コンソールを使わず sam を用いて管理する方法をまとめた。deploy 方法から注意事項までを記載。

既存 lambda をダウンロード

 lambda をダウンロードすると大きく2つに分けてダウンロードすることができる。

sam のドキュメントについてはこちら

関数のエクスポートを押下すると、

 

  • AWS SAM ファイルのダウンロード
  • デプロイパッケージのダウンロード

が選択できる。

端的に言うと

  • lambda の設定ファイル
  • プログラムのコード

だ。両方ダウンロードする。

sam のセットアップ

公式ドキュメントの手順を準拠すると、 sam のインストールは以下の通りとなる。

deploy ディレクトリの初期化

今回は python3.8 を利用するので以下のように設定した。
ダウンロードした zipファイル は unzipコマンドなどで解凍しておく。

ダウンロードした yamlファイル を、 template.yml と言うファイル名に変更する。

requirements.txt も必要になるので、作成する。使わない場合でも空のファイルを用意する必要があるので、 touch するなり作成する。

以下のように表示されれば成功。

ちなみに、sam コマンドでも、.aws 配下の profile を読み込むことも可能。

sam build --profile cloudformation 

エラーが発生した場合は debugモード で確認することができる。

sam build --debug

あとは invoke するなり、deploy するなりすればよい。

deploy

sam deploy --guidedコマンドを利用することで deploy が可能。

問題なければyを押す。

確認

成功すれば以下の通り作成される。

function name が、意図した名前と違う場合、明示的に指定することができる。

template.yml でFunctionNameを指定する。

再度sam build、 sam deploy を行うと、新しい lambda function に置き換わる。

注意点

手動で作り上げた lambda を sam を用いて上書いて管理することはできないのか。
結論、そのままはできない。

現在自分が動かしているものについては、手動で作った lambda は削除し、その後 sam を用いたdepoloy に切替えるなどして対応している。

 

【アップデート】ついに来た!CloudFormationで手動で作成したリソースをStackにインポート可能になりました

 

しかし、CloudForomation で手動で作成したリソースをインポートできるようになったので、これを使えばできるかも。(未確認)

試したことある人いたら twitter でもご一報ください。