バイナリ共有ライブラリの依存関係を含む AWS Lambda デプロイパッケージを作成したいと思っています。パッケージを再コンパイルせずにどのように Amazon Linux AMI パッケージを使用できますか?
Lambda デプロイパッケージは、コードと依存関係を含む .zip ファイルです。Lambda 実行環境は、特定の Amazon Linux AMI とカーネルバージョンに基づいています。Lambda デプロイパッケージで使用されるネイティブバイナリはこの環境でコンパイルする必要があり、64 ビットのバイナリのみサポートされています。
Amazon Linux AMI ネイティブバイナリパッケージを使用するには、64 ビットライブラリを抽出し、Lambda デプロイパッケージに含めることができます。(この記事では扱っていないもう 1 つのオプションは、共有ライブラリにソースコードをダウンロードして、パッケージを再コンパイルすることです)
Amazon Linux AMI から Amazon EC2 インスタンスを起動する
1. Lambda 実行環境と利用できるライブラリ を開き、「amzn-ami-hvm」で始まる AMI 名を見つけます。
2. AMI 名のリンクを選択して Amazon Elastic Compute Cloud (Amazon EC2) コンソール で AMI の検索結果を開きます。
3. [起動] を選択して、起動インスタンスウィザードを開きます。
4. [Review and Launch] を選択して、ウィザードでデフォルトのインスタンス起動の詳細を受け入れてから、[起動] を選択します。
インスタンスからライブラリを抽出する
1. インスタンスに接続し、次のコマンドを実行してパッケージを抽出するツールをインストールします。
sudo yum install -y yum-utils rpmdevtools
2. コードに必要なのがどのライブラリと依存関係かが不明な場合は、yum を使用して確認します。
たとえば、Microsoft SQL Server および Sybase データベース用の FreeTDS ライブラリの場合は、以下のコマンドを実行します。
sudo yum install freetds
注意: この例では、依存関係に必要な gnutls、libtool-ltdl、unixODBC をインストールするように要求するプロンプトも表示されます。
3. ライブラリと依存関係をダウンロードして展開するには、次のコマンドを実行します。
cd /tmp yumdownloader unixODBC.x86_64 freetds.x86_64 libtool-ltdl.x86_64 gnutls.x86_64 rpmdev-extract *rpm
4. ライブラリを Lambda デプロイパッケージのディレクトリにコピーするには、次のコマンドを実行します。
sudo mkdir -p /var/task sudo chown ec2-user:ec2-user /var/task cd /var/task /bin/cp /tmp/*/usr/lib64/* /var/task
デプロイパッケージの作成
以下のいずれかを行います。
- コードとその他のリソースを同じディレクトリにコピーし、コードとランタイム環境に固有の選択があれば実行してからテストします。
- 次のコマンドを実行して、.zip ファイルデプロイパッケージを作成します。
cd /var/task zip -r9 /tmp/MyCodeWithLibraries.zip *
.zip ファイルデプロイパッケージをデプロイして、テストします。
デプロイパッケージの作成の詳細については、「サンプル関数コード」および「環境変数を使用した Lambda 変数の作成」を参照してください。
サポートが必要ですか? AWS サポートセンターをご覧ください。
公開日: 2018 年 11 月 14 日