🔥
SlackへのCSVアップロードの失敗(成功してるけど消失)と解決
はじめに
こんにちは!今回は、CSVファイルをAWSのS3バケットからLambda経由でSlackに定期的に送信している中でハマったお話をシェアします。結論から言うと、ファイルサイズでも名前でもなく、中身に原因があったというオチです。
背景
- やっていたこと: S3に保存されたアクセスログCSVを、毎日Lambdaで取得してSlackに filesUploadV2 で送信
- 期待していたこと: 「定期的にファイルがチャンネルに届く」
ところが、ある日を境に突然「ファイルが届かない」問題が発生しました。
ハマりポイント①: Lambdaのログは成功なのにチャンネルにファイルが見当たらない
LambdaのCloudWatchログを覗くと、filesUploadV2
の呼び出しはエラーなしでok: true
を返している。
// ログサンプル
{
ok: true,
files: [ ... ]
}
なのにSlackのチャンネルには何も届かず。権限周りやSDKのバグを疑いました。
ハマりポイント②: サイズ制限?ファイル名の重複?
- なんとなく「100KBくらいで弾かれている気がする…?」
- 「同名ファイルだとダメなのか?」
- 「LambdaでS3から丸ごと取得できていないんじゃ…?」
色々試してみるも改善せず。やっぱりSDKも権限も問題なさそう。
真相: CSVの中身が原因だった!
手動で同じCSVをSlackに上げてみたところ…
"マルウェアが含まれている可能性があるため、アップロードできませんでした"
との警告が表示され、アップロードNG。
つまり、SlackのAPIは非同期でチャンネルにPOSTするだけなので、API呼び出し自体は返ってくるけど、実際にチャンネルに投稿されるかどうかは後続の検証やポリシー判定に依存していることが判明しました。
教訓
-
APIのレスポンスは“成功”=“投稿完了”ではない
- 背後でセキュリティフィルタが働くケースあり
-
ファイルサイズ・名前だけでなく、ファイル中身にも要注意
- CSVでも怪しい文字列やURLがあると弾かれることがある
-
手動アップロードでの検証が早い
- プログラムだけでなく、一度UIから試すことで思わぬ原因が見つかる
まとめ
今回は、Lambda + Slack API のハマりどころとして「中身フィルタリング」の落とし穴をご紹介しました。もし同様の現象に遭遇したら、まずは手動でアップロードしてみて、UI上のエラーや警告を活用すると捗ります!
Let's Happy Coding!
Discussion