Amazon Bedrock에서의 OpenAI 모델

Amazon Bedrock에서의 OpenAI 모델 (OpenAI models in Amazon Bedrock)

Amazon Bedrock은 AWS 관리형 인프라에서 지원되는 OpenAI 모델을 실행해요. 이 가이드로 OpenAI API 기능 지원을 비교하고 OpenAI SDK로 연결하세요. 배포 구성은 이 페이지에서 연결된 AWS 문서를 사용하세요.

출처: 문서

본문

모델 기능과 API 호환성이 애플리케이션이 할 수 있는 일을 결정해요. AWS가 Bedrock 배포의 모델 접근, 리전별 가용성, 라우팅, 청구, 운영 제어를 관리해요.

Bedrock 가용성이 동작하는 방식 (How Bedrock availability works)

OpenAI 모델은 Amazon Bedrock의 두 엔드포인트로 사용할 수 있어요: bedrock-runtime과 bedrock-mantle. 둘 다 지원되는 모델에서 OpenAI 호환 Responses 및 Chat Completions API를 지원하지만, 기능 범위는 달라요.

애플리케이션이 필요로 하는 기능에 따라 엔드포인트를 선택하세요. 예를 들어 호스팅 웹 검색은 현재 Mantle이 필요해요. 엔드포인트 차이와 AWS 엔드포인트 비교를 참고해 Bedrock 특유 기능과 엔드포인트를 선택하세요.

GPT-6 Sol과 GPT-6 Luna는 Bedrock Runtime을 통해서, 그리고 us-east-1(N. Virginia)의 Mantle을 통해서 사용할 수 있어요. GPT-6 Astra는 Bedrock Runtime과 us-west-2(Oregon)의 Mantle을 통해서 사용할 수 있어요. 이 가이드의 예시는 us-east-2의 GPT-5.6 Sol을 사용해요. 모델을 바꾸기 전에 지원되는 리전을 선택하세요.

접근과 설정은 AWS 모델 엔드포인트 가용성과 Runtime 엔드포인트 지침을 참고하세요.

Responses API 요청 만들기 (Make Responses API requests)

이 예시들은 Mantle 엔드포인트와 OpenAI SDK를 사용해요. 배포에 맞는 AWS 리전과 모델 ID를 선택하세요:

  • Bedrock 프로바이더가 있는 클라이언트 라이브러리는 AWS 리전에서 리전별 Mantle 기본 URL을 유도해요. JavaScript, Python, Go, Java 프로바이더는 이 가이드의 us-east-2 예시에 https://bedrock-mantle.us-east-2.api.aws/openai/v1을 사용해요. Ruby 예시는 프로바이더의 기본 /v1 경로가 이 모델을 지원하지 않으므로 이 /openai/v1 엔드포인트를 직접 구성해요.
  • openai. 접두사가 있는 Bedrock 모델 ID를 사용하세요. GPT-6 Sol과 Luna는 us-east-1에서 openai.gpt-6-sol 또는 openai.gpt-6-luna를 사용하세요.

예시는 us-east-2에서 openai.gpt-5.6-sol을 사용해요. GPT-6 Sol이나 Luna를 시도하려면 모델 ID와 리전을 모두 바꾸세요. Ruby에서는 명시적 base_url의 리전도 갱신하세요. Bedrock Runtime에서는 미국 추론 프로필 ID us.openai.gpt-6-sol, us.openai.gpt-6-luna 또는 글로벌 ID global.openai.gpt-6-sol, global.openai.gpt-6-luna를 사용하세요. Runtime 기본 URL과 추론 프로필을 선택하려면 AWS Responses API 엔드포인트 지침을 따르세요.

다음 예시는 AWS_BEARER_TOKEN_BEDROCK로 저장된 Bedrock API 키를 사용해요. Bedrock API 키 생성과 사용은 Amazon Bedrock API 키를 참고하세요.

Java 예시 중 하나를 사용하기 전에 선택적 Java Bedrock 프로바이더를 설치하세요:

<dependency>
  <groupId>com.openai</groupId>
  <artifactId>openai-java-bedrock</artifactId>
  <version>4.57.0</version>
</dependency>

Amazon Bedrock을 통해 Responses API 요청 보내기

import OpenAI from "openai";
import { bedrock } from "openai/providers/bedrock";

const client = new OpenAI({
  provider: bedrock({
    region: "us-east-2",
    apiKey: process.env.AWS_BEARER_TOKEN_BEDROCK,
  }),
});

const response = await client.responses.create({
  model: "openai.gpt-5.6-sol",
  input: "Write a haiku about cloud infrastructure.",
});

console.log(response.output_text);
import os

from openai import OpenAI
from openai.providers import bedrock

client = OpenAI(
    provider=bedrock(
        region="us-east-2",
        api_key=os.environ["AWS_BEARER_TOKEN_BEDROCK"],
    )
)

