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

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

この記事を共有する

目次

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

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

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

このハンズオンでは、Amazon EC2 上に Windows Server 2025 の開発環境を自動構築し、Kiro IDE を利用する一連の流れを体験できます。

学べること 内容
AWS CloudFormation によるIaC実践 Amazon VPC、AWS IAM、Amazon EC2 リソースを統合管理し、再現可能な環境を構築
Amazon EC2 での開発環境自動構築 AWS CloudFormation の UserData で Python、Node.js、Git、AWS CLI、VS Code、uv を一括セットアップ。日本語化も自動で実施

どんな人向け?

  • Kiro IDEを試してみたい方。Amazon EC2 上に自由な開発環境を用意し、Kiro IDE を試せます。
  • AWS マネジメントコンソールの基本操作ができて、Windows操作の基礎がわかる方なら大丈夫です。
  • AWS CloudFormation の知識があるとさらに楽しめますが、なくてもバッチファイルの実行で進められます。

1.概要

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

特徴 説明
Kiro IDE on EC2 ローカル環境の制約に関係なく、Amazon EC2 上のWindows Server 2025 で Kiro IDE を自由に利用できる開発環境を提供
IaCによる自動構築 AWS CloudFormation で Amazon VPC・AWS IAM・Amazon EC2 を統合管理し、再現性の高いインフラ自動構築を実現
自動セットアップ Python(Ver3.13)、Node.js、Git、AWS CLI、VS Code、Google Chrome、uv を UserData で一括インストール。日本語化も自動で実施し、すぐに開発作業を開始できる
セキュアアクセス AWS Systems Manager Session Manager ポートフォワーディング経由でリモートデスクトップ接続。リモートデスクトップ ポートをインターネットに公開せず、安全にアクセス
バッチファイルによるデプロイ deploy.batを実行するだけで、基盤スタックとEC2インスタンススタックを順番にデプロイ。パスワード生成や SSM Agent 待機も自動化

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

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

全体構成図

2-01-全体構成図.PNG

3.前提条件

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

所要時間

  • 約 2 時間 45 分
    • 構築作業:約 70 分(UserData の実行に時間がかかります)
    • 動作確認:約 80 分(Specモード にて開発する場合に時間がかかります)
    • 環境削除:約 15 分

必要な権限

以下の権限が必要です。

  • AWS CLI が利用できること(認証設定済み)
  • AWS CloudFormation スタックをデプロイできること
  • Amazon EC2、AWS IAM を操作できること

必要な契約

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

リージョン

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

開発環境

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

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

費用について

このハンズオンの費用の目安は、東京リージョン(t3.medium、3時間利用)で AWS 利用料が約 1 USD、Kiro のクレジット消費が約 50〜150 クレジットです。

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

4.構築手順

さあ、ここからが構築をはじめます。一緒に作っていきましょう。

ステップ一覧

  1. ファイルの準備
  2. AMI IDの確認
  3. バッチファイルの設定確認
  4. デプロイの実行

ステップ1: ファイルの準備

以下の3つのファイルをローカルPC の同じフォルダに配置してください。

1-1. 基盤スタックテンプレート

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-ide'
  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'
          Description: 'Allow HTTPS outbound for SSM and AWS services'
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: '0.0.0.0/0'
          Description: 'Allow HTTP outbound for package downloads'
        - IpProtocol: tcp
          FromPort: 53
          ToPort: 53
          CidrIp: '0.0.0.0/0'
          Description: 'Allow DNS TCP queries'
        - IpProtocol: udp
          FromPort: 53
          ToPort: 53
          CidrIp: '0.0.0.0/0'
          Description: 'Allow DNS UDP queries'
        - IpProtocol: tcp
          FromPort: 123
          ToPort: 123
          CidrIp: '0.0.0.0/0'
          Description: 'Allow NTP for time synchronization'
        - IpProtocol: udp
          FromPort: 123
          ToPort: 123
          CidrIp: '0.0.0.0/0'
          Description: 'Allow NTP UDP for time synchronization'
  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. Amazon EC2 インスタンススタックテンプレート

ec2-kiro-ide-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-ide'
  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
    AllowedPattern: "^ami-[0-9a-f]{17}$"
    Description: Windows Server 2025 AMI ID
  EbsVolumeSize:
    Type: Number
    Default: 40
    MinValue: 30
    MaxValue: 100
  RdpUserPassword:
    Type: String
    NoEcho: true
    Description: Password for rdpuser (generated by deploy script)
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: Stack Configuration
        Parameters:
          - Environment
          - ProjectId
          - ProjectInfix
      -
        Label:
          default: EC2 Configuration
        Parameters:
          - InstanceIndex
          - InstanceType
          - ImageId
          - EbsVolumeSize
      -
        Label:
          default: OS Configuration
        Parameters:
          - RdpUserPassword
