ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【Amazon EC2】Kiro CLI サーバー構築ハンズオン

この記事を共有する

目次

パーソル&サーバーワークスの印鑰です。

AWSを中心としたクラウドインフラの設計・構築・運用を担当しています。
エージェント開発にも注力しているエンジニアです。

このハンズオンで学べること

このハンズオンでは、Amazon EC2上でKiro CLIを動かす一連の流れを体験できます。

  • AWS CloudFormationによるIaC実践: Amazon VPC、AWS IAM、Amazon EC2リソースを統合管理し、再現可能な環境を構築
  • EC2での開発環境自動構築: AWS CloudFormation の UserData で Node.js、Python、Kiro CLI を一括セットアップ。IAMは最小権限でセキュアにアクセス

どんな人向け?

  • Kiro CLIを試してみたい方。Kiroのサブスクリプションがあれば、AWS EC2上に自由な開発環境を用意し、Kiro CLIを試せます。
  • AWS マネジメントコンソールの基本操作ができて、Linuxコマンドライン(cd、ls、cat)の基礎がわかる方なら大丈夫
  • AWS CloudFormation の知識があるとさらに楽しめますが、なくてもコピー&ペーストで進められる

1.概要

このシステムのポイントは次のとおりです。

特徴 説明
Kiro CLI on EC2 ローカル環境の制約に関係なく、Amazon EC2上でKiro CLIを自由に利用できる開発環境を提供
IaCによる自動構築 AWS CloudFormationでAmazon VPC・AWS IAM・Amazon EC2を統合管理し、再現性の高いインフラ自動構築を実現
自動セットアップ Node.js、Python(Ver3.13)、Kiro CLIをUserDataで一括インストール。すぐに開発作業を開始できる。
(※PythonはAWS MCP Serverの依存ライブラリ(PyO3)の対応バージョンに合わせて3.13を指定)
セキュアアクセス Session Manager経由でSSHポート不要。AWS IAMの最小権限で安全にAWSリソースへアクセス

補足: Kiro CLI 環境をクラウド側に構築することで、ローカルの制約やネットワーク制限、インストール権限の問題などを気にせず、最新の開発ツールが利用可能です。

2.システムアーキテクチャ

全体構成図

20260318-001-全体構成図.PNG

3.前提条件

ハンズオンをはじめる前に、以下をお読みください。

所要時間

  • 約40分
    • 構築作業:約10~20分
    • 動作確認:約10分
    • 環境削除:約10分

必要な権限

以下の権限が必要です。

  • AWS マネジメントコンソールにアクセスできること
  • AWS CloudFormation スタックをデプロイできること
  • Amazon EC2、AWS IAM を操作できること

必要な契約

  • Kiro Freeプランでも問題ありません。私はIAM Identity Center経由でProプランを契約していますので、本ハンズオンではその環境に準じた手順をご説明します。

リージョン

東京リージョン(ap-northeast-1) にリソースを作成してください。

開発環境

ローカルPC に以下がインストール・設定済みであることをご確認してください。

  • Windows 11
  • Visual Studio Code
  • AWS CLI(認証設定済み)
  • Session Manager Plugin

費用について

このハンズオンの費用の目安は、東京リージョンで1時間あたり約$3程度です。

大事なポイント: 作業が終わったら、必ず環境削除の手順を実行してください。そのままにしておくと課金が続きます。また、為替やログ量、リージョン価格差で変動します。また、Kiroにて開発や修正するとその分のKiroのクレジット消費が発生します。

4.構築手順

さあ、ここからが本番です。一緒に作っていきましょう。

ステップ一覧

  1. 基盤スタックのデプロイ
  2. EC2インスタンススタックのデプロイ

ステップ1: 基盤スタックのデプロイ

まずは、Amazon VPC、AWS IAMロールといった基盤となるリソースを作っていきます。

20260318-001-基盤スタックのデプロイ.PNG

1-1. AWS CloudFormationテンプレートファイルの作成

ローカルPCでec2-kiro-base-stack.yamlという名前のファイルを作って、以下の内容をコピー&ペーストしてください。

