Amazon Q Developerと対話しながらAWSリソースの作成・削除・課金確認を実践

Ai

今日は、Amazon Q CLI をローカルで使ってみたいと思います。今は、Gemini がいいのか、Amazon Q がいいのかChatgpt がいいのかみたいな議論がありますが、実際に色々使ってみます!

本日の環境

  • WSL 2 (Ubuntu 24.04.1 LTS)
  • Windows

まずは、Amazon Q CLI のインストールから進めていきましょう!

Amazon Q CLI インストール

zip ファイルを使用した のインストール - Amazon Q Developer
SSH とのリモート Linux 統合用に Amazon Q CLI を設定します。

このURL を参考にインストールを進めていると、エラーが発生してしまいました。

# aws コマンド取得
sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
You can now run: /usr/local/bin/aws --version

# repo 取得
 curl --proto '=https' --tlsv1.2 -sSf https://desktop-release.q.us-east-1.amazonaws.com/latest/amazon-q.deb -o amazon-q.deb

sudo chown _apt ./amazon-q.deb

ここまでは順調でした。ここから先でエラーが発生することになります。

apt install ./amazon-q.deb

エラー内容:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 amazon-q : Depends: libayatana-appindicator3-1 but it is not installed
            Depends: libwebkit2gtk-4.1-0 but it is not installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

エラーは依存関係ですね。libayatana-appindicator3-1 と、libwebkit2gtk-4.1-0 がインストールされていないみたいです。けど、なんか依存関係がうまくいってないみたく、インストールできないかもしれません。

なので、書いてある通り、–fix-broken でインストールしてみます。

 apt --fix-broken install

どうも依存関係に問題なく、インストールされたようです。

apt install libayatana-appindicator3-1 libwebkit2gtk-4.1-0
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libayatana-appindicator3-1 is already the newest version (0.5.93-1build3).
libayatana-appindicator3-1 set to manually installed.
libwebkit2gtk-4.1-0 is already the newest version (2.48.3-0ubuntu0.24.04.1).
libwebkit2gtk-4.1-0 set to manually installed.

一応、libfuse2t64 もインストールしておきます。

apt install libfuse2t64

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  libfuse2t64
0 upgraded, 1 newly installed, 0 to remove and 97 not upgraded.
Need to get 89.9 kB of archives.
After this operation, 326 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/universe amd64 libfuse2t64 amd64 2.9.9-8.1build1 [89.9 kB]
Fetched 89.9 kB in 1s (72.0 kB/s)
Selecting previously unselected package libfuse2t64:amd64.
(Reading database ... 81375 files and directories currently installed.)
Preparing to unpack .../libfuse2t64_2.9.9-8.1build1_amd64.deb ...
Unpacking libfuse2t64:amd64 (2.9.9-8.1build1) ...
Setting up libfuse2t64:amd64 (2.9.9-8.1build1) ...
Processing triggers for libc-bin (2.39-0ubuntu8.4) ...

ここでようやく、Amazon Q CLI に戻っていきましょう。これでインストールされていますね。

q --version
q 1.12.3

これでインストールは完了です!では、次にAWS に実際にログインする必要がありますね。

AWS にログイン

ログインしていきましょう!

q login

このコマンドを叩くと、プランについて聞かれます。私は、無料プランで全然よかったので、

✔ Select login method · Use for Free with Builder ID

BuildID でログインをしていきました。このままブラウザでの認証などを進めていくと、最終的には、Logged in successfully というのが表示されたら、問題なくログインできています。

Device authorized
Logged in successfully

そして、一度 wsl を再起動してください。

q doctor

✔ Everything looks good!

  Amazon Q still not working? Run q issue to let us know!

doctor オプションで、デバッグすると、使えるようになります!!

EC2 作ってみる

Amazon Q は自然言語で何かをプロンプトで指示すると、構築などを実施していきます!

>東京リージョンにEC2 を一台立ててください。Alma Linux9 でたてたいです。t2.small でスペックは指定して、session manager で接続できるようにしたいです

これでプロンプトで命令していくと、

> 東京リージョン(ap-northeast-1)にAlma Linux 9のEC2インスタンスを作成し、Session Managerで接続できるように設定します。

まず、利用可能なAlma Linux 9のAMIを確認しましょう:


🛠️  Using tool: use_aws (trusted)
 ⋮
 ● Running aws cli command:

Service name: ec2
Operation name: describe-images
Parameters:
- owners: ["xxxxxxxxxxxx"]
- filters: [{"name":"name","values":["AlmaLinux OS 9*"]},{"name":"state","values":["available"]}]
Profile name: default
Region: ap-northeast-1
Label: 東京リージョンでAlma Linux 9のAMIを検索
 ⋮
 ● Execution failed after 0.710s:


Parameter validation failed:
Unknown parameter in Filters[0]: "name", must be one of: Name, Values
Unknown parameter in Filters[0]: "values", must be one of: Name, Values
Unknown parameter in Filters[1]: "name", must be one of: Name, Values
Unknown parameter in Filters[1]: "values", must be one of: Name, Values

