- 公開日
- 最終更新日
【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.システムアーキテクチャ
全体構成図

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.構築手順
さあ、ここからが本番です。一緒に作っていきましょう。
ステップ一覧
- 基盤スタックのデプロイ
- EC2インスタンススタックのデプロイ
ステップ1: 基盤スタックのデプロイ
まずは、Amazon VPC、AWS IAMロールといった基盤となるリソースを作っていきます。

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コンソールを開く
- AWS マネジメントコンソールにログイン
- サービスメニューから「AWS CloudFormation」を選択
- 「スタックの作成」→「新しいリソースを使用(標準)」を選択
1-3. テンプレートのアップロード
- 「既存のテンプレートを選択」を選択
- 「テンプレートファイルのアップロード」を選択
- 作成したAWS CloudFormationテンプレートファイルを選んでアップロード
- 「次へ」を選択
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. スタックオプションの設定
- 「AWS CloudFormationによってAWS IAMリソースが作成される場合があることを承認します」にチェックを入れ、「次へ」を選択
1-6. 確認して作成
- 設定内容をざっと確認し、「送信」を選択
1-7. デプロイ完了の確認
スタックのステータスが「CREATE_COMPLETE」になるまで、待ちましょう。(約3~5分かかります)
ステップ2: EC2インスタンススタックのデプロイ
次は、EC2インスタンスを作っていきます。

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接続する方法を説明します。

ステップ一覧
- キーペアのダウンロード
- SSH Configファイルの設定
- Visual Studio Code Remote-SSH拡張機能のインストール
- Session Managerポートフォワーディングの開始
- Visual Studio Code Remote SSHで接続
ステップ1: キーペアのダウンロード
AWS CloudFormationで作成されたキーペアの秘密鍵を取得します。
1-1. キーペアIDの確認
- AWS マネジメントコンソールで「Amazon EC2」を開く
- 左ペインから「ネットワーク & セキュリティ」→「キーペア」を選択
- dev-001-kiro-cli-ec2-keypairを検索して選択
- 「キーペアID」をコピー(key-xxxxxxxxxxxxxxxxxの形式)
1-2. AWS Systems Manager Parameter Storeから秘密鍵を取得
- AWS マネジメントコンソールで「AWS Systems Manager」を開く
- 左ペインから「パラメーターストア」を選択
- 先程、コピーしたキーペアIDで検索して選択
- 「復号化された値を表示」をオンにして、表示された値を控える
1-3. 秘密鍵ファイルの保存
- エクスプローラーで「C:\Users\【ユーザー名】\.ssh」フォルダーを開く
- dev-001-kiro-cli-ec2-keypair.pemという名前で新規ファイルを作成
- 控えた秘密鍵の内容を貼り付けて保存
- ファイルを右クリック→「プロパティ」→「読み取り専用」にチェック→「OK」
補足: .sshフォルダーがない場合は作成してください。
ステップ2: SSH Configファイルの設定
SSH接続の設定を記述します。
2-1. Configファイルの作成・編集
- エクスプローラーで「C:\Users\【ユーザー名】\.ssh」フォルダーを開く
- configファイルがなければ作成(拡張子なし)
- テキストエディターで開いて、以下の内容を入力または追記
補足: 【ユーザー名】の部分は実際のユーザー名に置き換えてください
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接続できるようにします。
- Visual Studio Codeを開く
- 左サイドバーの「拡張機能」アイコンを選択
- 検索ボックスにRemote - SSHと入力
- Microsoft公式の「Remote - SSH」拡張機能をインストール
- インストール完了後、VS Codeを再起動
ステップ4: Session Managerポートフォワーディングの開始
接続フロー

