

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

# Menyediakan produk Terraform AWS Service Catalog dengan menggunakan repositori kode
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository"></a>

*Dr. Rahul Sharad Gaikwad dan Tamilselvan P, Amazon Web Services*

## Ringkasan
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-summary"></a>

AWS Service Catalog [mendukung penyediaan layanan mandiri dengan tata kelola untuk konfigurasi Terraform Anda. HashiCorp ](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) Jika Anda menggunakan Terraform, Anda dapat menggunakan Service Catalog sebagai alat tunggal untuk mengatur, mengatur, dan mendistribusikan konfigurasi Terraform Anda dalam skala besar. AWS Anda dapat mengakses fitur utama Service Catalog, termasuk membuat katalog templat infrastruktur standar dan pra-persetujuan sebagai kode (IAc), kontrol akses, penyediaan sumber daya cloud dengan akses hak istimewa paling sedikit, pembuatan versi, berbagi hingga ribuan, dan penandaan. Akun AWS Pengguna akhir, seperti insinyur, administrator database, dan ilmuwan data, melihat daftar produk dan versi yang dapat mereka akses, dan mereka dapat menerapkannya melalui satu tindakan.

Pola ini membantu Anda menerapkan AWS sumber daya dengan menggunakan kode Terraform. Kode Terraform di GitHub repositori diakses melalui Service Catalog. Dengan menggunakan pendekatan ini, Anda mengintegrasikan produk dengan alur kerja Terraform yang ada. Administrator dapat membuat portofolio Service Catalog dan menambahkan AWS Launch Wizard produk ke dalamnya dengan menggunakan Terraform.

Berikut ini adalah manfaat dari solusi ini:
+ Karena fitur rollback di Service Catalog, jika terjadi masalah selama penerapan, Anda dapat mengembalikan produk ke versi sebelumnya.
+ Anda dapat dengan mudah mengidentifikasi perbedaan antara versi produk. Ini membantu Anda menyelesaikan masalah selama penerapan.
+ Anda dapat mengonfigurasi koneksi repositori di Service Catalog, seperti ke GitHub atau. GitLab Anda dapat membuat perubahan produk secara langsung melalui repositori.

Untuk informasi tentang manfaat keseluruhan AWS Service Catalog, lihat [Apa itu Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html).