ここを押すと展開します

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Base stack: VPC, IAM, KeyPair'
Parameters:
  Environment:
    Type: String
    Default: dev
  ProjectId:
    Type: String
    Default: '001'
  ProjectInfix:
    Type: String
    Default: 'kiro-cli'
  VpcCidr:
    Type: String
    Default: '10.0.0.0/16'
  PublicSubnetCidr:
    Type: String
    Default: '10.0.1.0/24'
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: Stack Configuration
        Parameters:
          - Environment
          - ProjectId
          - ProjectInfix
      -
        Label:
          default: Network Configuration
        Parameters:
          - VpcCidr
          - PublicSubnetCidr
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCidr
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-vpc'
  InternetGateway:
    Type: AWS::EC2::InternetGateway
  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway
  PublicSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Ref PublicSubnetCidr
      AvailabilityZone: !Select [0, !GetAZs '']
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-public-subnet'
  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
  PublicRoute:
    Type: AWS::EC2::Route
    DependsOn: AttachGateway
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: '0.0.0.0/0'
      GatewayId: !Ref InternetGateway
  PublicSubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet
      RouteTableId: !Ref PublicRouteTable
  EC2SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: 'Security Group for SSM-only'
      VpcId: !Ref VPC
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: '0.0.0.0/0'
  EC2KeyPair:
    Type: AWS::EC2::KeyPair
    Properties:
      KeyName: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-keypair'
      KeyType: rsa
      KeyFormat: pem
  EC2Role:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-ssm-rl'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
      Tags:
        - Key: Environment
          Value: !Ref Environment
        - Key: ProjectId
          Value: !Ref ProjectId
  EC2AWSMCPPolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-awsmcp-pl'
      Roles:
        - !Ref EC2Role
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Sid: AllowAWSMCPAccess
            Effect: Allow
            Action:
              - aws-mcp:InvokeMcp
              - aws-mcp:CallReadOnlyTool
              - aws-mcp:CallReadWriteTool
            Resource:
              - "*"
  EC2InstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      InstanceProfileName: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-instance-profile'
      Roles:
        - !Ref EC2Role
Outputs:
  PublicSubnetId:
    Value: !Ref PublicSubnet
    Export:
      Name: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-public-subnet-id'
  SecurityGroupId:
    Value: !Ref EC2SecurityGroup
    Export:
      Name: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-sg-id'
  EC2InstanceProfile:
    Value: !Ref EC2InstanceProfile
    Export:
      Name: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-instance-profile-name'
  KeyPairName:
    Value: !Ref EC2KeyPair
    Export:
      Name: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-keypair-name'

ファイルを保存してください。

1-2. AWS CloudFormationコンソールを開く

  1. AWS マネジメントコンソールにログイン
  2. サービスメニューから「AWS CloudFormation」を選択
  3. 「スタックの作成」→「新しいリソースを使用(標準)」を選択

1-3. テンプレートのアップロード

  1. 「既存のテンプレートを選択」を選択
  2. 「テンプレートファイルのアップロード」を選択
  3. 作成したAWS CloudFormationテンプレートファイルを選んでアップロード
  4. 「次へ」を選択

1-4. スタック詳細の指定

スタック名: ec2-kiro-base-stack

パラメーターはこんな感じで設定してください。

パラメーター 推奨値 説明
Environment dev 環境識別子
ProjectId 001 プロジェクトID
ProjectInfix kiro-cli リソース名の接中辞
VpcCidr 10.0.0.0/16 VPC CIDR
PublicSubnetCidr 10.0.1.0/24 サブネットCIDR

「次へ」を選択してください。

1-5. スタックオプションの設定

  1. 「AWS CloudFormationによってAWS IAMリソースが作成される場合があることを承認します」にチェックを入れ、「次へ」を選択

1-6. 確認して作成

  1. 設定内容をざっと確認し、「送信」を選択

1-7. デプロイ完了の確認

スタックのステータスが「CREATE_COMPLETE」になるまで、待ちましょう。(約3~5分かかります)

ステップ2: EC2インスタンススタックのデプロイ

次は、EC2インスタンスを作っていきます。

20260318-001-EC2インスタンススタックのデプロイ.PNG

2-1. AWS CloudFormationテンプレートファイルの作成

ローカルPCでec2-kiro-cli-instance-stack.yamlという名前のファイルを作って、以下の内容をコピー&ペーストしてください。

ここを押すと展開します

