

Amazon CodeCatalyst tidak lagi terbuka untuk pelanggan baru. Pelanggan yang sudah ada dapat terus menggunakan layanan ini seperti biasa. Lihat informasi yang lebih lengkap di [Cara bermigrasi dari CodeCatalyst](migration.md).

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengembangkan cetak biru khusus untuk memenuhi persyaratan proyek
<a name="develop-bp"></a>

Sebelum menerbitkan cetak biru khusus, Anda dapat mengembangkan cetak biru untuk memenuhi persyaratan tertentu. Anda dapat mengembangkan cetak biru kustom Anda dan menguji cetak biru dengan membuat proyek saat melihat pratinjau. Anda dapat mengembangkan cetak biru khusus untuk menyertakan komponen proyek, seperti kode sumber tertentu, koneksi akun, alur kerja, masalah, atau komponen lain yang dapat dibuat. CodeCatalyst

**penting**  
Jika Anda ingin menggunakan paket cetak biru dari sumber eksternal, pertimbangkan risiko yang mungkin datang dengan paket tersebut. Anda bertanggung jawab atas cetak biru khusus yang Anda tambahkan ke ruang Anda dan kode yang dihasilkannya.

**penting**  
Untuk mengembangkan cetak biru khusus di CodeCatalyst ruang Anda, Anda harus masuk dengan akun yang memiliki peran **administrator Space atau **Power user** di ruang** tersebut.

**Untuk mengembangkan atau memperbarui cetak biru kustom**

1. Lanjutkan Lingkungan Pengembang Anda. Untuk informasi selengkapnya, lihat [Melanjutkan Lingkungan Pengembang](devenvironment-resume.md).

   Jika Anda tidak memiliki Lingkungan Pengembang, Anda harus membuatnya terlebih dahulu. Untuk informasi selengkapnya, lihat [Membuat Lingkungan Pengembangan](devenvironment-create.md).

1. Buka terminal yang berfungsi di Lingkungan Pengembang Anda.

1. Jika Anda memilih alur kerja rilis saat membuat cetak biru, versi cetak biru terbaru akan dipublikasikan secara otomatis. Tarik perubahan untuk memastikan `package.json` file memiliki versi tambahan. Gunakan perintah berikut ini.

   ```
   git pull
   ```

