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

【Amazon EC2】Claude Code on AWS構築ハンズオン

この記事を共有する

目次

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

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

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

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

  • AWS CloudFormationによるIaC実践: VPC、IAM、Bedrockリソースを統合管理し、再現可能な環境を構築
  • Bedrock Application Inference Profileの活用: クロスリージョン推論を設定し、Claudeの複数モデル(Haiku、Sonnet、Opus)をまとめて管理
  • EC2での開発環境自動構築: AWS CloudFormationのUserDataでNode.js、Python、Claude Codeを一括セットアップ。IAMは最小権限でセキュアにアクセス

どんな人向け?

  • Claude Codeを試してみたい方。 Claude Codeのアカウントがなくても、AWSアカウントとBedrockアクセスがあれば、すぐに試せる
  • AWS マネジメントコンソールの基本操作ができて、Linuxコマンドライン(cd、ls、cat)の基礎がわかる方なら大丈夫
  • AWS CloudFormationやBashスクリプトの知識があるとさらに楽しめますが、なくてもコピー&ペーストで進められる

1.概要

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

特徴 説明
Claude Code on Bedrock Claude Codeアカウント不要で、Amazon Bedrock経由でClaude AIを利用可能
3つのモデル対応 Haiku、Sonnet、Opusの3つのClaudeモデルをApplication Inference Profileで一元管理
完全自動セットアップ Node.js、Python、Claude Code、uvがUserDataで自動インストール
セキュアアクセス Session Manager経由でSSHポート不要、IAM最小権限でBedrock APIにアクセス

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

全体構成図

全体構成図-20260210-001.png

3.前提条件

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

所要時間

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

必要な権限

以下の権限が必要です。

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

リージョン

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

開発環境

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

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

費用について

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

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

4.構築手順

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

ステップ一覧

  1. クロスリージョン推論のInference Profile ID確認
  2. 基盤スタックのデプロイ
  3. EC2インスタンススタックのデプロイ

ステップ1: クロスリージョン推論のInference Profile ID確認

基盤スタックをデプロイする前に、利用可能なBedrock Inference Profile IDを確認します。

1-1. AWS CLIでInference Profile IDを確認

ローカルPCのターミナル(PowerShellまたはコマンドプロンプト)で以下のコマンドを実行します。

aws bedrock list-inference-profiles --query "inferenceProfileSummaries[?contains(inferenceProfileName,'Claude')].{inferenceProfileName:inferenceProfileName,inferenceProfileId:inferenceProfileId}" --output table --region ap-northeast-1

出力例

----------------------------------------------------------------------------------
|                          ListInferenceProfiles                                 |
+---------------------------------------------------------------+----------------+
|                    inferenceProfileId                         |inferenceProfile|
|                                                               |     Name       |
+---------------------------------------------------------------+----------------+
|  jp.anthropic.claude-3-5-haiku-20241022-v1:0                 |  Claude 3.5... |
|  jp.anthropic.claude-haiku-4-5-20251001-v1:0                 |  Claude 3.5... |
|  jp.anthropic.claude-sonnet-4-5-20250929-v1:0                |  Claude 3.5... |
|  global.anthropic.claude-opus-4-5-20251101-v1:0              |  Claude Opus...|
+---------------------------------------------------------------+----------------+

1-2. Inference Profile IDの選択

上記の出力から、HaikuSonnetOpus のinferenceProfileIdをメモしておきます。

例)

モデル Inference Profile ID リージョン
Haiku jp.anthropic.claude-haiku-4-5-20251001-v1:0 日本
Sonnet jp.anthropic.claude-sonnet-4-5-20250929-v1:0 日本
Opus global.anthropic.claude-opus-4-5-20251101-v1:0 グローバル

注意: inferenceProfileIdはリージョンやモデルバージョンによって異なります。

クロスリージョン推論の補足

  • 複数のリージョンのモデルの負荷状況を考慮して利用可能なリージョンのモデルを選択してくれる機能
  • jp.プレフィックス: 日本リージョン内でのみ利用可能
  • global.プレフィックス: 複数リージョンにまたがって利用可能
  • 2026年2月時点では、Opusはローバルプロファイルのみ提供

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

