Kiro CrewをAmazon Linux 2023のEC2で試してみた

Kiro CrewをAmazon Linux 2023のEC2で試してみた

Kiro CrewをAmazon Linux 2023のAmazon EC2で動かし、SSHトンネル経由でローカルブラウザーからDashboardを利用してみました。CloudFormationによる環境構築から、Dashboardでのモデル選択やチャットの応答確認までを紹介します。
2026.08.05

はじめに

現地時間2026年8月4日に公式ブログでKiro Crewが発表されました。
https://kiro.dev/blog/introducing-kiro-crew/

macOSへのインストールとSlack連携は、いわさの記事をご覧ください。
https://dev.classmethod.jp/articles/kiro-crew/

本記事では、Amazon Linux 2023のEC2で、Kiro CLIとKiro Crewのインストール、Gatewayの起動、SSHトンネル経由でのDashboard利用を紹介します。

検証内容

検証環境

検証は次の環境で実施しました。

項目
EC2インスタンスタイプ t3a.medium
アーキテクチャ x86_64
OS Amazon Linux 2023
リージョン ap-northeast-1
kiro-cli 2.16.1
kirocrew 0.1.2
構築方法 CloudFormation(IAMスタック+EC2スタック)

CloudFormationテンプレートの全文は末尾の再現情報に掲載しています。x86_64のt3a.medium向けの内容です。

Amazon Linux 2023のEC2へKiro Crewをセットアップする

CloudFormationでIAMスタック、EC2スタックの順にデプロイします。

export AWS_REGION=ap-northeast-1
export KEY_NAME=<EC2_KEY_PAIR_NAME>
export IAM_STACK_NAME=kirocrew-iam
export EC2_STACK_NAME=kirocrew

aws cloudformation deploy \
  --region "$AWS_REGION" \
  --template-file kirocrew-iam.yaml \
  --stack-name "$IAM_STACK_NAME" \
  --capabilities CAPABILITY_NAMED_IAM

aws cloudformation deploy \
  --region "$AWS_REGION" \
  --template-file kirocrew-ec2.yaml \
  --stack-name "$EC2_STACK_NAME" \
  --parameter-overrides \
    KeyName="$KEY_NAME" \
    IamStackName="$IAM_STACK_NAME"

EC2のUserDataでkiro-clikirocrewのインストールが完了した後、SSHでログインします。

Kiro CLIにログインする

kiro-cli login

組織のStart URLとリージョンを入力し、ブラウザーでデバイスコードを承認してログインします。なお、Start URL、デバイスコード、認証URLは掲載していません。

IAM Identity Centerでサインインする手順は、下記の記事で紹介しています。
https://dev.classmethod.jp/articles/kiro-iam-identity-center-user-signin-setup-202605/

Kiro Crewを初期設定する

kirocrew setup

今回はワークスペースをデフォルトのまま使用しました。Slack連携とAWS上での起動はスキップし、タイムゾーンにはAsia/Tokyoを指定しました。対話の流れは次のとおりです。

kirocrew setupの対話ログ
Kiro Crew Setup 👻

── Workspace Directory ──
Default: /home/ec2-user/workplace/kirocrew-workspace
Workspace path [/home/ec2-user/workplace/kirocrew-workspace]:
✅ Workspace: /home/ec2-user/workplace/kirocrew-workspace

Installing agent config...
✅ Agent installed: /home/ec2-user/.kiro/agents/kirocrew.json

── Slack Credentials ──
Configure Slack tokens? [Y/n]: n
⏭ Skipped. Slack integration will be disabled.

── Slash Command ──
Slash command name [kirocrew]:
✅ Slash command: /kirocrew

── Timezone ──
IANA timezone (e.g. America/Los_Angeles): Asia/Tokyo
✅ Timezone saved: Asia/Tokyo

── Run on AWS (optional) ──
Launch KiroCrew on AWS now? [y/N]: n
⏭ Skipped. Launch later: kirocrew cloud launch

👻 Done! Try: kirocrew doctor && kirocrew gateway

Kiro CLIへのログインとKiro Crewの初期設定を完了しました。

Gatewayを起動してSSHトンネルで接続する

EC2上でGatewayを起動します。

kirocrew gateway
kirocrew gatewayの起動ログ
👻 Kiro Crew gateway starting…

⚠️  Do not enter sensitive, secret, or regulated data into KiroCrew.
   Treat anything you send as potentially logged or processed by the
   configured model provider.

👻 Dashboard: ssh -NL 5476:localhost:5476 <EC2_HOST>
             then open http://localhost:5476?token=<GATEWAY_TOKEN>
👻 Run 24/7: see docs/remote-desktop-setup.md for systemd service setup
👻 Headless remote session — skipping browser auto-open
ss -ltnp | grep ':5476'

Gatewayは127.0.0.1:5476で待ち受けていました。起動時に表示されるhttp://localhost:5476?token=<GATEWAY_TOKEN>形式のDashboard URLを、このあと使います。

ssh -N -L 45476:127.0.0.1:5476 ec2-user@<EC2_HOST>

ローカル側の45476は、検証時に使用した空きポートです。45476が使用中の場合は任意の空きポートに読み替え、ブラウザーで開くURLのポート番号も同じ値に変更してください。

SSHトンネルを張った状態で、Dashboard URLのポート番号を45476へ読み替えます。http://localhost:45476?token=<GATEWAY_TOKEN>をローカルブラウザーで開きます。

DashboardのSessions画面

ローカルブラウザーからDashboardを表示できました。

Dashboardからチャットを実行する

セッションでモデル選択UIを開きました。

モデル選択画面

利用できるモデルの一覧から選択できました。

セッション上のエージェントに、実行中のOSとアーキテクチャを尋ねました。

OS情報を尋ねた応答

