AWS Transfer Family をつかって S3 にファイルがアップされた場合に Lambda を実行してみる:前編
はじめに
今回 SFTP で S3 にファイルをアップした時に順番にファイルを処理したいという要件があったのでまずは仮組をしてみました。
構成はこんな感じです。
ポイントとしては SQS で FIFO を使うために前段に EventBridge を入れたところです。
今回は仮組なので Lambda の処理としては Log に対象ファイル名を出力するくらいです。
では順番にコンソールから設定していきます。
設定の順番
コンソールからは以下の順番で設定していきます。
S3 に SFTP でファイルをアップロードできるようにするまで:前編
- S3 の設定
- Transfer Family の設定
ファイルが置かれたことを検知してログに書き出すまで:後編
- Lambda の設定
- SQS の設定
- EventBridge の設定
S3 の設定
今回は東京リージョンで作成していこうと思います。
まず今回の検証用に適当なバケットを作成します。
それ以外の設定値は全てデフォルトで作成します。
作成されました。
あとでバケット内のイベントについて EventBridge に通知を送信する必要がでてくるので
有効にしておきます。
S3 のプロパティタブにある Amazon EventBridge を有効にします。
また、ユーザーごとにアクセスする用にフォルダを事前に作成しておきます。
これで S3 に設定は終了です。
次に Transfer Family 関連の設定をしていきます。
Transfer Family の設定
まず新しい SFTP のサーバーを作成します。
今回はパブリックアクセス可能で設定していきます。
追加の詳細を設定 画面では全てデフォルト値のまま進みます。
確認と作成 画面では内容を確認しサーバーを作成をクリックします。
これでサーバーが作成されました。
ただし、またユーザーが一人もいないのでユーザーを作成していきます。
ユーザーを追加する際にユーザーに S3 アクセス用のロールを用意する必要があるので先にロールを作成します。
今回はカスタマーインラインでポリシーを作成します。
サービスまたはユースケースで Transfer
を選択します。
許可を追加の画面はあとでカスタマーインラインポリシーで追加するので何も選択せずに次へをクリックします。
適当なロール名をつけてロールを作成をクリックします。
ロールができたら許可を追加していきます。
インラインポリシーを作成をクリックします。
ポリシーエディタでは JSON を選択し、以下の JSON を入力します。
※バケット名は変更してください
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::testbucket-20240430"
]
},
{
"Sid": "HomeDirObjectAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObjectVersion",
"s3:DeleteObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::testbucket-20240430/uploads/*"
}
]
}
ポリシー名に適当な名前を入力してポリシーの作成をクリックします。
これでロールの作成が完了しました。
ユーザーの追加にいきたいのですが、あと一つ事前にやっておくことがあります。
ユーザーの追加時に SSH パブリックキーを求められるので先に SSH キーペアの生成をしておきます。
ローカルのターミナルなどで以下のように生成しておきます。
ssh-keygen -t rsa -b 4096 -f test-key-20240430
これでユーザーを追加する準備ができました。
サーバーにユーザーを追加していきます。
SSH パブリックキーには先ほど作成したtest-key-20240430.pub
の内容を貼り付けます。
ユーザーが作成されました。
SFTP サーバーに接続してファイルがアップロードできるか確認します。
まずサーバーのエンドポイントの詳細を確認しておきます。
今回は Cyberduck で接続を試します。
プロトコルに SFTP を選んで先ほどのエンドポイントとユーザー名、 SSH のプライベートキーを選択して接続します。
適当にローカルにある画像などをアップロードしてみます。
ファイルがアップロードできました!
これで S3 と Transfer Family の設定は完了です。
次回はそれ以降の設定を行っていきます。
Discussion