これで勝手に作ってくれます。失敗しても何が失敗したのかを自動的に検知してくれて、修正まで始めます。コーディングと違って、勝手に修正して、続けてくれるところがとてもいいですね。

🛠️  Using tool: fs_write
 ⋮
 ● Path: /tmp/ec2-trust-policy.json

+     1: {
+     2:   "Version": "2012-10-17",
+     3:   "Statement": [
+     4:     {
+     5:       "Effect": "Allow",
+     6:       "Principal": {
+     7:         "Service": "ec2.amazonaws.com"
+     8:       },
+     9:       "Action": "sts:AssumeRole"
+    10:     }
+    11:   ]
+    12: }

 ⋮
 ↳ Purpose: EC2インスタンス用の信頼ポリシーファイルを作成

Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:

目的まで、教えてくれて、この内容で作成してもいいですか??って聞いてくれます。完成したら、名称はやっぱりちゃんと指定するべきだなとは思ったものの、作成自体は一発で実施してくれます。

本番環境ではないので、使い終わったらもちろん削除したいですよね?削除コマンドまで教えてくれました。。用意周到です。

インスタンスはSession Manager経由で接続可能な状態で稼働中です。

必要に応じて、不要になったリソースは以下のコマンドで削除できます:
bash
# インスタンス終了
aws ec2 terminate-instances --instance-ids i-xxxxxxxxxx  --region ap-northeast-1

# セキュリティグループ削除(インスタンス終了後)
aws ec2 delete-security-group --group-id sg-xxxxxxxxxx --region ap-northeast-1

# IAMリソース削除
aws iam remove-role-from-instance-profile --role-name EC2-SessionManager-Role --instance-profile-name EC2-SessionManager-InstanceProfile
aws iam delete-instance-profile --instance-profile-name EC2-SessionManager-InstanceProfile
aws iam detach-role-policy --role-name EC2-SessionManager-Role --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
aws iam delete-role --role-name EC2-SessionManager-Role
お疲れ様でした!

> それぞれコマンドを実行してください

> 了解しました。作成したリソースを順番に削除していきます。

まず、EC2インスタンスを終了します:
> ## 削除完了

すべてのリソースが正常に削除されました:

✅ EC2インスタンス (i-xxxxxxxxx) - 終了済み
✅ セキュリティグループ (sg-xxxxxxxxx) - 削除済み
✅ IAMインスタンスプロファイル (EC2-SessionManager-InstanceProfile) - 削除済み
✅ IAMロール (EC2-SessionManager-Role) - 削除済み
✅ 一時ファイル - 削除済み

これで課金対象となるリソースはすべて削除され、追加料金は発生しません。クリーンアップが完了しました!

作成したものを全て削除してくれました。

東京リージョンで課金発生しているものを一覧してもらう

次に東京リージョンで使っているリソースを一覧にしてもらいました。把握していないリソースなどがあった場合、これでリソースを一気に一覧にできるので、とても便利ですね。。。

> いま東京リージョンで課金が発生しているリソースを一覧にしてください。table 形式にしてください

> 東京リージョン(ap-northeast-1)で課金が発生している可能性のあるリソースを確認します。主要なサービスを順番にチェックし
ていきます

これは簡単にできるだろうなとおもいながら、

> ## 東京リージョン(ap-northeast-1)課金対象リソース一覧

| サービス | リソース名/ID | タイプ | 状態 | 推定月額コスト |
|-------------|------------------|-----------|---------|------------------|
| Lambda | MyLambda | 関数 | アクティブ | $0-5 |
| S3 | athena-test | バケット | アクティブ | $1-10 |
| S3 | fluent-test | バケット | アクティブ | $0-5 |
| CloudFront | xxxxxxxxxxx | Distribution | 無効 | $0 |
| EventBridge | aws-cost | スケジュールルール | 有効 | $0-1 |

名前と数は結構消したのですが、こんな感じで作成してくれます。

ポイントまで教えてくれました。

## 主要な課金ポイント

1. S3バケット: 20個のバケットがあり、ストレージ使用量とリクエスト数に応じて課金
2. Lambda関数: 5個の関数があり、実行回数と実行時間に応じて課金
3. CloudFront: 2つのDistributionがあるが現在無効状態のため課金なし
4. EventBridge: 3つのルールがあり、イベント処理数に応じて課金

推定月額総コスト: $10-100(使用量により変動)

最も課金が発生している可能性が高いのはS3のストレージ料金とLambda関数の実行料金です。

ということで、Amazon Q は色んな自動化の作業を担ってくれそうです。Gemini にも質問することもかなり簡単ですが、AWS のことはAmazon Q に聞いたほうがより正確な回答を得られそうな感じはしているので、amazon Q はAWS では必須ですね。

まとめ

詳しいできることの内容は、公式ドキュメントをみてほしいのですが、Amazon Q CLI でできることはかなり多そうなので、色んな作業を自動化していければと思います!!

コマンドラインで Amazon Q Developer を使用する - Amazon Q Developer
コマンドライン用の Amazon Q Developer は、何百もの一般的な CLIs のコマンド自動補完、自然言語チャット、コード生成など、AI を活用した機能でターミナルエクスペリエンスを向上させます。

コメント

タイトルとURLをコピーしました