🔥

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呼び出し自体は返ってくるけど、実際にチャンネルに投稿されるかどうかは後続の検証やポリシー判定に依存していることが判明しました。


教訓

  1. APIのレスポンスは“成功”=“投稿完了”ではない
    • 背後でセキュリティフィルタが働くケースあり
  2. ファイルサイズ・名前だけでなく、ファイル中身にも要注意
    • CSVでも怪しい文字列やURLがあると弾かれることがある
  3. 手動アップロードでの検証が早い
    • プログラムだけでなく、一度UIから試すことで思わぬ原因が見つかる

まとめ

今回は、Lambda + Slack API のハマりどころとして「中身フィルタリング」の落とし穴をご紹介しました。もし同様の現象に遭遇したら、まずは手動でアップロードしてみて、UI上のエラーや警告を活用すると捗ります!

Let's Happy Coding!

Discussion