Product
概要​映像​グラフィック​ドキュメント​
Enterprise
Story
レター/テクノート​ニュース/公知​
Pricing
Ja
한국어English日本語日本語
利用ガイド
LETR WORKSスタート
한국어English日本語
한국어English日本語
Node.js Lambda と EFS を使用して大きなサイズの S3 フォルダーとファイルを圧縮する
2024-07-17

‍

Node.js Lambda と EFS を使用して大きなサイズの S3 フォルダーとファイルを圧縮する

‍

パク・ヒョンテク

Twigfarmのシニア・フルスタック・エンジニア

‍

AWS S3 は非常に便利なクラウドストレージです。AWS CLI、SDK、API などでさまざまな方法で保存されたファイルをアップロードおよびダウンロードすることはできますが、フォルダ全体とそのサブフォルダやファイルを再帰的にダウンロードすることはできますか?注目すべきは、S3 にはそのような機能がないということです。フォルダーを再帰的に圧縮し、その zip ファイルをダウンロード可能にする独自の方法を開発する必要があります。

‍

必要条件

目標は、フォルダ構造ツリーを保存しながら、フォルダ、サブフォルダ、およびファイル全体をS3バケットのフォルダの下に圧縮することです。ファイルは大きくなる可能性があります (Lambda の一時ストレージのサイズである 512 MB 以上)。

‍

S3 へのファイルの保存方法

S3バケットに以下のようにフォルダを作成し、ファイルを保存しました。

image

ただし、簡潔に言うと、これらはS3内のフォルダーではありません。次のキーを含むファイルは 4 つだけです。

  • folder1/sub1/image.png
  • folder1/sub2/test.txt
  • folder2/large.mov
  • folder2/test2.pdf

‍

解決策

Memories S3にはフォルダーの概念がなく、各ファイルのキーにはプレフィックスとしてフォルダー情報が付きます。各フォルダレベルは '/' で区切られ、ファイル名で区切られます。(つまり、folder1/sub1/image.png)

フォルダ情報プレフィックスの付いたキーを使用して、EFS にフォルダを作成し、S3 からファイルをダウンロードすることができます。

その後、Lambda は単純に圧縮を行い、その zip ファイルを S3 にアップロードします。次の図は、実装の順序と S3 と EFS でのファイルの用途を示しています。

image

覚えておくべきことの 1 つは、Lambda と EFS は同じ VPC 内にある必要があるということです。

‍

EFS (エラスティックファイルシステム) とアクセスポイントの作成

Amazon EFS が便利な理由はいくつかあります。

  • EFS は Linux ファイルシステムに似ています。次のようなファイルコマンドを使用できますか? mkdir、 ls、 CP、 rm、など。
  • Lambdaの一時ストレージを使用できるサイズ制限は512 MB未満です

EFS を作成しましょう。に進んでください。 伸縮自在なファイルシステム AWS コンソールでクリックします ファイルシステムの作成。

image

次にクリック 作成。

次は、後でLambda関数で使用するアクセスポイントを作成します。先ほど作成したファイルシステムを選択します。次に、をクリックします。 アクセスポイント —> アクセスポイントの作成。

入力すべき入力値は次のとおりです。

  • ルートディレクトリパス:/efs
  • POSIX ユーザー
  • ユーザ ID: 1000
  • グループ ID: 1000
  • ルートディレクトリ作成権限
  • オーナーユーザ ID: 1000
  • オーナーグループ ID: 1000
  • ルートディレクトリパスに適用する POSIX 権限:0777
image

‍

EFS にアタッチされた Lambda 関数を作成して設定する

次のように Node.js Lambda 関数を作成してみましょう。

image
image

Lambda 関数が作成されたら、をクリックします。 設定 —> ファイルシステム —> ファイルシステムの追加。

image

先ほど作成した EFS アクセスポイントを選択してください。そして、入れてください。 /mnt/efs ローカルマウントパス用。これは重要な理由からです。 /mnt/efs EFS フォルダになります。

クリック [保存]、これでアクセスできるようになりました /mnt/efs ラムダ関数から。

‍

ラムダから S3 へのアクセス

VPC エンドポイント

https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html によると、

VPC エンドポイント 仮想プライベートクラウド (VPC) とサポート対象サービス間の接続。必ずしもインターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続を使用する必要はありません。