AWSTemplateFormatVersion: '2010-09-09'
Description: 'EC2 instance stack'
Parameters:
  Environment:
    Type: String
    Default: dev
  ProjectId:
    Type: String
    Default: '001'
  ProjectInfix:
    Type: String
    Default: 'kiro-cli'
  InstanceIndex:
    Type: String
    Default: '01'
    Description: Instance Index
  InstanceType:
    Type: String
    Default: t3.medium
    AllowedValues: [ t3.micro, t3.small, t3.medium, t3.large ]
  ImageId:
    Type: String
    Default: ami-088b486f20fab3f0e
    AllowedPattern: "^ami-[0-9a-f]{17}$"
  EbsVolumeSize:
    Type: Number
    Default: 20
    MinValue: 8
    MaxValue: 50
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: Stack Configuration
        Parameters:
          - Environment
          - ProjectId
          - ProjectInfix
      -
        Label:
          default: EC2 Configuration
        Parameters:
          - InstanceIndex
          - InstanceType
          - ImageId
          - EbsVolumeSize
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref ImageId
      InstanceType: !Ref InstanceType
      KeyName:
        Fn::ImportValue: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-keypair-name'
      IamInstanceProfile:
        Fn::ImportValue: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-instance-profile-name'
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: 0
          GroupSet:
            - Fn::ImportValue: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-sg-id'
          SubnetId:
            Fn::ImportValue: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-public-subnet-id'
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            VolumeSize: !Ref EbsVolumeSize
            VolumeType: gp3
      UserData:
        Fn::Base64:
          Fn::Sub: |
              #!/bin/bash
              set -e
              exec > >(tee /var/log/user-data.log)
              exec 2>&1
              echo "UserData script started: $(date)"
              dnf update -y
              curl -fsSL https://rpm.nodesource.com/setup_22.x | bash -
              dnf install -y nodejs
              node --version
              dnf groupinstall -y "Development Tools"
              dnf install -y gcc zlib-devel bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel
              # Run everything as ec2-user
              sudo -u ec2-user bash << 'EOFU'
              set -e
              export HOME=/home/ec2-user
              cd ${!HOME}
              echo "Starting ec2-user setup: $(date)"
              export PATH="${!HOME}/.local/bin:${!PATH}"
              # Install pyenv
              echo "Installing pyenv..."
              curl -fsSL https://pyenv.run | bash
              echo "Configuring pyenv..."
              export PYENV_ROOT="${!HOME}/.pyenv"
              export PATH="${!PYENV_ROOT}/bin:${!PATH}"
              if [ -d "${!PYENV_ROOT}/bin" ]; then
                eval "$(pyenv init --path)"
                eval "$(pyenv init -)"
              fi
              cat << 'EOT' >> ~/.bashrc
              export PYENV_ROOT="$HOME/.pyenv"
              [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
              eval "$(pyenv init --path)"
              eval "$(pyenv init -)"
              EOT
              # Install Python 3.13 (fixed version for MCP server compatibility)
              # AWS MCP Server dependency (rpds-py -> PyO3) supports up to Python 3.14
              echo "Installing Python 3.13..."
              PYTHON_VERSION=$(pyenv install --list 2>/dev/null | grep -E '^\s*3\.13\.[0-9]+' | grep -vE 'dev|rc|alpha|beta' | tail -1 | tr -d ' ')
              echo "Installing Python ${!PYTHON_VERSION}..."
              pyenv install ${!PYTHON_VERSION}
              pyenv global ${!PYTHON_VERSION}
              echo "Python version installed:"
              python --version
              # Install Kiro CLI
              curl -fsSL https://cli.kiro.dev/install | bash
              # Install uv
              curl -LsSf https://astral.sh/uv/install.sh | sh
              uv -V
              if ! grep -q '.local/bin' ~/.bashrc; then
                echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
              fi
              source ~/.bashrc
              export PATH="${!HOME}/.local/bin:${!PATH}"
              if command -v kiro-cli &> /dev/null; then
                echo "Kiro CLI installed successfully for ec2-user"
                kiro-cli --version
              else
                echo "Warning: kiro-cli command not found after installation"
              fi
              EOFU
              echo "Kiro CLI installation completed"
              echo "UserData script completed: $(date)"
      Tags:
        - Key: Name
          Value: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-${InstanceIndex}'
        - Key: Environment
          Value: !Ref Environment
        - Key: ProjectId
          Value: !Ref ProjectId

ファイルを保存してください。

2-2. 新しいスタックの作成とデプロイ

ステップ1: 基盤スタックのデプロイ の手順を参考に、リソースをデプロイします。

スタック名: ec2-kiro-cli-instance-stack

パラメーターはこんな感じで設定してください。

パラメーター 推奨値 説明
Environment dev 環境識別子
ProjectId 001 プロジェクトID
ProjectInfix kiro-cli リソース名の接中辞
InstanceIndex 01 インスタンス識別用の連番
InstanceType t3.medium EC2インスタンスタイプ(t3.micro / t3.small / t3.medium / t3.large)
ImageId ami-088b486f20fab3f0e 使用するAMI ID(パターン: ^ami-[0-9a-f]{17}$)
EbsVolumeSize 20 ルートボリュームサイズ(8〜50GiB)

注意: ImageIdはリージョンごとにことなります。Amazon EC2 コンソールを使用した AL2023 の起動の手順を参照し、最新のAMI IDに更新してください。


5.Session Managerポートフォワーディング経由のSSH接続

Session Managerのポートフォワーディング機能を使って、ローカルPCからSSH接続する方法を説明します。

20260318-001-接続.PNG

ステップ一覧

  1. キーペアのダウンロード
  2. SSH Configファイルの設定
  3. Visual Studio Code Remote-SSH拡張機能のインストール
  4. Session Managerポートフォワーディングの開始
  5. Visual Studio Code Remote SSHで接続

ステップ1: キーペアのダウンロード

AWS CloudFormationで作成されたキーペアの秘密鍵を取得します。

1-1. キーペアIDの確認

  1. AWS マネジメントコンソールで「Amazon EC2」を開く
  2. 左ペインから「ネットワーク & セキュリティ」→「キーペア」を選択
  3. dev-001-kiro-cli-ec2-keypairを検索して選択
  4. 「キーペアID」をコピー(key-xxxxxxxxxxxxxxxxxの形式)

1-2. AWS Systems Manager Parameter Storeから秘密鍵を取得

  1. AWS マネジメントコンソールで「AWS Systems Manager」を開く
  2. 左ペインから「パラメーターストア」を選択
  3. 先程、コピーしたキーペアIDで検索して選択
  4. 「復号化された値を表示」をオンにして、表示された値を控える

1-3. 秘密鍵ファイルの保存

  1. エクスプローラーで「C:\Users\【ユーザー名】\.ssh」フォルダーを開く
  2. dev-001-kiro-cli-ec2-keypair.pemという名前で新規ファイルを作成
  3. 控えた秘密鍵の内容を貼り付けて保存
  4. ファイルを右クリック→「プロパティ」→「読み取り専用」にチェック→「OK」

補足: .sshフォルダーがない場合は作成してください。

ステップ2: SSH Configファイルの設定

SSH接続の設定を記述します。

2-1. Configファイルの作成・編集

  1. エクスプローラーで「C:\Users\【ユーザー名】\.ssh」フォルダーを開く
  2. configファイルがなければ作成(拡張子なし)
  3. テキストエディターで開いて、以下の内容を入力または追記

補足: 【ユーザー名】の部分は実際のユーザー名に置き換えてください

Host dev-001-kiro-cli-01
    HostName localhost
    User ec2-user
    Port 10022
    IdentityFile C:\Users\【ユーザー名】\.ssh\dev-001-kiro-cli-ec2-keypair.pem
    IdentitiesOnly yes
    StrictHostKeyChecking no
    UserKnownHostsFile NUL

ステップ3: Visual Studio Code Remote-SSH拡張機能のインストール

Visual Studio CodeでSSH接続できるようにします。

  1. Visual Studio Codeを開く
  2. 左サイドバーの「拡張機能」アイコンを選択
  3. 検索ボックスにRemote - SSHと入力
  4. Microsoft公式の「Remote - SSH」拡張機能をインストール
  5. インストール完了後、VS Codeを再起動

ステップ4: Session Managerポートフォワーディングの開始

接続フロー

接続フロー-20260205-001.png

4-1. EC2インスタンスIDの取得

  1. AWS マネジメントコンソールで「Amazon EC2」を開く
  2. 左ペインから「インスタンス」を選択
  3. dev-001-kiro-cli-01という名前の「インスタンスの状態」が「実行中」および「ステータスチェック」が「3/3 のチェックに合格しました」となっていることを確認
  4. 「インスタンス ID」を控える

補足: ステップ3: EC2インスタンススタックのデプロイの直後は、EC2が自動で起動します。もし、「インスタンスの状態」が「停止済み」の場合は、EC2インスタンスを選択し、「インスタンスの状態 > インスタンスを開始」を選択し、EC2を起動させます。

4-2. ポートフォワーディング開始

PowerShellを開いて、以下のコマンドを実行します。(このウィンドウは開いたままにしてください)

# ポートフォワーディング開始
aws ssm start-session `
  --target {「4-1 EC2インスタンスIDの取得」にて控えた値} `
  --document-name AWS-StartPortForwardingSession `
  --parameters '{\"portNumber\":[\"22\"],\"localPortNumber\":[\"10022\"]}' `
  --region ap-northeast-1

例) 控えたインスタンスIDが「i-12345678912345678」の場合のコマンド

