1
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?

Lambda関数でAWS CLIを使用する

Posted at

はじめに

この記事では、AWS LambdaでAWS CLIを使用する手順についてまとめています。

対応方法

AWS Lambdaでは、ファイル書き込みが許可されているのは /tmp 配下のみです。
これはつまり、AWS Lambdaで実行するプログラムからはパッケージのインストールは行えないということを意味します。

そのため、対応方法としては、デプロイパッケージにまとめてしまうか、Lambdaレイヤーを使用するかになるかと思います。

今回の私のケースでは、AWS CLIは他の関数でも使用する可能性があることなどを踏まえて、Lambdaレイヤーを使用することにしました。
Lambdaレイヤーについての詳細な説明は、AWS公式ドキュメントに譲ります。

対応手順

全体の流れとしては、Lambda関数で使用するOSのDockerコンテナでAWS CLIのzipファイルを作成し、そのzipファイルでLambdaレイヤーを作成するという流れになります。

1. Lambda関数のOSに対応したDockerコンテナを起動する

この記事では、Amazon Linux 2023を使用します。

local
# 任意の作業ディレクトリに移動
$ cd ~/Desktop
# Amazon Linux 2023のコンテナを起動
$ docker run -it --rm -v ./volume:/volume amazonlinux:2023 bash

後の作業で使用する whichzip を先にインストールしておきます。

container
$ dnf -y install which zip

2. コンテナ内でAWS CLIをインストール

AWS CLIのインストールについては、AWS公式ドキュメントの手順(Linuxへのインストール方法)通りに行います。

container
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ ./aws/install

これで、AWS CLIが使用可能となります。

container
$ aws --version

3. AWS CLIをzipファイルにまとめる

では、コンテナ内にインストールされたAWS CLIを使用して、Lambdaレイヤーにアップロードするzipファイルを作成します。

aws コマンドのパスを確認すると、最終的には /usr/local/aws-cli/v2/current/dist に実行ファイルが格納されていることが分かります。

container
# まずはawsコマンドのパスを確認
$ which aws
/usr/local/bin/aws

# 出力されたパスはシンボリックリンクです
$ ls -l /usr/local/bin/aws
lrwxrwxrwx 1 root root 37 Jul 29 04:32 /usr/local/bin/aws -> /usr/local/aws-cli/v2/current/bin/aws

# リンク先のパスを確認すると、こちらもシンボリックリンクになっています
$ ls -l /usr/local/aws-cli/v2/current/bin/aws
lrwxrwxrwx 1 root root 11 Jul 29 04:32 /usr/local/aws-cli/v2/current/bin/aws -> ../dist/aws

# さらにリンク先のパスを確認すると、実行ファイルを確認できました
$ ls -l /usr/local/aws-cli/v2/current/dist/aws
-rwxr-xr-x 1 root root 6753688 Jul 29 04:32 /usr/local/aws-cli/v2/current/dist/aws

この実行ファイルが格納されている dist をzipファイルにまとめます。
Lambdaレイヤーは最終的にLambda関数内では、/opt に展開され、実行パスは /opt/bin になります。
実行パスを上書くことも可能ですが、今回はデフォルトの実行パスで動作するように、bin に実行ファイルが格納されるようにzipファイルを作成します。

container
# docker runコマンドのオプションで指定したボリュームディレクトリにコピーします
$ cp -r /usr/local/aws-cli/v2/current/dist /volume/bin

# /volume に移動してzipファイルを作成します
$ cd /volume
$ zip -r awscli.zip bin

4. Lambdaレイヤー作成

Lambdaレイヤー作成画面でも表示されますが、アップロードするzipファイルが10MBを超える場合は、S3からのアップロードが推奨されています。

今回作成したzipファイルは10MBを超えていたため、S3を使用することにします。
まずはS3バケットにzipファイルをアップロードします。
先ほど作成した ~/Desktop/volume/awscli.zip をS3バケットにアップロードします。

スクリーンショット 2024-07-29 14.15.23.png

そして、Lambdaレイヤーを作成します。

スクリーンショット 2024-07-29 14.16.12.png

5. Lambda関数にレイヤーを登録

ランタイムが Amazon Linux 2023 のLambda関数を作成します。

スクリーンショット 2024-07-29 14.21.35.png

作成したLambda関数に前の手順で作成したレイヤーを登録します。

スクリーンショット 2024-07-29 14.22.47.png

実行するスクリプトを編集して、aws コマンドが使用できることを確認します。
ここでは、aws --version を実行しています。

スクリーンショット 2024-07-29 14.28.50.png

テスト実行をして結果を確認すると、問題なくバージョンが出力されています。

スクリーンショット 2024-07-29 14.28.26.png

最後に

Lambdaレイヤーを用いて、Lambda関数でAWS CLIを使用するための手順をまとめました。
一点最後に補足として、この記事の内容は、とにかくAWS CLIを使用することだけを考えたものになっていますが、Lambda関数にはデプロイパッケージサイズの上限や、登録するレイヤー数の上限がありますので、他のパッケージも併せて使用する場合などは、このあたりも踏まえて、対応方法、Lambdaレイヤーの作り方等を検討する必要があると思います。

最後まで読んでいただきありがとうございました。
読んでいただいた方にとって何らかのプラスになっていれば嬉しいです。

参考ページ

1
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
1
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?