Lambdaでデータを蓄積する前に、保存先を用意しておこう

Lambdaでは、取得した為替データや履歴データをS3へ保存して蓄積していく使い方をよくします。

このとき大事なのは、Lambdaが保存するためのS3バケットを先に作っておくこと です。

Lambdaは「保存処理をする側」であり、保存先そのものが自動で必ず作られるわけではありません。
そのため、まずは 受け皿になるS3バケットを事前に作成 しておく必要があります。

今回は、AWSコンソールからS3バケットを作成する手順 をまとめます。


まず結論

S3バケットは先に作っておく

通常は次の流れになります。

  1. S3バケットを作成する
  2. Lambda側でそのバケット名を指定する
  3. Lambdaが実行されるたびに、そのバケットへデータを保存する

つまり、S3は保存庫、Lambdaはその中にデータを入れていく処理 です。


1. S3の「バケットを作成」を開く

AWSマネジメントコンソールで Amazon S3 を開き、
「バケットを作成」 を選びます。

ここで新しい保存先を作っていきます。


2. 一般的な設定を入力する

最初に、バケットの基本情報を設定します。

AWSリージョン

Lambdaと同じリージョンにしておくとわかりやすいです。
アジアパシフィック(東京)ap-northeast-1 になっています。

Lambdaも東京リージョンで動かしているなら、S3も同じ東京にしておくのが管理しやすいです。

バケットタイプ

通常は 「汎用」 を選べば大丈夫です。

バケット名

ここには、他の人と重複しない名前を入れます。
S3のバケット名はグローバルで一意である必要があります。

たとえば次のような名前がわかりやすいです。

  • fx-mizuho-pairs
  • mizuho-pair-monitor-data
  • mizuho-pair-monitor-apne1

すでに使われている名前だと作成できないので、その場合は少し名前を変えます。


3. オブジェクト所有者は「ACL無効」でOK

次に オブジェクト所有者 の設定があります。

ここは通常、「ACL 無効(推奨)」 のままで大丈夫です。

この設定にしておくと、バケット内のオブジェクト管理がシンプルになります。
個人検証やLambdaからの保存用途では、このままで進めるのがわかりやすいです。


4. パブリックアクセスはブロックしたままにする

「このバケットのブロックパブリックアクセス設定」 では、
「パブリックアクセスをすべてブロック」 をオンのままにしておきます。

通常は一般公開するものではありません。
そのため、外部公開しない設定のまま にしておくのが安全です。

特別な理由がない限り、ここは変更しなくて大丈夫です。


5. バージョニングは最初は無効でもOK

バケットのバージョニング は、同じファイルの過去版も保存できる機能です。

最初の構築段階では、無効のままでもOK です。
まずはシンプルに保存できる状態を作ることを優先します。

あとから

  • 上書きミスに備えたい
  • 過去版を残したい

という運用にしたくなったら、有効化を検討すれば十分です。


6. タグは必要ならあとで追加する

タグ・オプション は、リソース管理用のメモのようなものです。

たとえば、

  • Project = pair-monitor
  • Env = dev

のように付けることもできますが、最初は空欄でも問題ありません。


7. デフォルト暗号化はSSE-S3でOK

デフォルトの暗号化 では、
「Amazon S3 マネージドキーを使用したサーバー側の暗号化(SSE-S3)」 を選んでおけば十分です。

これで、保存されるオブジェクトが自動的に暗号化されます。

最初から高度なKMS設定まで入れなくても、
まずは SSE-S3 で始めるとシンプルです。

バケットキー

画面のように 有効 でも問題ありません。


8. オブジェクトロックは無効でOK

オブジェクトロック は、保存したデータを削除・上書きしにくくする特殊な機能です。
まずは 無効 で大丈夫です。

ここを有効にすると運用が重くなることがあるため、最初はシンプルにしておくのがおすすめです。


9. 「バケットを作成」を押す

最後に右下の 「バケットを作成」 を押せば完了です。

これで、Lambdaがデータを保存するための受け皿ができました。


作成後にやること

Lambda側でこのバケット名を使う

S3バケットを作成しただけでは、まだLambdaはその保存先を知りません。
そのため、次にLambda側で このバケット名を指定 します。

よくある形としては、

  • Lambdaの環境変数にバケット名を入れる
  • コード内でバケット名を設定する

のどちらかです。

つまり、

S3を作る → Lambdaにその名前を教える → 実行時に保存される

という流れです。