0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PR: レック・テクノロジー・コンサルティング株式会社
Re:Q 採用サイト

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

0
Posted at

みなさん、こんにちは!
先日、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の適用なディレクトリに準備したファイルをアップロードします。
image.png

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

4.Lambda関数作成

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

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

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

まとめ

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

0
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?