# ポートフォワーディング開始
aws ssm start-session `
  --target i-12345678912345678 `
  --document-name AWS-StartPortForwardingSession `
  --parameters '{\"portNumber\":[\"22\"],\"localPortNumber\":[\"10022\"]}' `
  --region ap-northeast-1

成功すると以下のように表示されます

Instance ID: i-12345678912345678
Starting session with SessionId: your-session-id
Port 10022 opened for sessionId your-session-id.
Waiting for connections...

大事なポイント: このPowerShellウィンドウは閉じないでください。ポートフォワーディングが動作し続けます。

ステップ5: Visual Studio Code SSH接続

5-1. Visual Studio CodeにてSSH接続

  1. Visual Studio Codeを開く
  2. F1キーを押してコマンドパレットを開く
  3. Remote-SSH: Connect to Host...と入力して選択
  4. dev-001-kiro-cli-01を選択
  5. 新しいウィンドウが開いて、接続が開始
  6. 初回「Select the platform~」と表示しますのでLinuxを選択
  7. Ctrl + @キーを押下し、ターミナルを起動

6.Kiro CLIのセットアップ

Kiro CLIのセットアップ方法をご説明いたします。

ステップ一覧

  1. Kiroの認証
  2. Kiroの初回起動
  3. Kiroのカスタマイズ

