概要
Lambdaを使用せず、SlackからEC2の起動・停止を実現する方法を見つけましたのでまとめました。結論、「Amazon Q Developer in chat applications (旧称: AWS Chatbot)」のみで実現できます。
1. Amazon Q Developerの設定
1-1. ワークスペースの設定
AWSコンソールから「Amazon Q Developer in chat applications」を開き、「新しいクライアントを作成」後、Slack側で許可します。
これだけでワークスペースの設定は完了です。
1-2. 新しいチャネルの設定
クライアント作成後、チャンネルを設定しましょう。基本的には流れに沿って「名前」「Slackチャンネル」「権限」を設定するだけです。権限周りで躓いたので、簡単に解説しておきます。該当部分は以下の画像の通りです。
1-3. チャネルロール
チャネルロールは、Amazon Q Developerが実行するロールです。新規作成とすると、以下の信頼ポリシーを記述したロールが作成されます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "chatbot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
今回はEC2の起動・停止を行いますので、該当ポリシーを付与する必要があります。検証のため、一旦「AmazonEC2FullAccess」を付与します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
}
]
}
1-4. チャネルガードレールポリシー
チャネルガードレールポリシーは、Amazon Q Developerが実行可能な範囲を制限することができます。 チャネルロールで過剰な権限が付与されていても、このガードレールポリシーで制御していれば範囲外の操作を行うことができません。 検証のため、一旦「AmazonEC2FullAccess」を設定します。
2. Slackの設定
「新しいチャネルの設定」で設定したSlackチャンネルに「Amazon Q Developer」を追加します。「チャンネルの詳細」-「インテグレーション」-「アプリを追加する」から追加できます。
これで事前準備は整いました。
3. 動作確認
Amazon Q Developerにはたくさんのコマンドが登録されており、適当にリソース名をつけてメンションするとそのリソースに対するコマンドを一覧で出してくれます。必要な操作を見つけましょう。
@Amazon Q ec2
EC2の停止コマンドは以下です。
ec2 stop-instances --instance-ids i-0zb42fbbd80ad2qc7 --region ap-northeast-1
コマンドを実行してすぐに処理が走るわけではなく、こちらがOKしないと動いてくれないようでした。
※権限がないと、権限エラーのエラーログを出力してくれます。エラーログを見て必要な部分を修正しましょう。
まとめ
大体どの記事もLambdaを使用するパターンでしたので本当に実現できるか疑問でしたが、知っていれば簡単に実現できましたね。Lambdaを用いるとランタイムのサポート対応をしないといけなくなるので、ぜひこちらを利用してみてください。