

Ini adalah *Panduan Referensi CloudFormation Template* baru. Harap perbarui bookmark dan tautan Anda. Untuk bantuan memulai CloudFormation, lihat [Panduan AWS CloudFormation Pengguna](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

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

# `AWS::CloudFormation::Init`
<a name="aws-resource-init"></a>

Gunakan `AWS::CloudFormation::Init` tipe untuk menyertakan metadata pada EC2 instance Amazon untuk skrip `cfn-init` helper. Jika template Anda memanggil `cfn-init` skrip, skrip mencari metadata sumber daya yang berakar pada kunci metadata. `AWS::CloudFormation::Init` Untuk informasi selengkapnya, lihat [cfn-init](cfn-init.md).

`cfn-init`mendukung semua jenis metadata untuk sistem Linux. Mendukung jenis metadata untuk Windows dengan kondisi yang dijelaskan di bagian yang mengikuti.

## Sintaksis
<a name="aws-resource-cloudformation-init-syntax"></a>

Konfigurasi dipisahkan menjadi beberapa bagian. Cuplikan template berikut menunjukkan bagaimana Anda dapat melampirkan metadata `cfn-init` ke sumber daya EC2 instance dalam template.

Metadata diatur ke dalam kunci konfigurasi, yang dapat Anda kelompokkan ke dalam set konfigurasi. Anda dapat menentukan configset saat memanggil template `cfn-init` Anda. Jika Anda tidak menentukan configset, cari `cfn-init` satu kunci konfigurasi bernama. `config`

**catatan**  
Skrip `cfn-init` pembantu memproses bagian konfigurasi ini dalam urutan berikut: paket, grup, pengguna, sumber, file, perintah, dan kemudian layanan. Jika Anda memerlukan urutan yang berbeda, pisahkan bagian Anda ke kunci konfigurasi yang berbeda, dan kemudian gunakan configset yang menentukan urutan di mana kunci konfigurasi harus diproses.

### JSON
<a name="aws-resource-cloudformation-init-syntax.json"></a>

```
"Resources": {
  "MyInstance": {
    "Type": "AWS::EC2::Instance",
    "Metadata" : {
      "AWS::CloudFormation::Init" : {
        "config" : {
          "packages" : {
            :
          },
          "groups" : {
            :
          },
          "users" : {
            :
          },
          "sources" : {
            :
          },
          "files" : {
            :
          },
          "commands" : {
            :
          },
          "services" : {
            :
          }
        }
      }
    },
    "Properties": {
      :
    }
  }
}
```

### YAML
<a name="aws-resource-cloudformation-init-syntax.yaml"></a>

```
Resources: 
  MyInstance: 
    Type: AWS::EC2::Instance
    Metadata: 
      AWS::CloudFormation::Init: 
        config: 
          packages: 
            :
          groups: 
            :
          users: 
            :
          sources: 
            :
          files: 
            :
          commands: 
            :
          services: 
            :
    Properties: 
      :
```

**catatan**  
Bagian berikut berisi contoh skrip yang ditulis dalam bahasa skrip shell mirip Unix, seperti Bash. Untuk membuat skrip PowerShell sebagai gantinya, pastikan Anda terbiasa dengan PowerShell bahasa tersebut. PowerShell sintaks berbeda dari shell mirip Unix, jadi Anda harus memiliki keakraban dengan PowerShell cara melakukan sesuatu.

## Set konfigurasi
<a name="aws-resource-init-configsets"></a>

Jika Anda ingin membuat lebih dari satu kunci konfigurasi dan `cfn-init` memprosesnya dalam urutan tertentu, buat configset yang berisi kunci konfigurasi dalam urutan yang diinginkan.

### Konfigurasi set tunggal
<a name="w2aac19c23c19c11b5"></a>

Potongan templat berikut membuat set konfigurasi bernama `ascending` dan `descending` bahwa masing-masing berisi dua kunci konfigurasi.

#### JSON
<a name="aws-resource-cloudformation-init-configset-example1.json"></a>

```
"AWS::CloudFormation::Init" : {
    "configSets" : {
        "ascending" : [ "config1" , "config2" ],
        "descending" : [ "config2" , "config1" ]
    },
    "config1" : {
        "commands" : {
            "test" : {
                "command" : "echo \"$CFNTEST\" > test.txt",
                "env" : { "CFNTEST" : "I come from config1." },
                "cwd" : "~"
            }
        }
    },
    "config2" : {
        "commands" : {
            "test" : {
                "command" : "echo \"$CFNTEST\" > test.txt",
                "env" : { "CFNTEST" : "I come from config2" },
                "cwd" : "~"
            }
        }
    }
}
```

#### YAML
<a name="aws-resource-cloudformation-init-configset-example1.yaml"></a>

```
AWS::CloudFormation::Init: 
  configSets: 
    ascending: 
      - "config1"
      - "config2"
    descending: 
      - "config2"
      - "config1"
  config1: 
    commands: 
      test: 
        command: "echo \"$CFNTEST\" > test.txt"
        env: 
          CFNTEST: "I come from config1."
        cwd: "~"
  config2: 
    commands: 
      test: 
        command: "echo \"$CFNTEST\" > test.txt"
        env: 
          CFNTEST: "I come from config2"
        cwd: "~"
```

#### `cfn-init`Panggilan terkait
<a name="w2aac19c23c19c11b5b9"></a>

Contoh berikut memanggil untuk `cfn-init` merujuk ke contoh configsets sebelumnya. Contoh panggilan disingkat untuk kejelasan. Lihat [cfn-init untuk sintaks](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-init.html) lengkapnya.
+ Jika panggilan untuk `cfn-init` menentukan `ascending` configset:

  ```
  cfn-init -c ascending
  ```

  Proses skrip `config1` dan kemudian proses `config2` dan `test.txt` file akan berisi teks`I come from config2`.
+ Jika panggilan untuk `cfn-init` menentukan `descending` configset:

  ```
  cfn-init -c descending
  ```

  Proses skrip `config2` dan kemudian proses `config1` dan `test.txt` file akan berisi teks`I come from config1`.

### Beberapa set konfigurasi
<a name="w2aac19c23c19c11b7"></a>

Anda dapat membuat beberapa configsets, dan memanggil serangkaian konfigurasi menggunakan skrip Anda`cfn-init`. Setiap set konfigurasu dapat berisi daftar kunci konfigurasi atau referensi ke konfigurasi set lainnya. Sebagai contoh, cuplikan templat berikut membuat tiga set konfigurasi. Set konfigurasi pertama, `test1`, berisi satu kunci konfigurasi bernama `1`. Set konfigurasi kedua, `test2`, berisi referensi ke `test1` set konfigurasi dan satu kunci konfigurasi bernama `2`. Konfigurasi set ketiga, default, berisi referensi ke set konfigurasi `test2`.

#### JSON
<a name="aws-resource-cloudformation-init-configset-example2.json"></a>

```
"AWS::CloudFormation::Init" : {
    "configSets" : {
        "test1" : [ "1" ],
        "test2" : [ { "ConfigSet" : "test1" }, "2" ],
        "default" : [ { "ConfigSet" : "test2" } ]
    },
    "1" : {
        "commands" : {
            "test" : {
                "command" : "echo \"$MAGIC\" > test.txt",
                "env" : { "MAGIC" : "I come from the environment!" },
                "cwd" : "~"
            }
        }
    },
    "2" : {
        "commands" : {
            "test" : {
                "command" : "echo \"$MAGIC\" >> test.txt",
                "env" : { "MAGIC" : "I am test 2!" },
                "cwd" : "~"
            }
        }
    }
}
```

#### YAML
<a name="aws-resource-cloudformation-init-configset-example2.yaml"></a>

```
AWS::CloudFormation::Init:
  1:
    commands:
      test:
        command: "echo \"$MAGIC\" > test.txt"
        env:
          MAGIC: "I come from the environment!"
        cwd: "~"
  2:
    commands:
      test:
        command: "echo \"$MAGIC\" >> test.txt"
        env:
          MAGIC: "I am test 2!"
        cwd: "~"
  configSets: 
    test1:
      - "1"
    test2:
      - ConfigSet: "test1"
      - "2"
    default:
      - ConfigSet: "test2"
```

#### `cfn-init`Panggilan terkait
<a name="w2aac19c23c19c11b7b9"></a>

Panggilan berikut untuk `cfn-init` merujuk ke yang `configSets` dideklarasikan dalam cuplikan template sebelumnya. Contoh panggilan disingkat untuk kejelasan. Lihat [cfn-init untuk sintaks](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-init.html) lengkapnya.
+ Jika Anda menentukan `test1` saja:

  ```
  cfn-init -c test1
  ```

  `cfn-init`memproses kunci konfigurasi `1` saja.
+ Jika Anda menentukan `test2` saja:

  ```
  cfn-init -c test2
  ```

  `cfn-init`memproses kunci konfigurasi `1` dan kemudian memproses kunci konfigurasi. `2`
+ Jika Anda menentukan `default` set konfigurasi (atau bukan set konfigurasi sama sekali):

  ```
  cfn-init -c default
  ```

  Anda akan mendapatkan perilaku yang sama yang Anda lakukan jika Anda menentukan set konfigurasi `test2`.

## Commands
<a name="aws-resource-init-commands"></a>

Anda dapat menggunakan tombol perintah untuk menjalankan perintah pada EC2 instance. Perintah dijalankan sebagai dalam urutan abjad berdasarkan nama.


| Key | Diperlukan | Deskripsi | 
| --- | --- | --- | 
| `command` | Diperlukan | Array atau string yang menentukan perintah yang akan dijalankan. Jika Anda menggunakan array, Anda tidak perlu menghindari karakter spasi atau melampirkan parameter perintah pada kutipan. Jangan gunakan array untuk menentukan beberapa perintah. | 
| `env` | Opsional | Atur variabel lingkungan untuk perintah. Properti ini menimpa, alih-alih menambahkan, lingkungan yang ada. | 
| `cwd` | Opsional | Direktori kerja saat ini. | 
| `test` | Opsional | Perintah uji yang menentukan apakah `cfn-init` menjalankan perintah yang ditentukan dalam tombol perintah. Jika tes lulus, `cfn-init` jalankan perintah. `cfn-init`Script menjalankan tes dalam interpreter perintah, seperti Bash atau. `cmd.exe` Apakah tes berlalu tergantung pada kode keluar bahwa interpreter kembali.<br />Untuk Linux, perintah tes harus mengembalikan kode keluar dari `0` agar bisa lulus tes. Untuk Windows, perintah tes harus mengembalikan %ErrorLevel% dari `0`. | 
| `ignoreErrors` | Opsional | Nilai Boolean yang menentukan apakah `cfn-init` terus berjalan jika perintah yang terkandung dalam kunci perintah gagal (mengembalikan nilai bukan nol). Setel ke `true` jika Anda `cfn-init` ingin terus berjalan meskipun perintah gagal. Setel ke `false` jika Anda `cfn-init` ingin berhenti berjalan jika perintah gagal. Nilai default-nya adalah `false`. | 
| `waitAfterCompletion` | Opsional | Untuk sistem Windows saja. Menentukan berapa lama menunggu (dalam detik) setelah perintah selesai dalam hal perintah menyebabkan reboot. Nilai default adalah 60 detik dan nilai “selamanya” mengarahkan `cfn-init` untuk keluar dan melanjutkan hanya setelah reboot selesai. Tetapkan nilai ini ke `0` Jika Anda tidak ingin menunggu setiap perintah. | 

### Contoh
<a name="w2aac19c23c19c13b7"></a>

Contoh cuplikan berikut memanggil perintah echo jika `~/test.txt` file tidak ada.

#### JSON
<a name="aws-resource-init-commands-example.json"></a>

```
"commands" : {
    "test" : {
        "command" : "echo \"$MAGIC\" > test.txt",
        "env" : { "MAGIC" : "I come from the environment!" },
        "cwd" : "~",
        "test" : "test ! -e ~/test.txt",
        "ignoreErrors" : "false"
    },
    "test2" : {
        "command" : "echo \"$MAGIC2\" > test2.txt",
        "env" : { "MAGIC2" : "I come from the environment!" },
        "cwd" : "~",
        "test" : "test ! -e ~/test2.txt",
        "ignoreErrors" : "false"
    }
}
```

#### YAML
<a name="aws-resource-init-commands-example.yaml"></a>

```
commands:
  test:
    command: "echo \"$MAGIC\" > test.txt"
    env:
      MAGIC: "I come from the environment!"
    cwd: "~"
    test: "test ! -e ~/test.txt"
    ignoreErrors: "false"
  test2:
    command: "echo \"$MAGIC2\" > test2.txt"
    env:
      MAGIC2: "I come from the environment!"
    cwd: "~"
    test: "test ! -e ~/test2.txt"
    ignoreErrors: "false"
```

## Berkas
<a name="aws-resource-init-files"></a>

Anda dapat menggunakan `files` kunci untuk membuat file pada EC2 instance. Konten dapat berupa inline dalam templat atau konten dapat ditarik dari URL. File ditulis ke disk dalam urutan leksikografis. Tabel berikut mencantumkan kunci yang didukung.


| Key | Deskripsi | 
| --- | --- | 
| `content` | Baik string maupun objek JSON diformat dengan benar. Jika Anda menggunakan objek JSON sebagai konten Anda, JSON akan ditulis ke file pada disk. Setiap fungsi intrinsik seperti `Fn::GetAtt` atau `Ref` dievaluasi sebelum objek JSON ditulis ke disk. Saat Anda membuat symlink, tentukan target symlink sebagai konten. Jika Anda membuat symlink, skrip pembantu memodifikasi izin dari file target. Saat ini, Anda tidak dapat membuat symlink tanpa mengubah izin dari file target.  | 
| `source` | Sebuah URL untuk memuat file dari. Opsi ini tidak dapat ditentukan dengan kunci konten. | 
| `encoding` | Format pengkodean. Hanya digunakan jika konten adalah string. Pengkodean tidak diterapkan jika Anda menggunakan sumber.<br />Nilai yang valid: `plain` \| `base64` | 
| `group` | Nama grup yang memiliki file ini. Tidak mendukung sistem Windows. | 
| `owner` | Nama pengguna yang memiliki file ini. Tidak mendukung sistem Windows. | 
| `mode` | Nilai oktal enam digit yang mewakili mode untuk file ini. Tidak mendukung sistem Windows. Gunakan tiga digit pertama untuk symlink dan tiga digit terakhir untuk pengaturan izin. Untuk membuat symlink, tentukan **120{{xxx}}**, tempat `xxx` mendefinisikan izin file target. Untuk menentukan izin file, gunakan tiga digit terakhir, seperti **000644**. | 
| `authentication` | Nama metode autentikasi yang akan digunakan. Ini menimpa autentikasi default apapun. Anda dapat menggunakan properti ini untuk memilih metode auentikasi yang Anda tentukan dengan [`AWS::CloudFormation::Authentication`](aws-resource-authentication.md) sumber daya. | 
| `context` | Menentukan konteks untuk file yang akan diproses sebagai [Mustachetemplate](https://mustache.github.io/mustache.5.html). Untuk menggunakan kunci ini, Anda harus menginstal `aws-cfn-bootstrap` 1.3 —11 atau yang lebih baru sebagai tambahan. [https://github.com/defunkt/pystache](https://github.com/defunkt/pystache) | 

### Contoh
<a name="w2aac19c23c19c15b7"></a>

Contoh cuplikan berikut membuat file bernama `setup.mysql` sebagai bagian dari instalasi yang lebih besar.

#### JSON
<a name="aws-resource-init-setup-mysql.json"></a>

```
"files" : {
  "/tmp/setup.mysql" : {
    "content" : { "Fn::Join" : ["", [
      "CREATE DATABASE ", { "Ref" : "DBName" }, ";\n",
      "CREATE USER '", { "Ref" : "DBUsername" }, "'@'localhost' IDENTIFIED BY '",
                       { "Ref" : "DBPassword" }, "';\n",
      "GRANT ALL ON ", { "Ref" : "DBName" }, ".* TO '", { "Ref" : "DBUsername" },
                       "'@'localhost';\n",
      "FLUSH PRIVILEGES;\n"
      ]]},
    "mode"  : "000644",
    "owner" : "root",
    "group" : "root"
  }
}
```

#### YAML
<a name="aws-resource-init-setup-mysql.yaml"></a>

```
files: 
  /tmp/setup.mysql: 
    content: !Sub |
      CREATE DATABASE ${DBName};
      CREATE USER '${DBUsername}'@'localhost' IDENTIFIED BY '${DBPassword}';
      GRANT ALL ON ${DBName}.* TO '${DBUsername}'@'localhost';
      FLUSH PRIVILEGES;
    mode: "000644"
    owner: "root"
    group: "root"
```

Template lengkap tersedia di: [https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal\_single\_instance.Template](https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal_Single_Instance.template).

Contoh potongan berikut membuat symlink `/tmp/myfile2.txt` yang menunjuk pada file yang ada `/tmp/myfile1.txt`. Izin file target `/tmp/myfile1.txt` didefinisikan oleh nilai modus `644`.

#### JSON
<a name="aws-resource-init-symlink.json"></a>

```
"files" : {
  "/tmp/myfile2.txt" : {
    "content" : "/tmp/myfile1.txt",
    "mode" : "120644"
  }
}
```

#### YAML
<a name="aws-resource-init-symlink.yaml"></a>

```
files:
  /tmp/myfile2.txt:
    content: "/tmp/myfile1.txt"
    mode: "120644"
```

Templat kumis digunakan terutama untuk membuat file konfigurasi. Misalnya, Anda dapat menyimpan file konfigurasi dalam bucket S3 dan menginterpolasi Refs dan GetAtts dari template, alih-alih menggunakan. `Fn::Join` Contoh cuplikan output `Content for test9` berikut ke. `/tmp/test9.txt`

#### JSON
<a name="aws-resource-init-test9.json"></a>

```
"files" : {
    "/tmp/test9.txt" : {
        "content" : "Content for {{name}}",
        "context" : { "name" : "test9" }
    }
}
```

#### YAML
<a name="aws-resource-init-test9.yaml"></a>

```
files:
  /tmp/test9.txt:
    content: "Content for {{name}}"
    context:
      name: "test9"
```

Saat bekerja dengan templat kumis, perhatikan hal berikut ini:
+ Kunci konteks harus hadir untuk file yang akan diproses.
+ Kunci konteks harus menjadi peta nilai kunci, tetapi dapat bersarang.
+ Anda dapat memproses file dengan konten inline menggunakan kunci konten dan file remote dengan menggunakan kunci sumber.
+ Dukungan kumis tergantung pada versi pystache. Versi 0.5.2 mendukung [Spesifikasi mustache 1.1.2](https://github.com/mustache/spec/tree/v1.1.2).

## Grup
<a name="aws-resource-init-groups"></a>

Anda dapat menggunakan kunci grup untuk membuat Linux/UNIX grup dan menetapkan grup IDs. Kunci grup tidak didukung untuk sistem Windows.

Untuk membuat grup, tambahkan pasangan nilai kunci baru yang memetakan nama grup baru untuk ID grup opsional. Kunci grup dapat berisi satu nama grup atau beberapa. Tabel berikut menjelaskan kunci yang tersedia.


| Key | Deskripsi | 
| --- | --- | 
|  `gid` | Nomor ID grup.<br />Jika ID grup ditentukan, dan grup sudah ada berdasarkan nama, pembuatan grup akan gagal. Jika grup lain memiliki ID grup tertentu, OS dapat menolak pembuatan grup.<br />Contoh: `{ "gid" : "23" }` | 

### Contoh potongan
<a name="aws-resource-init-groups-snippet"></a>

Potongan berikut menentukan grup bernama `groupOne` tanpa menetapkan ID grup dan grup bernama `groupTwo` yang menentukan nilai ID grup `45`.

#### JSON
<a name="aws-resource-init-groups-snippet.json"></a>

```
"groups" : {
    "groupOne" : {},
    "groupTwo" : { "gid" : "45" }
}
```

#### YAML
<a name="aws-resource-init-groups-snippet.yaml"></a>

```
groups:
  groupOne: {}
  groupTwo:
    gid: "45"
```

## Paket
<a name="aws-resource-init-packages"></a>

Anda dapat menggunakan kunci untuk mengunduh dan memasang aplikasi dan komponen yang telah dikemas sebelumnya. Pada sistem Windows, kunci paket hanya mendukung penginstal MSI.

### Format paket yang didukung
<a name="aws-resource-init-packages-formats"></a>

`cfn-init`Script saat ini mendukung format paket berikut: apt, msi, python, rpm, rubygems, yum, dan Zypper. Paket diproses dalam urutan sebagai berikut: rpm,yum/apt/zypper, dan kemudian rubygems dan python. Tidak ada pemesanan antara rubygems dan python, dan paket dalam setiap manajer paket tidak dijamin akan diinstal dalam urutan apapun.

### Menentukan versi
<a name="aws-resource-init-packages-versions"></a>

Dalam setiap manajer paket, setiap paket ditetapkan sebagai nama paket dan daftar versi. Versi ini bisa berupa string, daftar versi, atau string atau daftar kosong. String atau daftar kosong menunjukkan bahwa Anda menginginkan versi terbaru. Untuk manajer rpm, versi ditentukan sebagai jalur menuju file pada disk atau URL.

Jika Anda menentukan versi paket, `cfn-init` akan mencoba untuk menginstal versi itu bahkan jika versi yang lebih baru dari paket sudah diinstal pada instance. Beberapa manajer paket men-support beberapa versi, tetapi yang lain mungkin tidak. Verifikasi dokumentasi manajer paket Anda untuk informasi selengkapnya. Jika Anda tidak menentukan versi dan versi paket sudah diinstal, `cfn-init` skrip tidak akan menginstal versi baru — itu akan menganggap bahwa Anda ingin menyimpan dan menggunakan versi yang ada.

### Contoh potongan
<a name="aws-resource-init-packages-snippet"></a>

#### RPM, yum, Rubygems, dan Zypper
<a name="w2aac19c23c19c19b9b3"></a>

Cuplikan berikut menentukan URL versi untuk rpm, meminta versi terbaru dari yum dan Zypper, dan versi 0.10.2 koki dari rubygems:

##### JSON
<a name="aws-resource-init-packages-example1.json"></a>

```
"rpm" : {
  "epel" : "http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm"
},
"yum" : {
  "httpd" : [],
  "php" : [],
  "wordpress" : []
},
"rubygems" : {
  "chef" : [ "0.10.2" ]
},
"zypper" : {
  "git" : []
}
```

##### YAML
<a name="aws-resource-init-packages-example1.yaml"></a>

```
rpm:
  epel: "http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm"
yum:
  httpd: []
  php: []
  wordpress: []
rubygems:
  chef:
    - "0.10.2"
zypper:
  git: []
```

#### Paket MSI
<a name="w2aac19c23c19c19b9b5"></a>

Potongan berikut menentukan URL untuk paket MSI:

##### JSON
<a name="aws-resource-init-packages-example2.json"></a>

```
"msi" : {
  "awscli" : "https://s3.amazonaws.com/aws-cli/AWSCLI64.msi"
}
```

##### YAML
<a name="aws-resource-init-packages-example2.yaml"></a>

```
msi:
  awscli: "https://s3.amazonaws.com/aws-cli/AWSCLI64.msi"
```

## Layanan
<a name="aws-resource-init-services"></a>

Anda dapat menggunakan kunci layanan untuk menentukan layanan mana yang harus diaktifkan atau dinonaktifkan ketika instans diluncurkan. Sistem Amazon Linux 2 dan di atasnya menjalankan `aws-cfn-bootstrap` versi 2.0-29\+ mendukung kunci ini dengan menggunakan systemd. Sistem Linux lainnya mendukung kunci ini menggunakan sysvinit (secara default) atau systemd (dengan menambahkan konfigurasi yang diperlukan di bawah). Sistem Windows mendukung kunci ini melalui Windows Service Manager.

Kunci layanan juga memungkinkan Anda untuk menentukan dependensi pada sumber, paket, dan file sehingga jika restart diperlukan karena file yang diinstal, `cfn-init` akan mengurus layanan restart. Misalnya, jika Anda mengunduh paket Apache HTTP Server, instalasi paket secara otomatis akan memulai Apache HTTP Server selama proses pembuatan tumpukan. Namun, jika konfigurasi Apache HTTP Server diperbarui kemudian dalam proses pembuatan tumpukan, pembaruan tidak akan berlaku kecuali server Apache dimulai ulang. Anda dapat menggunakan kunci layanan untuk memastikan bahwa layanan HTTP Apache dimulai ulang.

Tabel berikut mencantumkan kunci yang didukung.


| Key | Deskripsi | 
| --- | --- | 
| `ensureRunning` | Setel ke true untuk memastikan bahwa layanan berjalan setelah `cfn-init` selesai.<br />Setel ke false untuk memastikan bahwa layanan tidak berjalan setelah `cfn-init` selesai.<br />Abaikan kunci ini untuk tidak membuat perubahan pada status layanan. | 
| `enabled` | Atur ke betul untuk memastikan layanan dimulai secara otomatis setelah boot.<br />Atur ke salah untuk memastikan layanan dimulai secara otomatis setelah boot.<br />Abaikan kunci ini untuk tidak membuat perubahan pada properti ini. | 
| `files` | Daftar file. Jika `cfn-init` mengubahnya secara langsung melalui blok file, layanan ini akan dimulai ulang. | 
| sumber | Daftar direktori. Jika `cfn-init` memperluas arsip ke salah satu direktori ini, layanan ini akan dimulai ulang. | 
| paket | Peta manajer paket akan mendata nama paket. Jika `cfn-init` menginstal atau memperbarui salah satu paket ini, layanan ini akan dimulai ulang. | 
| perintah | Daftar nama perintah. Jika `cfn-init` menjalankan perintah yang ditentukan, layanan ini akan dimulai ulang. | 

### Contoh
<a name="w2aac19c23c19c21c11"></a>

#### Linux
<a name="w2aac19c23c19c21c11b3"></a>

Potongan Linux berikut mengonfigurasi layanan sebagai berikut:
+ Layanan nginx akan dimulai ulang jika `/etc/nginx/nginx.conf` salah satu atau dimodifikasi oleh. `/var/www/html` `cfn-init`
+ Layanan php-fastcgi akan dimulai ulang jika `cfn-init` menginstal atau memperbarui php atau spawn-fcgi menggunakan yum.
+ Layanan sendmail akan dihentikan dan dinonaktifkan menggunakan systemd.

##### JSON
<a name="aws-resource-init-services-example1.json"></a>

```
"services" : {
  "sysvinit" : {
    "nginx" : {
      "enabled" : "true",
      "ensureRunning" : "true",
      "files" : ["/etc/nginx/nginx.conf"],
      "sources" : ["/var/www/html"]
    },
    "php-fastcgi" : {
      "enabled" : "true",
      "ensureRunning" : "true",
      "packages" : { "yum" : ["php", "spawn-fcgi"] }
    }
  },
  "systemd": {
    "sendmail" : {
      "enabled" : "false",
      "ensureRunning" : "false"
    }
  }
}
```

##### YAML
<a name="aws-resource-init-services-example1.yaml"></a>

```
services:
  sysvinit:
    nginx:
      enabled: "true"
      ensureRunning: "true"
      files:
        - "/etc/nginx/nginx.conf"
      sources:
        - "/var/www/html"
    php-fastcgi:
      enabled: "true"
      ensureRunning: "true"
      packages:
        yum:
          - "php"
          - "spawn-fcgi"
  systemd:
    sendmail:
      enabled: "false"
      ensureRunning: "false"
```

Untuk menggunakan systemd dengan layanan, layanan harus memiliki file unit systemd yang dikonfigurasi. File unit berikut memungkinkan systemd untuk memulai dan menghentikan `cfn-hup` daemon di target layanan multi-pengguna:

```
[Unit]
Description=cfn-hup daemon
[Service]
ExecStart=/usr/bin/cfn-hup -v
PIDFile=/var/run/cfn-hup.pid
[Install]
WantedBy=multi-user.target
```

Konfigurasi ini mengasumsikan `cfn-hup` bahwa diinstal di bawah `/usr/bin` direktori. Namun, lokasi sebenarnya di mana `cfn-hup` diinstal mungkin berbeda pada platform yang berbeda. Anda dapat mengganti konfigurasi ini dengan membuat file override `/etc/systemd/system/cfn-hup.service.d/override.conf` sebagai berikut:

```
# In this example, cfn-hup executable is available under /usr/local/bin
[Service]
ExecStart=
ExecStart=/usr/local/bin/cfn-hup -v
```

#### Windows
<a name="aws-resource-init-windows-example"></a>

Potongan Windows berikut memulai `cfn-hup` layanan, mengaturnya ke otomatis, dan memulai ulang layanan jika `cfn-init` memodifikasi file konfigurasi yang ditentukan:

##### JSON
<a name="aws-resource-init-services-example2.json"></a>

```
"services" : {
  "windows" : {
    "cfn-hup" : {
      "enabled" : "true",
      "ensureRunning" : "true",
      "files" : ["c:\\cfn\\cfn-hup.conf", "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"]
    }
  }
}
```

##### YAML
<a name="aws-resource-init-services-example2.yaml"></a>

```
services:
  windows:
    cfn-hup:
      enabled: "true"
      ensureRunning: "true"
      files:
        - "c:\\cfn\\cfn-hup.conf"
        - "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"
```

## Sumber
<a name="aws-resource-init-sources"></a>

Anda dapat menggunakan kunci sumber untuk mengunduh file arsip dan membongkarnya di direktori target pada EC2 instance. Kunci ini didukung sepenuhnya untuk sistem Linux dan Windows.

**Format yang didukung**  
Format yang didukung adalah:
+ `tar`
+ `tar+gzip`
+ `tar+bz2`
+ `zip`

### Contoh
<a name="aws-resource-init-sources-examples"></a>

#### GitHub
<a name="aws-resource-init-sources-examples-github"></a>

Jika Anda menggunakan GitHub sebagai sistem kontrol sumber, Anda dapat menggunakan `cfn-init` dan mekanisme paket sumber untuk menarik versi tertentu dari aplikasi Anda. GitHub memungkinkan Anda untuk membuat .zip atau .tar dari versi tertentu melalui URL sebagai berikut:

```
https://github.com/<your directory>/(zipball|tarball)/<version>
```

Misalnya, cuplikan berikut menarik versi ke bawah `main` sebagai file. `.tar`

##### JSON
<a name="aws-resource-init-sources-example1.json"></a>

```
"sources" : {
  "/etc/puppet" : "https://github.com/user1/cfn-demo/tarball/main"
  }
```

##### YAML
<a name="aws-resource-init-sources-example1.yaml"></a>

```
sources:
  /etc/puppet: "https://github.com/user1/cfn-demo/tarball/main"
```

#### Bucket S3
<a name="aws-resource-init-sources-examples-s3"></a>

Contoh berikut mengunduh tarball dari bucket S3 dan membongkarnya menjadi: `/etc/myapp`

**catatan**  
Anda dapat menggunakan kredensial autentikasi untuk sumber. Namun, Anda tidak dapat menempatkan kunci autentikasi di blok sumber. Sebagai gantinya, sertakan kunci bucket di `S3AccessCreds` blok. Untuk informasi selengkapnya tentang kredensyal autentikasi Amazon S3, lihat. [`AWS::CloudFormation::Authentication`](aws-resource-authentication.md)  
Sebagai contoh, lihat [https://s3.amazonaws.com/cloudformation-templates-us-east-1/SourceAuthS3Bucket\_](https://s3.amazonaws.com/cloudformation-templates-us-east-1/S3Bucket_SourceAuth.template) .template.

##### JSON
<a name="aws-resource-init-sources-example2.json"></a>

```
"sources" : {
  "/etc/myapp" : "https://s3.amazonaws.com/{{amzn-s3-demo-bucket}}/myapp.tar.gz"
  }
```

##### YAML
<a name="aws-resource-init-sources-example2.yaml"></a>

```
sources:
  /etc/myapp: "https://s3.amazonaws.com/{{amzn-s3-demo-bucket}}/myapp.tar.gz"
```

## Pengguna
<a name="aws-resource-init-users"></a>

Anda dapat menggunakan kunci pengguna untuk membuat Linux/UNIX pengguna pada EC2 instance. `users`Kuncinya tidak didukung untuk sistem Windows.

Tabel berikut mencantumkan kunci yang didukung.


| Key | Deskripsi | 
| --- | --- | 
| `uid` | ID pengguna. Proses pembuatan gagal jika nama pengguna ada dengan ID pengguna yang berbeda. Jika ID pengguna sudah ditetapkan untuk pengguna yang sudah ada, sistem operasi dapat menolak permintaan pembuatan. | 
| `groups` | Daftar nama grup. Pengguna ditambahkan ke setiap grup dalam daftar. | 
| `homeDir` | Direktori beranda pengguna. | 

### Contoh
<a name="aws-resource-init-users-example"></a>

Pengguna dibuat sebagai pengguna sistem noninteraktif dengan shell `/sbin/nologin`. Hal ini sudah sesuai dengan tujuannya dan tidak dapat dimodifikasi.

#### JSON
<a name="aws-resource-init-users-example.json"></a>

```
"users" : {
    "myUser" : {
        "groups" : ["groupOne", "groupTwo"],
        "uid" : "50",
        "homeDir" : "/tmp"
    }
}
```

#### YAML
<a name="aws-resource-init-users-example.yaml"></a>

```
users:
  myUser:
    groups:
      - "groupOne"
      - "groupTwo"
    uid: "50"
    homeDir: "/tmp"
```