VPC 内の Lambda から S3 バケットにアクセスするには、S3 用の VPC エンドポイントを設定する必要があります。に移動してください。 VPC そしてクリック エンドポイント —> エンドポイントの作成。次に、次のように入力を選択します。

image
image

次にクリック エンドポイントの作成。VPC 内の Lambda に到達すると S3 にアクセスできるようになりましたが、特定の S3 バケットに実際にアクセスするにはもう 1 つの手順が必要です。

‍

ラムダロール

Lambda ロールは Lambda 関数の作成中に作成されます。Lambda の既存のロールを使用できますか。ここでは、新しいロールを作成しました。Lambda 関数に移動し、をクリックします。 設定 —> パーミッション。次に、以下のロールを選択します 実行ロール。

image

次に、 権限ポリシー —> クリック 権限を追加 —> インラインポリシーの作成。次の画面で、を選択します。 JSON タブ。次に、以下をコピーして貼り付けます。YOUR_BUCKET_NAME を自分のバケット名に置き換えてください。

クリック レビューポリシー。好きなポリシー名を入力し、をクリックします。 ポリシーの作成。

‍

その他のラムダ構成

処理時間とファイルサイズはメガバイト単位で測定できるため、Lambdaのデフォルトのメモリサイズ (128 MB) とタイムアウト (3 秒) では不十分です。この目的のために、メモリサイズとタイムアウトは 4096 MB と 2 分に設定され、節約されています。 設定 —> 一般的な構成。

‍

ラムダコード

これが最終的な Lambda コードです。このコードは私たちが行ったことを実装しています。

  1. S3 から EFS にフォルダ/ファイルをコピーします。
  2. EFS に保存されているファイルを ZIP 形式で圧縮します
  3. ZIP ファイルを S3 にアップロードします
  4. 一時的な EFS ファイルの保存

コードデコミッシブが自滅することを願っています。1 つだけ言っておきたいのは、私たちが使ったのはオープンソースの Node.js パッケージという名前です。 アーカイバ フォルダとファイルの圧縮用。Node.js でファイルを圧縮する方法はたくさんあります。自分に合ったものを選ぶことができます。

あるべきだと言う トライ/キャッチ エラーケースを処理するためのブロック。しかし、ここでは簡単にするために省略しています。

‍

結果

S3バケットを確認してみましょう。

image

ご覧のとおり、という名前の新しいzipファイルがあります my-archive.zip。ファイル名をクリックして、ファイルをダウンロードして解凍してみましょう。

image

フォルダとファイルの構造は、この記事の冒頭にあるものとまったく同じです。

S3でフォルダとファイルを圧縮するというこの単純な要件を実現するために従うべき手順はたくさんありましたが、AWSを扱う必要がある場合はかなり標準的です。

  • AWS サービスの作成と起動
  • 適切な権限を与える
  • ロジックを実行する

慣れるまで少し時間がかかりました!:)

‍

読んでいただきありがとうございます。

‍

‍

✏️콘텐츠 번역&현지화, 한 곳에서 해결하세요.

• 영상번역 툴 무료 체험하기
• 월간 소식지로 더 많은 이야기 읽어보기 💌


全リストを見る

次のノートを見る

LETR note
コンテンツ制作におけるパラダイムイノベーション-AI吹き替え技術の現在と未来
2024-12-12
WORKS note
NERと自然言語処理を利用したレターワークスのAIエージェント
2024-12-11
WORKS note
マルチモーダルのコンセプトとアプリケーション、LETR WORKS AI テクノロジー
2024-12-02
利用ガイド
お問い合わせ​
Twigfarm Co.,Ltd.
事業者登録番号 : 556-81-00254  |  通信販売番号 : 2021-ソウル特別市鍾路-1929
代表 : ペク・ソンホ  |  個人情報管理責任者 : パク・ヒョンテク
ソウル本社 : (03187) ソウル特別市鍾路区6(瑞麟洞)6階
光州支社 : (61472 )光州広域市東区錦南路 193-22
シンガポールアジア事務所 : (048581) 16 RAFFLES QUAY #33-07 HONG LEONG BUILDING SINGAPORE
Family site
TwigfarmLETR LABSheybunny
利用約款
|
プライバシー規約
ⓒ 2024 LETR WORKS. All rights reserved.