ステップ1: Kiroの認証

  • このハンズオンは、IAM Identity Center で Kiro のサブスクリプションを管理していることを前提とした手順です。
  • 別の方法で Kiro サブスクリプションを管理している場合は、「Kiro CLIの認証」に関する手順を、ご自身の環境に合わせて読み替えてください。

前提条件

本手順は、「5.Session Managerポートフォワーディング経由のSSH接続」のステップ5に継続し、Visual Studio CodeでSSH接続した状態で実施して下さい。

1-1. SSO の開始 URLの確認

  1. ブラウザにて AWS IAM Identity Center を利用したSSOアクセスを行い、「AWS access portal」を開く
  2. Kiro のサブスクリプションが紐づけられた、AWS アカウントの「アクセスキー」を選択
  3. 「macOS and Linux」、「Windows」、「PowerShell」タブのいずれかを選択
  4. 「AWS IAM Identity Center 認証情報 (推奨)」の「SSO の開始 URL」の値を控える

20260318-001-sso-urll.png

1-2. UserDataの完了確認

  1. Visual Studio Code にて、Ctrl + @ キーを押下して、ターミナルを起動
  2. ターミナルにて以下のコマンドを実行し、「UserData script completed~」と表示されることを確認。表示されなければ、5分待機し再度コマンドを実行し、ターミナルにて「source ~/.bashrc」を実行
sudo tail -1 /var/log/user-data.log

1-3. 認証の開始

  1. ターミナルにて以下のコマンドを実行し、認証を開始
kiro-cli login --use-device-flow

補足--use-device-flow オプションとは、認証時にブラウザを自動起動できないため、OAuth デバイスフローを利用ための設定です。

1-4. 認証設定

  1. 以下の表を参考に認証情報を設定
項目 入力内容
Select login method Use with Pro license を選択
Enter Start URL {手順:SSO の開始 URLの確認にて控えた値}
Enter Region ap-northeast-1

1-5. OAuth デバイスフローによる認証

  1. ターミナルにて「Open this URL:~」が表示しますので、URLをコピーし、ブラウザで開く
  2. ブラウザにて「認証がリクエストされました」と表示するため、「確認して続行」を押下
  3. ブラウザにて「Kiro CLI がデータにアクセスすることを許可しますか?」と表示するため、「アクセスを許可」を押下
  4. ブラウザにて「リクエストが承認されました」と表示するため、タブを閉じる
  5. ターミナルにて「Logged in successfully」と表示されることを確認

20260318-001-デバイスフロー.png 20260318-001-アクセス許可.png

