วิธีแก้ปัญหาเมื่อไม่สามารถใช้ AWS Chatbot เชื่อมต่อกับ Private channel ของ Slack ได้

การแก้ไขปัญหานี้เป็นเรื่องเล็กน้อยที่ผมติดใจเมื่อพยายามเชื่อมโยง AWS Chatbot กับ Private channel ของ Slack

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

บทความนี้แปลมาจากบทความที่เป็นภาษาญี่ปุ่นที่ชื่อว่า AWS Chatbotを使ってSlackのプライベートチャンネルに連携できないときの対処方法 โดยเจ้าของบทความนี้คือ คุณ hamada-koji เป็นคนญี่ปุ่นครับ

เมื่อแปลจากภาษาญี่ปุ่นมาเป็นภาษาไทยแล้วผมได้เรียบเรียงเนื้อหาใหม่เพื่อให้เข้าใจง่ายขึ้น เนื่องจากบางครั้งอาจมีการอัปเดตข้อมูลใหม่ จึงมีความจำเป็นต้องอัปเดตให้เป็นข้อมูลปัจจุบัน


AWS Chatbot เป็น GA ที่เผยแพร่สาธารณะ ทุกคนเคยใช้กันไหมครับ?

เป็นบริการที่สะดวกมากที่สามารถเชื่อมโยงเหตุการณ์ต่างๆ บน AWS กับ Slack ได้โดยไม่ต้องเขียนโค้ด เช่น Lambda เป็นต้น ซึ่งผมค่อนข้างติดปัญหาการเชื่อมต่อไปยัง Private channel ของ Slack ดังนั้นจึงจะมาแนะนำในบทความนี้

มันเป็นเรื่องของการ "ให้อ่านเอกสารให้ดี" แต่ค้นหายังไงก็ไม่เจอข้อมูลแบบนั้น ก็เลยจะมาสร้างบทความเพื่อจุดประสงค์ในการจัดทำดัชนี (Index)

ไม่มีใครที่ติดปัญหาเดียวกับผมเลยหรอ?

  ( ゚д゚) ガタッ
  /   ヾ
__L| / ̄ ̄ ̄/_
  \/   /

ผมหวังว่าจะเป็นเช่นนั้น

ขั้นตอนการเชื่อมต่อ Slack โดยใช้ AWS Chatbot

ขั้นตอนคร่าวๆมีดังนี้

  • สร้าง SNS Topic
  • สร้าง Slack channel สำหรับใช้เชื่อมต่อ
  • สร้าง Chat Bot
    • เชื่อมต่อกับ Slack WorkSpace
    • ระบุ Channel ปลายทางที่จะเชื่อมต่อ
    • ให้สิทธิ์ IAM Role กับ Chatbot
    • แนบ SNS Topic

อย่างไรก็ตาม เมื่อดำเนินการตามขั้นตอนข้างต้นแล้ว จะมีการเชื่อมต่อกับ Public channel ของ Slack แต่ไม่มีการเชื่อมต่อกับ Private channel

AWS Chatbot มีฟังก์ชันที่ส่งออก Log การดำเนินการไปยัง CloudWatch Logs แต่เมื่อดู Error แล้วจะมีลักษณะแบบนี้

Encountered error while sending message to Slack: Slack Web API returned unsuccessful response (HTTP status code: 200, ok: false, error code: channel_not_found, full response body: 
{
    "ok": false,
    "error": "channel_not_found"
}
).

ดูเหมือนว่าจะเป็น Error ในการอนุญาต ดังนั้นจึงลองตรวจสอบ IAM Role แต่ดูเหมือนว่าจะไม่มีปัญหาอะไร

วิธีแก้ไขคือ Invite AWS User ไปยัง Slack channel ปลายทางที่จะเชื่อมต่อ

ดูรายละเอียดได้ที่ Document ในเว็บไซต์ทางการ

Getting started with AWS Chatbot - AWS Chatbot

If you configure a private Slack channel, run the /invite @AWS command in Slack to invite the AWS Chatbot to the chat room.
Reference:Getting started with AWS Chatbot - AWS Chatbot

จากเหตุผลที่ว่ามา กรณีที่จะเชื่อมต่อไปยัง Private channel จะต้อง invite AWS User ไปยัง Channel แยกกัน

เมื่อป้อนคำสั่งเช่นแบบนี้ AWS User จะได้รับเชิญไปยัง Channel นั้น

หลังจากนั้นลองย้ายและถ้าได้รับการแจ้งเตือนในลักษณะเดียวกับ Public channel ก็ถือว่า OK

AWS Chatbot สามารถใช้งานได้หลากหลาย ดังนั้นมาลองใช้งานกัน

กรณีของการแจ้งเตือน AWS Chatbot และ CloudWatch Alarm ดูเหมือนว่าจะไม่สามารถตรวจสอบได้ด้วยการเชื่อมต่อกับ Email แต่สามารถดูกราฟ Metric ที่ปลายทางการแจ้งเตือนได้ ซึ่งเป็นการแสดงภาพการแจ้งเตือนที่เหนือข้อดีก็คือไม่ต้องใช้ Lambda เนื่องจากสามารถใช้ได้อย่างสะดวกมากๆ ดังนั้นก็อยากแนะนำให้ทุกคนมาลองใช้กันครับ

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

แปลโดย: POP จากบริษัท Classmethod (Thailand) ครับ !

บทความต้นฉบับ

Link อ้างอิง