この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。アノテーションの中村(誠)です。 今回は、Node.js で Lambda から S3 に年月のフォルダを作成するコードを書いてみたので紹介します。
対象読者
・Node.js を使用している方
・AWS SDK for JavaScript の基本的な使用方法がわかる方
・Lambda の基本的な使用方法がわかる方
・プログラムから S3 に年月ごとのフォルダを作成したいと思っている方
使用する API
PutObject API を使用することで、フォルダを作成できます。
コード
const AWS = require("aws-sdk");
AWS.config.update({ region: "ap-northeast-1" });
AWS.config.apiVersions = {
s3: "2006-03-01",
};
exports.handler = async () => {
const date = new Date();
const year = date.getFullYear();
//月は 0 埋め 2 桁
const month = `0${date.getMonth() + 1}`.slice(-2);
const params = {
Bucket: "your-bucket-name",
Key: `${year}/${month}/`,
};
const s3 = new AWS.S3();
try {
// putObject でフォルダを作成
await s3.putObject(params).promise();
} catch (err) {
console.log(err);
}
};
解説
年月取得
const date = new Date();
const year = date.getFullYear();
//月は 0 埋め 2 桁
const month = `0${date.getMonth() + 1}`.slice(-2);
getFullYear()
とgetMonth()
で現在の年月を取得しています。
getMonth()
は 0 始まりという仕様なので、現在の月に合わせるため、getMonth() + 1
としています。
パラメーター指定
const params = {
Bucket: "your-bucket-name",
Key: `${year}/${month}/`,
};
"your-bucket-name"
に使用したい S3 バケット名を入力します。
フォルダはyear/month
の形式で作成されるように指定しています。
フォルダ作成
const s3 = new AWS.S3();
try {
// putObject でフォルダを作成
await s3.putObject(params).promise();
} catch (err) {
console.log(err);
}
putObject
にパラメーターを渡し、フォルダを作成します。
今回は戻り値が必要ないので取得していませんが、戻り値は ETag
でした。
必要に応じて取得してください。
Lambda の設定
コードは適宜アップロードしてください。
・ランタイム
Node.js 14.x
・必要な権限
AWSLambdaBasicExecutionRole
AmazonS3FullAccess (必要に応じて権限を絞ってください)
設定後にテスト実行すると、S3 にフォルダが作成されているはずです。
S3 コンソールで確認
S3 コンソールで確認してみましょう。
現在の年月でフォルダができていることが確認できました。 ファイルなどはアップロードしていないので、月フォルダの中身は空です。 必要に応じでログや生成したファイルなどをフォルダに PUT してください。
まとめ
今回は、Node.js で Lambda から S3 に年月のフォルダを作成するコードを紹介しました。 「検索すれば山ほど出てくるんだろう」と思って調べたら、意外なことにヒットしなかったので、それなら自分がと思って紹介しました。 EventBridge のスケジューリングと組み合わることで、毎月自動的にフォルダを作成するということも可能だと思います。 ご覧頂いた方の参考になれば幸いです。
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。