ステップ2: Kiroの初回起動

2-1. プロジェクトフォルダの作成

  1. ターミナルにて以下のコマンドを実行
cd ~
mkdir kiro-handson && cd kiro-handson

2-2. Kiroの起動

  1. ターミナルにて以下のコマンドを実行し、Kiroが起動されることを確認
kiro-cli

20260318-001-Kiro起動.png

2-3. Kiroの終了

  1. ターミナルにて以下のコマンドを実行し、Kiroを終了
/quit

ステップ3: Kiroのカスタマイズ

3-1. Agent Steering

Agent Steering とは、Kiro のエージェントに対してプロジェクト固有のルールやコーディング規約・回答方針などを Markdown ファイルで指示し、すべての応答に一貫して反映させる仕組みです。Agent Steering を設定することで、毎回プロンプトで同じ指示を繰り返す必要がなくなり、チーム全体で .kiro/steering/ をリポジトリに含めれば統一された開発体験を共有できるというメリットがあります。

  1. ターミナルにて以下のコマンドを実行
cd ~/.kiro
mkdir steering && cd steering
vi ja-policy.md

iキーを押して、以下の内容を入力してください。

ここを押すと展開します

---
inclusion: always
---
# Steering: ドキュメントとKiroの回答は日本語で出力する
## 目的
Kiroが生成する文書およびユーザーとのやり取りの言語方針を明確化し、日本国内の利用者にとって理解しやすいコミュニケーションとドキュメントを一貫して提供する。
## スコープ
-  **Kiroの回答**:   ユーザーとのすべてのやり取り、説明、提案、エラーメッセージの説明
-  **プロジェクト文書**:   要件定義、基本/詳細設計、運用手順、README、API仕様、トラブルシューティング、セットアップ手順、テスト計画、ユーザーガイド、リリースノートなど
## 方針
### 1. **Kiroの回答は日本語で行う**
-  ユーザーとのやり取りはすべて日本語で行う
-  技術的な説明や提案も日本語で提供する
-  エラーメッセージの説明も日本語で行う
### 2. **ドキュメントはすべて日本語で記述する**
-  技術用語は必要に応じて適切な日本語訳を併記し、表記を統一する
-  見出しレベル、番号付き手順、強調の使い方を統一する
-  誤字脱字チェック、初心者にも理解できる説明を行う
### 3. **技術用語の扱い**
-  **英語のまま使用**:   AWSサービス名(S3、Lambda、EC2など)、技術スタック名、プログラミング言語名、フレームワーク名
-  **日本語化**:   一般的な技術概念や操作手順の説明
### 4. **コード内識別子は英語可**
-  変数名・関数名・クラス名などは可読性を優先し英語を許容する
-  コードコメントは日本語で記述する
## 禁止事項
-  文書の英語のみ記述(利用者向け最終成果物)
-  Kiroの回答を英語で行うこと
-  表現・用語の統一ルールからの逸脱
-  AWSサービス名や技術スタック名の不適切な日本語翻訳
-  CloudFormationテンプレートでは、日本語を使用しない。説明は英語にて記載すること

Escキーを押して、:wqと入力して保存しましょう。

補足: Agent Steeringはお好みで修正可能です。

3-2. MCP Server

MCP(Model Context Protocol)Server とは、Kiro のエージェントに外部ツールやサービスとの連携機能を追加する仕組みです。MCP Server を設定することで、AWS ドキュメントの参照やライブラリの最新ドキュメント検索、構造化された思考プロセスなど、エージェントの能力を拡張できるというメリットがあります。

  1. ターミナルにて以下のコマンドを実行
cd ~/.kiro/settings
vi mcp.json

iキーを押して、以下の内容を入力してください。

ここを押すと展開します

{
    "mcpServers": {
        "aws-mcp": {
            "command": "uvx",
            "timeout": 100000,
            "transport": "stdio",
            "args": [
            "mcp-proxy-for-aws@latest",
            "https://aws-mcp.us-east-1.api.aws/mcp",
            "--metadata",
            "AWS_REGION=us-west-2"
            ]
        },
        "Context7": {
            "type": "stdio",
            "command": "npx",
            "args": [
            "-y",
            "@upstash/context7-mcp@latest"
            ]
        },
        "sequential-thinking": {
          "command": "npx",
          "args": [
            "-y",
            "@modelcontextprotocol/server-sequential-thinking"
          ]
        },
        "drawio": {
        "command": "npx",
        "args": ["-y", "@drawio/mcp"]
        },
        "playwright": {
        "command": "npx",
        "args": ["-y", "@executeautomation/playwright-mcp-server"]
        }
    }
}

