【Terraform × Chatbot】Error:AWS SDK Go Service Operation Incomplete 解決❗
はじめに
こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。
突然ですが皆様、$ terraform plan
の実行時には何もエラーが出なかったのに、$ terraform apply
後にエラーが発覚した経験はありませんか?(ネットショッピングみたい)
そんな時、こちらの記事内容が皆様のお役に立てれば幸いです。
前提
以下が、AWS Chatbot の基本的な役割
似ているエラー内容
エラーメッセージ
エラーメッセージの全体
$ terraform apply
後に発覚($ terraform plan
の実行時には出力されなかった)
Error: AWS SDK Go Service Operation Incomplete
│ with awscc_chatbot_slack_channel_configuration.ecs_throttling_alert_config,
│ on chatbot_slack_config.tf line 10, in resource "awscc_chatbot_slack_channel_configuration" "ecs_throttling_alert_config":
│ 10: resource "awscc_chatbot_slack_channel_configuration" "ecs_throttling_alert_config" {
│
│ Waiting for Cloud Control API service CreateResource operation completion returned: waiter state transitioned to FAILED.
│ StatusMessage: Invalid request provided: AWS Chatbot can't create the configuration because Slack workspace *********** is not
│ authorized with AWS account ***********. See
│ https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup (Service: AWSChatbot; Status Code: 400;
│ Error Code: InvalidRequestException; Request ID: ***********; Proxy: null). ErrorCode: InvalidRequest
╵
エラーメッセージを分解して考える
以下のエラーに関する検索を行った
Error: AWS SDK Go Service Operation Incomplete
関連するコメントを発見
まずはここから
原因と思われる部分
│ with awscc_chatbot_slack_channel_configuration.ecs_throttling_alert_config,
│ on chatbot_slack_config.tf line 10, in resource "awscc_chatbot_slack_channel_configuration" "ecs_throttling_alert_config":
│ 10: resource "awscc_chatbot_slack_channel_configuration" "ecs_throttling_alert_config" {
具体的なエラー内容について、API関連で何かがFailedしていそう
Waiting for Cloud Control API service CreateResource operation completion returned: waiter state transitioned to FAILED.
リクエストが無効になっている可能性が高そう
権限まわりで問題が発生したため、AWS Chatbotが作成できていなさそう
│ StatusMessage: Invalid request provided: AWS Chatbot can't create the configuration because Slack workspace *********** is not
│ authorized with AWS account ***********.
以下のメッセージで指示されている通り、「ここを確認してみてね」というメッセージ
はい、後ほど確認します!
See
│ https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup
InvalidRequestException、つまり、リクエストが要求、あるいは誤りがあるときの例外がスローされている
(Service: AWSChatbot; Status Code: 400;
│ Error Code: InvalidRequestException; Request ID: ***********; Proxy: null). ErrorCode: InvalidRequest
╵
原因
上記の記事より、SlackワークスペースがAWSアカウントと正しく連携できていないために発生していそう。Terraformを使用していてもAWS Chatbot と Slackワークスペースを紐づける際はAWSコンソール上でAWS Chatbot と Slackワークスペースを紐づける認証・許可の設定が必要になる。
裏を返せばTerraformでインフラリソースを管理している場合、ここまでAWSコンソール上でAWS Chatbot と Slackワークスペースを紐づける必要はないので、ここで設定すればOK。
対応すること
AWS Chatbotにログイン
「チャットクライアントを設定」から今回は「Slack」を選択
Slackワークスペースの許可を得る
「SlackはAWS Chatbot を正常に承認しました。」と表示されればOK
「新しいチャネルを設定」していく
ここまで設定したら再び以下を行う
- terraform init
- terraform plan
- terraform apply
エラーメッセージが変わるか確認
以上。
補足
チャネルロールとは?
すべてのチャネルメンバーが同じアクセス権限を共有しながら、メンバーそれぞれが自身のIAMユーザーロールも利用可能。つまり、グループ全体ですべてのメンバーに同じルールを付与しながらも、主に個人情報などに関しては自身で管理する形をとるというイメージでOK
ポリシーテンプレートとは?
1つ以上のポリシーテンプレートを選択すると、AWS Chatbotによってロールが自動生成される。各ポリシーテンプレートがロールに追加するアクセス許可の詳細については、AWS Chatbot ユーザーガイドを参考。
より分かりやすく言い換えると、ポリシー(規則)のテンプレートである。何の規則か?Chatbotの規則・ルールである。このポリシーテンプレートを選択すると、Chatbotは自動的に自身に必要な設定を行う。
設定の具体例としては、どのAWSにアクセスするか、どのような情報を伝えるかなどである。いわば、Chatbotのスコープをこのポリシーテンプレートで管理しているとイメージすると分かりやすいのではないか。
ガードレールポリシーとは?
以下の記事が図解もあり分かりやすい。
チャネルメンバーが実行可能なアクションは、チャネルのガードレールポリシーにより詳細に制御される。これらのガードレールポリシーはランタイム中にチャネルIAMロールとユーザーロールの両方に適用される。最後に
ここまで読んでいただきありがとうございました!
今回の記事が良かったと思ったらぜひ「いいね」を押していただけると嬉しいです 🎉
noteでも記事を執筆していますので、ぜひチェックしてみてください。
他にもこのようなことについて記載しているのでお読みいただければ幸いです。
最後までお読みいただき、誠にありがとうございました!
Discussion