応答ではAmazon Linux 2023とx86_64が示されました。

STSで呼び出し元の認証情報を確認するよう依頼しました。

STS確認を尋ねた応答

インスタンスプロファイルの一時認証情報で、STSの呼び出し元を確認できました。

まとめ

Amazon Linux 2023のEC2でKiro Crewを起動し、SSHトンネル経由でローカルブラウザーからDashboardを利用できました。

Kiro CrewをEC2にインストールすることで、EC2をエージェント専用のサンドボックスとして扱えます。エージェントが実行するコマンドの影響はインスタンスの中にとどまり、手元のマシンには及びません。試し終わったらスタックを削除するだけで、環境ごと片付けられます。AWS APIを操作させる場合も、インスタンスプロファイルの一時認証情報をそのまま利用できます。

Dashboardからのチャットのような軽い処理であれば、Kiro Crewはt3a.mediumで動作しました。まずKiro Crewを体験してみたい場合は、EC2での実行をお試しください。

参考リンク

再現情報

kirocrew-iam.yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: KiroCrew IAM - EC2 Instance Profile with SSM access

Resources:
  KiroCrewRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub '${AWS::StackName}-role'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

  KiroCrewInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Roles:
        - !Ref KiroCrewRole

Outputs:
  InstanceProfileName:
    Value: !Ref KiroCrewInstanceProfile
    Export:
      Name: !Sub '${AWS::StackName}-instance-profile'
  RoleName:
    Value: !Ref KiroCrewRole
    Export:
      Name: !Sub '${AWS::StackName}-role'
kirocrew-ec2.yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: KiroCrew EC2 - x86_64 / AL2023 / kiro-cli + kirocrew auto-install

Parameters:
  KeyName:
    Type: AWS::EC2::KeyPair::KeyName
    Default: m4mini
    Description: EC2 キーペア名
  IamStackName:
    Type: String
    Default: kirocrew-iam
    Description: IAM スタック名(InstanceProfile のエクスポート元)

Resources:
  KiroCrewSG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: !Sub '${AWS::StackName} - SSH only'
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

  KiroCrewInstance:
    Type: AWS::EC2::Instance
    DeletionPolicy: Delete
    UpdateReplacePolicy: Delete
    Properties:
      InstanceType: t3a.medium
      ImageId: !Sub '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64}}'
      KeyName: !Ref KeyName
      IamInstanceProfile: !ImportValue
        Fn::Sub: '${IamStackName}-instance-profile'
      SecurityGroupIds:
        - !Ref KiroCrewSG
      MetadataOptions:
        HttpTokens: required
        HttpEndpoint: enabled
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            VolumeSize: 20
            VolumeType: gp3
            Encrypted: true
            DeleteOnTermination: true
      Tags:
        - Key: Name
          Value: !Sub '${AWS::StackName}'
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          set -euo pipefail
          LOG="/var/log/kirocrew-setup.log"
          exec > >(tee -a "$LOG") 2>&1
          echo "===== KiroCrew setup started: $(date) ====="

          # ---- 1. /tmp 拡張 ----
          mount -o remount,size=2G /tmp
          echo "[1/6] /tmp 拡張: $(df -h /tmp | tail -1 | awk '{print $4}') 空き"

          # ---- 2. スワップ 1GB ----
          fallocate -l 1G /swapfile
          chmod 600 /swapfile
          mkswap /swapfile
          swapon /swapfile
          echo '/swapfile none swap sw 0 0' >> /etc/fstab
          echo "[2/6] スワップ完了: $(swapon --show --noheadings)"

          # ---- 3. システムパッケージ ----
          dnf install -y python3.11 python3.11-pip nodejs npm git unzip
          echo "[3/6] パッケージ完了"

          # ---- 4. kiro-cli インストール (ec2-user) ----
          sudo -u ec2-user bash << 'EOF'
          set -euo pipefail
          export HOME=/home/ec2-user
          echo "[4/6] kiro-cli インストール中..."
          KIRO_CLI_SKIP_SETUP=1 bash <(curl -fsSL https://cli.kiro.dev/install) <<< "y"
          echo "[4/6] kiro-cli 完了: $(ls $HOME/.local/bin/kiro* | tr '\n' ' ')"
          EOF

          # ---- 5. kirocrew インストール (ec2-user) ----
          sudo -u ec2-user bash << 'EOF'
          set -euo pipefail
          export HOME=/home/ec2-user
          echo "[5/6] kirocrew インストール中..."
          curl -fsSL https://download.crew.kiro.dev/cli.sh | sh
          echo "[5/6] kirocrew 完了: $($HOME/.local/bin/kirocrew --version 2>/dev/null || echo installed)"
          EOF

          # ---- 6. PATH (.bashrc) ----
          sudo -u ec2-user bash -c \
            "grep -q '\.local/bin' ~/.bashrc || echo 'export PATH=\"\$HOME/.local/bin:\$PATH\"' >> ~/.bashrc"
          echo "[6/6] .bashrc 更新完了"

          echo "===== KiroCrew setup finished: $(date) ====="
          echo "KIROCREW_SETUP_DONE" > /tmp/kirocrew-setup-done

Outputs:
  InstanceId:
    Value: !Ref KiroCrewInstance
  PublicIp:
    Value: !GetAtt KiroCrewInstance.PublicIp
  SSMConnect:
    Value: !Sub 'aws ssm start-session --target ${KiroCrewInstance} --region ${AWS::Region}'
  SSHConnect:
    Value: !Sub 'ssh -i ~/.ssh/${KeyName}.pem ec2-user@${KiroCrewInstance.PublicIp}'
  NextStep:
    Value: 'kirocrew setup && kirocrew config set agent.allow_unsandboxed_exec true && kirocrew gateway'

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事