はじめに
普段、東京リージョン(ap-northeast-1)で運用している Lambda 関数があり、その中でオープンソースの Lambda Layer を利用しています。
あるプロジェクトで大阪リージョン(ap-northeast-3)にも同じ Lambda が必要となり構築する際、大阪リージョンでは一部の Lambda Layer がサポートされていないケースがありました。そのため、やむを得ず東京リージョンから該当の Layer をエクスポートし、自アカウントの大阪リージョンに新たに作成して対応しました。この対応について備忘録として記事にまとめておきます。
手順
必ず事前にライセンスと利用規約などを読み、複製することが問題無いことを確認して下さい。
1. 対象 Layer & バージョンの URL を取得
まず、以下の AWS CLI コマンドで対象 Layer のソースとなる S3 バケットの署名付き URL を取得しました。
AWS CLI - get-layer-version-by-arn
aws lambda get-layer-version-by-arn \
--arn arn:aws:lambda:ap-northeast-1:123456789012:layer:[LayerName]:[Version]
Content.Location
の値が URL になります。
2. Layer の実体をローカルへダウンロード
1 で取得した URL から実体一式を curl でダウンロードしました。
curl -o test-lambda-layer.zip "https://awslambda-ap-ne-1-layers.s3.ap-northeast-1.amazonaws.com/snapshots/123456789012/[LayerName]-999abc...(省略)"
3. S3 にアップロード
ダウンロードしたファイルは、そのままではサイズが大きく(50MB超過) Layer に登録出来なかったので一旦任意の S3 バケットへアップロードしました
4. Lambda Layer を作成
AWS マネジメントコンソールで上記 S3 ファイルの URL を指定して Layer を作成しました。
出来ました!
これで Lambda 内で同じように使用出来ます。
Ref
おわりに
思ったよりも簡単に Layer を複製出来ました。
使用する Layer のバージョンを更新する際には、同様な手順が必要になるなど課題はありますが、ひとまず複製がしたい場合にはこの手順が使えそうです。