Escキーを押して、:wqと入力して保存しましょう。

3-3. Kiroの起動

  1. Kiroにて以下のコマンドを実行
cd ~/kiro-handson
kiro-cli

3-4. Agent Steeringの確認

  1. Kiroにて以下のコマンドを実行し、追加したステアリングファイルが認識されていることを確認
kiro steering reload
kiro steering list

3-5. MCP Serverの確認

  1. Kiroにて以下のコマンドを実行し、追加したMCP Serverの設定が認識されていることを確認
/mcp

20260318-001-mcp.png

補足 :MCP Server は起動時、時間がかかる場合があります。緑のチェックマーク(正常)となっていない場合( loading 等)は、数分待ってから、再度「/mcp」コマンドを実行してください。

7.Kiro CLIで開発

それでは、Kiro CLIでの開発として、構成図の作成を行います。

前提条件

本手順は、「6.Kiro CLIのセットアップ」のステップ3に継続し、Visual Studio CodeでSSH接続およびKiroを起動した状態で実施して下さい。

ステップ一覧

  1. Visual Studio Code Draw.io拡張機能のインストール
  2. 構成図の作成
  3. 構成図の修正

ステップ1: Visual Studio Code Draw.io拡張機能のインストール

Visual Studio CodeでDraw.ioを表示できるようにします。

  1. SSH接続している Visual Studio Codeにて 左サイドバーの「拡張機能」アイコンを選択
  2. 検索ボックスにDraw.io Integrationと入力
  3. Henning Dieterichsの「Draw.io Integration」拡張機能をインストール

ステップ2: 構成図の作成

2-1. 構成図の作成

  1. Kiroにて以下のコマンドを実行
  2. 繰り返し確認メッセージが表示するため、内容を確認し「y(Yes)」または「n(No)」を入力し、Enter キーを押下
open_drawio_xml を利用して、シンプルなWeb3層構造の構成図を作成し、.dioファイルで保存して

draw.io MCPサーバーのツール

draw.io MCPサーバーを利用する場合、目的に合った機能を呼び出すためにツール名を指定しましょう。

ツール名 機能 ユースケース
open_drawio_xml XML形式で図を作成・編集 詳細なカスタム図、既存の.dioファイル編集
open_drawio_csv CSVデータから図を自動生成 組織図、階層構造、ネットワーク構成図
open_drawio_mermaid Mermaid記法で図を生成 フローチャート、シーケンス図、クラス図

2-2. 構成図の確認

  1. Visual Studio Code のエクスプローラにて「kiro-handson」の配下に作成された「~.dio」を選択

出力例

20260318-001-dio.png

2-3. 構成図を閉じる

  1. Visual Studio Code にて「~.dio」のタブの「×」を選択し閉じる

ステップ3: 構成図の修正

MCPサーバー drawioを利用して、構成図を修正します。

3-1. 構成図の修正

  1. Kiroにて以下のコマンドを実行
  2. 繰り返し確認メッセージが表示するため、内容を確認し「y(Yes)」または「n(No)」を入力し、Enter キーを押下
open_drawio_xml を利用して、シンプルなWeb3層構造の構成図を冗長構成に修正して。アイコンと文字は重複しないようして。また、リージョン、AZも追加して

3-2. 構成図の確認

  1. Visual Studio Code のエクスプローラにて「kiro-handson」の配下に作成された「~.dio」を選択

出力例

20260318-002-dio.png

3-3. 構成図を閉じる

  1. Visual Studio Code にて「~.dio」のタブの「×」を選択し閉じる

8.環境削除手順

テストが完了したら、以下の手順で環境をきれいにお掃除しましょう。

ステップ一覧

  1. SSH接続の終了
  2. EC2インスタンスの停止
  3. AWS CloudFormationスタックの削除

ステップ1: SSH接続の終了

SSH接続およびポートフォワーディングを終了する方法を記載します。

1-1. Visual Studio Code SSH接続の終了

  1. Visual Studio Codeの左下の「SSH: dev-001-kiro-cli-01」を選択
  2. 「リモート接続を終了する」を選択

1-2. Session Manager ポートフォワーディングの終了

  1. ポートフォワーディングを実行しているPowerShellウィンドウでCtrl + Cキーを押下