4-1. EC2インスタンスIDの取得
- AWS マネジメントコンソールで「Amazon EC2」を開く
- 左ペインから「インスタンス」を選択
- dev-001-kiro-cli-01という名前の「インスタンスの状態」が「実行中」および「ステータスチェック」が「3/3 のチェックに合格しました」となっていることを確認
- 「インスタンス 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接続
- Visual Studio Codeを開く
- F1キーを押してコマンドパレットを開く
- Remote-SSH: Connect to Host...と入力して選択
- dev-001-kiro-cli-01を選択
- 新しいウィンドウが開いて、接続が開始
- 初回「Select the platform~」と表示しますのでLinuxを選択
- Ctrl + @キーを押下し、ターミナルを起動
6.Kiro CLIのセットアップ
Kiro CLIのセットアップ方法をご説明いたします。
ステップ一覧
- Kiroの認証
- Kiroの初回起動
- Kiroのカスタマイズ
ステップ1: Kiroの認証
- このハンズオンは、IAM Identity Center で Kiro のサブスクリプションを管理していることを前提とした手順です。
- 別の方法で Kiro サブスクリプションを管理している場合は、「Kiro CLIの認証」に関する手順を、ご自身の環境に合わせて読み替えてください。
前提条件
本手順は、「5.Session Managerポートフォワーディング経由のSSH接続」のステップ5に継続し、Visual Studio CodeでSSH接続した状態で実施して下さい。
1-1. SSO の開始 URLの確認
- ブラウザにて AWS IAM Identity Center を利用したSSOアクセスを行い、「AWS access portal」を開く
- Kiro のサブスクリプションが紐づけられた、AWS アカウントの「アクセスキー」を選択
- 「macOS and Linux」、「Windows」、「PowerShell」タブのいずれかを選択
- 「AWS IAM Identity Center 認証情報 (推奨)」の「SSO の開始 URL」の値を控える

1-2. UserDataの完了確認
- Visual Studio Code にて、Ctrl + @ キーを押下して、ターミナルを起動
- ターミナルにて以下のコマンドを実行し、「UserData script completed~」と表示されることを確認。表示されなければ、5分待機し再度コマンドを実行し、ターミナルにて「source ~/.bashrc」を実行
sudo tail -1 /var/log/user-data.log
1-3. 認証の開始
- ターミナルにて以下のコマンドを実行し、認証を開始
kiro-cli login --use-device-flow
補足 :--use-device-flow オプションとは、認証時にブラウザを自動起動できないため、OAuth デバイスフローを利用ための設定です。
1-4. 認証設定
- 以下の表を参考に認証情報を設定
| 項目 | 入力内容 |
|---|---|
| Select login method | Use with Pro license を選択 |
| Enter Start URL | {手順:SSO の開始 URLの確認にて控えた値} |
| Enter Region | ap-northeast-1 |
1-5. OAuth デバイスフローによる認証
- ターミナルにて「Open this URL:~」が表示しますので、URLをコピーし、ブラウザで開く
- ブラウザにて「認証がリクエストされました」と表示するため、「確認して続行」を押下
- ブラウザにて「Kiro CLI がデータにアクセスすることを許可しますか?」と表示するため、「アクセスを許可」を押下
- ブラウザにて「リクエストが承認されました」と表示するため、タブを閉じる
- ターミナルにて「Logged in successfully」と表示されることを確認

ステップ2: Kiroの初回起動
2-1. プロジェクトフォルダの作成
- ターミナルにて以下のコマンドを実行
cd ~ mkdir kiro-handson && cd kiro-handson
2-2. Kiroの起動
- ターミナルにて以下のコマンドを実行し、Kiroが起動されることを確認
kiro-cli

2-3. Kiroの終了
- ターミナルにて以下のコマンドを実行し、Kiroを終了
/quit
ステップ3: Kiroのカスタマイズ
3-1. Agent Steering
Agent Steering とは、Kiro のエージェントに対してプロジェクト固有のルールやコーディング規約・回答方針などを Markdown ファイルで指示し、すべての応答に一貫して反映させる仕組みです。Agent Steering を設定することで、毎回プロンプトで同じ指示を繰り返す必要がなくなり、チーム全体で .kiro/steering/ をリポジトリに含めれば統一された開発体験を共有できるというメリットがあります。
- ターミナルにて以下のコマンドを実行
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 ドキュメントの参照やライブラリの最新ドキュメント検索、構造化された思考プロセスなど、エージェントの能力を拡張できるというメリットがあります。
- ターミナルにて以下のコマンドを実行
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の起動
- Kiroにて以下のコマンドを実行
cd ~/kiro-handson kiro-cli
3-4. Agent Steeringの確認
- Kiroにて以下のコマンドを実行し、追加したステアリングファイルが認識されていることを確認
kiro steering reload kiro steering list
3-5. MCP Serverの確認
- Kiroにて以下のコマンドを実行し、追加したMCP Serverの設定が認識されていることを確認
/mcp

