云平台 · Новый ресурс

AWS Cloudscape: дизайн-система.

Руководство по настройке Cloudscape с реальными токенами визуального обновления, плотностью адаптивных отступов, API управляемых форм и работающим двухэтапным мастером настройки ресурса.

Руководство OpenDesign8 глав50 справочных записейАвторское руководство по приложению
01

Предварительный просмотр интерфейса дизайн-системы AWS Cloudscape

Попробуйте недопустимые имена, выберите профиль ресурсов, переключайтесь между настройкой и проверкой, изменяйте оформление и подтверждайте конфигурацию локально.

Настройка и проверка рабочей областиОткрыть полный пример
Нативный Cloudscape 3.0.1390 с React 18.3.1; оригинальная композиция Wizard, состояние хранится только локально. · Справочник по реализации
02

Справочник по дизайну-системе дизайн-система AWS Cloudscape

Компоненты Cloudscape 3.0.1390 и design-tokens 3.0.114, тема visual-refresh. Значения считываются из опубликованного JSON с токенами. Цветовые режимы и плотность контента — отдельные параметры. Здесь показан выбранный пример реализации, а не полный экспорт токенов.

Семантические цветовые роли в светлом и тёмном режимах

Источник
Название / правилоЗначение / конфигурацияПрименение
color-background-layout-mainlight: #ffffff; dark: #161d26Используйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-background-container-contentlight: #ffffff; dark: #161d26Используйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-text-body-defaultlight: #0f141a; dark: #c6c6cdИспользуйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-text-body-secondarylight: #424650; dark: #c6c6cdИспользуйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-text-interactive-defaultlight: #424650; dark: #dedee3Используйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-text-link-defaultlight: #006ce0; dark: #42b4ffИспользуйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-text-status-errorlight: #db0000; dark: #ff7a7aИспользуйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-text-status-successlight: #00802f; dark: #2bb534Используйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-border-input-defaultlight: #8c8c94; dark: #656871Используйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.
color-background-button-primary-defaultlight: #006ce0; dark: #42b4ffИспользуйте именованную роль в предусмотренном для неё контексте; в паре показаны значения для светлого и тёмного режимов, а не взаимозаменяемые образцы цвета.

Типографика основного текста и заголовков

Источник
Название / правилоЗначение / конфигурацияПрименение
font-size-body-m14pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
font-size-body-s12pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
font-size-heading-l20pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
font-size-heading-m18pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
font-size-heading-s16pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
font-size-heading-xl24pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
font-size-heading-xs14pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
line-height-body-m20pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
line-height-body-s16pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
line-height-heading-l24pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
line-height-heading-m22pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
line-height-heading-s20pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
line-height-heading-xl30pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.
line-height-heading-xs18pxСочетайте размер и межстрочный интервал для одной и той же роли. Варианты Header и Box задают иерархию компонентов.

Интервалы с учётом плотности

Источник
Название / правилоЗначение / конфигурацияПрименение
space-scaled-xxxscomfortable: 2px; compact: 0pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.
space-scaled-xxscomfortable: 4px; compact: 2pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.
space-scaled-xscomfortable: 8px; compact: 4pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.
space-scaled-scomfortable: 12px; compact: 8pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.
space-scaled-mcomfortable: 16px; compact: 12pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.
space-scaled-lcomfortable: 20px; compact: 16pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.
space-scaled-xlcomfortable: 24px; compact: 20pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.
space-scaled-xxlcomfortable: 32px; compact: 24pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.
space-scaled-xxxlcomfortable: 40px; compact: 32pxВ зависимости от активной плотности используйте значение для комфортного или компактного режима. Не масштабируйте текст вместе с этими изменениями интервалов.

Форма компонентов

Источник
Название / правилоЗначение / конфигурацияПрименение
border-radius-container16pxСохраняйте форму, заданную для конкретного компонента. Радиус скругления кнопки не является универсальным радиусом для контейнеров.
border-radius-button20pxСохраняйте форму, заданную для конкретного компонента. Радиус скругления кнопки не является универсальным радиусом для контейнеров.
border-radius-input8pxСохраняйте форму, заданную для конкретного компонента. Радиус скругления кнопки не является универсальным радиусом для контейнеров.
border-radius-alert12pxСохраняйте форму, заданную для конкретного компонента. Радиус скругления кнопки не является универсальным радиусом для контейнеров.
border-radius-dropdown8pxСохраняйте форму, заданную для конкретного компонента. Радиус скругления кнопки не является универсальным радиусом для контейнеров.
border-radius-card-embedded8pxСохраняйте форму, заданную для конкретного компонента. Радиус скругления кнопки не является универсальным радиусом для контейнеров.