まずは、VPC、AWS IAMロール、Amazon Bedrock アプリケーション推論プロファイルといった基盤となるリソースを作っていきます。

基本スタックのデプロイ-20260210-001.png

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

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

ここを押すと展開します

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Base stack: VPC, IAM, KeyPair, Bedrock Application Inference Profiles'
Parameters:
  Environment:
    Type: String
    Default: dev
  ProjectId:
    Type: String
    Default: '001'
  ProjectInfix:
    Type: String
    Default: 'claude'
  VpcCidr:
    Type: String
    Default: '10.0.0.0/16'
  PublicSubnetCidr:
    Type: String
    Default: '10.0.1.0/24'
  HaikuInferenceProfileId:
    Type: String
    Default: 'jp.anthropic.claude-haiku-4-5-20251001-v1:0'
    Description: 'Haiku inference profile ID'
  SonnetInferenceProfileId:
    Type: String
    Default: 'jp.anthropic.claude-sonnet-4-5-20250929-v1:0'
    Description: 'Sonnet inference profile ID'
  OpusInferenceProfileId:
    Type: String
    Default: 'global.anthropic.claude-opus-4-5-20251101-v1:0'
    Description: 'Opus inference profile ID'
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      -
        Label:
          default: Stack Configuration
        Parameters:
          - Environment
          - ProjectId
          - ProjectInfix
      -
        Label:
          default: Network Configuration
        Parameters:
          - VpcCidr
          - PublicSubnetCidr
      -
        Label:
          default: Bedrock Configuration
        Parameters:
          - HaikuInferenceProfileId
          - SonnetInferenceProfileId
          - OpusInferenceProfileId
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-bedrock-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
  EC2BedrockPolicy:
    Type: AWS::IAM::Policy
    DependsOn:
      - EC2SonnetProfile
      - EC2OpusProfile
      - EC2HaikuProfile
    Properties:
      PolicyName: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-bedrock-pl'
      Roles:
        - !Ref EC2Role
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Sid: AllowModelInvocation
            Effect: Allow
            Action:
              - bedrock:InvokeModel
              - bedrock:InvokeModelWithResponseStream
              - bedrock:ListInferenceProfiles
            Resource:
              - !GetAtt EC2SonnetProfile.InferenceProfileArn
              - !GetAtt EC2OpusProfile.InferenceProfileArn
              - !GetAtt EC2HaikuProfile.InferenceProfileArn
              - arn:aws:bedrock:*:*:foundation-model/*
              - arn:aws:bedrock:*:*:inference-profile/*
  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
  EC2HaikuProfile:
    Type: AWS::Bedrock::ApplicationInferenceProfile
    Properties:
      InferenceProfileName: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-haiku'
      Description: !Sub 'inferenceProfileId: ${HaikuInferenceProfileId}'
      ModelSource:
        CopyFrom: !Sub 'arn:aws:bedrock:${AWS::Region}:${AWS::AccountId}:inference-profile/${HaikuInferenceProfileId}'
      Tags:
        - Key: Application
          Value: !Sub '${Environment}-${ProjectId}'
        - Key: Category1
          Value: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-haiku'
        - Key: Category2
          Value: !Sub '${HaikuInferenceProfileId}'
  EC2SonnetProfile:
    Type: AWS::Bedrock::ApplicationInferenceProfile
    Properties:
      InferenceProfileName: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-sonnet'
      Description: !Sub 'inferenceProfileId: ${SonnetInferenceProfileId}'
      ModelSource:
        CopyFrom: !Sub 'arn:aws:bedrock:${AWS::Region}:${AWS::AccountId}:inference-profile/${SonnetInferenceProfileId}'
      Tags:
        - Key: Application
          Value: !Sub '${Environment}-${ProjectId}'
        - Key: Category1
          Value: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-sonnet'
        - Key: Category2
          Value: !Sub '${SonnetInferenceProfileId}'
  EC2OpusProfile:
    Type: AWS::Bedrock::ApplicationInferenceProfile
    Properties:
      InferenceProfileName: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-opus'
      Description: !Sub 'inferenceProfileId: ${OpusInferenceProfileId}'
      ModelSource:
        CopyFrom: !Sub 'arn:aws:bedrock:${AWS::Region}:${AWS::AccountId}:inference-profile/${OpusInferenceProfileId}'
      Tags:
        - Key: Application
          Value: !Sub '${Environment}-${ProjectId}'
        - Key: Category1
          Value: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-opus'
        - Key: Category2
          Value: !Sub '${OpusInferenceProfileId}'
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'
  EC2HaikuProfile:
    Value: !GetAtt EC2HaikuProfile.InferenceProfileArn
    Export:
      Name: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-haiku-profile-arn'
  EC2SonnetProfile:
    Value: !GetAtt EC2SonnetProfile.InferenceProfileArn
    Export:
      Name: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-sonnet-profile-arn'
  EC2OpusProfile:
    Value: !GetAtt EC2OpusProfile.InferenceProfileArn
    Export:
      Name: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-opus-profile-arn'

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

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

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

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

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

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

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

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

パラメーター 推奨値 説明
Environment dev 環境識別子
ProjectId 001 プロジェクトID
ProjectInfix claude リソース名の接中辞
VpcCidr 10.0.0.0/16 VPC CIDR
PublicSubnetCidr 10.0.1.0/24 サブネットCIDR
HaikuInferenceProfileId {ステップ1で確認したHaikuのinferenceProfileId} Haiku Profile ID
SonnetInferenceProfileId {ステップ1で確認したSonnetのinferenceProfileId} Sonnet Profile ID
OpusInferenceProfileId {ステップ1で確認したOpusのinferenceProfileId} Opus Profile ID

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

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

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

2-6. 確認して作成

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

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

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


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

次は、監視対象となるEC2インスタンスを作っていきます。

EC2インスタンススタックのデプロイ-20260210-001.png

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

ローカルPCでec2-claude-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: 'claude'
  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-03d1820163e6b9f5d
    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/sda1
          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)"
              sudo dnf update -y
              # Install Node.js 22
              curl -fsSL https://rpm.nodesource.com/setup_22.x | bash -
              sudo dnf install -y nodejs
              node --version
              # Install development tools for pyenv
              sudo dnf groupinstall -y "Development Tools"
              sudo 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)"
              # Set PATH first
              export PATH="$HOME/.local/bin:$PATH"
              # Install pyenv
              echo "Installing pyenv..."
              curl -fsSL https://pyenv.run | bash
              # Set pyenv environment variables immediately
              echo "Configuring pyenv..."
              export PYENV_ROOT="$HOME/.pyenv"
              export PATH="$PYENV_ROOT/bin:$PATH"
              # Initialize pyenv for non-interactive shell
              if [ -d "$PYENV_ROOT/bin" ]; then
                eval "$(pyenv init --path)"
                eval "$(pyenv init -)"
              fi
              # Configure pyenv in bashrc for future sessions
              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 latest stable Python version
              echo "Installing latest Python version..."
              LATEST_PYTHON=$(pyenv install --list 2>/dev/null | grep -E '^\s*[0-9]+\.[0-9]+\.[0-9]+$' | tail -1 | tr -d ' ')
              echo "Installing Python $LATEST_PYTHON..."
              pyenv install $LATEST_PYTHON
              pyenv global $LATEST_PYTHON
              echo "Python version installed:"
              python --version
              # Install Claude Code
              curl -fsSL https://claude.ai/install.sh | bash -s stable
              # Install uv
              curl -LsSf https://astral.sh/uv/install.sh | sh
              uv -V
              # Environment variables
              cat << EOT >> ~/.bashrc
              # AWS Configuration
              export CLAUDE_CODE_USE_BEDROCK=1
              export AWS_REGION=${AWS::Region}
              export AWS_DEFAULT_REGION=${AWS::Region}
              # Configure Bedrock Application Inference Profiles for Claude Code
              export ANTHROPIC_DEFAULT_SONNET_MODEL="${EC2SonnetProfileArn}"
              export ANTHROPIC_DEFAULT_OPUS_MODEL="${EC2OpusProfileArn}"
              export ANTHROPIC_DEFAULT_HAIKU_MODEL="${EC2HaikuProfileArn}"
              export CLAUDE_CODE_SUBAGENT_MODEL="${EC2HaikuProfileArn}"
              # Claude Code Configuration
              export CLAUDE_CODE_MAX_OUTPUT_TOKENS=4096
              export MAX_THINKING_TOKENS=1024
              export PATH="\$HOME/.local/bin:\$PATH"
              EOT
              source ~/.bashrc
              # Claude Code settings
              mkdir -p ~/.claude
              cat << 'EOT' > ~/.claude/settings.json
              {
                "provider": "bedrock",
                "awsRegion": "${AWS::Region}",
                "autoUpdates": true,
                "autoUpdatesChannel": "stable",
                "model": "haiku",
                "language": "japanese",
                "statusLine": {
                  "type": "command",
                  "command": "npx -y ccstatusline@latest",
                  "padding": 0
                },
                "permissions": {
                  "allow": [
                    "Bash(ls:*)",
                    "Bash(cat:*)",
                    "Bash(npm run dev)",
                    "Bash(npm run build)",
                    "Bash(npm test)"
                  ],
                  "deny": [
                    "Bash(rm -rf:*)",
                    "Bash(sudo:*)",
                    "Read(.env)"
                  ]
                }
              }
              EOT
              # Verify Claude Code
              if command -v claude &> /dev/null; then
                  echo "Claude Code installed successfully for ec2-user"
                  claude --version
              else
                  echo "Warning: claude command not found after installation"
              fi
              EOFU
              echo "Claude Code installation completed"
              echo "UserData script completed: $(date)"
            - EC2HaikuProfileArn:
                Fn::ImportValue: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-haiku-profile-arn'
              EC2SonnetProfileArn:
                Fn::ImportValue: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-sonnet-profile-arn'
              EC2OpusProfileArn:
                Fn::ImportValue: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-ec2-opus-profile-arn'
      Tags:
        - Key: Name
          Value: !Sub '${Environment}-${ProjectId}-${ProjectInfix}-${InstanceIndex}'
        - Key: Environment
          Value: !Ref Environment
        - Key: ProjectId
          Value: !Ref ProjectId

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

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

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

スタック名: ec2-claude-instance-stack

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

パラメーター 推奨値 説明
Environment dev 環境識別子
ProjectId 001 プロジェクトID
ProjectInfix claude リソース名の接中辞
InstanceIndex 01 インスタンス識別用の連番
InstanceType t3.medium EC2インスタンスタイプ(t3.micro / t3.small / t3.medium / t3.large)
ImageId ami-03d1820163e6b9f5d 使用する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接続する方法を説明します。

ステップ一覧

  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-claude-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-claude-ec2-keypair.pemという名前で新規ファイルを作成
  3. 控えた秘密鍵の内容を貼り付けて保存
  4. ファイルを右クリック→「プロパティ」→「読み取り専用」にチェック→「OK」

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


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

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

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

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

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

Host dev-001-claude-01
    HostName localhost
    User ec2-user
    Port 10022
    IdentityFile C:\Users\【ユーザー名】\.ssh\dev-001-claude-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-claude-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-claude-01を選択
  5. 新しいウィンドウが開いて、接続が開始
  6. 初回「Select the platform~」と表示しますのでLinuxを選択
  7. Ctrl + @キーを押下し、ターミナルを起動

6.Claude Codeのセットアップ

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

ステップ一覧

  1. Claude Codeの初回起動と設定確認
  2. Claude Code カスタマイズ ウィジェット
  3. Claude Code カスタマイズ MCPサーバー

ステップ1: Claude Codeの初回起動と設定確認

前提条件

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

1-1. ユーザーデータ入力の完了

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

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

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

1-3. Claude Codeの初回起動

  1. ターミナルにて以下のコマンドを実行
claude

1-4. Claude Codeの配色

1.「Choose the text style that looks best with your terminal」にてお好みで配色を選択し、Enter キーを押下

claude-01-20260212.png

1-5. Claude Codeの設定

  1. 「Due to prompt injection risks, only use it with code you trust」にて、Enter キーを押下
  2. 「Use Claude Code's terminal setup?」 にて、「1. Yes, use recommended settings」を選択し、Enter キーを押下
  3. 「Do you trust the files in this folder?」にて、「1. Yes, I trust this folder」を選択し、Enter キーを押下
  4. 以下が表示した場合は、Enter キーを押下

claude-02-20260212.png

補足: もし Claude Codeにて「Select login method」と表示した場合は、Ctrl + c キーを 3 回 押下して、ターミナルにて「source ~/.bashrc」を実行し、「1. ターミナルにて以下のコマンドを実行」の手順に戻ります。

1-6. Claude CodeでHaikuモデルの動作確認

  1. Claude Code にて以下を入力し、Enter キーを押下。回答されることを確認
hi

回答例

claude-03-20260212.png

補足: 今回の構成では、Claude Code ユーザー設定にて、デフォルトモデルを Haiku に設定しております。

1-7. モデル切り替え(Haiku→Sonnet)

  1. Claude Code にて以下を入力し、Enter キーを押下
  2. 「~. Default (recommended)」を選択し、Enter キーを押下
/model

claude-04-20260212.png

1-8. Claude CodeでSonnetモデルの動作確認

  1. Claude Code にて以下を入力し、Enter キーを押下。回答されることを確認
hi

1-9. モデル切り替え(Sonnet→Opus)

  1. Claude Code にて以下を入力し、Enter キーを押下。「~. Opus 4.1」を選択し、Enter キーを押下
/model

1-10. Claude CodeでOpusモデルの動作確認

  1. Claude Code にて以下を入力し、Enter キーを押下。回答されることを確認
hi

1-11. モデル切り替え(Opus→Haiku)

  1. Claude Code にて以下を入力し、Enter キーを押下。「~. Haiku」を選択し、Enter キーを押下
/model

1-12. Claude Codeを閉じる

  1. Claude Code にて以下を入力し、Claude Codeを閉じる
/exit

1-13. 環境変数の確認

  1. Visual Studio Code にて「ファイル > フォルダーを開く」を押下
  2. 「/home/ec2-user/」を選択し「OK」を押下
  3. Visual Studio Code のエクスプローラにて「.bashrc」を選択
  4. CloudFormation デプロイ時に追加した環境変数が表示
  5. 内容を確認し、タブの「×」を選択し閉じる

設定イメージ

ここを押すと展開します

# AWS Configuration
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=ap-northeast-1
export AWS_DEFAULT_REGION=ap-northeast-1
# Configure Bedrock Application Inference Profiles for Claude Code
export ANTHROPIC_DEFAULT_SONNET_MODEL="arn:aws:bedrock:{AWS Region}:{AWS Account ID}:application-inference-profile/xxxxxx"
export ANTHROPIC_DEFAULT_OPUS_MODEL="arn:aws:bedrock:{AWS Region}:{AWS Account ID}:application-inference-profile/xxxxxx"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="arn:aws:bedrock:{AWS Region}:{AWS Account ID}:application-inference-profile/xxxxxx"
export CLAUDE_CODE_SUBAGENT_MODEL="arn:aws:bedrock:{AWS Region}:{AWS Account ID}:application-inference-profile/xxxxxx"
# Claude Code Configuration
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=4096
export MAX_THINKING_TOKENS=1024
export PATH="$HOME/.local/bin:$PATH"

補足: 環境変数はお好みで修正可能ですが、修正後は、Ctrl + Sキーで上書き保存の上、ターミナルにて「source ~/.bashrc」を実行して下さい。

1-14. Claude Codeのユーザー設定の確認

  1. Visual Studio Code のエクスプローラにて「.claude/settings.json」を選択
  2. CloudFormation デプロイ時に追加したユーザー設定が表示
  3. 内容を確認し、タブの「×」を選択し閉じる

ここを押すと展開します

{
  "permissions": {
    "allow": [
      "Bash(ls:*)",
      "Bash(cat:*)",
      "Bash(npm run dev)",
      "Bash(npm run build)",
      "Bash(npm test)"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(sudo:*)",
      "Read(.env)"
    ]
  },
  "model": "haiku",
  "statusLine": {
    "type": "command",
    "command": "npx -y ccstatusline@latest",
    "padding": 0
  },
  "language": "japanese",
  "autoUpdatesChannel": "stable",
  "provider": "bedrock",
  "awsRegion": "ap-northeast-1",
  "autoUpdates": true
}

補足: ユーザー設定はお好みで修正可能ですが、修正後は、Ctrl + sキーで上書き保存

ステップ2: Claude Code カスタマイズ ウィジェット

Claude Codeを使用時、リアルタイムにトークンやコストがわかるように、ウィジェットの設定します。

注意: Claude CodeをAPIで利用する場合、ウィジェットの出力(トークンやコスト)は、Claude Codeを起動するごとにリセットされます。付録:1.Amazon Bedrock モデルのコスト確認 にてご確認ください。

2-1. ccstatusline をインストール

  1. ターミナルにて以下のコマンドを実行し、ccstatusline をインストール
npx ccstatusline@latest

2-2. ウィジェットの設定

  1. 「Main Menu」にて「Edit Lines」を選択し、Enter キーを押下
  2. 「Select Line to Edit Items」にて「Line 1」を選択し、Enter キーを押下
  3. 「Edit Line 1」にて、以下の様に変更し、Esc キーを押下

claude-05-20260212.png

●操作方法
 ・ウィジェットの選択:上下キー
 ・ウィジェットの種類を変更:左右キーを押すと
 ・ウィジェットの追加:aキー
 ・ウィジェットの削除:dキー
 ・ウィジェットの移動:ウィジェットを選択し、*Enter* キーを押下後、上下キー

2-3. ウィジェットの保存

  1. 「Select Line to Edit Items」にて、Esc キーを押下
  2. 「Main Menu」にて「Save & Exit」を選択し、Enter キーを押下

2-4. プロジェクトフォルダへ移動

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

2-5. ウェジットの確認

  1. ターミナルにて以下のコマンドを実行。Claude Codeにてウィジェットの表示を確認
claude

設定イメージ

claude-06-20260212.png

2-6. Claude Codeを閉じる

  1. Claude Code にて以下を入力し、Claude Codeを閉じる
/exit

ステップ3: Claude Code カスタマイズ MCPサーバー

成果物の品質を上げるため、MCPサーバーを設定し外部の情報を参照させます。

補足: MCPサーバーは、Claude Codeが外部のツールやデータソースと連携するための仕組みです。これにより、AIが最新のドキュメントを参照したり、図を作成したり、段階的な思考を行ったりできるようになります。詳細は「付録:4.Claude Code MCPサーバーのご説明」をご参照ください。

3-1. プロジェクトフォルダへ移動

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

3-2. .mcp.jsonを作成

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

3-3. .mcp.jsonの修正

  1. 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"]
        }
    }
}

Esc キーを押して、:wq と入力して保存してください。

3-4. Claude Codeを起動

  1. ターミナルにて以下のコマンドを実行
claude

3-5. MCPサーバーの確認

  1. 「4 new MCP servers found in .mcp.json」にて、Enter キーを押下
  2. Claude Code にて以下を入力し、Enter キーを押下。すべてのMCPサーバーが「connected」と表示されることを確認し、Esc キーを押下
/mcp

3-6. MCPサーバーの動作確認

  1. Claude Code にて以下を入力し、にて、Enter キーを押下
  2. 「Tool use」というタイトルで、繰り返し確認が表示するため、「Yes」を選択し、Enter キーを押下
  3. Claude Code より、MCPサーバーの確認結果が表示
すべてののMCPサーバーの動作確認を実施して

出力例

claude-08-20260212.png

3-7. Claude Codeを閉じる

  1. Claude Code にて以下を入力し、Claude Codeを閉じる
/exit

7.Claude Codeの開発

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

ステップ一覧

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

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

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

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

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

MCPサーバー drawioを利用して、Web3層構造の構成図を作成します。

2-1. プロジェクトフォルダへ移動

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

2-2. Claude Codeを起動

  1. ターミナルにて以下のコマンドを実行
claude

2-3. 構成図の作成

  1. ターミナルにて以下のコマンドを実行
  2. 繰り返し確認メッセージが表示するため、内容を確認し「Yes」または「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-4. 構成図の確認

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

出力例

claude-09-20260212.png

2-5. 構成図を閉じる

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

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

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

3-1. プロジェクトフォルダへ移動

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

3-2. Claude Codeを起動

  1. ターミナルにて以下のコマンドを実行
claude

3-3. 構成図の修正

  1. ターミナルにて以下のコマンドを実行
  2. 繰り返し確認メッセージが表示するため、内容を確認し「Yes」または「No」選択し、Enter キーを押下
open_drawio_xml を利用して、シンプルなWeb3層構造の構成図をAWSのアイコンに修正して

3-4. 構成図の確認

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

出力例

claude-10-20260212.png

補足: もし、追加の修正が必要であれば「3-3. 構成図の修正」に戻り、Claude Codeへ指示して下さい。修正を行うたびにコストが発生するため、ご留意下さい。

3-5. 構成図を閉じる

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

7.環境削除手順

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

ステップ一覧

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


まとめ

お疲れさまでした。Claude Code on AWS構築ハンズオンは以上です。いかがでしたでしょうか。

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

技術・サービス 役割
AWS CloudFormation インフラのコード化と再現性確保(VPC、IAM、KeyPair、Security Group、Bedrock Application Inference Profile、EC2 など)
Amazon Bedrock Application Inference Profile クロスリージョン推論の設定と、Claudeの複数モデル(Haiku、Sonnet、Opus)の統合管理
Amazon EC2 + UserData 開発環境の自動構築(Node.js、pyenv+最新Python、Claude Code、uv のインストールと初期設定)
AWS Systems Manager Session Manager SSHポート開放不要のセキュアな接続(ポートフォワーディングを用いたVS Code Remote-SSH接続)
AWS IAM(最小権限) Bedrock API呼び出し権限、MCP関連権限の最小化(InvokeModelなどに限定)
Claude Code Bedrock経由の対話型開発アシスタント(モデル切替、設定ファイル・環境変数によるカスタマイズ)
MCPサーバー(aws-mcp、Context7、sequential-thinking、drawio) 外部ツール・知識への安全な拡張(図作成、思考支援、AWS連携など)
ccstatusline ウィジェット トークン消費やモデル状態の可視化(開発中のコスト認識と運用性向上)

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

付録

1.Amazon Bedrock モデルのコスト確認

今回の構成では、モデルごとにアプリケーション推論プロファイルを作成しています。

AWS LambdaやAmazon EC2からAmazon Bedrockを利用する場合、モデル単位でコストが集計されます。アプリケーション推論プロファイルを活用するとタグ付けができ、呼び出し元ごとにコストをわかりやすく可視化できるメリットがあります。

アプリケーション推論プロファイルを利用しない場合のイメージ

cost-01-20260213.png

アプリケーション推論プロファイルを利用する場合のイメージ

cost-02-20260213.png

補足: アプリケーション推論プロファイルのタグはリソース作成時に設定が必要です。

コストの確認方法

  1. AWS マネジメントコンソールで「Billing and Cost Management」を開く
  2. 左ペインにて「Cost Explorer」を選択
  3. 以下を参考にパラメータでフィルターを設定

プロジェクト単位のコスト確認

項目
日付範囲 調査する期間
粒度 日別
タグ Application
タグ値 dev-001

アプリケーション推論プロファイル単位のコスト確認

項目
日付範囲 調査する期間
粒度 日別
タグ Category1
タグ値 dev-001-claude-haiku
dev-001-claude-opus
dev-001-claude-sonnet

出力例

cost-03-20260213.png

補足: AWS Cost Explorerは24時間ごとに更新されるため、コストの反映に最大で約48時間かかる場合があります。

2.環境変数のご説明

カテゴリ 環境変数/値 説明
Bedrock 統合設定 CLAUDE_CODE_USE_BEDROCK=1 Claude Code が AWS Bedrock を使用するように有効化
AWS リージョン設定 AWS_REGION=ap-northeast-1
AWS_DEFAULT_REGION=ap-northeast-1
AWS API/CLI のデフォルトリージョンを東京に設定
Claude モデル指定(Application Inference Profile) ANTHROPIC_DEFAULT_SONNET_MODEL="arn:aws:bedrock:{AWS Region}:{AWS Account ID}:application-inference-profile/xxxxxx"
ANTHROPIC_DEFAULT_OPUS_MODEL="arn:aws:bedrock:{AWS Region}:{AWS Account ID}:application-inference-profile/xxxxxx"
ANTHROPIC_DEFAULT_HAIKU_MODEL="arn:aws:bedrock:{AWS Region}:{AWS Account ID}:application-inference-profile/xxxxxx"
CLAUDE_CODE_SUBAGENT_MODEL="arn:aws:bedrock:{AWS Region}:{AWS Account ID}:application-inference-profile/xxxxxx"
Amazon Bedrock Application Inference Profile を用いてモデルを指定(Haiku/Sonnet/Opus)
モデルIDやリージョン差異を抽象化し、柔軟に切り替え可能
サブエージェントには Haiku を割り当てる構成
出力トークン制限 CLAUDE_CODE_MAX_OUTPUT_TOKENS=4096
MAX_THINKING_TOKENS=1024
最大出力トークン数を 4096、思考用トークンを 1024 に制限(コスト/応答制御)
パス設定 PATH="$HOME/.local/bin:$PATH" ユーザーのローカル bin を優先してツールを実行

補足: プロンプトキャッシングは無効化しておりません。機密情報を扱い場合など、状況に応じて無効化をご検討下さい。プロンプトキャッシング設定

3.Claude Code ユーザー設定のご説明

項目 キー/値 説明
プロバイダー設定 "provider": "bedrock" Claude Code が Amazon Bedrock をバックエンドとして使用
リージョン設定 "awsRegion": "ap-northeast-1" Amazon Bedrock API を呼び出すリージョンを東京に指定
自動更新(有効化) "autoUpdates": true Claude Code の自動更新を有効化
自動更新(チャネル) "autoUpdatesChannel": "stable" 安定版を取得(stable チャネル)
モデル設定 "model": "haiku" デフォルトモデルを Haiku(軽量・高速)に設定。
環境変数 ANTHROPIC_MODEL が指定されている場合はそちらが優先
言語設定 "language": "japanese" インターフェース言語を日本語に設定
ステータスライン(種別) "statusLine": { "type": "command", ... } エディタのステータスバーにコマンド実行結果を表示
ステータスライン(コマンド) "command": "npx -y ccstatusline@latest" 最新の ccstatusline ツールを実行してステータス情報を取得
ステータスライン(余白) "padding": 0 ステータスラインの余白を 0 に設定
権限(許可) "allow": ["Bash(ls:*)","Bash(cat:*)","Bash(npm run dev)","Bash(npm run build)","Bash(npm test)"] 許可する操作の例:
・ls 実行(Bash(ls:*))
・cat 実行(Bash(cat:*))
・npm run dev / build / test の実行
権限(禁止) "deny": ["Bash(rm -rf:*)","Bash(sudo:*)","Read(.env)"] 禁止する操作の例:
・rm -rf(ファイル削除防止)
・sudo(権限昇格防止)
・.env の読み取り(機密情報保護)

4.Claude Code MCPサーバーのご説明

サーバー名 目的・概要
AWS MCP Server AWS Docsを参照し、常に最新のAWS情報をAIに提供することを目的としたMCPサーバーです。
Context7 MCP 参照ドキュメントのコンテキストを調整し、最新で正確な情報をAIに渡すためのMCPサーバーです。
Sequential Thinking MCP 段階的な思考(Chain of Thought)を支援し、推論プロセスを明示化して精度の高い回答やコード生成を可能にするMCPサーバーです。
drawio MCP 図の作成・編集をAIから操作するためのMCPサーバーで、アーキテクチャ図やフローの自動生成に役立ちます。

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

印鑰 幸太

記事一覧

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

印鑰 幸太

この記事を共有する

クラウドのご相談

CONTACT

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

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

DOWNLOAD

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