## Prasyarat dan batasan
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ A GitHub, BitBucket, atau repositori lain yang berisi file konfigurasi Terraform dalam format ZIP.
+ AWS Serverless Application Model [Antarmuka Baris Perintah (AWS SAM CLI), diinstal.](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)
+ AWS Command Line Interface (AWS CLI), [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan [dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ Pergi, [diinstal](https://go.dev/doc/install).
+ [Python versi 3.9, diinstal.](https://www.python.org/downloads/release/python-3913/) AWS SAM CLI membutuhkan versi Python ini.
+ Izin untuk menulis dan menjalankan AWS Lambda fungsi dan izin untuk mengakses dan mengelola produk dan portofolio Service Catalog.

## Arsitektur
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-architecture"></a>

![\[Diagram arsitektur penyediaan produk Terraform di Service Catalog dari repo kode\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)


Diagram menunjukkan alur kerja berikut:

1. Saat konfigurasi Terraform siap, pengembang membuat file.zip yang berisi semua kode Terraform. Pengembang mengunggah file.zip ke dalam repositori kode yang terhubung ke Service Catalog.

1. Administrator mengaitkan produk Terraform ke portofolio di Service Catalog. Administrator juga membuat batasan peluncuran yang memungkinkan pengguna akhir untuk menyediakan produk.

1. Di Service Catalog, pengguna akhir meluncurkan AWS resource dengan menggunakan konfigurasi Terraform. Mereka dapat memilih versi produk mana yang akan digunakan.

## Alat
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-tools"></a>

**Layanan AWS**
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)membantu Anda mengelola katalog layanan TI secara terpusat yang disetujui. AWS Pengguna akhir dapat dengan cepat men-deploy hanya layanan IT yang disetujui yang mereka butuhkan, mengikuti batasan yang ditetapkan oleh organisasi Anda.

**Layanan lainnya**
+ [Go](https://go.dev/doc/install) adalah bahasa pemrograman open source yang didukung Google.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

[Jika Anda memerlukan contoh konfigurasi Terraform yang dapat Anda terapkan melalui Service Catalog, Anda dapat menggunakan konfigurasi di Amazon Macie GitHub Organization Setup Menggunakan repositori Terraform.](https://github.com/aws-samples/aws-macie-customization-terraform-samples) Penggunaan sampel kode dalam repositori ini tidak diperlukan.

## Praktik terbaik
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-best-practices"></a>
+ Alih-alih memberikan nilai untuk variabel dalam file konfigurasi Terraform (`terraform.tfvars`), konfigurasikan nilai variabel saat meluncurkan produk melalui Service Catalog.
+ Berikan akses ke portofolio hanya untuk pengguna atau administrator tertentu.
+ Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Memberikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) dalam dokumentasi AWS Identity and Access Management (IAM).

## Epik
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-epics"></a>

### Siapkan workstation lokal Anda
<a name="set-up-your-local-workstation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| (Opsional) Instal Docker. | Jika Anda ingin menjalankan AWS Lambda fungsi di lingkungan pengembangan Anda, instal Docker. Untuk petunjuk, lihat [Menginstal Docker Engine](https://docs.docker.com/engine/install/) di dokumentasi Docker. | DevOps insinyur | 
| Instal AWS Service Catalog Mesin untuk Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps insinyur, administrator AWS | 

### Connect GitHub repositori
<a name="connect-the-github-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat koneksi ke GitHub repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 

### Buat produk Terraform di Service Catalog
<a name="create-a-terraform-product-in-service-catalog"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat produk Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 
| Buat portofolio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 
| Tambahkan produk Terraform ke portofolio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 
| Buat kebijakan akses. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 
| Buat kebijakan kepercayaan khusus. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 
| Tambahkan batasan peluncuran ke produk Service Catalog. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 
| Berikan akses ke produk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 
| Luncurkan produk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps insinyur | 

### Verifikasi penyebaran
<a name="verify-the-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi penerapan. | Ada dua mesin AWS Step Functions status untuk alur kerja penyediaan Service Catalog:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html)Anda memeriksa log untuk mesin `ManageProvisionedProductStateMachine` status untuk mengonfirmasi bahwa produk telah disediakan.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps insinyur | 

### Membersihkan infrastruktur
<a name="clean-up-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus produk yang disediakan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps insinyur | 
| Lepaskan AWS Service Catalog Mesin untuk Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | Administrator AWS | 

## Sumber daya terkait
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-resources"></a>

**AWS dokumentasi**
+ [Memulai dengan produk Terraform](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Dokumentasi Terraform**
+ [Instalasi Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Konfigurasi backend Terraform](https://developer.hashicorp.com/terraform/language/backend)
+ [Dokumentasi Penyedia Terraform AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Informasi tambahan
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-additional"></a>

**Kebijakan akses**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/servicecatalog:provisioning": "true"
                }
            }
        },
        {
            "Action": [
                "s3:CreateBucket*",
                "s3:DeleteBucket*",
                "s3:Get*",
                "s3:List*",
                "s3:PutBucketTagging"
            ],
            "Resource": "arn:aws:s3:::*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "resource-groups:CreateGroup",
                "resource-groups:ListGroupResources",
                "resource-groups:DeleteGroup",
                "resource-groups:Tag"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "tag:TagResources",
                "tag:UntagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

**Kebijakan kepercayaan**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GivePermissionsToServiceCatalog",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::account_id:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*",
                        "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*",
                        "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*"
                    ]
                }
            }
        }
    ]
}
```