Длительность анимации взаимодействия

Источник
Название / правилоЗначение / конфигурацияПрименение
motion-duration-responsivedefault: 115ms; disabled: 0msВ нативном режиме отключения анимации её длительность становится нулевой. Не добавляйте к тому же взаимодействию посторонний переход.
motion-duration-expressivedefault: 165ms; disabled: 0msВ нативном режиме отключения анимации её длительность становится нулевой. Не добавляйте к тому же взаимодействию посторонний переход.
motion-duration-complexdefault: 250ms; disabled: 0msВ нативном режиме отключения анимации её длительность становится нулевой. Не добавляйте к тому же взаимодействию посторонний переход.

Нативная композиция API

Источник
Название / правилоЗначение / конфигурацияПрименение
WizardactiveStepIndex · onNavigate · onSubmitУправляйте текущим шагом в React; проверяйте данные перед переходом к запрошенному индексу следующего шага.
FormFieldlabel · constraintText · errorTextРазместите правило формата и сообщение об ошибке рядом с полем имени.
Inputvalue · onChange({ detail })Читайте detail.value, а не цель DOM-события.
SelectselectedOption · options · onChangeСохраняйте выбранный объект опции целиком, включая label и value.
Containerheader={<Header variant="h2" />}Группируйте связанные поля настройки, не создавая новую систему карточек.
ColumnLayoutcolumns={2} · variant="text-grid"Отображайте компактные сведения для проверки в адаптивных колонках библиотеки.
SpaceBetweensize="l"Используйте шкалу интервалов библиотеки, чтобы разделять поля и блоки проверки.
applyModeMode.Light / Mode.DarkПереключайте общий визуальный режим для нативных компонентов и семантических токенов.
03

Полное руководство по дизайн-системе AWS Cloudscape

Практическое руководство по выбору, применению и оценке этой системы для реального интерфейса.

DESIGN-aws-cloudscape.md

Подробные рекомендации, отправная точка для реализации и ссылки на источники.

Скачать руководство

Архитектура настройки в дизайн-системе AWS Cloudscape

Выберите Wizard для этого рабочего процесса

В этом примере настройка отделена от проверки. Wizard предоставляет навигацию по шагам и действия, а приложение — текущий индекс, значения полей, правило проверки и окончательное подтверждение. Читатель может вернуться к настройке, не перестраивая форму и не теряя выбранный профиль ресурсов. Это решение лучше, чем скрывать весь многошаговый процесс в одной универсальной Card.

Из этого руководства OpenDesign

Используйте нативные контейнеры

Container, Header и SpaceBetween формируют секцию формы. Заголовок h1 обозначает действие, а h2 — группу настроек. Пояснения размещаются рядом с полем или шагом, к которому относятся. Максимальная ширина 1200px и отступы страницы заданы явно на уровне приложения CSS и не являются экспортируемыми токенами компоновки Cloudscape.

Семантические токены и визуальные режимы дизайн-системы AWS Cloudscape

Сначала выберите роль, затем значение

В справочнике отдельно указаны фон макета, содержимое контейнеров, основной текст, интерактивный текст и обратная связь о состоянии. Это не единая палитра. Для пользовательского интерфейса импортируйте именованный токен из @cloudscape-design/design-tokens, а не копируйте светлое шестнадцатеричное значение для каждого состояния. Токен фиксирует назначение цвета, а само значение может меняться.

Переключайте режимы через библиотеку

В примере applyMode вызывается с Mode.Light или Mode.Dark из global-styles. Это меняет режим, используемый компонентами, а не подменяет произвольные цвета CSS. На тёмном экране проверки остаются неизменными подписи, выбранный профиль ресурсов и состояние навигации. В исходном JSON записаны значения для обоих режимов, поэтому эту разницу можно проверить.

Типографика и иерархия заголовков дизайн-системы AWS Cloudscape

Сочетайте роли шрифта и межстрочного интервала

В теме visual-refresh для основного текста размера m задан размер 14px и межстрочный интервал 20px. Для heading-xl указаны 24px и 30px, для heading-l — 20px и 24px, а для heading-m — 18px и 22px. Эти роли задают компактную иерархию формы и не предназначены для крупных рекламных заголовков.

