レック・テクノロジー・コンサルティング株式会社TECH BLOG

【AWS Lambda】カスタムランタイム(コンテナ)でAWS CLIを動かす方法

はじめに

Re:Q Techブログをご覧いただきありがとうございます。 クラウド&ネットワーク技術統括部のR.Wです 先日、Lambda上でS3操作のためにAWS CLIを実行しようとしたところ、コマンドが見つからずエラーになりました。 AWSのベースイメージを使用していれば当然入っているものだと思っていましたが、本当に最小限のランタイムしか含まれていないようです。 今回は、コンテナイメージ形式のカスタムランタイムを使用して、AWS CLIを自由に叩ける環境を構築する手順をまとめます。

1.ファイル準備

今回はLambda関数をコンテナイメージから作成します。
AWS公式のチュートリアルを参考に、カスタムランタイムに必要な bootstrap と、メイン処理を行う function.sh を作成します。
・bootstrap(ランタイムの初期化用ファイル) ※公式のものをそのまま使用します。
・function.sh(実際の処理) 動作確認のため、AWS CLIのバージョンを出力する処理を追加します。

参考:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-walkthrough.html

bootstrap

#!/bin/sh

set-euopipefail

# Initialization - load function handler
source/var/runtime/"$(echo$_HANDLER|cut-d.-f1).sh"

# Processing
whiletrue
do
HEADERS="$(mktemp)"
# Get an event. The HTTP request will block until one is received
EVENT_DATA=$(curl-sS-LD"$HEADERS""http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/next")

# Extract request ID by scraping response headers received above
REQUEST_ID=$(grep-FiLambda-Runtime-Aws-Request-Id"$HEADERS"|tr-d'[:space:]'|cut-d:-f2)

# Run the handler function from the script
RESPONSE=$($(echo"$_HANDLER"|cut-d.-f2) "$EVENT_DATA")

# Send the response
curl"http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/response"-d"$RESPONSE"
done
function.sh
function handler () {
EVENT_DATA=$1
echo "$EVENT_DATA" 1>&2;
#awscliバージョン確認
VERSION="$(aws --version)"
echo $VERSION 1>&2

RESPONSE="Echoing request: '$EVENT_DATA'"

echo $RESPONSE
}

2.Dockerfile作成

AWS CLIをカスタムランタイムで動かすための Dockerfile を作成します。aws-cliのインストールする工程もここで組み込みます。

Dockerfile

# 1. ベースイメージの指定
FROM public.ecr.aws/lambda/provided:latest
# 2. AWS CLIのインストール
RUN dnf install -y awscli
# 3. ファイルの配置
COPY bootstrap function.sh /var/runtime/
# 4. 実行権限の付与
RUN chmod +x /var/runtime/bootstrap /var/runtime/function.sh
# 5. エントリポイントの設定
CMD [ "function.handler" ]

3.ECRへイメージをプッシュ

cloudshellの適用なディレクトリに準備したファイルをアップロードします。 ecr1.png

リポジトリの「プッシュコマンドの表示」からイメージプッシュまでのコマンドが表示されるため、その通りに実行する。 ecr2.png

4.Lambda関数作成

Lambdaコンソールから「関数の作成」を選択。 「コンテナイメージ」を選択し、先ほどプッシュしたイメージを指定します。
lambda1.png

Lambda関数を作成できたので動作確認をします。

lambda_test.png

ログを確認するとawscliのバージョンが出力されていますね。 lambda2.png

まとめ


以上がカスタムランタイム(コンテナ)でAWS CLIを動かす方法でした。標準のイメージに必要なツールが足りない場合でも、このようにDockerfileをカスタマイズすることで、自由度の高い実行環境を構築できます。

この記事をシェアする

  • Facebook
  • X
  • Pocket
  • Line
  • Hatena
  • Linkedin

資料請求・お問い合わせはこちら

ページトップへ戻る