Lambdaでaws cli configureを設定できるようにする

公開日時

s3 syncを実行する際に max_concurrent_requests を調整するとsyncのパフォーマンスが改善できる。

そこで、Lambdaで↓のように aws configure set で設定値の更新をしようとしたところ、

import { execSync } from 'child_process'

exports.handler = () => {
  execSync(`/opt/awscli/aws configure set s3.max_concurrent_requests 20`)

  // s3 sync
}

configファイルの書き込みができないとのエラーが発生した。

"errorMessage": "Command failed: /opt/awscli/aws configure set s3.max_concurrent_requests 20

[Errno 30] Read-only file system: '/home/sbx_user'",

(Lambdaでaws cliを使う方法については以前の記事を参照

Lambdaでは /tmp ディレクトリのみ書き込みができる仕様となっている(最大512MB)。

また、aws cliは AWS_CONFIG_FILE を設定することでconfigファイルの場所を変更できる。

ホームディレクトリの場所はオペレーティングシステムによって異なりますが、環境変数 %UserProfile% (Windows の場合) および $HOME またはチルド ~ (Unix ベースのシステムの場合) を使用して参照されます。

AWS_CONFIG_FILE 環境変数を別のローカルパスに設定することで、config ファイルの場所をデフォルト以外の場所に指定できます。

そこで、Lambdaの環境変数に↓を設定した。

AWS_CONFIG_FILE=/tmp/.aws/config

これでエラーなく aws configure set で設定変更ができるようになった。

参考


Related #lambda

RDSを定期的に停止するLambdaを作る

手動起動は大変なので

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

Nodejs12のLambdaでawscliを使う

aws-lambda-layer-awscliを使う

s3の署名付きURLが有効期限より前に見れなくなってしまう

IAMロールではなくIAMユーザの権限でURLを生成する必要があった

AWS Lambdaでpuppeteerを動かしスクリーンショットをs3に保存する

前から気になっていたHeadless Chromeをjsから操作できるpuppeteerを使って、スクリーンショットをs3に保存するAPIを作ることにした。

CDK aws-lambda-nodejsのビルド時間を短縮する

Parcel v2.0.0-beta.1を使ってローカルでバンドルする