Используйте семантические варианты компонентов

Вариант Header h1 задаёт заголовок «Создание рабочей области». Для заголовков контейнеров используйте h2, а вариант Box awsui-key-label придаёт подписям в блоке проверки единообразное вторичное оформление. Значения в блоке проверки остаются обычным читаемым текстом. Не превращайте каждую подпись поля в заголовок, чтобы просто усилить визуальный акцент.

Поля с управляемым состоянием и композиция проверки в дизайн-системе AWS Cloudscape

Разберитесь в контракте detail-событий

Input отправляет событие, в котором новое значение текста содержится в detail.value. Select отправляет detail.selectedOption — объект опции, а не обычную строку. В полном примере сохраняется этот объект, а при проверке отображается его label. Так можно избежать распространённой ошибки интеграции, из-за которой Select оказывается пустым, когда в selectedOption передаётся только идентификатор.

Размещайте инструкции рядом с полем

  • Правило формата поля действует только в этом демонстрационном приложении.
  • Профили ресурсов не являются сведениями о продукте или ценах.
  • За представление отвечают нативные компоненты, а за конфигурацию — состояние React.

Плотность и адаптивный макет в дизайн-системе AWS Cloudscape

Не считайте компактный режим масштабированием

В опубликованных масштабированных значениях интервалов предусмотрены разные значения для каждой плотности. Например, space-scaled-m составляет 16px в комфортном режиме и 12px в компактном, а space-scaled-l — 20px и 16px соответственно. Такие различия сжимают вертикальный ритм, не меняя содержимое и не уменьшая произвольно размер текста. Нативные компоненты применяют собственные правила плотности.

Адаптируйте структуру шагов и проверки

Wizard меняет представление навигации в зависимости от доступной ширины, а ColumnLayout адаптивно размещает сведения для проверки. При ширине менее 600px приложение CSS уменьшает внешние отступы. В примере не задана жёстко ширина навигации для настольного представления; в мобильном варианте кнопки «Далее», «Назад» и «Подтвердить локально» остаются видимыми.

Проверка и подтверждение в Wizard дизайн-системы AWS Cloudscape

Проверяйте данные до перехода

onNavigate получает requestedStepIndex. Перед переходом к проверке приложение проверяет текущее имя и остаётся на том же шаге, если оно недопустимо. При редактировании ошибка сбрасывается, чтобы при следующей отправке данные проверялись заново. При возврате к настройкам имя и выбранная опция сохраняются.

  1. Введите недопустимое имя и убедитесь, что приложение остаётся на шаге настройки.
  2. Исправьте имя и выберите другой профиль ресурсов.
  3. Перейдите к проверке и подтвердите оба значения.
  4. Нажмите «Изменить настройки», чтобы вернуться, не теряя ни одного значения.
  5. Подтвердите локально и перезапустите пример.

Не путайте сохранение конфигурации с созданием ресурса

После последнего действия отображаются локальное уведомление Alert об успешном выполнении и сводка конфигурации. Это не имитирует создание настоящего ресурса. В реальном приложении во время подготовки ресурса сохраняйте состояние отправки, различайте принятые запросы и созданные ресурсы, а также предусмотрите восстановление после ошибки без потери конфигурации.

Доступность форм в дизайн-системе AWS Cloudscape

Сохраняйте подписи и названия навигации

Для Wizard заданы navigationAriaLabel и переведённые строки действий. Каждый Input и Select заключён в FormField с подписью. Alert сообщает о недопустимом вводе или успешном выполнении с помощью нативной семантики компонента. Видимые ограничения дополняют подпись поля, а не заменяют её.

Проверьте весь процесс с клавиатуры

С помощью клавиатуры перейдите к полю имени, откройте список Select, перейдите дальше, вернитесь, внесите изменения и подтвердите их. Нативное управление фокусом упрощает взаимодействие, но правило проверки шага и смысл подтверждения по-прежнему определяет приложение. Сама библиотека компонентов не может проверить отсутствующее бизнес-правило.

Установка и границы пользовательской настройки в дизайн-системе AWS Cloudscape

Устанавливайте связанные пакеты вместе

В реализации компоненты импортируются из отдельных подпутей пакетов, а global-styles подключается один раз. В custom-style используется справочник design-tokens. Предоставленный входной файл React и компактный файл CSS позволяют запустить интерактивный пример в приложении Vite React. Используйте совместимые версии пакетов Cloudscape.