response = client.responses.create(
    model="openai.gpt-5.6-sol",
    input="Write a haiku about cloud infrastructure.",
)

print(response.output_text)
package main

import (
	"context"
	"fmt"
	"os"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/bedrock"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	client, err := bedrock.NewClient(context.Background(), bedrock.Config{
		AWSRegion: "us-east-2",
		APIKey:    os.Getenv("AWS_BEARER_TOKEN_BEDROCK"),
	})
	if err != nil {
		panic(err)
	}

	response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
		Model: "openai.gpt-5.6-sol",
		Input: responses.ResponseNewParamsInputUnion{
			OfString: openai.String("Write a haiku about cloud infrastructure."),
		},
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(response.OutputText())
}
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.BedrockOpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;

public final class AmazonBedrockCreateResponseExample {
  private AmazonBedrockCreateResponseExample() {}

  public static void main(String[] args) {
    OpenAIClient client =
        BedrockOpenAIOkHttpClient.builder()
            .awsRegion("us-east-2")
            .apiKey(System.getenv("AWS_BEARER_TOKEN_BEDROCK"))
            .build();

    ResponseCreateParams params =
        ResponseCreateParams.builder()
            .model("openai.gpt-5.6-sol")
            .input("Write a haiku about cloud infrastructure.")
            .build();

    client.responses().create(params).output().stream()
        .flatMap(item -> item.message().stream())
        .flatMap(message -> message.content().stream())
        .flatMap(content -> content.outputText().stream())
        .forEach(text -> System.out.println(text.text()));
  }
}
using System.ClientModel;
using OpenAI.Responses;
#pragma warning disable OPENAI001

string key = Environment.GetEnvironmentVariable("AWS_BEARER_TOKEN_BEDROCK")!;
ResponsesClient client = new(
    new ApiKeyCredential(key),
    new ResponsesClientOptions
    {
        Endpoint = new Uri("https://bedrock-mantle.us-east-2.api.aws/openai/v1"),
    }
);

CreateResponseOptions options = new()
{
    Model = "openai.gpt-5.6-sol",
};
options.InputItems.Add(
    ResponseItem.CreateUserMessageItem("Write a haiku about cloud infrastructure.")
);

ResponseResult response = await client.CreateResponseAsync(options);

Console.WriteLine(response.GetOutputText());
require "openai"

client = OpenAI::Client.new(
  provider: OpenAI::Providers.bedrock(
    region: "us-east-2",
    base_url: "https://bedrock-mantle.us-east-2.api.aws/openai/v1",
    api_key: ENV.fetch("AWS_BEARER_TOKEN_BEDROCK")
  )
)

response = client.responses.create(
  model: "openai.gpt-5.6-sol",
  input: "Write a haiku about cloud infrastructure."
)

puts(response.output_text)
curl "https://bedrock-mantle.us-east-2.api.aws/openai/v1/responses" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
  -d '{
    "model": "openai.gpt-5.6-sol",
    "input": "Write a haiku about cloud infrastructure."
  }'

장기 실행 애플리케이션에서는 정적 베어러 토큰 대신 표준 AWS 자격 증명 체인을 선호해요. JavaScript, Python, Go, Java, Ruby SDK 프로바이더는 새 AWS 자격 증명을 해석하고 요청마다 SigV4로 서명해요. 체인은 aws login으로 구성된 자격 증명, 공유 프로필, 워크로드 역할, 인스턴스 또는 컨테이너 자격 증명을 포함할 수 있어요.

이 경로를 사용하기 전에 AWS 자격 증명 체인 예시의 선택 의존성을 설치하세요:

npm install @aws-sdk/credential-provider-node @smithy/hash-node @smithy/signature-v4
pip install 'openai[bedrock]'
go get github.com/openai/openai-go/v3/bedrock
bundle add aws-sdk-core

.NET SDK는 현재 동등한 Bedrock 프로바이더나 AWS SigV4 인증 정책을 노출하지 않아요. .NET에서는 Bedrock API 키를 사용하거나, 애플리케이션이 AWS 자격 증명 체인을 요구한다면 AWS 지원 클라이언트를 통해 서명된 HTTP 요청을 보내세요.

AWS 관리형 Bedrock 자격 증명으로 요청 보내기

import OpenAI from "openai";
import { defaultProvider } from "@aws-sdk/credential-provider-node";
import { bedrock } from "openai/providers/bedrock/aws";

const client = new OpenAI({
  provider: bedrock({
    region: "us-east-2",
    endpoint: "mantle",
    credentialProvider: defaultProvider(),
  }),
});

const response = await client.responses.create({
  model: "openai.gpt-5.6-sol",
  input: "Write a haiku about cloud infrastructure.",
});

console.log(response.output_text);
from openai import OpenAI
from openai.providers import bedrock