補足 :MCP Server は起動時、時間がかかる場合があります。緑のチェックマーク(正常)となっていない場合( loading 等)は、数分待ってから、再度「/mcp」コマンドを実行してください。
7.Kiro CLIで開発
それでは、Kiro CLIでの開発として、構成図の作成を行います。
前提条件
本手順は、「6.Kiro CLIのセットアップ」のステップ3に継続し、Visual Studio CodeでSSH接続およびKiroを起動した状態で実施して下さい。
ステップ一覧
- Visual Studio Code Draw.io拡張機能のインストール
- 構成図の作成
- 構成図の修正
ステップ1: Visual Studio Code Draw.io拡張機能のインストール
Visual Studio CodeでDraw.ioを表示できるようにします。
- SSH接続している Visual Studio Codeにて 左サイドバーの「拡張機能」アイコンを選択
- 検索ボックスにDraw.io Integrationと入力
- Henning Dieterichsの「Draw.io Integration」拡張機能をインストール
ステップ2: 構成図の作成
2-1. 構成図の作成
- Kiroにて以下のコマンドを実行
- 繰り返し確認メッセージが表示するため、内容を確認し「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. 構成図の確認
- Visual Studio Code のエクスプローラにて「kiro-handson」の配下に作成された「~.dio」を選択
出力例

2-3. 構成図を閉じる
- Visual Studio Code にて「~.dio」のタブの「×」を選択し閉じる
ステップ3: 構成図の修正
MCPサーバー drawioを利用して、構成図を修正します。
3-1. 構成図の修正
- Kiroにて以下のコマンドを実行
- 繰り返し確認メッセージが表示するため、内容を確認し「y(Yes)」または「n(No)」を入力し、Enter キーを押下
open_drawio_xml を利用して、シンプルなWeb3層構造の構成図を冗長構成に修正して。アイコンと文字は重複しないようして。また、リージョン、AZも追加して
3-2. 構成図の確認
- Visual Studio Code のエクスプローラにて「kiro-handson」の配下に作成された「~.dio」を選択
出力例

3-3. 構成図を閉じる
- Visual Studio Code にて「~.dio」のタブの「×」を選択し閉じる
8.環境削除手順
テストが完了したら、以下の手順で環境をきれいにお掃除しましょう。
ステップ一覧
- SSH接続の終了
- EC2インスタンスの停止
- AWS CloudFormationスタックの削除
ステップ1: SSH接続の終了
SSH接続およびポートフォワーディングを終了する方法を記載します。
1-1. Visual Studio Code SSH接続の終了
- Visual Studio Codeの左下の「SSH: dev-001-kiro-cli-01」を選択
- 「リモート接続を終了する」を選択
1-2. Session Manager ポートフォワーディングの終了
- ポートフォワーディングを実行しているPowerShellウィンドウでCtrl + Cキーを押下
ステップ2: EC2インスタンスの停止
まずはインスタンスを停止します。
- AWS マネジメントコンソールで「Amazon EC2」を開く
- dev-001-kiro-cli-01 インスタンスを選択
- 「インスタンスの状態」→「インスタンスを停止」を選択
- インスタンスが「停止済み」になるまで待つ
ステップ3: AWS CloudFormationスタックの削除
3-1. EC2スタックの削除
- AWS マネジメントコンソールで「AWS CloudFormation」を開く
- スタック名: ec2-kiro-cli-instance-stackを選択
- 「削除」ボタンを選択
- 確認ダイアログで「削除」を選択
- ステータスが「DELETE_COMPLETE」になるまで待つ(約3~5分)
3-2. 基盤スタックの削除
- 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 コマンドで確認できます。
- Kiroにて以下のコマンドを実行
/usage
現在のクレジット残量や使用量が表示されます。

補足: Kiro のサブスクリプションプランによって、利用可能なクレジット量が異なります。開発作業中は定期的に
/usageコマンドでクレジット残量を確認し、計画的にご利用ください。
この記事は私が書きました
印鑰 幸太
記事一覧全ての AWS 認定を取得。AWSサービスでは、AWS CloudFormationが好きです。ジム通いが趣味です。