Используйте пример как основу для реального проекта

Примеры компонентов дизайн-системы AWS Cloudscape

main.jsx — мастер настройки целиком

Нативные Wizard, FormField, Select и метаданные проверки с управляемой навигацией и локальным подтверждением.

jsx
import React, { useState } from "react";
import { createRoot } from "react-dom/client";
import Wizard from "@cloudscape-design/components/wizard";
import Container from "@cloudscape-design/components/container";
import Header from "@cloudscape-design/components/header";
import FormField from "@cloudscape-design/components/form-field";
import Input from "@cloudscape-design/components/input";
import Select from "@cloudscape-design/components/select";
import SpaceBetween from "@cloudscape-design/components/space-between";
import ColumnLayout from "@cloudscape-design/components/column-layout";
import Box from "@cloudscape-design/components/box";
import Button from "@cloudscape-design/components/button";
import Alert from "@cloudscape-design/components/alert";
import Toggle from "@cloudscape-design/components/toggle";
import { applyMode, Mode } from "@cloudscape-design/global-styles";
import "@cloudscape-design/global-styles/index.css";
import "./cloudscape.css";
const sizes = [
  { label: "Development · 2 vCPU / 4 GiB", value: "dev" },
  { label: "Standard · 4 vCPU / 8 GiB", value: "standard" },
  { label: "Compute · 8 vCPU / 16 GiB", value: "compute" },
];
function App() {
  const [name, setName] = useState("analytics-sandbox"),
    [size, setSize] = useState(sizes[0]),
    [step, setStep] = useState(0),
    [error, setError] = useState(""),
    [complete, setComplete] = useState(false),
    [dark, setDark] = useState(false);
  function next(index) {
    if (index > 0 && !/^[a-z][a-z0-9-]{2,29}$/.test(name)) {
      setError(
        "Use 3–30 lowercase letters, numbers or hyphens, starting with a letter.",
      );
      return;
    }
    setError("");
    setStep(index);
  }
  function reset() {
    setStep(0);
    setComplete(false);
    setError("");
    setName("analytics-sandbox");
    setSize(sizes[0]);
  }
  return (
    <main className="awsui-typography cloudscape-example">
      <div className="appearance">
        <span>CLOUDSCAPE · RESOURCE CONFIGURATION</span>
        <Toggle
          checked={dark}
          onChange={({ detail }) => {
            setDark(detail.checked);
            applyMode(detail.checked ? Mode.Dark : Mode.Light);
          }}
        >
          Dark mode
        </Toggle>
      </div>
      <Header
        variant="h1"
        description="Configure a fictional compute workspace. This example does not create a cloud resource."
      >
        Create a workspace
      </Header>
      <div className="wizard-content">
        {complete ? (
          <SpaceBetween size="l">
            <Alert type="success" header="Configuration confirmed locally">
              The {name} recipe is ready for review. No cloud API was called and
              no resource was provisioned.
            </Alert>
            <Container header={<Header variant="h2">Workspace recipe</Header>}>
              <ColumnLayout columns={2} variant="text-grid">
                <div>
                  <Box variant="awsui-key-label">Name</Box>
                  {name}
                </div>
                <div>
                  <Box variant="awsui-key-label">Capacity</Box>
                  {size.label}
                </div>
              </ColumnLayout>
            </Container>
            <Button onClick={reset}>Start another example</Button>
          </SpaceBetween>
        ) : (
          <Wizard
            activeStepIndex={step}
            onNavigate={({ detail }) => next(detail.requestedStepIndex)}
            onCancel={reset}
            onSubmit={() => setComplete(true)}
            i18nStrings={{
              stepNumberLabel: (stepNumber) => `Step ${stepNumber}`,
              collapsedStepsLabel: (stepNumber, stepsCount) =>
                `Step ${stepNumber} of ${stepsCount}`,
              skipToButtonLabel: (step) => `Skip to ${step.title}`,
              navigationAriaLabel: "Configuration steps",
              cancelButton: "Reset",
              previousButton: "Previous",
              nextButton: "Next",
              submitButton: "Confirm locally",
              optional: "optional",
            }}
            steps={[
              {
                title: "Configure workspace",
                description: "Choose the identity and capacity.",
                content: (
                  <Container
                    header={<Header variant="h2">Workspace settings</Header>}
                  >
                    <SpaceBetween size="l">
                      <FormField
                        label="Workspace name"
                        constraintText="3–30 characters; lowercase letters, numbers and hyphens."
                        errorText={error}
                      >
                        <Input
                          value={name}
                          onChange={({ detail }) => {
                            setName(detail.value);
                            setError("");
                          }}
                        />
                      </FormField>
                      <FormField
                        label="Capacity profile"
                        description="These profiles are sample application data, not real cloud products or prices."
                      >
                        <Select
                          selectedOption={size}
                          onChange={({ detail }) =>
                            setSize(detail.selectedOption)
                          }
                          options={sizes}
                        />
                      </FormField>
                    </SpaceBetween>
                  </Container>
                ),
              },
              {
                title: "Review configuration",
                description:
                  "Check the values before confirming the local example.",
                content: (
                  <SpaceBetween size="l">
                    <Container
                      header={
                        <Header
                          variant="h2"
                          actions={
                            <Button onClick={() => setStep(0)}>
                              Edit settings
                            </Button>
                          }
                        >
                          Workspace settings
                        </Header>
                      }
                    >
                      <ColumnLayout columns={2} variant="text-grid">
                        <div>
                          <Box variant="awsui-key-label">Workspace name</Box>
                          {name}
                        </div>
                        <div>
                          <Box variant="awsui-key-label">Capacity profile</Box>
                          {size.label}
                        </div>
                      </ColumnLayout>
                    </Container>
                    <Alert type="info">
                      Confirmation changes the preview only. Production
                      provisioning would require a real service, permissions and
                      a verified response.
                    </Alert>
                  </SpaceBetween>
                ),
              },
            ]}
          />
        )}
      </div>
      <footer>
        Native Cloudscape components 3.0.1390 · configuration, validation,
        review and local confirmation.
      </footer>
    </main>
  );
}
createRoot(document.getElementById("root")).render(<App />);