ステップ2: EC2インスタンスの停止

まずはインスタンスを停止します。

  1. AWS マネジメントコンソールで「Amazon EC2」を開く
  2. dev-001-kiro-cli-01 インスタンスを選択
  3. 「インスタンスの状態」→「インスタンスを停止」を選択
  4. インスタンスが「停止済み」になるまで待つ

ステップ3: AWS CloudFormationスタックの削除

3-1. EC2スタックの削除

  1. AWS マネジメントコンソールで「AWS CloudFormation」を開く
  2. スタック名: ec2-kiro-cli-instance-stackを選択
  3. 「削除」ボタンを選択
  4. 確認ダイアログで「削除」を選択
  5. ステータスが「DELETE_COMPLETE」になるまで待つ(約3~5分)

3-2. 基盤スタックの削除

  1. 3-1. EC2スタックの削除 の手順を参考に、スタック名: ec2-kiro-cli-base-stackを削除します。

大事なポイント: スタックは必ず上記の順序で削除してください。EC2スタックが基盤スタックのリソースに依存しているので、逆順で削除するとエラーになります。


まとめ

お疲れさまでした。Kiro CLI サーバー構築ハンズオンは以上です。いかがでしたでしょうか。

このハンズオンでは、以下の技術・サービスを組み合わせて、Amazon EC2上でKiro CLIを安全かつ再現性高く利用できる開発環境を構築しました。 もしお時間があれば、Kiro CLIを活用して構成図からのAWS CloudFormationテンプレート作成や、設計書の作成なども試してみてください。

技術・サービス 役割
AWS CloudFormation インフラのコード化と再現性確保(Amazon VPC、AWS IAM、KeyPair、Security Group、Amazon EC2 など)
Amazon EC2 + UserData 開発環境の自動構築(Node.js、pyenv+Python 3.13、Kiro CLI、uv のインストールと初期設定)
AWS Systems Manager Session Manager SSHポート開放不要のセキュアな接続(ポートフォワーディングを用いたVS Code Remote-SSH接続)
AWS IAM(最小権限) MCP関連権限の最小化(aws-mcp:InvokeMcp、CallReadOnlyTool、CallReadWriteToolに限定)
Kiro CLI ターミナルベースの対話型AI開発アシスタント(Agent Steering、MCP Server によるカスタマイズ)
Agent Steering プロジェクト固有のルール・回答方針をMarkdownで定義し、チーム全体で統一された開発体験を共有
MCPサーバー(aws-mcp、Context7、sequential-thinking、drawio、playwright) 外部ツール・知識への安全な拡張(図作成、思考支援、AWS連携、ブラウザ自動操作など)

補足: 必要に応じて、インスタンスタイプやEBSサイズ、MCPサーバーの構成を調整し、ワークロードに合わせた最適化を行ってください。

付録

1.Kiro CLI MCPサーバーのご説明

サーバー名 目的・概要
AWS MCP Server AWS の公式MCPプロキシ。IAMロールの認証情報を利用し、AWS サービスのドキュメントや操作を支援するMCPサーバーです。
Context7 MCP 参照ドキュメントのコンテキストを調整し、最新で正確な情報をAIに渡すためのMCPサーバーです。
Sequential Thinking MCP 段階的な思考(Chain of Thought)を支援し、推論プロセスを明示化して精度の高い回答やコード生成を可能にするMCPサーバーです。
drawio MCP 図の作成・編集をAIから操作するためのMCPサーバーで、アーキテクチャ図やフローの自動生成に役立ちます。
Playwright MCP ブラウザの自動操作をAIから実行するためのMCPサーバーで、Webアプリケーションのテスト自動化に役立ちます。

2.Kiro クレジットの確認方法

Kiro CLIでは、現在のクレジット使用状況を /usage コマンドで確認できます。

  1. Kiroにて以下のコマンドを実行
/usage

現在のクレジット残量や使用量が表示されます。

20260318-001-usage.png

補足: Kiro のサブスクリプションプランによって、利用可能なクレジット量が異なります。開発作業中は定期的に /usage コマンドでクレジット残量を確認し、計画的にご利用ください。

この記事は私が書きました

印鑰 幸太

記事一覧

全ての AWS 認定を取得。AWSサービスでは、AWS CloudFormationが好きです。ジム通いが趣味です。

印鑰 幸太

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。