1. Dalam `src/blueprint.ts` file, edit opsi cetak biru kustom Anda. `Options`Antarmuka ditafsirkan oleh CodeCatalyst wizard secara dinamis untuk menghasilkan antarmuka pengguna pilihan (UI). Anda dapat mengembangkan cetak biru kustom Anda dengan menambahkan komponen dan tag yang didukung. Untuk informasi selengkapnya, lihat [Memodifikasi fitur cetak biru dengan wizard front-end](wizard-bp.md), [Menambahkan komponen lingkungan ke cetak biru](comp-env-bp.md), [Menambahkan komponen wilayah ke cetak biru](region-comp-bp.md), [Menambahkan komponen repositori dan kode sumber ke cetak biru](comp-repo-source-bp.md), [Menambahkan komponen alur kerja ke cetak biru](comp-workflow-bp.md), dan [Menambahkan komponen Dev Environments ke cetak biru](comp-dev-env-bp.md).

   Anda juga dapat melihat cetak biru SDK dan contoh cetak biru untuk dukungan tambahan saat mengembangkan cetak biru kustom Anda. Untuk informasi selengkapnya, lihat [ GitHub repositori sumber terbuka](https://github.com/aws/codecatalyst-blueprints).

Cetak biru khusus menyediakan bundel pratinjau sebagai hasil dari sintesis yang berhasil. Bundel proyek mewakili kode sumber, konfigurasi, dan sumber daya dalam proyek, dan digunakan oleh operasi API CodeCatalyst penerapan untuk menyebarkan ke dalam proyek. Jika Anda ingin terus mengembangkan cetak biru kustom Anda, jalankan kembali proses sintesis cetak biru. Untuk informasi selengkapnya, lihat [Konsep cetak biru khusus](custom-bp-concepts.md).

# Memodifikasi fitur cetak biru dengan wizard front-end
<a name="wizard-bp"></a>

Wizard pemilihan cetak biru aktif dibuat CodeCatalyst secara otomatis oleh `Options` antarmuka dalam file. `blueprint.ts` Wizard front-end mendukung modifikasi dan fitur cetak biru `Options` menggunakan komentar dan tag gaya [JSDOC](https://jsdoc.app/about-getting-started.html). Anda dapat menggunakan komentar dan tag gaya JSDOC untuk melakukan tugas. Misalnya, Anda dapat memilih teks yang ditampilkan di atas opsi, mengaktifkan fitur seperti validasi input, atau membuat opsi dapat dilipat. Wizard bekerja dengan menafsirkan pohon sintaks abstrak (AST) yang dihasilkan dari TypeScript tipe dari antarmuka. `Options` Wizard mengkonfigurasi dirinya sendiri secara otomatis ke jenis yang dijelaskan sebaik mungkin. Tidak semua jenis didukung. Jenis lain yang didukung termasuk pemilih wilayah dan pemilih lingkungan.

Berikut ini adalah contoh wizard yang menggunakan komentar dan tag JSDOC dengan cetak biru: `Options`

```
export interface Options {
  /**
   * What do you want to call your new blueprint?
   * @validationRegex /^[a-zA-Z0-9_]+$/
   * @validationMessage Must contain only upper and lowercase letters, numbers and underscores
   */
  blueprintName: string;

  /**
   * Add a description for your new blueprint.
   */
   description?: string;

   /**
    * Tags for your Blueprint:
    * @collapsed true
    */
  tags?: string[];
}
```

Nama tampilan setiap opsi `Options` antarmuka muncul secara `camelCase` default. Teks biasa dalam komentar gaya JSDOC ditampilkan sebagai teks di atas opsi di wizard.

**Topics**
+ [Tag yang didukung](#supported-tags-bp)
+ [TypeScript Jenis yang didukung](#supported-typescript-bp)
+ [Berkomunikasi dengan pengguna selama sintesis](#communication-mid-synthesis)

## Tag yang didukung
<a name="supported-tags-bp"></a>

Tag JSDOC berikut didukung oleh cetak biru kustom di wizard front-end. `Options`

### @inlinePolicy. /path/to/policy/file.json
<a name="inline-policy-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi tipe`Role`.
+ **Penggunaan** - Memungkinkan Anda mengkomunikasikan kebijakan inline yang dibutuhkan peran. `policy.json`Jalur tersebut diharapkan berada di bawah kode sumber. Gunakan tag ini saat Anda memerlukan kebijakan khusus untuk peran.
+ **Dependensi - `blueprint-cli 0.1.12` dan** di atas
+ **Contoh** - `@inlinePolicy ./deployment-policy.json`

```
environment: EnvironmentDefinition{
    awsAccountConnection: AccountConnection{
      /**
       * @inlinePolicy ./path/to/deployment-policy.json
       */
      cdkRole: Role[];
    };
   };
```

### @trustPolicy. /path/to/policy/file.json
<a name="trust-policy-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi tipe`Role`.
+ **Penggunaan** - Memungkinkan Anda mengomunikasikan kebijakan kepercayaan yang dibutuhkan peran. `policy.json`Jalur tersebut diharapkan berada di bawah kode sumber. Gunakan tag ini saat Anda memerlukan kebijakan khusus untuk peran.
+ **Dependensi - `blueprint-cli 0.1.12` dan** di atas
+ **Contoh** - `@trustPolicy ./trust-policy.json`

```
environment: EnvironmentDefinition{
    awsAccountConnection: AccountConnection{
      /**
       * @trustPolicy ./path/to/trust-policy.json
       */
      cdkRole: Role[];
    };
   };
```

### Ekspresi @validationRegex Regex
<a name="validation-regex-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi string.
+ **Penggunaan** - Melakukan validasi input pada opsi dengan menggunakan ekspresi dan tampilan regex yang diberikan. `@validationMessage`
+ **Contoh** - `@validationRegex /^[a-zA-Z0-9_]+$/`
+ **Rekomendasi** - Gunakan dengan`@validationMessage`. Pesan validasi kosong secara default.

### @validationMessage string
<a name="validation-message-tag"></a>
+ **Memerlukan** - `@validationRegex` atau kesalahan lain untuk meninjau penggunaan.
+ **Penggunaan** - Menampilkan pesan validasi pada `@validation*` kegagalan.
+ **Contoh** -`@validationMessage Must contain only upper and lowercase letters, numbers, and underscores`.
+ **Rekomendasi** - Gunakan dengan`@validationMessage`. Pesan validasi kosong secara default.

### @collapsed boolean (opsional)
<a name="collapsed-boolean-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Boolean yang memungkinkan suboption untuk dilipat. Jika anotasi yang diciutkan hadir, nilai defaultnya adalah true. Mengatur nilai untuk `@collapsed false` membuat bagian yang dapat dilipat yang awalnya terbuka.
+ **Contoh** - `@collapsed true`

### @displayName string
<a name="display-name-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Mengubah nama tampilan opsi. Mengizinkan format selain CamelCase untuk nama tampilan.
+ **Contoh** - `@displayName Blueprint Name`

### @displayName string
<a name="display-name-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Mengubah nama tampilan opsi. Mengizinkan format selain [CamelCase](https://en.wikipedia.org/wiki/Camel_case) untuk nama tampilan.
+ **Contoh** - `@displayName Blueprint Name`

### Nomor @defaultEntropy
<a name="default-entropy-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi string.
+ **Penggunaan** - Menambahkan string alfanumerik acak dari panjang tertentu ke opsi.
+ **Contoh** - `@defaultEntropy 5`

### @placeholder string (opsional)
<a name="placeholder-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Mengubah placeholder bidang teks default.
+ **Contoh** - `@placeholder type project name here`

### Nomor @textArea (opsional)
<a name="text-area-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Mengonversi input string menjadi komponen area teks untuk bagian teks yang lebih besar. Menambahkan angka menentukan jumlah baris. Defaultnya adalah lima baris.
+ **Contoh** - `@textArea 10`

### @hidden boolean (opsional)
<a name="hidden-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Menyembunyikan file dari pengguna kecuali pemeriksaan validasi gagal. Nilai default adalah true.
+ **Contoh** - `@hidden`

### @button boolean (opsional)
<a name="button-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Anotasi harus pada properti Boolean. Menambahkan tombol yang akan mensintesis sebagai true saat dipilih. Bukan toggle.
+ **Contoh** - `buttonExample: boolean;`

  ```
  /**
    * @button
    */
  buttonExample: boolean;
  ```

### @showName boolean (opsional)
<a name="show-name-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Hanya dapat digunakan pada jenis koneksi akun. Menampilkan masukan nama tersembunyi. Default ke `default_environment`.
+ **Contoh** - `@showName true`

  ```
  /**
    * @showName true
    */
  accountConnection: AccountConnection<{
      ...
  }>;
  ```

### @ showEnvironmentType boolean (opsional)
<a name="show-environment-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Hanya dapat digunakan pada jenis koneksi akun. Menampilkan menu dropdown tipe lingkungan tersembunyi. Semua koneksi default ke`production`. Pilihannya adalah **Non-produksi** atau **Produksi**.
+ **Contoh** - `@showEnvironmentType true`

  ```
  /**
    * @showEnvironmentType true
    */
  accountConnection: AccountConnection<{
      ...
  }>;
  ```

### @forceDefault boolean (opsional)
<a name="force-default-tag"></a>
+ **Membutuhkan** - N/A
+ **Penggunaan** - Menggunakan nilai default yang disediakan oleh penulis cetak biru bukan nilai yang digunakan sebelumnya oleh pengguna.
+ **Contoh** - `forceDeafultExample: any;`

  ```
  /**
    * @forceDefault
    */
  forceDeafultExample: any;
  ```

### @requires BluePrintNama
<a name="requires-tag"></a>
+ **Membutuhkan** - Menganotasi antarmuka. `Options`
+ **Penggunaan** - Memperingatkan pengguna untuk menambahkan ditentukan `blueprintName` ke proyek sebagai persyaratan untuk cetak biru saat ini.
+ **Contoh** - `@requires '@amazon-codecatalyst/blueprints.blueprint-builder'`

  ```
  /*
   * @requires '@amazon-codecatalyst/blueprints.blueprint-builder'
   */
  export interface Options extends ParentOptions {
  ...
  ```

### @filter regex
<a name="filter-regex-tag"></a>
+ **Membutuhkan** - Menganotasi antarmuka `Selector` atau`MultiSelect`.
+ **Penggunaan** - Filter dropdown di wizard ke opsi yang cocok dengan regex yang ditentukan.
+ **Contoh** - `@filter /blueprintPackageName/`

  ```
   /**
       * @filter /myPackageName/
       */
      blueprintInstantiation?: Selector<BlueprintInstantiation>;
  ...
  ```

## TypeScript Jenis yang didukung
<a name="supported-typescript-bp"></a>

 TypeScript Jenis berikut ini didukung oleh cetak biru kustom `Options` di wizard front-end.

### Jumlah
<a name="number-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi tipe`number`.
+ **Penggunaan** - Menghasilkan bidang input angka.
+ **Contoh** - `age: number`

```
{
  age: number
  ...
}
```

### String
<a name="string-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi tipe`string`.
+ **Penggunaan** - Menghasilkan bidang input string.
+ **Contoh** - `name: string`

```
{
  age: string
  ...
}
```

### Daftar string
<a name="string-list-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi array tipe`string`.
+ **Penggunaan** - Menghasilkan input daftar string.
+ **Contoh** - `isProduction: boolean`

```
{
  isProduction: boolean
  ...
}
```

### Kotak centang
<a name="checkbox-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi`boolean`.
+ **Penggunaan** - Hasilkan kotak centang.
+ **Contoh** - `isProduction: boolean`

```
{
  isProduction: boolean
  ...
}
```

### Radio
<a name="radio-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi penyatuan tiga atau lebih sedikit string.
+ **Penggunaan** - Hasilkan radio yang dipilih.
**catatan**  
Ketika ada empat atau lebih item, jenis ini dirender sebagai dropdown.
+ **Contoh** - `color: 'red' | 'blue' | 'green'`

```
{
  color: 'red' | 'blue' | 'green'
  ...
}
```

### Dropdown
<a name="dropdown-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi penyatuan empat atau lebih string.
+ **Penggunaan** - Hasilkan dropdown.
+ **Contoh** - `runtimes: 'nodejs' | 'python' | 'java' | 'dotnetcore' | 'ruby'`

```
{
  runtimes: 'nodejs' | 'python' | 'java' | 'dotnetcore' | 'ruby'
  ...
}
```

### Bagian yang dapat diperluas
<a name="expandable-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi objek.
+ **Penggunaan** - Hasilkan bagian yang dapat diperluas. Opsi dalam objek akan bersarang di dalam bagian yang dapat diperluas di wizard.
+ **Contoh** - 

```
{
     expandableSectionTitle: {
         nestedString: string;
         nestedNumber: number;
     }
}
```

### Tupel
<a name="tuple-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi tipe`Tuple`.
+ **Penggunaan** - Hasilkan input berbayar nilai-kunci.
+ **Contoh** - `tuple: Tuple[string, string]>`

```
{
    tuple: Tuple[string, string]>;
    ...
}
```

### Daftar Tuple
<a name="tuple-list-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi array tipe`Tuple`.
+ **Penggunaan** - Menghasilkan masukan daftar Tuple.
+ **Contoh** - `tupleList: Tuple[string, string]>[]`

```
{
  tupleList: Tuple[string, string]>[];
  ...
}
```

### Pemilih
<a name="selector-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi tipe`Selector`.
+ **Penggunaan** - Menghasilkan dropdown repositori sumber atau cetak biru yang diterapkan pada proyek.
+ **Contoh** - `sourceRepo: Selector<SourceRepository>`

```
{
    sourceRepo: Selector<SourceRepository>;
    sourceRepoOrAdd: Selector<SourceRepository | string>;
    blueprintInstantiation: Selector<BlueprintInstantiation>;
  ...
}
```

### Multipilih
<a name="multiselect-ts-tag"></a>
+ **Membutuhkan** - Opsi untuk menjadi tipe`Selector`.
+ **Penggunaan** - Menghasilkan input multiselect.
+ **Contoh** - `multiselect: MultiSelect['A' | 'B' | 'C' | 'D' | 'E']>`

```
{
  multiselect: MultiSelect['A' | 'B' | 'C' | 'D' | 'E']>;
  ...
}
```

## Berkomunikasi dengan pengguna selama sintesis
<a name="communication-mid-synthesis"></a>

Sebagai penulis cetak biru, Anda dapat berkomunikasi kembali ke pengguna di luar hanya pesan validasi. Misalnya, anggota ruang mungkin melihat kombinasi opsi yang menghasilkan cetak biru yang tidak jelas. Cetak biru khusus mendukung kemampuan untuk mengkomunikasikan pesan kesalahan kembali ke pengguna dengan menjalankan sintesis. Cetak biru dasar mengimplementasikan `throwSynthesisError(...)` fungsi yang mengharapkan pesan kesalahan yang jelas. Anda dapat memanggil pesan dengan menggunakan yang berikut ini:

```
//blueprint.ts
this.throwSynthesisError({
   name: BlueprintSynthesisErrorTypes.BlueprintSynthesisError,
   message: 'hello from the blueprint! This is a custom error communicated to the user.'
})
```

# Menghasilkan input dan merender ulang elemen wizard front-end
<a name="comp-dynamic-input-bp"></a>

Anda dapat menghasilkan input wizard dengan Dynamic KVInput dan secara dinamis membuat elemen wizard front-end untuk cetak biru kustom Anda.

**Topics**
+ [Menciptakan lingkungan pengembangan](#dynamickvinput-bp)
+ [Menciptakan elemen wizard secara dinamis](#create-wizard-elements-bp)

## Menciptakan lingkungan pengembangan
<a name="dynamickvinput-bp"></a>

KVInput Jenis Dinamis dapat digunakan untuk menghasilkan input wizard front-end menggunakan default bluerpint kustom Anda. Untuk melihat up-to-date skema terbanyak, lihat [KVInput definisi Dinamis](https://github.com/aws/codecatalyst-blueprints/blob/main/packages/blueprints/blueprint/src/ui-selectors/dynamic-kv-input.ts).

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan `Options` untuk membentuk objek:

```
import { DynamicKVInput } from '@amazon-codecatalyst/blueprints.blueprint';

export interface Options extends ParentOptions {

  parameters: DynamicKVInput[];

}
```

Contoh berikut menunjukkan bagaimana Anda dapat mengatur parameter default dengan beberapa properti:

```
{ 
"parameters": [
        {
            "key": "AWS_REGION",
            "value": "us-west-2",
            "displayType": "region",
            "possibleValues": [
                "us-west-1",
                "us-west-2",
                "us-east-1",
                "us-east-2"
            ],
            "displayName": "AWS Region",
            "description": "AWS Region to deploy the solution to."
        },
        {
            "key": "SchedulingActive",
            "value": "Yes",
            "displayType": "dropdown",
            "possibleValues": [
                "Yes",
                "No"
            ],
            "displayName": "Scheduling Active",
            "description": "Activate or deactivate scheduling."
        },
        {
            "key": "ScheduledServices",
            "value": "Both",
            "displayType": "dropdown",
            "possibleValues": [
                "EC2",
                "RDS",
                "Both"
            ],
            "displayName": "Scheduled Services",
            "description": "Services to schedule."
        },
        {
            "key": "ScheduleRdsClusters",
            "value": "No",
            "displayType": "dropdown",
            "possibleValues": [
                "Yes",
                "No"
            ],
            "displayName": "Schedule RDS Clusters",
            "description": "Enable scheduling of Aurora clusters for RDS service."
        },
        {
            "key": "CreateRdsSnapshot",
            "value": "No",
            "displayType": "dropdown",
            "possibleValues": [
                "Yes",
                "No"
            ],
            "displayName": "Create RDS Snapshot",
            "description": "Create snapshot before stopping RDS instances (does not apply to Aurora Clusters)."
        },
        {
            "key": "MemorySize",
            "value": "128",
            "displayType": "dropdown",
            "possibleValues": [
                "128",
                "384",
                "512",
                "640",
                "768",
                "896",
                "1024",
                "1152",
                "1280",
                "1408",
                "1536"
            ],
            "displayName": "Memory Size",
            "description": "Size of the Lambda function running the scheduler, increase size when processing large numbers of instances."
        },
        {
            "key": "UseCloudWatchMetrics",
            "value": "No",
            "displayType": "dropdown",
            "possibleValues": [
                "Yes",
                "No"
            ],
            "displayName": "Use CloudWatch Metrics",
            "description": "Collect instance scheduling data using CloudWatch metrics."
        },
        {
            "key": "LogRetentionDays",
            "value": "30",
            "displayType": "dropdown",
            "possibleValues": [
                "1",
                "3",
                "5",
                "7",
                "14",
                "30",
                "60",
                "90",
                "120",
                "150",
                "180",
                "365",
                "400",
                "545",
                "731",
                "1827",
                "3653"
            ],
            "displayName": "Log Retention Days",
            "description": "Retention days for scheduler logs."
        },
        {
            "key": "Trace",
            "value": "No",
            "displayType": "dropdown",
            "possibleValues": [
                "Yes",
                "No"
            ],
            "displayName": "Trace",
            "description": "Enable debug-level logging in CloudWatch logs."
        },
        {
            "key": "EnableSSMMaintenanceWindows",
            "value": "No",
            "displayType": "dropdown",
            "possibleValues": [
                "Yes",
                "No"
            ],
            "displayName": "Enable SSM Maintenance Windows",
            "description": "Enable the solution to load SSM Maintenance Windows, so that they can be used for EC2 instance Scheduling."
        },
        {
            "key": "DefaultTimezone",
            "value": "UTC",
            "displayType": "string",
            "displayName": "Default Timezone",
            "description": "Default timezone to use for scheduling."
        },
        {
            "key": "Regions",
            "value": "us-west-2",
            "displayType": "string",
            "displayName": "Regions",
            "description": "List of regions in which instances should be scheduled, leave blank for current region only."
        },
        {
            "key": "UsingAWSOrganizations",
            "value": "No",
            "displayType": "dropdown",
            "possibleValues": [
                "Yes",
                "No"
            ],
            "displayName": "Using AWS Organizations",
            "description": "Use AWS Organizations to automate spoke account registration."
        },
        {
            "key": "Principals",
            "displayType": "string",
			      "optional": false,
            "displayName": "Principals",
            "description": "(Required) If using AWS Organizations, provide the Organization ID. Eg. o-xxxxyyy. Else, provide a comma separated list of spoke account ids to schedule. Eg.: 1111111111, 2222222222 or {param: ssm-param-name}"
        },
        {
            "key": "Namespace",
            "value": "Default",
            "displayType": "string",
            "displayName": "Namespace",
            "description": "Provide unique identifier to differentiate between multiple solution deployments (No Spaces). Example: Dev"
        },
        {
            "key": "SchedulerFrequency",
            "value": 5,
            "displayType": "number",
            "displayName": "Scheduler Frequency",
            "description": "Scheduler running frequency in minutes."
        }
    ]
}
```

## Menciptakan elemen wizard secara dinamis
<a name="create-wizard-elements-bp"></a>

Skema yang sama seperti membuat input wizard dapat digunakan untuk merender ulang wizard secara dinamis selama sintesis. Itu dapat digunakan untuk menjawab pertanyaan tindak lanjut oleh pengguna bila diperlukan.

```
//blueprint.ts

export interface Options extends ParentOptions {
...
 dynamicOptions: OptionsSchemaDefinition<'optionsIdentifier', KVSchema>;
}
```

Wizard kemudian dapat diatur selama periode sintesis dengan menggunakan `Options` komponen.

```
import {
  OptionsSchemaDefinition,
  OptionsSchema,
} from '@amazon-codecatalyst/blueprints.blueprint';

...

  // dynamically renders a number in the place where 'optionsIdentifier' was set in the original options type.
  new OptionsSchema<KVSchema>(this, 'optionsIdentifier', [
    {
            "key": "SchedulerFrequency",
            "value": 5,
            "displayType": "number",
            "displayName": "Scheduler Frequency",
            "description": "Scheduler running frequency in minutes."
    }
   ]);
```

# Menambahkan komponen lingkungan ke cetak biru
<a name="comp-env-bp"></a>

Wisaya cetak biru khusus dihasilkan secara dinamis dari `Options` antarmuka yang diekspos melalui wizard. Cetak biru mendukung pembuatan komponen antarmuka pengguna (UI) dari tipe yang terbuka.

**Untuk mengimpor komponen CodeCatalyst lingkungan cetak biru Amazon**

Dalam `blueprint.ts` file Anda, tambahkan yang berikut ini:

```
import {...} from '@amazon-codecatalyst/codecatalyst-environments'
```

**Topics**
+ [Menciptakan lingkungan pengembangan](#create-dev-env-bp)
+ [Daftar lingkungan](#list-env-bp)
+ [Contoh antarmuka tiruan](#examples-comp-env-bp)

## Menciptakan lingkungan pengembangan
<a name="create-dev-env-bp"></a>

Contoh berikut menunjukkan cara menerapkan aplikasi Anda ke cloud:

```
export interface Options extends ParentOptions {
        ...
        myNewEnvironment:  EnvironmentDefinition{
            thisIsMyFirstAccountConnection: AccountConnection{
                thisIsARole: Role['lambda', 's3', 'dynamo'];
             };
        };
    }
```

Antarmuka menghasilkan komponen UI yang meminta lingkungan baru (`myNewEnvironment`) dengan koneksi akun tunggal (`thisIsMyFirstAccountConnection`. Peran pada koneksi akun (`thisIsARole`) juga dihasilkan dengan `['lambda', 's3', 'dynamo']` kemampuan peran minimum yang diperlukan. Tidak semua pengguna memiliki koneksi akun, jadi Anda harus memeriksa kasus di mana pengguna tidak menghubungkan akun atau tidak menghubungkan akun dengan peran. Peran juga dapat dijelaskan dengan. `@inlinePolicies` Untuk informasi selengkapnya, lihat [@inlinePolicy. /path/to/policy/file.json](wizard-bp.md#inline-policy-tag).

Komponen lingkungan membutuhkan `name` dan`environmentType`. Kode berikut adalah bentuk default minimum yang diperlukan:

```
{
  ...
  "myNewEnvironment": {
    "name": "myProductionEnvironment",
    "environmentType": "PRODUCTION"
  },
}
```

Komponen UI kemudian meminta Anda untuk berbagai bidang. Saat Anda mengisi bidang, cetak biru mendapatkan bentuk yang sepenuhnya diperluas. Ini dapat membantu bagi Anda untuk memasukkan tiruan penuh dalam `defaults.json` file untuk tujuan pengujian dan pengembangan.

## Daftar lingkungan
<a name="list-env-bp"></a>

Menentukan array tipe `EnvironmentDefinition` akan menghasilkan daftar lingkungan di UI wizard.

```
export interface Options extends ParentOptions {
    ...
   /**
     @showName readOnly
   */
    myEnvironments:  EnvironmentDefinition<{
        thisIsMyFirstAccountConnection: AccountConnection<{
            thisIsARole: Role<['lambda', 's3', 'dynamo']>;
        }>;
    }>[];

}
```

Contoh berikut menunjukkan default untuk daftar lingkungan:

```
{
  ...
  "myEnvironments": [
  {
    "name": "myProductionEnvironment",
    "environmentType": "PRODUCTION"
  },
  {
    "name": "myDevelopmentEnvironment",
    "environmentType": "DEVELOPMENT"
  },
  ]
}
```

## Contoh antarmuka tiruan
<a name="examples-comp-env-bp"></a>

### Antarmuka tiruan sederhana
<a name="simple-comp-env-bp"></a>

```
{
    ...
    "thisIsMyEnvironment": {
        "name": "myProductionEnvironment",
        "environmentType": "PRODUCTION",
        "thisIsMySecondAccountConnection": {
            "id": "12345678910",
            "name": "my-account-connection-name",
            "secondAdminRole": {
                "arn": "arn:aws:iam::12345678910:role/ConnectedQuokkaRole",
                "name": "ConnectedQuokkaRole",
                "capabilities": [
                    "lambda",
                    "s3",
                    "dynamo"
                ]
            }
        }
    }
}
```

### Antarmuka tiruan yang kompleks
<a name="complex-comp-env-bp"></a>

```
export interface Options extends ParentOptions {
  /**
   * The name of an environment
   * @displayName This is a Environment Name
   * @collapsed
   */
  thisIsMyEnvironment: EnvironmentDefinition{
    /**
     * comments about the account that is being deployed into
     * @displayName This account connection has an overriden name
     * @collapsed
     */
    thisIsMyFirstAccountConnection: AccountConnection{
      /**
       * Blah blah some information about the role that I expect
       * e.g. here's a copy-pastable policy: [to a link]
       * @displayName This role has an overriden name
       */
      adminRole: Role['admin', 'lambda', 's3', 'cloudfront'];
      /**
       * Blah blah some information about the second role that I expect
       * e.g. here's a copy-pastable policy: [to a link]
       */
      lambdaRole: Role['lambda', 's3'];
    };
    /**
     * comments about the account that is being deployed into
     */
    thisIsMySecondAccountConnection: AccountConnection{
      /**
         * Blah blah some information about the role that I expect
         * e.g. here's a copy-pastable policy: [to a link]
         */
      secondAdminRole: Role['admin', 'lambda', 's3', 'cloudfront'];
      /**
         * Blah blah some information about the second role that I expect
         * e.g. here's a copy-pastable policy: [to a link]
         */
      secondLambdaRole: Role['lambda', 's3'];
    };
  };
}
```

### Antarmuka tiruan lengkap
<a name="complete-comp-env-bp"></a>

```
{
  ...
  "thisIsMyEnvironment": {
    "name": "my-production-environment",
    "environmentType": "PRODUCTION",
    "thisIsMySecondAccountConnection": {
      "id": "12345678910",
      "name": "my-connected-account",
      "secondAdminRole": {
        "name": "LambdaQuokkaRole",
        "arn": "arn:aws:iam::12345678910:role/LambdaQuokkaRole",
        "capabilities": [
          "admin",
          "lambda",
          "s3",
          "cloudfront"
        ]
      },
      "secondLambdaRole": {
        "name": "LambdaQuokkaRole",
        "arn": "arn:aws:iam::12345678910:role/LambdaQuokkaRole",
        "capabilities": [
          "lambda",
          "s3"
        ]
      }
    },
    "thisIsMyFirstAccountConnection": {
      "id": "12345678910",
      "name": "my-connected-account",
      "adminRole": {
        "name": "LambdaQuokkaRole",
        "arn": "arn:aws:iam::12345678910:role/LambdaQuokkaRole",
        "capabilities": [
          "admin",
          "lambda",
          "s3",
          "cloudfront"
        ]
      },
      "lambdaRole": {
        "name": "LambdaQuokkaRole",
        "arn": "arn:aws:iam::12345678910:role/LambdaQuokkaRole",
        "capabilities": [
          "lambda",
          "s3"
        ]
      }
    }
  },
}
```

# Menambahkan komponen rahasia ke cetak biru
<a name="secrets-comp-bp"></a>

Rahasia dapat digunakan CodeCatalyst untuk menyimpan data sensitif yang dapat direferensikan dalam alur kerja. Anda dapat menambahkan rahasia ke cetak biru kustom Anda dan mereferensikannya di alur kerja Anda. Untuk informasi selengkapnya, lihat [Menyembunyikan data menggunakan rahasia](workflows-secrets.md).

**Untuk mengimpor jenis CodeCatalyst wilayah cetak biru Amazon**

Dalam `blueprint.ts` file Anda, tambahkan yang berikut ini:

```
import { Secret, SecretDefinition } from '@amazon-codecatalyst/blueprint-component.secrets'
```

**Topics**
+ [Membuat rahasia](#comp-create-secrets-bp)
+ [Mereferensikan rahasia dalam alur kerja](#comp-reference-secrets-bp)

## Membuat rahasia
<a name="comp-create-secrets-bp"></a>

Contoh berikut membuat komponen UI yang meminta pengguna untuk memasukkan nilai rahasia dan deskripsi opsional:

```
export interface Options extends ParentOptions {
    ...
    mySecret: SecretDefinition;
}


export class Blueprint extends ParentBlueprint {
  constructor(options_: Options) {
    new Secret(this, options.secret);
}
```

Komponen rahasia membutuhkan`name`. Kode berikut adalah bentuk default minimum yang diperlukan:

```
{
    ...
    "secret": {
        "name": "secretName"
    },

}
```

## Mereferensikan rahasia dalam alur kerja
<a name="comp-reference-secrets-bp"></a>

Contoh cetak biru berikut menciptakan rahasia dan alur kerja yang mereferensikan nilai rahasia. Untuk informasi selengkapnya, lihat [Mereferensikan rahasia dalam alur kerja](workflows-secrets.using.md#workflows-using-secrets.using-identifier).

```
export interface Options extends ParentOptions {
    ...
/**
*
* @validationRegex /^\w+$/
*/
  username: string;


  password: SecretDefinition;
}


export class Blueprint extends ParentBlueprint {
  constructor(options_: Options) {
    const password = new Secret(this, options_.password);

    const workflowBuilder = new WorkflowBuilder(this, {
      Name: 'my_workflow',
    });


    workflowBuilder.addBuildAction({
      actionName: 'download_files',
      input: {
        Sources: ['WorkflowSource'],
      },
      output: {
        Artifacts: [{ Name: 'download', Files: ['file1'] }],
      },
      steps: [
        `curl -u ${options_.username}:${password.reference} https://example.com`,
      ],
    });

    new Workflow(
      this,
      repo,
      workflowBuilder.getDefinition(),
    );

}
```

Untuk mempelajari lebih lanjut tentang menggunakan rahasia di CodeCatalyst, lihat[Menyembunyikan data menggunakan rahasia](workflows-secrets.md).

# Menambahkan komponen wilayah ke cetak biru
<a name="region-comp-bp"></a>

Jenis wilayah dapat ditambahkan ke `Options` antarmuka cetak biru khusus Anda untuk menghasilkan komponen dalam panduan cetak biru, Anda dapat memasukkan satu atau beberapa gion AWS. Jenis gion dapat diimpor dari cetak biru dasar Anda di file Anda. `blueprint.ts` Untuk informasi selengkapnya, lihat [wilayah AWS](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/).

**Untuk mengimpor jenis CodeCatalyst wilayah cetak biru Amazon**

Dalam `blueprint.ts` file Anda, tambahkan yang berikut ini:

```
import { Region } from '@amazon-codecatalyst/blueprints.blueprint'
```

Parameter tipe wilayah adalah larik kode wilayah AWS yang dapat dipilih, atau Anda dapat menggunakannya `*` untuk menyertakan semua wilayah AWS yang didukung.

**Topics**
+ [Anotasi](#region-annotations-bp)
+ [Contoh komponen wilayah](#region-components-examples)

## Anotasi
<a name="region-annotations-bp"></a>

JSDoc tag dapat ditambahkan ke setiap bidang di `Options` antarmuka untuk menyesuaikan bagaimana bidang muncul dan berperilaku di wizard. Untuk jenis wilayah, tag berikut didukung:
+ `@displayName`Anotasi dapat digunakan untuk mengubah label bidang di wizard.

  Contoh: `@displayName AWS Region`
+ `@placeholder`Anotasi dapat digunakan untuk mengubah placeholder komponen select/multiselect.

  Contoh: `@placeholder Choose AWS Region`

## Contoh komponen wilayah
<a name="region-components-examples"></a>

### Memilih wilayah dari daftar tertentu
<a name="region-specified-list-bp"></a>

```
export interface Options extends ParentOptions {
    ...
  /**
   * @displayName Region
   */
  region: Region<['us-east-1', 'us-east-2', 'us-west-1', 'us-west-2']>;
}
```

### Memilih satu atau beberapa wilayah dari daftar tertentu
<a name="region-specified-list-bp"></a>

```
export interface Options extends ParentOptions {
    ...
  /**
   * @displayName Regions
   */
  multiRegion: Region<['us-east-1', 'us-east-2', 'us-west-1', 'us-west-2']>[];
}
```

### Memilih satu egion AWS
<a name="region-one-bp"></a>

```
export interface Options extends ParentOptions {
    ...
  /**
   * @displayName Region
   */
  region: Region<['*']>;
}
```

### Memilih satu atau beberapa wilayah dari daftar tertentu
<a name="region-specified-list-bp"></a>

```
export interface Options extends ParentOptions {
    ...
  /**
   * @displayName Regions
   */
  multiRegion: Region<['us-east-1', 'us-east-2', 'us-west-1', 'us-west-2']>[];
}
```

# Menambahkan komponen repositori dan kode sumber ke cetak biru
<a name="comp-repo-source-bp"></a>

Repositori digunakan oleh Amazon CodeCatalyst untuk menyimpan kode. Repositori mengambil nama sebagai input. Sebagian besar komponen disimpan dalam repositori, seperti file kode sumber, alur kerja, dan komponen lain seperti lingkungan pengembangan terkelola (MDE). Komponen repositori sumber juga mengekspor komponen yang digunakan untuk mengelola file dan aset statis. Repositori memiliki batasan nama. Untuk informasi selengkapnya, lihat [Simpan dan berkolaborasi pada kode dengan repositori sumber di CodeCatalystSimpan dan berkolaborasi pada kode dengan repositori sumber](source.md).

```
const repository = new SourceRepository(this, {
  title: 'my-new-repository-title',
});
```

**Untuk mengimpor repositori CodeCatalyst cetak biru Amazon dan komponen kode sumber**

Dalam `blueprint.ts` file Anda, tambahkan yang berikut ini:

```
import {...} from '@caws-blueprint-component/caws-source-repositories'
```

**Topics**
+ [Menambahkan file](#repo-add-file-bp)
+ [Menambahkan file generik](#repo-add-generic-file-bp)
+ [Menyalin file](#repo-copy-file-bp)
+ [Menargetkan banyak file](#target-multiple-files-bp)
+ [Membuat repositori baru dan menambahkan file](#repo-code-examples-bp)

## Menambahkan file
<a name="repo-add-file-bp"></a>

Anda dapat menulis file teks ke repositori dengan konstruksinya. `SourceFile` Operasi adalah salah satu kasus penggunaan yang paling umum dan mengambil repositori, jalur file, dan konten teks. Jika jalur file tidak ada dalam repositori, komponen akan membuat semua folder yang diperlukan.

```
new SourceFile(repository, `path/to/my/file/in/repo/file.txt`, 'my file contents');
```

**catatan**  
Jika Anda menulis dua file ke lokasi yang sama dalam repositori yang sama, implementasi terbaru menimpa yang sebelumnya. Anda dapat menggunakan fitur ini untuk melapisi kode yang dihasilkan, dan ini sangat berguna untuk memperluas kode yang mungkin dihasilkan oleh cetak biru khusus.

## Menambahkan file generik
<a name="repo-add-generic-file-bp"></a>

Anda dapat menulis bit arbitrer ke repositori Anda. Anda dapat membaca dari buffer dan menggunakan `File` konstruksinya.

```
new File(repository, `path/to/my/file/in/repo/file.img`, new Buffer(...));

new File(repository, `path/to/my/file/in/repo/new-img.img`, new StaticAsset('path/to/image.png').content());
```

## Menyalin file
<a name="repo-copy-file-bp"></a>

Anda dapat memulai dengan kode yang dihasilkan dengan menyalin dan menempelkan kode awal dan kemudian menghasilkan lebih banyak kode di atas basis itu. Tempatkan kode di dalam `static-assets` direktori, dan kemudian targetkan kode itu dengan `StaticAsset` konstruksinya. Jalur dalam hal ini selalu dimulai di root `static-assets` direktori.

```
const starterCode = new StaticAsset('path/to/file/file.txt')
const starterCodeText = new StaticAsset('path/to/file/file.txt').toString()
const starterCodeRawContent = new StaticAsset('path/to/image/hello.png').content()

const starterCodePath = new StaticAsset('path/to/image/hello.png').path()
// starterCodePath is equal to 'path/to/image/hello.png'
```

Sebuah subkelas dari `StaticAsset` adalah`SubstitutionAsset`. Fungsi subclass persis sama, tetapi sebagai gantinya Anda dapat menjalankan substitusi kumis di atas file sebagai gantinya. Ini dapat berguna untuk melakukan generasi copy-and-replace gaya.

Substitusi aset statis menggunakan mesin template kumis untuk merender file statis yang disematkan ke dalam repositori sumber yang dihasilkan. Aturan template kumis diterapkan selama rendering, yang berarti bahwa semua nilai dikodekan HTML secara default. Untuk merender HTML unescaped, gunakan sintaks triple mustache. `{{{name}}}` Untuk informasi lebih lanjut, lihat aturan [template kumis](https://github.com/janl/mustache.js?tab=readme-ov-file#variables).

**catatan**  
Menjalankan pengganti di atas file yang tidak dapat ditafsirkan teks dapat menghasilkan kesalahan.

```
const starterCodeText = new SubstitionAsset('path/to/file/file.txt').subsitite({
  'my_variable': 'subbed value1',
  'another_variable': 'subbed value2'
})
```

## Menargetkan banyak file
<a name="target-multiple-files-bp"></a>

Aset statis mendukung penargetan glob melalui fungsi statis `StaticAsset` aktif dan subkelasnya yang dipanggil`findAll(...)`, yang mengembalikan daftar aset statis yang dimuat sebelumnya dengan jalur, konten, dan lainnya. Anda dapat menghubungkan daftar dengan `File` konstruksi untuk menyalin dan menempelkan konten di `static-assets` direktori.

```
new File(repository, `path/to/my/file/in/repo/file.img`, new Buffer(...));

new File(repository, `path/to/my/file/in/repo/new-img.img`, new StaticAsset('path/to/image.png').content());
```

## Membuat repositori baru dan menambahkan file
<a name="repo-code-examples-bp"></a>

Anda dapat menggunakan komponen repositori untuk membuat repositori baru dalam proyek yang dihasilkan. Anda kemudian dapat menambahkan file atau alur kerja ke repositori yang dibuat.

```
import { SourceRepository } from '@amazon-codecatalyst/codecatalyst-source-repositories';
...
const repository = new SourceRepository(this, { title: 'myRepo' });
```

Contoh berikut menunjukkan cara menambahkan file dan alur kerja ke repositori yang ada:

```
import { SourceFile } from '@amazon-codecatalyst/codecatalyst-source-repositories';
import { Workflow } from '@amazon-codecatalyst/codecatalyst-workflows';
...
new SourceFile(repository, 'README.md', 'This is the content of my readme');
new Workflow(this, repository, {/**...workflowDefinition...**/});
```

Menggabungkan dua potongan kode menghasilkan satu repositori bernama `myRepo` dengan file sumber `README.md` dan CodeCatalyst alur kerja di root.

# Menambahkan komponen alur kerja ke cetak biru
<a name="comp-workflow-bp"></a>

Alur kerja digunakan oleh CodeCatalyst proyek Amazon untuk menjalankan tindakan berdasarkan pemicu. Anda dapat menggunakan komponen alur kerja untuk membangun dan menyusun file YAMAL alur kerja. Untuk informasi selengkapnya, lihat [Alur kerja definisi YAMAL](workflow-reference.md).

**Untuk mengimpor komponen alur CodeCatalyst kerja cetak biru Amazon**

Dalam `blueprint.ts` file Anda, tambahkan yang berikut ini:

```
import { WorkflowBuilder, Workflow } from '@amazon-codecatalyst/codecatalyst-workflows'
```

**Topics**
+ [Contoh komponen alur kerja](#comp-workflows-examples-bp)
+ [Menghubungkan ke lingkungan](#comp-workflows-connect-env-bp)

## Contoh komponen alur kerja
<a name="comp-workflows-examples-bp"></a>

### WorkflowBuilder komponen
<a name="comp-workflows-workflowbuilder-bp"></a>

Anda dapat menggunakan kelas untuk membangun definisi alur kerja. Definisi dapat diberikan ke komponen alur kerja untuk rendering dalam repositori.

```
import { WorkflowBuilder } from '@amazon-codecatalyst/codecatalyst-workflows'

const workflowBuilder = new WorkflowBuilder({} as Blueprint, {
  Name: 'my_workflow',
});

// trigger the workflow on pushes to branch 'main'
workflowBuilder.addBranchTrigger(['main']);

// add a build action
workflowBuilder.addBuildAction({
  // give the action a name
  actionName: 'build_and_do_some_other_stuff',

  // the action pulls from source code
  input: {
    Sources: ['WorkflowSource'],
  },

  // the output attempts to autodiscover test reports, but not in the node modules
  output: {
    AutoDiscoverReports: {
      Enabled: true,
      ReportNamePrefix: AutoDiscovered,
      IncludePaths: ['**/*'],
      ExcludePaths: ['*/node_modules/**/*'],
    },
  },
  // execute some arbitrary steps
  steps: [
    'npm install',
    'npm run myscript',
    'echo hello-world',
  ],
  // add an account connection to the workflow
  environment: convertToWorkflowEnvironment(myEnv),
});
```

### Komponen Proyek Alur Kerja
<a name="comp-workflows-projen-bp"></a>

Contoh berikut menunjukkan bagaimana komponen Projen dapat digunakan untuk menulis alur kerja YAMAL ke repositori:

```
import { Workflow } from '@amazon-codecatalyst/codecatalyst-workflows'

...

const repo = new SourceRepository
const blueprint = this;
const workflowDef = workflowBuilder.getDefinition()

// creates a workflow.yaml at .aws/workflows/${workflowDef.name}.yaml
new Workflow(blueprint, repo, workflowDef);

// can also pass in any object and have it rendered as a yaml. This is unsafe and may not produce a valid workflow
new Workflow(blueprint, repo, {... some object ...});
```

## Menghubungkan ke lingkungan
<a name="comp-workflows-connect-env-bp"></a>

Banyak alur kerja perlu dijalankan dalam koneksi akun AWS. Alur kerja menangani ini dengan mengizinkan tindakan untuk terhubung ke lingkungan dengan spesifikasi akun dan nama peran.

```
import { convertToWorkflowEnvironment } from '@amazon-codecatalyst/codecatalyst-workflows'


const myEnv = new Environment(...);

// can be passed into a workflow constructor
const workflowEnvironment = convertToWorkflowEnvironment(myEnv);


// add a build action
workflowBuilder.addBuildAction({
  ...
  // add an account connection to the workflow
  environment: convertToWorkflowEnvironment(myEnv),
});
```

# Menambahkan komponen Dev Environments ke cetak biru
<a name="comp-dev-env-bp"></a>

Lingkungan pengembangan terkelola (MDE) digunakan untuk membuat dan mempertahankan Ruang Kerja MDE di. CodeCatalyst Komponen menghasilkan `devfile.yaml` file. Untuk informasi lebih lanjut, lihat [Pengantar Devfile](https://redhat-developer.github.io/devfile/) dan[Mengedit devfile repositori untuk Lingkungan Dev](devenvironment-devfile-moving.md).

```
new Workspace(this, repository, SampleWorkspaces.default);
```

**Untuk mengimpor komponen ruang CodeCatalyst kerja cetak biru Amazon**

Dalam `blueprint.ts` file Anda, tambahkan yang berikut ini:

```
import {...} from '@amazon-codecatalyst/codecatalyst-workspaces'
```

# Menambahkan komponen masalah ke cetak biru
<a name="comp-issues-bp"></a>

Di CodeCatalyst, Anda dapat memantau fitur, tugas, bug, dan pekerjaan lain yang terlibat dalam proyek Anda. Setiap karya disimpan dalam catatan yang berbeda yang disebut masalah. Setiap masalah dapat memiliki deskripsi, penerima tugas, status, dan properti lainnya, yang dapat Anda cari, kelompokkan, dan filter. Anda dapat melihat masalah menggunakan tampilan default, atau Anda dapat membuat tampilan sendiri dengan pemfilteran, pengurutan, atau pengelompokan kustom. Untuk informasi lebih lanjut tentang konsep yang terkait dengan masalah, lihat [Konsep masalah](issues-concepts.md) dan[Kuota untuk masalah di CodeCatalyst](issues-quotas.md).

Komponen masalah menghasilkan representasi JSON dari suatu masalah. Komponen mengambil bidang ID dan definisi masalah sebagai input.

**Untuk mengimpor komponen CodeCatalyst cetak biru Amazon**

Dalam `blueprint.ts` file Anda, tambahkan yang berikut ini:

```
import {...} from '@amazon-codecatalyst/blueprint-component.issues'
```

**Topics**
+ [Contoh komponen masalah](#comp-issues-examples-bp)

## Contoh komponen masalah
<a name="comp-issues-examples-bp"></a>

### Membuat masalah
<a name="comp-issues-create-bp"></a>

```
import { Issue } from '@amazon-codecatalyst/blueprint-component.issues';
...
new Issue(this, 'myFirstIssue', {
  title: 'myFirstIssue',
  content: 'This is an example issue.',
});
```

### Membuat masalah prioritas tinggi
<a name="comp-issues-high-priority-bp"></a>

```
import { Workflow } from '@amazon-codecatalyst/codecatalyst-workflows'
...
const repo = new SourceRepository
const blueprint = this;
const workflowDef = workflowBuilder.getDefinition()

// Creates a workflow.yaml at .aws/workflows/${workflowDef.name}.yaml
new Workflow(blueprint, repo, workflowDef);

// Can also pass in any object and have it rendered as a yaml. This is unsafe and may not produce a valid workflow
new Workflow(blueprint, repo, {... some object ...});
```

### Membuat masalah prioritas rendah dengan label
<a name="comp-issues-low-priority-bp"></a>

```
import { Issue } from '@amazon-codecatalyst/blueprint-component.issues';
...
new Issue(this, 'myThirdIssue', {
  title: 'myThirdIssue',
  content: 'This is an example of a low priority issue with a label.',
  priority: 'LOW',
  labels: ['exampleLabel'],
});
```

# Bekerja dengan perkakas cetak biru dan CLI
<a name="bp-cli"></a>

[CLI cetak biru](https://www.npmjs.com/package/@amazon-codecatalyst/blueprint-util.cli) menyediakan perkakas untuk mengelola dan bekerja dengan cetak biru khusus Anda.

**Topics**
+ [Bekerja dengan perkakas cetak biru](#working-with-bp-cli)
+ [Alat unggah gambar](#image-upload-tool)

## Bekerja dengan perkakas cetak biru
<a name="working-with-bp-cli"></a>

**Untuk bekerja dengan alat cetak biru**

1. Buka CodeCatalyst konsol di [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Lanjutkan Lingkungan Pengembang Anda. Untuk informasi selengkapnya, lihat [Melanjutkan Lingkungan Pengembang](devenvironment-resume.md).

   Jika Anda tidak memiliki Lingkungan Pengembang, Anda harus membuatnya terlebih dahulu. Untuk informasi selengkapnya, lihat [Membuat Lingkungan Pengembangan](devenvironment-create.md).

1. Di terminal yang berfungsi, jalankan perintah berikut untuk menginstal CLI cetak biru:

   ```
   npm install -g @amazon-codecatalyst/blueprint-util.cli
   ```

1. Dalam `blueprint.ts` file, impor alat yang ingin Anda gunakan dalam format berikut:

   ```
   import { <tooling-function-name> } from '@amazon-codecatalyst/blueprint-util.cli/lib/<tooling-folder-name>/<tooling-file-name>;
   ```
**Tip**  
Anda dapat ke [https://github.com/aws/codecatalyst-blueprints/tree/main/packages/utils/blueprint-cli](https://github.com/aws/codecatalyst-blueprints/tree/main/packages/utils/blueprint-cli)untuk menemukan nama perkakas yang ingin Anda gunakan.

   **Jika Anda ingin menggunakan alat pengunggahan gambar, tambahkan yang berikut ini ke skrip Anda:**

   ```
   import { uploadImagePublicly } from '@amazon-codecatalyst/blueprint-util.cli/lib/image-upload-tool/upload-image-to-aws';
   ```

   **Contoh**
   + **Jika Anda ingin menggunakan fungsi penerbitan, tambahkan yang berikut ini ke skrip Anda:**

     ```
     import { publish } from '@amazon-codecatalyst/blueprint-util.cli/lib/publish/publish';
     ```
   + **Jika Anda ingin menggunakan alat pengunggahan gambar, tambahkan yang berikut ini ke skrip Anda:**

     ```
     import { uploadImagePublicly } from '@amazon-codecatalyst/blueprint-util.cli/lib/image-upload-tool/upload-image-to-aws';
     ```

1. Panggil fungsinya.

   **Contoh:**
   + **Jika Anda ingin menggunakan fungsi penerbitan, tambahkan yang berikut ini ke skrip Anda:**

     ```
     await publish(logger, config.publishEndpoint, {<your publishing options>});
     ```
   + **Jika Anda ingin menggunakan alat pengunggahan gambar, tambahkan yang berikut ini ke skrip Anda:**

     ```
     const {imageUrl, imageName} = await uploadImagePublicly(logger, 'path/to/image'));
     ```

## Alat unggah gambar
<a name="image-upload-tool"></a>

Alat unggah gambar memberi Anda kemampuan untuk mengunggah gambar Anda sendiri ke bucket S3 di akun AWS Anda dan kemudian mendistribusikan gambar itu secara publik di belakang. CloudFront Alat ini mengambil jalur gambar di penyimpanan lokal (dan nama bucket opsional) sebagai input, dan mengembalikan URL ke gambar yang tersedia untuk umum. Untuk informasi lebih lanjut, lihat [Apa itu Amazon CloudFront?](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) dan [Apa itu Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)

**Untuk bekerja dengan alat unggah gambar**

1. Kloning [ GitHub repositori cetak biru sumber terbuka yang menyediakan akses ke SDK](https://github.com/aws/codecatalyst-blueprints) cetak biru dan cetak biru sampel. Di terminal yang berfungsi, jalankan perintah berikut:

   ```
   git clone https://github.com/aws/codecatalyst-blueprints.git
   ```

1. Jalankan perintah berikut untuk menavigasi ke repositori cetak biru GitHub :

   ```
   cd codecatalyst-blueprints
   ```

1. Jalankan perintah berikut untuk menginstal dependensi:

   ```
   yarn && yarn build
   ```

1. Jalankan perintah berikut untuk memastikan versi CLI cetak biru terbaru diinstal:

   ```
   yarn upgrade @amazon-codecatalyst/blueprint-util.cli
   ```

1. Masuk ke akun AWS dengan bucket S3 tempat Anda ingin mengunggah gambar Anda. Untuk informasi selengkapnya, lihat [Mengonfigurasi AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html), dan [Masuk melalui AWS Command Line Interface](https://docs.aws.amazon.com/signin/latest/userguide/command-line-sign-in.html).

1. Jalankan perintah berikut dari root CodeCatalyst repositori Anda untuk menavigasi ke direktori dengan CLI cetak biru:

   ```
   cd packages/utils/blueprint-cli
   ```

1. Jalankan perintah berikut untuk mengunggah gambar Anda ke bucket S3:

   ```
   yarn blueprint upload-image-public <./path/to/your/image> 
         <optional:optional-bucket-name>
   ```

URL ke gambar Anda dihasilkan. URL tidak akan segera tersedia karena memerlukan waktu untuk CloudFront distribusi diterapkan. Periksa status distribusi untuk mendapatkan status penerapan terbaru. Untuk informasi selengkapnya, lihat [Bekerja dengan distribusi.](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)

# Menilai perubahan antarmuka dengan pengujian snapshot
<a name="testing-bp"></a>

Pengujian snapshot yang dihasilkan di beberapa konfigurasi cetak biru Anda didukung.

Blueprints mendukung [pengujian snapshot](https://jestjs.io/docs/snapshot-testing) pada konfigurasi yang disediakan oleh Anda sebagai penulis cetak biru. Konfigurasi adalah penggantian sebagian yang digabungkan di atas file defaults.json di root cetak biru. Saat pengujian snapshot diaktifkan dan dikonfigurasi, proses pembuatan dan pengujian mensintesis konfigurasi yang diberikan dan memverifikasi bahwa output yang disintesis tidak berubah dari snapshot referensi. Untuk melihat kode pengujian snapshot, lihat repositori [CodeCatalyst cetak biru GitHub ](https://github.com/aws/codecatalyst-blueprints/blob/main/packages/utils/projen-blueprint/src/test-snapshot.ts#L12).

**Untuk mengaktifkan pengujian snapshot**

1. Dalam `.projenrc.ts` file, perbarui objek input ProjenBlueprint dengan file yang ingin Anda snapshot. Sebagai contoh:

   ```
   {
     ....
     blueprintSnapshotConfiguration: {
       snapshotGlobs: ['**', '!environments/**', '!aws-account-to-environment/**'],
     },
   }
   ```

1. Sintesis ulang cetak biru untuk membuat TypeScript file dalam proyek cetak biru Anda. Jangan mengedit file sumber karena mereka dipelihara dan dibuat ulang oleh Projen. Gunakan perintah berikut ini.

   ```
   yarn projen
   ```

1. Arahkan ke `src/snapshot-configurations` direktori untuk melihat `default-config.json` file dengan objek kosong. Perbarui atau ganti file dengan satu atau lebih konfigurasi pengujian Anda sendiri. Setiap konfigurasi pengujian kemudian digabungkan dengan `defaults.json` file proyek, disintesis, dan dibandingkan dengan snapshot saat pengujian. Gunakan perintah berikut untuk menguji:

   ```
   yarn test
   ```

   Pertama kali Anda menggunakan perintah uji, pesan berikut ditampilkan:`Snapshot Summary › NN snapshots written from 1 test suite`. Pengujian berikutnya akan memverifikasi bahwa output yang disintesis tidak berubah dari snapshot dan menampilkan pesan berikut: `Snapshots: NN passed, NN total`

   Jika Anda sengaja mengubah cetak biru Anda untuk menghasilkan output yang berbeda, maka jalankan perintah berikut untuk memperbarui snapshot referensi:

   ```
   yarn test:update
   ```

Snapshot mengharapkan output yang disintesis konstan di antara setiap proses. Jika cetak biru Anda menghasilkan file yang bervariasi, Anda harus mengecualikan file tersebut dari pengujian snapshot. Perbarui `blueprintSnapshotConfiguration` objek objek `ProjenBluerpint` masukan Anda untuk menambahkan `snapshotGlobs` properti. `snapshotGlobs`Properti adalah array [gumpalan](https://github.com/isaacs/node-glob#glob-primer) yang menentukan file mana yang disertakan atau dikecualikan dari snapshotting.

**catatan**  
Ada daftar default gumpalan. Jika Anda menentukan daftar Anda sendiri, Anda mungkin perlu secara eksplisit mengembalikan entri default.