Справочник по коду

  • Сохраните этот файл как src/main.jsx. Следующий блок кода — импортируемый файл src/cloudscape.css.

cloudscape.css — оболочка страницы с примером

Ширина приложения и отступы вокруг нативных компонентов Cloudscape.

css
body {
  margin: 0;
}
.cloudscape-example {
  padding: 24px;
  max-width: 1200px;
  margin: auto;
}
.appearance {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 24px;
}
.appearance > span {
  font-size: 11px;
  letter-spacing: 0.06em;
  font-weight: 700;
}
.wizard-content {
  margin-top: 32px;
}
.cloudscape-example footer {
  font-size: 12px;
  margin-top: 32px;
  color: #5f6b7a;
}
@media (max-width: 600px) {
  .cloudscape-example {
    padding: 16px;
  }
  .appearance {
    align-items: start;
  }
  .appearance > span {
    max-width: 180px;
  }
  .wizard-content {
    margin-top: 24px;
  }
}

Справочник по коду

  • Не переопределяйте имена классов нативных компонентов в таблице стилей приложения.
04

Настройка AI-агента для дизайн-системы AWS Cloudscape

Отправная точка для реализации

Показанный нативный пример собран с React 18.3.1. Используйте версию Node.js, поддерживаемую установленной версией Vite; сохраняйте версии, зафиксированные в lock-файле приложения.

sh
npm create vite@latest cloudscape-workspace -- --template react
cd cloudscape-workspace
npm install
npm install [email protected] [email protected] @cloudscape-design/[email protected] @cloudscape-design/[email protected] @cloudscape-design/global-styles
# Replace src/main.jsx and add src/cloudscape.css from the full examples.
npm run dev

Запрос для вашего проекта

Промпт для AI-агента
Создайте рабочий процесс настройки ресурсов с Cloudscape. Используйте предоставленный код нативных компонентов Wizard/Container/FormField/Input/Select и роли токенов визуального обновления. Сохраняйте значения полей при переходе между шагами, проверяйте их перед навигацией и показывайте полную сводку. Считайте примеры профилей мощности условными данными приложения, а не реальными облачными продуктами. Подключайте подготовку ресурсов только после предоставления API; различайте ожидающие, неудачные и подтверждённые результаты.
05

Источники и область применения дизайн-системы AWS Cloudscape

Руководство OpenDesign и исходный пример настройки локального рабочего пространства с нативными компонентами Cloudscape 3.0.1390. Профили мощности — вымышленные данные приложения. Учётная запись облака, API для подготовки ресурсов и фактические цены на услуги не задействованы.