Resources:
  RdpUserPasswordParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Name: !Sub '/${Environment}/${ProjectId}/${ProjectInfix}/${InstanceIndex}/windows-server/rdpuser-password'
      Type: String
      Value: !Ref RdpUserPassword
      Description: 'RDP user password for Windows Server'
      Tags:
        Environment: !Ref Environment
        ProjectId: !Ref ProjectId
  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/sda1
          Ebs:
            VolumeSize: !Ref EbsVolumeSize
            VolumeType: gp3
            DeleteOnTermination: true
            Encrypted: true
      UserData:
        Fn::Base64: !Sub |
          <powershell>
          # ============================================================
          # UserData Bootstrap Script for Windows Server 2025
          # ============================================================
          # This script runs once at first boot under the SYSTEM account.
          # It performs the following tasks:
          #   1. Set timezone to JST (Tokyo Standard Time)
          #   2. Create an RDP user with administrator privileges
          #   3. Enable and configure Remote Desktop connections
          #   4. Install Chocolatey package manager and development tools
          #   5. Install Japanese language pack and configure locale
          #   6. Register a RunOnce script for per-user locale finalization
          #      and Windows Update enablement
          #   7. Reboot to apply language settings
          #
          # Log file: C:\Windows\Temp\UserData.log
          # ============================================================
          Start-Transcript -Path "C:\Windows\Temp\UserData.log" -Append
          Write-Output "UserData script started: $(Get-Date)"
          # ----------------------------------------------------------
          # Execution Policy
          # ----------------------------------------------------------
          # Allow all scripts to run in this session without restriction.
          # This is required because the default policy on Windows Server
          # may block unsigned scripts downloaded from the internet.
          Set-ExecutionPolicy Bypass -Scope Process -Force
          # ----------------------------------------------------------
          # Timezone Configuration
          # ----------------------------------------------------------
          # Set the system timezone to Japan Standard Time (UTC+09:00).
          Write-Output "Setting timezone to Tokyo Standard Time..."
          Set-TimeZone -Id "Tokyo Standard Time"
          Write-Output "Timezone set to: $(Get-TimeZone)"
          # ----------------------------------------------------------
          # RDP User Creation
          # ----------------------------------------------------------
          # Create a dedicated local user "rdpuser" for Remote Desktop access.
          # The password is passed from the CloudFormation parameter and also
          # stored in SSM Parameter Store for later retrieval.
          # The user is added to Administrators, Remote Desktop Users, and
          # Users groups to allow full RDP access with admin privileges.
          $RdpUserPasswordPlain = "${RdpUserPassword}"
          Write-Output "Using passwords from CloudFormation parameters"
          $RdpUserPasswordSecure = ConvertTo-SecureString $RdpUserPasswordPlain -AsPlainText -Force
          try {
              $existingRdpUser = Get-LocalUser -Name "rdpuser" -ErrorAction SilentlyContinue
              if ($existingRdpUser) {
                  Write-Output "RDP user already exists, updating password..."
                  Set-LocalUser -Name "rdpuser" -Password $RdpUserPasswordSecure
              } else {
                  Write-Output "Creating new RDP user..."
                  New-LocalUser -Name "rdpuser" -Password $RdpUserPasswordSecure -FullName "RDP User" -Description "RDP Access User with Administrator privileges" -PasswordNeverExpires
              }
              Add-LocalGroupMember -Group "Remote Desktop Users" -Member "rdpuser" -ErrorAction SilentlyContinue
              Add-LocalGroupMember -Group "Users" -Member "rdpuser" -ErrorAction SilentlyContinue
              Add-LocalGroupMember -Group "Administrators" -Member "rdpuser" -ErrorAction SilentlyContinue
              Write-Output "RDP user configured successfully with administrator privileges and RDP access"
          } catch {
              Write-Output "RDP user creation/update failed: $_"
          }
          # ----------------------------------------------------------
          # Remote Desktop Protocol (RDP) Configuration
          # ----------------------------------------------------------
          # Enable RDP connections by setting fDenyTSConnections to 0,
          # open the Windows Firewall rules for RDP (port 3389), and
          # explicitly set the RDP listening port.
          # Firewall rules are matched by Name pattern instead of
          # DisplayGroup to avoid dependency on the OS display language.
          Write-Output "Configuring RDP settings..."
          Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name "fDenyTSConnections" -Value 0
          Get-NetFirewallRule -Name "RemoteDesktop-*" | Enable-NetFirewallRule
          # Set RDP listening port to the default 3389
          Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "PortNumber" -Value 3389
          # Disable automatic logon for security hardening
          Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name "AutoAdminLogon" -Value "0"
          # ----------------------------------------------------------
          # Windows Update
          # ----------------------------------------------------------
          # AWS AMI has Windows Update disabled by default.
          # It will be enabled via RunOnce after first RDP login.
          Write-Output "RDP and security configuration completed"
          # ----------------------------------------------------------
          # Chocolatey Package Manager Installation
          # ----------------------------------------------------------
          # Install Chocolatey, a Windows package manager, to automate
          # the installation of development tools. TLS 1.2 is enforced
          # for secure download of the installer script.
          Write-Output "Installing Chocolatey package manager..."
          [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
          try {
              Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
              Write-Output "Chocolatey installed successfully"
          } catch {
              Write-Output "Chocolatey installation failed: $_"
          }
          # Reload system PATH after Chocolatey installation so that
          # the 'choco' command is available in the current session.
          $machinePath = [System.Environment]::GetEnvironmentVariable("Path","Machine")
          $userPath = [System.Environment]::GetEnvironmentVariable("Path","User")
          $env:Path = $machinePath + ";" + $userPath
          # ----------------------------------------------------------
          # Development Tools Installation (via Chocolatey)
          # ----------------------------------------------------------
          # Each package is installed individually inside its own
          # try-catch block so that a single package failure does not
          # prevent the remaining packages from being installed.
          Write-Output "Installing development tools..."
          $chocoPackages = @(
              @{ Name = "python3"; Args = "--version=3.13 -y --no-progress" },
              @{ Name = "nodejs-lts"; Args = "-y --no-progress" },
              @{ Name = "git"; Args = "-y --no-progress" },
              @{ Name = "awscli"; Args = "-y --no-progress" },
              @{ Name = "vscode"; Args = "-y --no-progress" },
              @{ Name = "googlechrome"; Args = "-y --no-progress --ignore-checksums" },
              @{ Name = "uv"; Args = "-y --no-progress" }
          )
          foreach ($pkg in $chocoPackages) {
              try {
                  Write-Output "Installing $($pkg.Name)..."
                  $expression = "choco install $($pkg.Name) $($pkg.Args)"
                  Invoke-Expression $expression
                  Write-Output "$($pkg.Name) installed successfully"
              } catch {
                  Write-Output "$($pkg.Name) installation failed: $_"
              }
          }
          # ----------------------------------------------------------
          # Japanese Localization (Phase 1: System-wide defaults)
          # ----------------------------------------------------------
          # Install the Japanese language pack with -CopyToSettings to
          # apply display language, regional format, and locale settings
          # system-wide in a single step. Additional cmdlets configure
          # the preferred UI language, system locale, home location,
          # input method, and copy settings to the welcome screen and
          # new user profile template.
          # Note: This runs under the SYSTEM account. Per-user settings
          # for rdpuser are handled by the RunOnce script in Phase 2.
          Write-Output "Installing Japanese language pack with CopyToSettings..."
          $maxRetry = 3
          $langInstalled = $false
          for ($retry = 1; $retry -le $maxRetry; $retry++) {
              try {
                  Write-Output "Install-Language attempt $retry of $maxRetry..."
                  Install-Language -Language "ja-JP" -CopyToSettings -ErrorAction Stop
                  $langInstalled = $true
                  Write-Output "Japanese language pack installed successfully on attempt $retry"
                  break
              } catch {
                  Write-Output "Install-Language attempt $retry failed: $_"
                  if ($retry -lt $maxRetry) {
                      Write-Output "Waiting 30 seconds before retry..."
                      Start-Sleep -Seconds 30
                  }
              }
          }
          Write-Output "Installed language packs:"
          Get-InstalledLanguage | Out-String | Write-Output
          Write-Output "Configuring system-wide Japanese locale settings..."
          if ($langInstalled) {
              Set-SystemPreferredUILanguage -Language "ja-JP"
          } else {
              Write-Output "WARNING: Language pack not fully installed. Skipping Set-SystemPreferredUILanguage."
          }
          Set-WinSystemLocale -SystemLocale "ja-JP"
          Set-WinHomeLocation -GeoId 0x7A
          Set-WinUILanguageOverride -Language "ja-JP"
          Set-WinUserLanguageList -LanguageList ja-JP,en-US -Force
          Set-WinDefaultInputMethodOverride -InputTip "0411:00000411"
          Copy-UserInternationalSettingsToSystem -WelcomeScreen $true -NewUser $true
          Write-Output "System-wide Japanese locale settings configured"
          # ----------------------------------------------------------
          # Japanese Localization (Phase 2: Per-user RunOnce script)
          # ----------------------------------------------------------
          # Since UserData runs under the SYSTEM account, per-user
          # locale settings (language list, culture, input method) may
          # not apply to interactive logon users such as rdpuser.
          # This RunOnce script acts as a safety net: it runs once at
          # the first interactive logon and applies Japanese locale
          # settings in the context of the logged-in user.
          # Log file: C:\Windows\Temp\RunOnce-JapaneseLocale.log
          $RunOnceScriptPath = "C:\Windows\Temp\ApplyJapaneseLocale.ps1"
          @'
          Start-Transcript -Path "C:\Windows\Temp\RunOnce-JapaneseLocale.log" -Append
          Write-Output "RunOnce Japanese locale configuration started: $(Get-Date)"
          Set-WinUserLanguageList -LanguageList ja-JP,en-US -Force
          Set-WinHomeLocation -GeoId 0x7A
          Set-Culture ja-JP
          Set-WinUILanguageOverride -Language "ja-JP"
          Set-WinDefaultInputMethodOverride -InputTip "0411:00000411"
          Copy-UserInternationalSettingsToSystem -WelcomeScreen $true -NewUser $true
          # Enable Windows Update service (disabled by default in AWS AMI)
          Write-Output "Enabling Windows Update service..."
          Set-Service -Name wuauserv -StartupType Automatic
          Start-Service -Name wuauserv
          Write-Output "RunOnce Japanese locale configuration completed: $(Get-Date)"
          Stop-Transcript
          '@ | Out-File -Encoding UTF8 $RunOnceScriptPath
          # Register the RunOnce script in HKLM so it executes for
          # the first user who logs on interactively after reboot.
          Write-Output "Registering RunOnce for Japanese locale finalize..."
          reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v ApplyJapaneseLocale /t REG_SZ /d "powershell -ExecutionPolicy Bypass -File $RunOnceScriptPath" /f
          Write-Output "RunOnce registered successfully"
          # ----------------------------------------------------------
          # Reboot
          # ----------------------------------------------------------
          # A reboot is required for the Japanese language pack and
          # locale changes to take full effect. After reboot, the
          # RunOnce script will finalize per-user settings on first logon.
          Write-Output "UserData script completed: $(Get-Date)"
          Write-Output "System will reboot to apply Japanese language settings..."
          Stop-Transcript
          Restart-Computer -Force
          </powershell>
      Tags:
        - Key: Name
          Value: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-${InstanceIndex}'
        - Key: Environment
          Value: !Ref Environment
        - Key: ProjectId
          Value: !Ref ProjectId

1-3. デプロイ用バッチファイル

deploy.bat という名前のファイルを作って、以下の内容をコピー&ペーストしてください。

ここを押すと展開します

@echo off
REM Keep window open: re-launch with cmd /k when double-clicked
if not defined DEPLOY_RUNNING (
    set DEPLOY_RUNNING=1
    cmd /k "%~f0" %*
    exit /b
)
setlocal enabledelayedexpansion
echo Kiro AWS Development Environment Deployment Script
echo ================================================
echo.
echo Note: This deployment uses SSM port forwarding for RDP connections.
echo Direct RDP port (3389) is not exposed to the internet.
echo Note: This script uses the default AWS CLI profile.
echo.
set ENVIRONMENT=dev
set PROJECT_ID=001
set PROJECT_INFIX=kiro-ide
set INSTANCE_INDEX=01
set REGION=ap-northeast-1
set AMI_ID=ami-0ffac53afaf6a405e
REM Stack names
set BASE_STACK_NAME=%ENVIRONMENT%-%PROJECT_ID%-%PROJECT_INFIX%-base
set INSTANCE_STACK_NAME=%ENVIRONMENT%-%PROJECT_ID%-%PROJECT_INFIX%-instance-%INSTANCE_INDEX%
REM Template files
set BASE_TEMPLATE=ec2-kiro-base-stack.yaml
set INSTANCE_TEMPLATE=ec2-kiro-ide-instance-stack.yaml
echo Configuration:
echo - Environment: %ENVIRONMENT%
echo - Project ID: %PROJECT_ID%
echo - Project Infix: %PROJECT_INFIX%
echo - Region: %REGION%
echo - Instance Index: %INSTANCE_INDEX%
echo - AMI ID: %AMI_ID%
echo - Base Stack: %BASE_STACK_NAME%
echo - Instance Stack: %INSTANCE_STACK_NAME%
echo.
pause
echo Testing AWS CLI connection...
aws sts get-caller-identity --region %REGION% >nul 2>&1
if !errorlevel! neq 0 echo AWS CLI connection failed. Please check your credentials. & echo Run: aws sts get-caller-identity --region %REGION% & pause & goto end
echo AWS CLI connection successful
echo.
echo ================================================
echo Starting Staged Deployment
echo ================================================
echo.
REM ================================================
REM Stage 1: Base Stack (VPC, IAM, KeyPair)
REM ================================================
echo Checking Base stack status...
for /f "delims=" %%i in ('aws cloudformation describe-stacks --stack-name %BASE_STACK_NAME% --region %REGION% --query "Stacks[0].StackStatus" --output text 2^>nul') do set BASE_STATUS=%%i
if defined BASE_STATUS (
    echo Base stack found. Status: !BASE_STATUS!
    if "!BASE_STATUS!"=="CREATE_COMPLETE" (
        echo Base stack is ready. Proceeding to Instance deployment...
        goto check_instance
    )
    if "!BASE_STATUS!"=="UPDATE_COMPLETE" (
        echo Base stack is ready. Proceeding to Instance deployment...
        goto check_instance
    )
    echo Base stack status: !BASE_STATUS!
    echo Please wait for Base stack to complete or check for errors.
    pause
    goto check_instance
) else (
    echo Base stack not found. Starting Base deployment...
    goto deploy_base
)
:deploy_base
echo.
echo ================================================
echo Stage 1: Deploying Base Infrastructure
echo ================================================
echo.
echo Ready to deploy Base infrastructure stack.
echo This will create VPC, subnets, security groups, IAM roles, and KeyPair.
echo Press Enter to continue with Base stack deployment...
pause >nul
echo Deploying Base stack...
aws cloudformation create-stack ^
    --stack-name %BASE_STACK_NAME% ^
    --template-body file://%BASE_TEMPLATE% ^
    --parameters ParameterKey=Environment,ParameterValue=%ENVIRONMENT% ParameterKey=ProjectId,ParameterValue=%PROJECT_ID% ParameterKey=ProjectInfix,ParameterValue=%PROJECT_INFIX% ^
    --capabilities CAPABILITY_NAMED_IAM ^
    --region %REGION%
if !errorlevel! neq 0 echo Base stack deployment failed. Please check the error above. & pause & goto end
echo Waiting for Base stack creation to complete...
aws cloudformation wait stack-create-complete ^
    --stack-name %BASE_STACK_NAME% ^
    --region %REGION%
if !errorlevel! neq 0 echo Base stack creation failed or timed out. Check CloudFormation console. & pause & goto end
echo Base stack deployment completed successfully.
echo.
REM ================================================
REM Stage 2: Instance Stack (EC2)
REM ================================================
:check_instance
echo Checking Instance stack status...
for /f "delims=" %%i in ('aws cloudformation describe-stacks --stack-name %INSTANCE_STACK_NAME% --region %REGION% --query "Stacks[0].StackStatus" --output text 2^>nul') do set INSTANCE_STATUS=%%i
if defined INSTANCE_STATUS (
    echo Instance stack found. Status: !INSTANCE_STATUS!
    if "!INSTANCE_STATUS!"=="CREATE_COMPLETE" (
        echo Instance is ready. Proceeding to final checks...
        goto final_checks
    )
    if "!INSTANCE_STATUS!"=="UPDATE_COMPLETE" (
        echo Instance is ready. Proceeding to final checks...
        goto final_checks
    )
    echo Instance stack status: !INSTANCE_STATUS!
    echo Please wait for Instance stack to complete or check for errors.
    pause
    goto final_checks
) else (
    echo Instance stack not found. Starting Instance deployment...
    goto deploy_instance
)
:deploy_instance
echo.
echo ================================================
echo Stage 2: Deploying EC2 Instance
echo ================================================
echo.
echo Generating random password for RDP user...
for /f "delims=" %%i in ('powershell -Command "$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'; $symbols = '!@#%%^*-_=+'; $password = ''; for($i=0; $i -lt 12; $i++) { $password += $chars[(Get-Random -Maximum $chars.Length)] }; for($i=0; $i -lt 4; $i++) { $password += $symbols[(Get-Random -Maximum $symbols.Length)] }; $charArray = $password.ToCharArray(); [System.Random]$rng = New-Object System.Random; for($i=$charArray.Length-1; $i -gt 0; $i--) { $j=$rng.Next($i+1); $tmp=$charArray[$i]; $charArray[$i]=$charArray[$j]; $charArray[$j]=$tmp }; Write-Output (-join $charArray)"') do set RDP_PASSWORD=%%i
echo Password generated successfully.
echo.
echo Password will be stored in SSM Parameter Store:
echo - /%ENVIRONMENT%/%PROJECT_ID%/%PROJECT_INFIX%/%INSTANCE_INDEX%/windows-server/rdpuser-password
echo.
echo Ready to deploy EC2 Instance stack.
echo Press Enter to continue with Instance stack deployment...
pause >nul
echo Deploying Instance stack...
aws cloudformation create-stack ^
    --stack-name %INSTANCE_STACK_NAME% ^
    --template-body file://%INSTANCE_TEMPLATE% ^
    --parameters ParameterKey=Environment,ParameterValue=%ENVIRONMENT% ParameterKey=ProjectId,ParameterValue=%PROJECT_ID% ParameterKey=ProjectInfix,ParameterValue=%PROJECT_INFIX% ParameterKey=InstanceIndex,ParameterValue=%INSTANCE_INDEX% ParameterKey=RdpUserPassword,ParameterValue=%RDP_PASSWORD% ParameterKey=ImageId,ParameterValue=%AMI_ID% ^
    --region %REGION%
if !errorlevel! neq 0 echo Instance stack deployment failed. Please check the error above. & pause & goto end
echo Waiting for Instance stack creation to complete...
aws cloudformation wait stack-create-complete ^
    --stack-name %INSTANCE_STACK_NAME% ^
    --region %REGION%
if !errorlevel! neq 0 echo Instance stack creation failed or timed out. Check CloudFormation console. & pause & goto end
echo Instance stack deployment completed successfully.
echo.
REM ================================================
REM Final Checks and Connection Info
REM ================================================
:final_checks
echo.
echo ================================================
echo Final Deployment Checks
echo ================================================
echo.
echo Getting EC2 instance information...
for /f "delims=" %%i in ('aws cloudformation describe-stack-resources --stack-name %INSTANCE_STACK_NAME% --logical-resource-id EC2Instance --query "StackResources[0].PhysicalResourceId" --output text --region %REGION% 2^>nul') do set INSTANCE_ID=%%i
if not defined INSTANCE_ID (
    echo ERROR: Could not retrieve instance ID.
    echo Please check if the Instance stack was created successfully.
    pause
    goto end
)
echo Instance ID: !INSTANCE_ID!
echo.
echo Getting instance details...
aws ec2 describe-instances --instance-ids !INSTANCE_ID! --region %REGION% --query "Reservations[0].Instances[0].[State.Name,PublicIpAddress,PrivateIpAddress]" --output table
echo.
echo ========================================
echo Waiting for SSM Agent to come online
echo ========================================
echo.
set ATTEMPT=0
set MAX_ATTEMPTS=200
set WAIT_SECONDS=30
echo Checking SSM Agent status (max 200 attempts, 30s interval)...
:CHECK_SSM_LOOP
set /a ATTEMPT+=1
if !ATTEMPT! geq !MAX_ATTEMPTS! echo WARNING: SSM Agent did not come online after !MAX_ATTEMPTS! attempts. & goto SHOW_INFO
for /f "tokens=*" %%i in ('aws ssm describe-instance-information --filters "Key=InstanceIds,Values=!INSTANCE_ID!" --query "InstanceInformationList[0].PingStatus" --output text --region %REGION% 2^>nul') do set PING_STATUS=%%i
if "!PING_STATUS!"=="Online" echo SSM Agent is online. & goto SSM_ONLINE
echo Attempt !ATTEMPT!/!MAX_ATTEMPTS! - Status: !PING_STATUS! - Waiting !WAIT_SECONDS!s...
timeout /t !WAIT_SECONDS! /nobreak >nul
goto CHECK_SSM_LOOP
:SSM_ONLINE
echo.
echo ========================================
echo Deployment completed successfully
echo ========================================
echo.
:SHOW_INFO
echo.
echo ========================================
echo Connection Commands
echo ========================================
echo.
echo Step 1: Retrieve RDP password
echo aws ssm get-parameter --name "/%ENVIRONMENT%/%PROJECT_ID%/%PROJECT_INFIX%/%INSTANCE_INDEX%/windows-server/rdpuser-password" --with-decryption --query "Parameter.Value" --output text --region %REGION%
echo.
echo Step 2: RDP via SSM port forwarding
echo.
echo   [PowerShell]
echo   $INSTANCE_ID = "!INSTANCE_ID!"
echo   aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389" --region %REGION%
echo.
echo   [Cmd]
echo   set INSTANCE_ID=!INSTANCE_ID!
echo   aws ssm start-session --target %%INSTANCE_ID%% --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389" --region %REGION%
echo.
echo Step 3: Connect with Remote Desktop
echo ----------------------------------------
echo RDP endpoint: localhost:13389
echo Username: rdpuser
echo Password: (retrieved in Step 1)
echo ----------------------------------------
echo.
echo ========================================
echo Next Steps
echo ========================================
echo.
echo 1. Wait for Windows to fully complete initialization (first boot may take 10-15 minutes)
echo 2. Use the SSM commands above to connect to the instance
echo 3. After first RDP login, Japanese locale and Windows Defender/Update will be re-enabled automatically
echo.
:end
echo.
echo Press any key to exit...
pause >nul


ステップ2: AMI IDの確認

デプロイ前に、使用する Windows Server 2025 の AMI ID をマネジメントコンソールで確認します。

  1. AWS マネジメントコンソールで「Amazon EC2」を開く
  2. 左メニューから「AMI カタログ」を選択
  3. 検索欄に Microsoft Windows Server 2025 Base と入力し、Enterキーを押下
  4. 検索結果から最新の AMI を確認し、「AMI ID」(ami-xxxxxxxxxxxxxxxxx 形式)をコピー

4-01-AMI IDの確認.PNG

補足: AMI ID はリージョンごとに異なります。必ず東京リージョン(ap-northeast-1)で確認してください。

大事なポイント: AMI は定期的に更新されます。ハンズオン実施時点の最新の AMI ID を使用してください。


ステップ3: バッチファイルの設定確認

deploy.bat をテキストエディタで開き、以下の設定値を環境に合わせて確認・変更してください。AMI_ID にはステップ2で確認した値を設定します。

変数名 デフォルト値 説明
ENVIRONMENT dev 環境識別子
PROJECT_ID 001 プロジェクトID
PROJECT_INFIX kiro-ide リソース名の接中辞
INSTANCE_INDEX 01 インスタンス識別用の連番(複数台デプロイ時に変更)
REGION ap-northeast-1 デプロイ先リージョン
AMI_ID ami-xxxxxxxxxxxxxxxxx Windows Server 2025 の AMI ID(ステップ2で確認した値を設定)

ステップ4: デプロイの実行

4-1. AWS CLI の認証確認

バッチファイルを実行する前に、AWS CLI の認証情報が正しく設定されていることを確認します。

  1. コマンドプロンプトを起動
  2. 以下のコマンドを実行し、想定のAWSアカウント情報が表示されることを確認
    aws sts get-caller-identity --region ap-northeast-1
    

大事なポイント: 表示された Account や Arn が想定のアカウントと一致しない場合は、AWS CLI の認証設定を見直してください。

【aws login による認証情報の設定方法】:

認証情報が未設定、またはセッションが期限切れの場合は、aws login コマンドで 一時認証情報を取得できます。

  1. 対象のアカウントのマネジメントコンソールを開く
  2. コマンドプロンプトにて、以下を入力し、Enterキーを押下
    aws login
    
  3. 初回のみ「You are able to change the region~」とリージョンの指定が求められるため、以下を入力し、Enterキーを押下
    ap-northeast-1
    
  4. ブラウザが開き「Continue with an active session(=アクティブなセッションで続行)」と表示されるため、対象のアカウントを選択
  5. ブラウザに「Your credentials have been shared successfully and can be used until your session expires. You can now close this tab.」と表示されたらタブを閉じる
  6. コマンドプロンプトに戻り、以下のコマンドを実行し認証情報を確認
    aws sts get-caller-identity --region ap-northeast-1
    

4-2. バッチファイルの実行

  1. エクスプローラーでファイルを配置したフォルダを開く
  2. deploy.bat をダブルクリックして実行
  3. 設定内容が表示されるので確認し、Enterキーを押下

補足: 基盤スタックおよび Amazon EC2 インスタンスのスタックが既にデプロイ済みの場合、該当のデプロイ処理は自動的にスキップされます。複数の Amazon EC2 インスタンスをデプロイする場合は、基盤スタックがデプロイ済みの状態で、deploy.bat の INSTANCE_INDEX を変更(例: 02)してから再度実行してください。

4-02-バッチファイルの実行.png

4-3. Stage 1: 基盤スタックのデプロイ

  1. AWS CLI の接続テストが実行される
  2. 「Press Enter to continue」と表示されたらEnterキーを押下
  3. 基盤スタック(Amazon VPC、AWS IAM、Amazon EC2 key pair、セキュリティグループ)のデプロイが開始
  4. デプロイ完了まで約3~5分待機

4-03-基盤スタックのデプロイ.png

4-4. Stage 2: Amazon EC2 インスタンスのデプロイ

  1. リモートデスクトップ ユーザー用のパスワードが自動生成される(AWS Systems Manager Parameter Storeに保存)
  2. 「Press Enter to continue」と表示されたらEnterキーを押下
  3. Amazon EC2 インスタンススタックのデプロイが開始
  4. デプロイ完了まで約3分待機

4-04-Amazon EC2 インスタンスのデプロイ.png

4-5. SSM Agent のオンライン確認

  1. デプロイ完了後、SSM Agent のオンライン確認が自動で開始
  2. 約60分待機「SSM Agent is online.」と表示されたら接続準備完了

4-05-SSM Agent のオンライン確認.png

補足: UserData の実行(ソフトウェアインストール、日本語化、再起動)には約50分かかります。SSM Agent がオンラインになった時点では UserData がまだ実行中の場合があります。リモートデスクトップ接続は、デプロイ開始から60分程度待ってから行うことを推奨します。

4-6. 接続情報の確認

デプロイ完了後、以下の接続コマンドが表示されます。

========================================
Connection Commands
========================================
Step 1: Retrieve RDP password
aws ssm get-parameter --name "/dev/001/kiro-ide/01/windows-server/rdpuser-password" --with-decryption --query "Parameter.Value" --output text --region ap-northeast-1
Step 2: RDP via SSM port forwarding
  [PowerShell]
  $INSTANCE_ID = "i-xxxxxxxxxxxxxxxxx"
  aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389" --region ap-northeast-1
  [Cmd]
  set INSTANCE_ID=i-xxxxxxxxxxxxxxxxx
  aws ssm start-session --target %INSTANCE_ID% --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389" --region ap-northeast-1
Step 3: Connect with Remote Desktop
----------------------------------------
RDP endpoint: localhost:13389
Username: rdpuser
Password: (retrieved in Step 1)
----------------------------------------

5.リモートデスクトップ接続

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

5-01-リモートデスクトップ接続.PNG

ステップ一覧

  1. リモートデスクトップ パスワードの取得
  2. AWS Systems Manager Session Manager ポートフォワーディングの開始
  3. リモートデスクトップ接続

ステップ1: リモートデスクトップ パスワードの取得

  1. コマンドプロンプトまたは PowerShell を開き、以下のコマンドを実行し、表示したパスワードを控える
aws ssm get-parameter --name "/dev/001/kiro-ide/01/windows-server/rdpuser-password" --with-decryption --query "Parameter.Value" --output text --region ap-northeast-1

補足: パス内の /01/INSTANCE_INDEX の値に対応しています。deploy.bat で INSTANCE_INDEX を変更した場合は、この部分も合わせて変更してください(例: INSTANCE_INDEX=02 の場合は /02/)。


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

ポートフォワーディングを開始するには、Amazon EC2 インスタンス ID が必要です。以下の手順でマネジメントコンソールから確認してください。

インスタンスID の確認手順:

  1. AWS マネジメントコンソールで「Amazon EC2」を開く
  2. 左メニューから「インスタンス」を選択
  3. インスタンス名 dev-001-kiro-ide-01 を探す
  4. 「インスタンスID」列に表示されている i-xxxxxxxxxxxxxxxxx 形式の値をコピー
  5. PowerShellまたはコマンドプロンプトを開き、ポートフォワーディングのコマンドを実行

補足: deploy.bat のデプロイ時にもインスタンスIDは表示されますが、ウィンドウを閉じてしまった場合はマネジメントコンソールから確認してください。また、インスタンス名の末尾 01INSTANCE_INDEX の値に対応しています。deploy.bat で INSTANCE_INDEX を変更した場合は、これらも合わせて読み替えてください(例: INSTANCE_INDEX=02 の場合は dev-001-kiro-ide-02)。

PowerShellの場合:

$INSTANCE_ID = "{マネジメントコンソールで確認したインスタンスID}"
aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389" --region ap-northeast-1

コマンドプロンプト(cmd)の場合:

set INSTANCE_ID={マネジメントコンソールで確認したインスタンスID}
aws ssm start-session --target %INSTANCE_ID% --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389,localPortNumber=13389" --region ap-northeast-1

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

Starting session with SessionId: your-session-id
Port 13389 opened for sessionId your-session-id.
Waiting for connections...

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


ステップ3: リモートデスクトップ接続

  1. Windowsの「リモート デスクトップ接続」を開く(mstscで検索)
  2. コンピューター名に以下を入力
    localhost:13389
    
  3. 「接続」を選択
  4. 以下の資格情報を入力
    ユーザー名: .\rdpuser
    パスワード: {ステップ1で取得した値}
    
  5. 証明書の警告が表示された場合は「はい」を選択

6.Kiro IDE のセットアップ

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

ステップ一覧

  1. Kiro のセットアップ
  2. Kiro のカスタマイズ

前提条件

  • 「4.構築手順」が実施済みであること

ステップ1: Kiro のセットアップ

1-1. Google Chrome の設定

Kiro のダウンロードやサインインにブラウザを使用するため、Google Chrome を既定のブラウザに設定します。

  1. Windowsマーク を右クリックし、設定 > アプリ > 既定のアプリ > Google Chrome を選択
  2. 「Google Chromeを既定のブラウザに設定する」にて「既定の設定」を押下
  3. 右上の「×」を押下し、設定を閉じる
  4. デスクトップの Google Chrome をダブルクリックして開く
  5. 「Chromeにログイン」にて、「ログインしない」を選択

1-2. Kiro のインストール

OS上に Kiro をインストールします。

  1. Google Chrome にて以下のURLを開く
    https://kiro.dev/downloads/
    
  2. 以下を押下して、実行ファイルをダウンロード
    Download for Windows (x64)
    
  3. Google Chrome にて開いたURLのタブを閉じる
  4. ダウンロードした実行ファイルをダブルクリック
  5. 「使用許諾契約書の同意」にて、以下を設定し「次へ」を押下
    同意する:選択する
    
  6. 「インストール先の指定」にて「次へ」を押下
  7. 「スタートメニューフォルダーの指定」にて「次へ」を押下
  8. 「追加タスクの選択」にて、以下を設定し「次へ」を押下
    デスクトップ上にアイコンを作成する:チェックを入れる
    
  9. 「インストール準備完了」にて「インストール」を押下
  10. 「Kiro セットアップウィザードの完了」にて「完了」を押下

1-3. SSO 開始 URL の確認

Kiro のサインインに必要な SSO の開始 URL を、AWS access portal から確認します。

  1. ローカルPC のブラウザで AWS access portal を開く
  2. 使用する AWS アカウントの「アクセスキー」を押下
  3. 「AWS IAM Identity Center 認証情報 (推奨)」セクションに表示されている「SSO の開始 URL」をコピーして控える。SSO の開始 URL は以下の形式です。
    https://xxxxxxxx.awsapps.com/start
    

6-01-SSO 開始 URL の確認.png

1-4. Kiro の初期セットアップ

Kiroのインストール後、Kiro IDE が起動します。 もし、Kiro IDE が起動していなければ、デスクトップの Kiro をダブルクリックしてください。

  1. Kiroにて、「Sign in」を押下
  2. 「You organization」を選択
  3. 「Sign in with your organization」にて、以下を選択
    Sign in via IAM Identity Center instead
    
  4. 「Sign in with AWS IAM Identity Center」にて、以下を入力し「Continue」を選択
    ①
    項目:Start URL
    入力内容:{1-3. SSO開始URLの確認にて確認した「SSO の開始 URL」}
    ②
    項目:Region
    入力内容:ap-northeast-1
    
  5. Google Chrome が起動するため以下を入力
    ユーザー名:{AWSアカウントのユーザー名}
    
  6. Google Chrome にて以下を入力
    パスワード:{AWSアカウントのパスワード}
    
  7. 「パスワードを保存しますか」にて「使用しない」を押下
  8. Google Chrome にて以下を入力
    MFAコード:{AWSアカウントのMFAコード}
    
  9. Google Chrome にて「Kiro IDE がデータにアクセスすることを許可しますか?」と表示するため、「アクセスを許可」を押下
  10. Google Chrome にて「You can close this page now.」と表示されたらタブを閉じる
  11. Kiro IDE へ遷移し「Import configuration」にて「Next」を押下
  12. 「Choose your theme」配色テーマを選択し「Continue」を押下
  13. 「Set up shell」にて「Skip All」を押下
  14. Kiro IDE の左ペインにて「拡張機能」(Extensions)選択
  15. 検索欄に以下を入力し、検索された拡張機能を選択
    Japanese Language Pack for Visual Studio Code
    
  16. Install を押下
  17. 「Do you Trust the~」にて「Trust Publisher & Install」を選択
  18. 右下にポップアップが表示するため、「Change Language and Restart」を押下し、Kiro IDE を再起動させます
  19. エクスプローラーを開き、Kiro 向けにフォルダを作成
    例) Path: ドキュメント、フォルダ名: kiro-handson
    
  20. Kiro IDE に遷移し Open a project を押下し、先ほどのフォルダを選択し、「フォルダーの選択(Select Folder)」
  21. ポップアップが表示するため、「はい、作成者を信頼します」を押下
  22. 「Let's build」にて、チャット欄に以下を入力
    こんにちは
    

6-02-Kiro の初期セットアップ.png


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

本ハンズオンでは、エージェントの動作をカスタマイズする主な4つの項目を設定します。

設定項目 説明
AGENT HOOKS ファイル保存やコマンド実行などのイベントをトリガーに、エージェントへの指示やコマンド実行を自動化
AGENT STEERING エージェントの回答言語や出力フォーマットなど、動作方針をルールとして定義
MCP SERVERS 外部ツールやサービスと連携するための MCP サーバーを設定し、エージェントの機能を拡張
POWERS ドキュメント・ワークフローガイド・MCP サーバーをパッケージ化した拡張機能をインストール

2-1. AGENT HOOKS

ファイル保存時、自動でセキュリティスキャンを行うため、設定を行います。

  1. Kiro IDE の左ペインにて Kiro 選択
  2. AGENT HOOKS の「+」ボタン(Open Kiro Hook UI)を押下
  3. 「Manually create a hook」を選択
  4. 「Describe a hook using natural language」にて、以下のエージェントの仕様を入力し、「Create Hook」を押下
  5. Security Scanner のタブを閉じる

ここを押すと展開します

Title: Security Scanner(入力する)
Description: ファイル保存時にAPIキーや秘密情報が含まれていないかチェックし、環境変数への移行を提案します(入力する)
Event: File Saved(選択する)
File path(s) to watch: */* (入力後、Enterキーを押下)
Action: Ask Kiro(選択する)
Instructions for Kiro agent:(入力する)
ファイルを精査して、以下のような機密情報を検出:
1. ハードコードされた認証情報
  - APIキー(AWS、Google、OpenAIなど)
  - パスワード
  - 秘密鍵
  - データベース接続文字列
2. 見つかった場合の対処
  - 該当行をハイライト
  - 環境変数への移行方法を提案
  - .envファイルへの追加例を表示
  - .gitignoreに.envが含まれているか確認
3. プライベートなURL
  - 内部APIのエンドポイント
  - 開発環境のURL
  - これらも環境変数化を提案
4. コミット前の最終チェック
  - git diffで機密情報が含まれていないか確認
  - 問題があればコミットを中断するよう警告

補足: お好みでカスタマイズ可能です。

6-03-AGENT HOOKS.png

6-04-AGENT HOOKS.png

2-2. AGENT STEERING

チャット回答の日本語化と成果物のフォーマット調整するため、設定を行います。

【日本語化ポリシーの作成】:

  1. Kiro IDEの左ペインにて Kiro 選択
  2. AGENT STEERING の「+」ボタン(Generate a custom steering document or import an agent skill)を選択
  3. Global agent steering を選択
  4. ファイル名に以下を入力し、Enter キーを押下
    Japanese Localization Policy
    
  5. 以下のエージェントの仕様を入力し、Ctrl + S キーを押下し保存
  6. 日本語化ポリシー のタブを閉じる

ここを押すと展開します

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

補足: inclusion: always は必ず記載してください。その他お好みでカスタマイズ可能です。

【ローカルポリシーの作成】:

  1. AGENT STEERING の「+」ボタン(Generate a custom steering document)を選択
  2. Global agent steering を選択
  3. ファイル名に以下を入力し、Enter キーを押下
    Local Policy
    
  4. 以下のエージェントの仕様を入力し、Ctrl + S キーを押下し保存
  5. ローカルポリシー のタブを閉じる

ここを押すと展開します

---
inclusion: always
---
# Kiro Steering
## 前提条件
- 本Steeringは **Windows環境での利用を前提**とする
## 目的
Kiroが生成するすべての回答およびドキュメントを日本語で統一し、
Windows環境で作業する日本国内利用者にとって
理解しやすく一貫性のある出力を提供する。
## 適用範囲
本Steeringは以下すべてに自動的に適用される。
- Kiroによるユーザーへの回答
- 技術的な説明、設計提案、レビュー
- エラーメッセージおよびトラブルシューティングの説明
- プロジェクト内のすべてのドキュメント
## 出力言語ルール
### 1. Kiroの回答
- すべて **日本語で出力**する
- 技術的内容も日本語で説明する
- ユーザー入力が英語であっても、日本語で回答する
### 2. ドキュメント
- すべて日本語で記述する
- 見出し構造、手順、表現を統一する
- 初心者にも理解できる説明を心がける
### 3. 技術用語の扱い
- 以下は英語表記のまま使用する
  - AWSサービス名(S3、Lambda、EC2 など)
  - プログラミング言語名
  - フレームワーク名
  - OSS・ライブラリ名
- 一般的な技術概念や操作説明は日本語で行う
### 4. コード記述ルール
- 変数名・関数名・クラス名は英語を使用してよい
- コードコメントは英語で記述する

6-05-AGENT STEERING.png

6-06-AGENT STEERING.png

2-3. MCP SERVERS

MCP(Model Context Protocol)サーバーを設定することで、Kiro が外部ツールやサービスと連携できるようになります。ここでは、AWS ドキュメント参照やドキュメント検索、逐次思考、作図、ブラウザ操作などの機能を追加します。

  1. Kiro IDEの左ペインにて Kiro 選択
  2. MCP SERVERS のアイコン(Open MCP Config)を選択
  3. 以下、MCPサーバーの設定を入力し、Ctrl + S キーを押下し保存
  4. mcp.json のタブを閉じる
  5. MCP SERVERS にて以下の設定が追加されます。ステータスが「×」(赤)表示の場合は、1分程度待機してから、「Retry」を押下し、ステータスが「✓」(緑)となることを確認

ここを押すと展開します

{
    "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"]
        }
    }
}

補足: 各MCPサーバーの概要は、本ブログの 付録 > 1.MCPサーバー をご参照ください。

6-07-MCP SERVERS.png

6-08-MCP SERVERS.png

6-09-MCP SERVERS.png

2-4. POWERS

Powers は、ドキュメント・ワークフローガイド・MCP サーバーをパッケージ化した拡張機能です。インストールするだけで、Kiro に特定分野の専門知識やツールを追加できます。本ハンズオンでは、AWS CDK / AWS CloudFormation によるインフラ構築を支援する Power を追加します。

  1. Kiro IDEの左ペインにて Powers 選択
  2. 「AVAILABLE」にて「Build AWS infrastructure with CDK and CloudFormation」を選択
  3. 「Install」を押下
  4. Build AWS infrastructure with CDK and CloudFormation のタブを閉じる
  5. Kiro IDEの左ペインにて Kiro 選択
  6. MCP SERVERS にて以下の設定が追加されます。ステータスが「×」(赤)表示の場合は、1分程度待機してから、「Retry」を押下し、ステータスが「✓」(緑)となることを確認
    power-aws-infrastructure-as-code-awslabs.aws-iac-mcp-server
    

6-10-POWERS.png

6-11-POWERS.png

2-5. エディタ設定

エディタ設定で、ファイル保存時に自動フォーマットを有効にします。コードの整形を手動で行う手間を省けます。

  1. 左ペイン下のギアのマークをクリックし、設定 を押下
  2. 「設定の検索」欄に以下を入力
    format on save
    
  3. 以下を設定し、設定 タブを閉じる
    Editor: Format On Save:チェック入れる
    
  4. 設定 のタブを閉じる

6-12-エディタ設定.png

7.Kiro IDEで開発

ここからは、構築した Amazon EC2 上の Kiro IDE を使って実際に開発を体験します。Kiro IDE には Vibe モードと Spec モードの2つの開発スタイルがあり、本章ではそれぞれのモードで簡単な成果物を作成し、操作の流れを確認します。

補足: 本章の画面や機能の説明は、2026年3月時点の Kiro IDE の情報に基づいています。Kiro IDE は頻繁にアップデートされるため、実際の画面や操作が異なる場合があります。

ステップ一覧

  1. Vibeモード
  2. Specモード

前提条件

  • 「4.構築手順」が実施済みであること
  • 「6.Kiro IDEのセットアップ」が実施済みであること

Kiro IDE の Vibe モードと Spec モード

Kiro IDE には、開発スタイルに応じて使い分けられる2つのモードがあります。

項目 Kiro IDE(Spec 機能) Kiro IDE(Vibe 機能)
開発スタイル チャットセッションでの仕様駆動開発 チャットセッションでのバイブコーディング開発
機能 ・3つの主要ファイル作成
 requirements.md
 design.md
 tasks.md
・要件~実行までのタスク実行
・インタラクティブな Q&A 形式
・クイックアシスタンス
・コンテキスト理解
・柔軟なアプローチ
ユースケース 要件定義~実装までをワークフローとして一貫性をもって開発したい場合 会話的なアプローチで簡単な質問、説明などを受けたい場合

出典: 【Kiro】IDE と CLI の使いどころを整理する

クレジット

Kiro Proプランの場合、1000 クレジットが割り当てられています。クレジットをすべて消費すると、Kiro が使用できなくなります。この場合、クレジットの追加が必要です。

クレジット消費量の目安は、以下をご参照ください。

出典: 【re:Invent 2025】Kiro のクレジットの確認方法と、消費量の目安まとめ

クレジットの確認方法

Kiro IDEの場合、Kiro のクレジットの消費状況は、右下のステータスバーで確認できます。


ステップ1: Vibeモード

Vibeモードは、チャット形式で気軽にコードを生成・修正できるモードです。

項目 内容
使いどころ ちょっとした質問、コードの生成・修正、アイデアの壁打ちなど
進め方 チャットに自然言語で指示を入力するだけ。計画や設計は不要
特徴 即座にコードを生成・修正。差分確認や変更の取り消しもワンクリック

1-1. セッションの開始

  1. 右上の「+」(New Session)を押下
  2. Kiroにて「Let's build」の「Vibe」を選択

補足: 「Let's build」が表示していない場合、右上のチャットマークを押下し、次に「New Session」を押下してください。

1-2. HTMLファイルの作成

  1. チャットで以下を入力し、Enter キーまたは上矢印を押下  
    シンプルな HTML ファイルを作成してください。
     

1-3. 成果物の確認

  1. チャットの赤線または、Kiroのエクスプローラーから成果物を選択
  2. 右クリックし、「エクスプローラーで表示する」を選択
  3. HTMLファイルをダブルクリックして、ブラウザで開く
  4. 「アプリを選択して.htmlファイルを開く」にて「Google Chrome」を選択し、「常に使う」を押下
  5. シンプルな HTML ファイルが作成されたことを確認

7-01-Vibeモード.png

7-02-Vibeモード.png

1-4. 修正の実施

  1. チャットに以下を入力し、Enterキーまたは上矢印を押下  
    TailwindCSSをCDNで読み込んで、視覚的に変化がわかる様に修正してください。
     
  2. チャットの View diff を押下
  3. 差分が表示するため、内容を確認し差分のタブを閉じる
  4. 手順1-3の3~5を行い、HTMLファイルが変更されたことを確認
  5. タブを閉じる

7-03-Vibeモード.png

7-04-Vibeモード.png

1-5. 変更の取り消し

  1. チャットの Undo changes を押下
  2. 手順1-3の3~5を行い、HTMLファイルが変更前に戻ったことを確認
  3. タブを閉じる

7-05-Vibeモード.png

1-6. クリーンアップ

  1. Google Chromeのブラウザを閉じる
  2. エクスプローラーを閉じる
  3. 成果物が不要であれば、Kiroのエクスプローラーにて、成果物を選択し「削除」を押下
  4. Kiroにて右上のチャットマークを押下し、現在のセッション右側の「×」(close)を押下

ステップ2: Specモード

Specモードは、要件定義 → デザイン文書(=設計) → 実装タスクというワークフローに沿って、計画的に開発を進めるモードです。

項目 内容
使いどころ 機能追加や新規プロジェクトなど、要件から実装まで一貫して進めたい場合
進め方 Kiroが対話形式で質問し、回答をもとに要件・設計・タスクを整理
自動生成されるドキュメント requirements.md(要件)、design.md(設計)、tasks.md(実装タスク)
実装 タスクリストに基づき、Kiroが順番にコードを生成・修正

2-1. セッションの開始

  1. 右上の「+」(New Session)を押下
  2. 「Let's build」の「Spec」を選択

2-2. 要件の入力

  1. チャットに以下を入力し、Enterキーまたは上矢印を押下  
    AWSのエディタであるKiroに関するLPを作成したい。
     
  2. チャット欄で質問があった場合は、選択または回答します。
    • 選択にて回答する場合、項目を選択後「Submit answer」を押下

回答例:

質問項目 回答例
これは新機能の構築ですか、それともバグ修正ですか? 新機能を構築する
何から始めますか? 要件定義

2-3. 要件文書の確認

  1. チャットにて、要件文書の概要が表示
  2. 詳細を確認するため、SPECS:kiro-landing-page > 1 Requirements を選択
  3. Ctrl + Shift + V キーを押下して、プレビューを表示
  4. 要件文書の内容を確認します。修正が必要であれば、チャットからKiroに依頼
  5. プレビューのタブを閉じる
  6. 内容に問題なければ承認するため、Continue > Generate Design を押下

7-06-Specモード.png

7-07-Specモード.png

2-4. デザイン文書の確認

  1. チャットにて、デザイン文書(=設計)の概要が表示
  2. 詳細を確認するため、SPECS:kiro-landing-page > 2 Design を選択
  3. Ctrl + Shift + V キーを押下して、プレビューを表示
  4. デザイン文書の内容を確認します。修正が必要であれば、チャットから Kiro に依頼
  5. プレビューのタブを閉じる
  6. 内容に問題なければ承認するため、Continue > Generate Tasks を押下

補足: わたしの場合、初期のデザイン文書で、スタイリング設定が「CSS Modules」でしたので、好みの「TailwindCSS」にするため、Kiroに「スタイリング は TailwindCSS でお願いします」と依頼しました。

7-08-Specモード.png

7-09-Specモード.png

2-5. 実装タスクリストの確認

  1. チャットにて、実装タスクリストの概要が表示
  2. 詳細を確認するため、SPECS:kiro-landing-page > 3 Task list を選択
  3. 実装タスクリストの内容を確認します。修正が必要であれば、チャットからKiroに依頼
  4. チャット欄で質問があった場合は、回答を入力し、Enterキーまたは上矢印を押下

補足: チャット欄に「Waiting on your input..」が表示している場合は、回答待ちの状態です。

7-10-Specモード.png

2-6. タスクの実行

タスクの実行方法は2種類あります。

選択肢 実行対象 説明
Run all tasks > Run required tasks 必須タスクのみ オプションタスクをスキップし、最小限の実装で素早く完成させる(MVP向け)
Run all tasks > Run required and optional tasks 必須+オプションタスク オプションタスクも含めてすべて実行し、より完成度の高い成果物を作成する
  1. 必須タスクのみを実行するため、SPECS:kiro-landing-page > 3 Task list にて Run all tasks > Run required tasks を押下

補足: 個別にタスクを実行する場合は、3 Task list にて該当タスクの Start task を押下

7-11-Specモード.png

2-7. タスクの進捗確認

  1. チャットに処理の状況が表示
  2. 確認が表示した場合は、都度、内容確認し選択する
  3. コマンドの確認があった場合は内容を確認し、以下の基準で信頼範囲を選択します。

選択パターンの例:

選択肢 説明
Trust command and accept(青枠) 今後も同じコマンドを自動で許可する。選択後、信頼範囲(Full command / Partial / Base)を指定する画面が表示される
Accept command(赤枠) 今回のみ許可する。次回同じコマンドが実行される際は再度確認が表示される
Reject command(黄枠) コマンドの実行を拒否する。Kiroはコマンドを実行せず、別のアプローチを検討する
Modify command(緑枠) コマンドの内容を編集してから実行する。引数やオプションを変更したい場合に使用

7-12-Specモード.png

信頼範囲を選択

選択肢 信頼範囲 選択する場合
Full command 表示されたコマンド全体を許可 実行・インストール・変更系のコマンド。引数を含めて厳密に許可したい場合 npm create vite@latest temp-project -- --template react-ts
Partial コマンドの先頭部分をワイルドカードで許可 同じコマンドで引数が変わる可能性がある実行・インストール系のコマンド npm create *(npm create で始まるコマンドをすべて許可)
Base ベースコマンド全体をワイルドカードで許可 読み込み・参照系のコマンド。広く許可しても安全な場合 npm *(npm で始まるコマンドをすべて許可)

7-13-Specモード.png

大事なポイント: 読み込み・参照系(Get-、ls、cat など)は Base で広く許可しても問題ありません。実行・インストール・変更系(create、install、rm など)は Full command または Partial を選択し、許可範囲を限定してください。

実行タスクの留意事項: 処理が終わらない場合は、チャットで「処理の状況を教えて」を入力し、Enterキー押下します。Kiro が状況を教えてくれます。

補足: 実行タスクの実行中、ターミナルにて入力を求められる場合があります。内容を確認しガイダンスに従い、入力してください。

7-14-Specモード.png

2-8. 成果物の確認

  1. タスクが完了すると 3 Task list にて、実行対象のタスクが Task completed に更新され、チャットに完了のメッセージが表示
  2. チャットに成果物の確認の方法が記載されている場合は、その指示に従います。もし、確認方法が未記載の場合は、チャットで動作確認の方法を質問
  3. 成果物を確認します。もし、修正が必要であれば、チャットで指示

7-15-Specモード.png

7-16-Specモード.png

7-17-Specモード.png

2-9. クリーンアップ

  1. Google Chromeのブラウザを閉じる
  2. エクスプローラーを閉じる
  3. 成果物が不要であれば、Kiroのエクスプローラーにて、成果物を選択し「削除」を押下
  4. Kiroにて右上のチャットマークを押下し、現在のセッション右側の「×」(close)を押下

8.環境削除手順

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

ステップ一覧

  1. リモートデスクトップ 接続の終了
  2. EC2 インスタンスの停止
  3. AWS CloudFormation スタックの削除

ステップ1: リモートデスクトップ 接続の終了

  1. リモートデスクトップ 接続を閉じる
  2. ポートフォワーディングを実行しているウィンドウで Ctrl + C キーを押下

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

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

補足: インスタンス名の末尾 01INSTANCE_INDEX の値に対応しています。deploy.bat で INSTANCE_INDEX を変更した場合は、この部分も合わせて読み替えてください(例: INSTANCE_INDEX=02 の場合は dev-001-kiro-ide-02)。


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

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

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

補足: スタック名の末尾 01INSTANCE_INDEX の値に対応しています。deploy.bat で INSTANCE_INDEX を変更した場合は、この部分も合わせて読み替えてください(例: INSTANCE_INDEX=02 の場合は dev-001-kiro-ide-instance-02)。

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

  1. 3-1. Amazon EC2 スタックの削除 の手順を参考に、スタック名: dev-001-kiro-ide-base を削除します。

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


まとめ

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

このハンズオンでは、以下の技術・サービスを組み合わせて、Amazon EC2 上の Windows Server 2025 で Kiro IDE を安全かつ再現性高く利用できる開発環境を構築しました。

技術・サービス 役割
AWS CloudFormation インフラのコード化と再現性確保(Amazon VPC、AWS IAM、Amazon EC2 key pair、セキュリティグループ、Amazon EC2 など)
Amazon EC2 + UserData 開発環境の自動構築(Python 3.13、Node.js、Git、AWS CLI、VS Code、Google Chrome、uv のインストールと日本語化)
AWS Systems Manager Session Manager リモートデスクトップ ポート開放不要のセキュアな接続(ポートフォワーディングを用いたリモートデスクトップ 接続)
AWS IAM(最小権限) MCP関連権限の最小化(aws-mcp:InvokeMcp、CallReadOnlyTool、CallReadWriteToolに限定)
デプロイ用バッチファイル AWS CLIによる自動デプロイ(パスワード生成、スタック作成、SSM Agent待機を一括実行)

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

付録

1.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.Trusted Commands の確認方法

Kiro IDE では、エージェントが実行するコマンドの許可設定を管理できます。「Trust command and accept」で許可したコマンドは Kiro IDE の設定画面に保存されており、いつでも確認・削除が可能です。

  1. 左ペイン下のギアのマークをクリックし、設定 を押下
  2. 「設定の検索」欄に以下を入力 Trusted Commands
  3. Kiro Agent: Trusted Commands に、許可済みのコマンド一覧が表示
  4. 不要なコマンドがあれば「×」を押下して削除
  5. 設定 のタブを閉じる

補足: 意図せず広い範囲で許可してしまった場合は、ここから該当コマンドを削除し、次回実行時に改めて信頼範囲を選択し直してください。

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

印鑰 幸太

記事一覧

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

印鑰 幸太

この記事を共有する

クラウドのご相談

CONTACT

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

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

DOWNLOAD

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