ページ2020.08.07AWSLambda上でwgetコマンドを実行できるか?内山浩佑エンジニアの内山です。今回は、Lambda上でwgetコマンドを入れるときに色々と手間取ったので、その知見を共有させていただきます。Layerを関連付けるLambdaを実行して、wgetコマンドが実行できていることを確認おわりにLambdaにはwgetコマンドがないLambdaには、デフォルトでwgetコマンドはインストールされていません。そのため、Lambda上にwgetバイナリファイルをアップロードする必要があります。どこかのサーバにインストールされているwgetバイナリファイルを、単純にアップロードして実行すると、以下のようなエラーが出てしまいます。Objectが存在しないために起こります。ObjectもLambdaにアップロードする必要があります。今回は、以下のような手順で、wgetコマンドをLambda上で、実行できるようにしました。Layerを関連付ける以下、それぞれの詳細を紹介していきます。Dockerコンテナ上でwgetをソースからビルド以下のDockerfileを作り、wgetをDockerコンテナ上でビルドします。/今回はPythonからwgetコマンドを実行する形にしているため、Dockerイメージはlambda:build-pythonを使用しています。Objectを最小限にするためです。ビルドは、以下のように実行します。.Dockerコンテナ上からwgetバイナリファイルをコピーして、Lambdaにアップロードビルドが終了したら、以下のように、Lambdaに上げる用のディレクトリを作成し、ホスト側にwgetバイナリファイルをコピーしてきます。handlers/binまた、wgetコマンドを実行するPythonスクリプトを以下のように実装しました。handlersmain.zipは、Lambdaにアップロードします。Objectが必要でした。/lib64/libgnutls.so.28/lib64/libnettle.so.4/lib64/libhogweed.so.2/lib64/libgmp.so.10これらすべてがシンボリックリンクなので注意してください。ObjectをDockerコンテナからコピーしてきます。Objectが違うかもしれないので、適宜必要なものをコピーしてください。コピーしたものは、zipで固めます。lib/*layer.zipをレイヤーにアップロードします。今回は、Python3.8ランタイムで実行する想定です。Layerを関連付ける以下の画面で、レイヤーをLambda関数に関連付けます。Lambdaを実行して、wgetコマンドが実行できていることを確認Lambdaを試しに実行すると、以下のようなメッセージが出力され、wgetコマンドを実行できていることを確認できると思います。59.1M=0sおわりに色々と手間取りましたが、Lambda上でwgetコマンドを実行できるようになりました。参考になれば幸いです。ウェブサービス株式会社(DWS)公式ブログ記事URLをコピーしました。