client = OpenAI(
    provider=bedrock(
        region="us-east-2",
        api_key=None,
    )
)

response = client.responses.create(
    model="openai.gpt-5.6-sol",
    input="Write a haiku about cloud infrastructure.",
)

print(response.output_text)
package main

import (
	"context"
	"fmt"

	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/bedrock"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	awsConfig, err := config.LoadDefaultConfig(context.Background())
	if err != nil {
		panic(err)
	}

	client, err := bedrock.NewClient(context.Background(), bedrock.Config{
		AWSRegion:              "us-east-2",
		AWSCredentialsProvider: awsConfig.Credentials,
	})
	if err != nil {
		panic(err)
	}

	response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
		Model: "openai.gpt-5.6-sol",
		Input: responses.ResponseNewParamsInputUnion{
			OfString: openai.String("Write a haiku about cloud infrastructure."),
		},
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(response.OutputText())
}
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.BedrockOpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

public final class AmazonBedrockCreateResponseWithAwsCredentialsExample {
  private AmazonBedrockCreateResponseWithAwsCredentialsExample() {}

  public static void main(String[] args) {
    OpenAIClient client =
        BedrockOpenAIOkHttpClient.builder()
            .awsRegion("us-east-2")
            .awsCredentialsProvider(DefaultCredentialsProvider.create())
            .build();

    ResponseCreateParams params =
        ResponseCreateParams.builder()
            .model("openai.gpt-5.6-sol")
            .input("Write a haiku about cloud infrastructure.")
            .build();

    client.responses().create(params).output().stream()
        .flatMap(item -> item.message().stream())
        .flatMap(message -> message.content().stream())
        .flatMap(content -> content.outputText().stream())
        .forEach(text -> System.out.println(text.text()));
  }
}
require "openai"

client = OpenAI::Client.new(
  provider: OpenAI::Providers.bedrock(
    region: "us-east-2",
    base_url: "https://bedrock-mantle.us-east-2.api.aws/openai/v1",
    api_key: nil
  )
)

response = client.responses.create(
  model: "openai.gpt-5.6-sol",
  input: "Write a haiku about cloud infrastructure."
)

puts(response.output_text)

Responses API 기능 가용성 (Responses API feature availability)

이 매트릭스로 OpenAI API와의 차이를 식별하세요. 가용성은 모델과 엔드포인트에 따라 다르고, 지원되는 API가 모든 도구나 응답 모드를 지원함을 뜻하지는 않아요.

기능 OpenAI API Amazon Bedrock
Text generation Available Available
Image input Available Available
File input Available Available
Structured outputs Available Available
Function calling Available Available
Asynchronous tool calling 지원 모델에서 사용 가능 사용 불가
Streaming responses Available Available
WebSocket connections Available 사용 불가
Mid-turn steering 지원 모델에서 사용 가능 사용 불가
Context window 모델에 따라 다름 모델에 따라 다름
Reasoning effort Available Available
Reasoning updates 지원 모델에서 사용 가능 사용 불가
Pro mode 지원 모델에서 사용 가능 사용 불가
Persisted reasoning 지원 모델에서 사용 가능 지원 모델에서 사용 가능
Prompt caching Available Available
Programmatic Tool Calling 지원 모델에서 사용 가능 사용 불가
Multi-agent 지원 모델에서 베타 사용 불가
Custom tools Available Available
Client-side tool_search Available Available
Hosted web search Available Mantle 전용
Hosted file search Available 사용 불가
Computer use Available Available
Shell tool Available 사용 불가
Image generation tool Available 사용 불가
Remote MCP servers Available 사용 불가

비동기 도구 호출(async: true)과 reasoning updates(configuration_update 입력 아이템)는 Amazon Bedrock에서 지원되지 않아요. Mid-turn steering은 WebSocket이 필요하며 두 Bedrock 엔드포인트 모두에서 사용할 수 없어요.

클라이언트 측 tool_search는 호스팅 도구와 원격 MCP 서버 지원과 다르다는 점을 유의하세요. 호스팅 웹 검색은 Mantle을 통해 사용 가능하지만, 호스팅 파일 검색과 원격 MCP 서버는 사용할 수 없어요.

Computer use는 지원되는 모델의 Runtime과 Mantle에서 사용 가능해요. 애플리케이션이 컴퓨터 작업을 실행하고 결과를 모델에 반환해요. 이 기능은 Bedrock 호스팅 실행 환경을 필요로 하지 않아요.

Amazon Bedrock에서 GPT-5.4와 GPT-5.5는 100만 토큰 컨텍스트 창을 지원하고, GPT-5.6 Sol, Terra, Luna, GPT-6 Astra는 1,050,000 토큰을 지원해요. 모델별 한도는 AWS OpenAI 모델 카드를 확인하세요.

