4
2

More than 1 year has passed since last update.

AWS Lambda関数内でaws-cliを呼び出せる様にしたい

Last updated at Posted at 2021-10-01

目的

aws-cliで行っていた処理を、Lambda関数で実行できるようにして、最終的にslackなどをトリガーにして、簡単に実行できる様にしたい。その前準備として、lambda関数でaws-cliを使えるように、lambdaレイヤーを使用して、lambda関数にaws-cliを追加するレイヤーを準備する。

結果

GithubのREADME.mdに従ってコマンドを実行するだけで、作成&デプロイがされます。
(git cloneしてデプロイするだけ)

仕組み

aws-cliはpythonスクリプトで実装されているため、pythonモジュールとしてインストールしたあと、該当するファイルをコピーする、実行環境が変わるため、awsスクリプトの先頭のシバンを#!/var/lang/bin/pythonに書き換えて、あとはzipに固めてデプロイするだけで、lambda関数から使えるようになります。
この処理をスクリプトとして纏めると、下記になります。

#!/usr/bin/env bash

set -eu;

cd `dirname ${0}`;
rm -rf ./tmp;
mkdir ./tmp;
python3 -m venv ./tmp;
./tmp/bin/pip install awscli;
rm -rf ./lambda-layer;
mkdir lambda-layer;
cp ./tmp/bin/aws ./lambda-layer;
cp -r ./tmp/lib/python3.*/site-packages/* ./lambda-layer;
rm -rf ./tmp;
cat ./lambda-layer/aws |(rm ./lambda-layer/aws; sed '1s/.*/\#\!\/var\/lang\/bin\/python/' > ./lambda-layer/aws)

デプロイのawsコマンドは/opt/awsに配置されており、Python3のランタイムを持つLambda関数に、該当するレイヤーを付けた後、下記のようにpythonからシェルコマンドとして使用できます。

import subprocess
subprocess.call('/opt/aws --version', shell=True)
4
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
4
2