2
0

node-red-contrib-s3モジュールでAmazon S3 bucketのSession Token対応してみた

Posted at

はじめに

以前、Herokuのdyno無料枠が廃止された際に、移行先(代替え先)の検討をしました。

その中の一つ、Cyclicはcomputeリソース以外にストレージリソース(AWS S3 bucket)が提供されています。

しかし、外部から直接AWS S3 bucketへアクセスする場合、通常のAccess Key、Secret Access Keyに加えて、60分間だけアクセスできるSession Tokenを使用する必要があります。

1.jpg

Session Tokenに対応する

Cyclicの管理画面で、Data/Storage項目で表示されるLocal Credentialsをコピーして、ターミナルで実行すると、環境変数としてCredential情報が設定されます。

リスト表示するプログラム(Javascript版)

const { S3Client, ListObjectsV2Command } = require("@aws-sdk/client-s3");

// AWS認証情報とクライアントを設定
const s3Client = new S3Client({
    credentials: {
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
        sessionToken: process.env.AWS_SESSION_TOKEN
    },
    region: 'ap-southeast-2'
});

// S3バケット内のファイルリストを取得する関数
async function listS3Bucket(bucketName) {
    try {
        const data = await s3Client.send(new ListObjectsV2Command({ Bucket: bucketName }));
        console.log("Bucket Contents:", data.Contents);
    } catch (err) {
        console.log("Error", err);
    }
}

// バケット名を指定して関数を呼び出し
listS3Bucket('cyclic-easy-pike-poncho-ap-southeast-2');

2.jpg

リストを表示、ファイルをアップロード・ダウンロードするプログラム(Python版)

import boto3

s3 = boto3.resource('s3')

BUCKET_NAME = 'cyclic-easy-pike-poncho-ap-southeast-2'

# バケット内の全オブジェクトを表示
bucket = s3.Bucket(BUCKET_NAME)
objects = bucket.objects.all()
for obj in objects:
    print(obj.key)

# オブジェクトをアップロード
#bucket.upload_file('file.txt', 'file.txt')

# オブジェクトをダウンロード
#bucket.download_file('file.txt', 'download.txt')

node-red-contrib-s3

Session Tokenに対応したカスタムノードを作成しました。

2024年2月1日にマージされました。🎉

サンプル

ねこ画像APIでねこ画像を取得し、S3へ格納、S3から取得するサンプルフローです。

3.jpg

スクリーンショット 2024-02-03 14.41.03.png

スクリーンショット 2024-02-03 14.41.13.png

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