1
2

More than 1 year has passed since last update.

AmplifyでLayer付きのFunctionをローカル実行(Amplify Mock)したい

Posted at

対象のLambda Function

Layerが設定されています。
Layerには共用のNPM Packageがインストールされています。

課題

Amplify MockではLayer付きFunctionのローカル起動をサポートしていません。
起動時に以下のようなエラーが吐き出されます。

Unable to mock myFunction. Mocking a function with layers is not supported. To test in the cloud: run "amplify push" to deploy your function to the cloud and then run "amplify console function" to test your function in the Lambda console.

1. Mock起動前にLayerを外す

Amplify CLI GitHub Issueにコメントがあります。
amplify-meta.jsonからjqを利用してLayerを外すことで起動できるようです。

2. FunctionにLayer環境を移植する

1でLayerを外すことで、そこにインストールされているライブラリが利用できなくなります。
今回のケースでは、NPM Packageを利用できるようにする必要があります。

該当Functionのpackage.jsonに記載していればMock起動時にインストールしてくれるので、
Layerのpackage.jsonの depndencies を転記すれば良さそうです。

具体的な対応方法

手動対応は当然やりたくないので、コマンドで実行します。
必要に応じてファイルのバックアップは取っておきましょう。

1. Mock起動前にLayerを外す

FUNCTION_NAME="myFunction"
MOCK_META_JSON=`jq ".function.$FUNCTION_NAME.dependsOn = []" /path/to/amplify-meta.json`
echo "$MOCK_META_JSON" > /path/to/amplify-meta.json

2. FunctionにLayer環境を移植する

以下はFunctionのpackage.jsonのdependenciesをLayerのもので置き換えるケースです。

LAYER_DEPENDENCIES=`jq .dependencies /path/to/layer/package.json`
PKG_JSON=`jq . /path/to/function/package.json | jq ". + {\"dependencies\": ($LAYER_DEPENDENCIES) }"`
echo "$PKG_JSON" > /path/to/function/package.json

Amplify Mockでローカル実行する

$ amplify mock function $FUNCTION_NAME --event src/event.json` 

amplify-meta.json, package.jsonを戻すのをお忘れなく。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2