엔드포인트 차이 (Endpoint differences)

Runtime과 Mantle 중에서 선택할 때 적용되는 Responses API 차이:

기능 Bedrock Runtime Mantle
GPT-6 Astra Available us-west-2(Oregon)에서 사용 가능
GPT-6 Sol and GPT-6 Luna 미국 및 글로벌 us-east-1(N. Virginia)에서 사용 가능
Computer use 지원 모델에서 사용 가능 지원 모델에서 사용 가능
Streaming responses Available Available
Background mode (background: true) 사용 불가 데이터 보존 설정에 따라 사용 가능
Hosted web search 사용 불가 지원 모델에서 사용 가능
previous_response_id로 이어가기 모든 요청에 model 포함 필요 이전 응답에서 모델을 상속받을 수 있음

Runtime은 previous_response_id를 제공할 때도 model이 필요해요. Background mode는 스트리밍과 별개이며 비동기 함수 호출을 설명하지 않아요. 완전한 엔드포인트 계약은 AWS Responses API 문서를 사용하세요. 웹 검색 권한과 구성은 AWS 웹 검색 가이드를 참고하세요.

가용성과 운영 (Availability and operations)

AWS가 Amazon Bedrock의 배포 옵션과 가용성을 유지해요. 배포를 선택하고 구성하려면 이 레퍼런스를 사용하세요:

AWS 관리 항목 AWS 문서
모델 ID와 지원 API OpenAI 모델 카드
AWS 리전별 모델·엔드포인트 가용성 모델 가용성 및 엔드포인트 가용성
지리적 및 글로벌 요청 라우팅 크로스 리전 추론
계정 할당량과 증가 요청 Amazon Bedrock 할당량

AWS 리전은 OpenAI 데이터 보존 관할권이 아니에요. 워크로드에 위치 요구 사항이 있다면 엔드포인트 URL의 리전뿐 아니라 추론 프로필의 대상 리전과 적용 가능한 AWS 약관을 검토하세요.

데이터 접근과 보존 (Data access and retention)

Amazon Bedrock은 운영자 접근과 데이터 보존에 별도의 제어를 사용해요:

  • Zero operator access (ZOA) 는 AWS 운영자가 Mantle의 기본 컴퓨팅 시스템에 로그인하거나 거기서 고객 데이터에 접근할 기술적 메커니즘이 없음을 의미해요. AWS ZOA 설계를 참고하세요.
  • Zero data retention (ZDR) 은 유효 보존 모드가 none일 때 AWS가 요청 또는 응답 데이터를 지속 저장소에 쓰지 않음을 의미해요.

store: false 설정이 ZDR을 보장하지는 않아요. 유효 보존 모드가 none인 Responses API 요청에서 AWS는 store: true를 거부하고 background mode를 사용할 수 없어요.

Amazon Bedrock의 OpenAI 모델에서 유효 보존 모드가 default 또는 none일 때 AWS는 요청이나 응답 콘텐츠를 OpenAI와 공유하지 않아요. 사용 가능한 모드, 자격, 계정·프로젝트 구성은 AWS 데이터 보존 문서를 사용하세요. 모델별 보존 요구 사항과 예외는 Amazon Bedrock 학대 감지를 참고하세요.

AWS가 이미지 입력에서 명백한 CSAM을 감지하면, AWS는 표시된 입력이나 출력을 ZOA 환경 밖으로 옮기고 CSAM 여부를 판단하기 위해서만 저장하고 검토할 수 있어요. AWS는 국가 당국에 보고서를 제출할 수도 있어요.

인증과 운영 (Authentication and operations)

AWS 관리자가 계정, 모델, 기능 접근을 제어해요. 자격 증명 생성과 수명주기는 AWS API 키 문서를, ID와 권한은 IAM 문서를 사용하세요. 이 페이지의 OpenAI SDK 예시는 자격 증명을 공급하는 방법을 보여 주는 것일 뿐 AWS 권한을 구성하지는 않아요.

가격 (Pricing)

Amazon Bedrock 사용량은 AWS를 통해 청구돼요. 상용 리전의 Bedrock 가격은 동등한 서비스의 OpenAI 직접 가격과 일치해요. Bedrock에서 리전별 서비스를 사용하는 것은 OpenAI API의 Regional 처리와 같은 요율로 가격이 책정됨을 유의하세요. Bedrock 사용량에는 Amazon 상용 약관이 적용돼요.

직접 OpenAI API 가격은 API 가격을 참고하세요. Bedrock 요율, 지원 서비스 티어, 청구 옵션은 Amazon Bedrock 가격과 해당 모델 카드를 사용하세요.

다음 단계 (Next steps)

ChatGPT Work와 Codex에서의 설정은 ChatGPT Work 및 Codex를 Amazon Bedrock과 함께 사용을 참고하세요.

더 알아보기 (Learn more)