

• AWS Systems Manager CloudWatch Dasbor tidak akan lagi tersedia setelah 30 April 2026. Pelanggan dapat terus menggunakan CloudWatch konsol Amazon untuk melihat, membuat, dan mengelola CloudWatch dasbor Amazon mereka, seperti yang mereka lakukan hari ini. Untuk informasi selengkapnya, lihat [dokumentasi CloudWatch Dasbor Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

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

# Perbarui emas AMI menggunakan Otomasi, AWS Lambda, dan Parameter Store
<a name="automation-tutorial-update-patch-golden-ami"></a>

Contoh berikut menggunakan model di mana organisasi memelihara dan secara berkala menambal milik mereka sendiri AMIs daripada membangun dari Amazon Elastic Compute Cloud (Amazon EC2). AMIs

Prosedur berikut menunjukkan cara menerapkan patch sistem operasi (OS) secara otomatis ke patch AMI yang sudah dianggap paling mutakhir atau *terbaru*AMI. Dalam contoh, nilai default parameter `SourceAmiId` ditentukan oleh AWS Systems Manager Parameter Store parameter yang disebut`latestAmi`. Nilai diperbarui `latestAmi` oleh AWS Lambda fungsi yang dipanggil pada akhir otomatisasi. Sebagai hasil dari proses Otomasi ini, waktu dan upaya yang dihabiskan untuk menambal AMIs diminimalkan karena penambalan selalu diterapkan pada yang paling mutakhir. AMI Parameter Storedan otomatisasi adalah alat AWS Systems Manager.

**Sebelum Anda mulai**  
Konfigurasikan peran Otomasi dan, secara opsional, Amazon EventBridge untuk Otomasi. Untuk informasi selengkapnya, lihat [Menyiapkan Otomatisasi](automation-setup.md).

**Topics**
+ [Tugas 1: Buat parameter di Systems Manager Parameter Store](#create-parameter-ami)
+ [Tugas 2: Buat peran IAM untuk AWS Lambda](#create-lambda-role)
+ [Tugas 3: Buat AWS Lambda fungsi](#create-lambda-function)
+ [Tugas 4: Membuat runbook dan menambal AMI](#create-custom-ami-update-runbook)

## Tugas 1: Buat parameter di Systems Manager Parameter Store
<a name="create-parameter-ami"></a>

Buat parameter string Parameter Store yang menggunakan informasi berikut:
+ **Nama**: `latestAmi`.
+ **Nilai**: Sebuah AMI ID. Misalnya:` ami-188d6e0e`.

Untuk informasi tentang cara membuat parameter Parameter Store string, lihat[Membuat Parameter Store parameter di Systems Manager](sysman-paramstore-su-create.md).

## Tugas 2: Buat peran IAM untuk AWS Lambda
<a name="create-lambda-role"></a>

Gunakan prosedur berikut untuk membuat peran layanan IAM untuk AWS Lambda. Kebijakan ini memberikan izin Lambda untuk memperbarui nilai `latestAmi` parameter menggunakan fungsi Lambda dan Systems Manager.

**Untuk membuat peran layanan IAM untuk Lambda**

1. Masuk ke Konsol Manajemen AWS dan buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Pada panel navigasi, pilih **Kebijakan**, lalu pilih **Buat kebijakan**.

1. Pilih tab **JSON**.

1. Ganti konten default dengan kebijakan berikut. Ganti masing-masing {{example resource placeholder}} dengan informasi Anda sendiri.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "logs:CreateLogGroup",
               "Resource": "arn:aws:logs:{{us-east-1}}:{{111122223333}}:*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogStream",
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws/lambda/{{function name}}:*"
               ]
           }
       ]
   }
   ```

------

1. Pilih **Berikutnya: Tanda**.

1. (Opsional) Tambahkan satu atau beberapa pasangan nilai kunci tag untuk mengatur, melacak, atau mengontrol akses kebijakan ini. 

1. Pilih **Berikutnya: Tinjauan**.

1. Pada halaman **Tinjau kebijakan**, untuk **Nama**, masukkan nama untuk kebijakan inline, seperti **amiLambda**.

1. Pilih **Buat kebijakan**.

1. Ulangi langkah 2 dan 3.

1. Tempel kebijakan berikut. Ganti masing-masing {{example resource placeholder}} dengan informasi Anda sendiri.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "ssm:PutParameter",
               "Resource": "arn:aws:ssm:{{us-east-1}}:{{111122223333}}:parameter/{{latestAmi}}"
           },
           {
               "Effect": "Allow",
               "Action": "ssm:DescribeParameters",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Pilih **Berikutnya: Tanda**.

1. (Opsional) Tambahkan satu atau beberapa pasangan nilai kunci tag untuk mengatur, melacak, atau mengontrol akses kebijakan ini. 

1. Pilih **Berikutnya: Tinjauan**.

1. Pada halaman **Tinjau kebijakan**, untuk **Nama**, masukkan nama untuk kebijakan inline, seperti **amiParameter**.

1. Pilih **Buat kebijakan**.

1. Di panel navigasi, pilih **Peran**, lalu pilih **Buat peran**.

1. **Segera di bawah **Kasus penggunaan**, pilih **Lambda**, lalu pilih Berikutnya.**

1. Pada halaman **Tambahkan izin**, gunakan bidang **Pencarian** untuk menemukan dua kebijakan yang Anda buat sebelumnya.

1. Pilih kotak centang di samping kebijakan, lalu pilih **Berikutnya**.

1. Untuk **Nama peran**, masukkan nama untuk peran baru Anda, seperti **lambda-ssm-role** atau nama lain yang Anda inginkan. 
**catatan**  
Karena berbagai entitas mungkin mereferensikan peran, Anda tidak dapat mengubah nama peran setelah dibuat.

1. (Opsional) Tambahkan satu atau beberapa pasangan nilai kunci tag untuk mengatur, melacak, atau mengontrol akses untuk peran ini, lalu pilih **Buat** peran.

## Tugas 3: Buat AWS Lambda fungsi
<a name="create-lambda-function"></a>

Gunakan prosedur berikut untuk membuat fungsi Lambda yang secara otomatis memperbarui nilai `latestAmi` parameter.

**Untuk membuat fungsi Lambda**

1. Masuk ke Konsol Manajemen AWS dan buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Pilih **Buat fungsi**.

1. Pilih halaman **Buat fungsi**, pilih **Penulis dari scratch**.

1. Untuk **Nama fungsi**, masukkan **Automation-UpdateSsmParam**.

1. Untuk **Runtime**, pilih **Python 3.11**.

1. **Untuk **Arsitektur**, pilih jenis prosesor komputer untuk Lambda untuk digunakan untuk menjalankan fungsi, **x86\_64** atau arm64,** 

1. Di bagian **Izin, perluas** **Ubah peran eksekusi default**.

1. Pilih **Gunakan peran yang sudah ada**, dan kemudian pilih peran layanan untuk Lambda yang Anda buat di Tugas 2.

1. Pilih **Buat fungsi**.

1. Di area **sumber Kode**, pada tab **lambda\_function**, hapus kode yang telah diisi sebelumnya di bidang, lalu tempel contoh kode berikut.

   ```
   from __future__ import print_function
   
   import json
   import boto3
   
   print('Loading function')
   
   
   #Updates an SSM parameter
   #Expects parameterName, parameterValue
   def lambda_handler(event, context):
       print("Received event: " + json.dumps(event, indent=2))
   
       # get SSM client
       client = boto3.client('ssm')
   
       #confirm  parameter exists before updating it
       response = client.describe_parameters(
          Filters=[
             {
              'Key': 'Name',
              'Values': [ event['parameterName'] ]
             },
           ]
       )
   
       if not response['Parameters']:
           print('No such parameter')
           return 'SSM parameter not found.'
   
       #if parameter has a Description field, update it PLUS the Value
       if 'Description' in response['Parameters'][0]:
           description = response['Parameters'][0]['Description']
           
           response = client.put_parameter(
             Name=event['parameterName'],
             Value=event['parameterValue'],
             Description=description,
             Type='String',
             Overwrite=True
           )
       
       #otherwise just update Value
       else:
           response = client.put_parameter(
             Name=event['parameterName'],
             Value=event['parameterValue'],
             Type='String',
             Overwrite=True
           )
           
       responseString = 'Updated parameter %s with value %s.' % (event['parameterName'], event['parameterValue'])
           
       return responseString
   ```

1. Pilih **File, Simpan**.

1. Untuk menguji fungsi Lambda, dari menu **Test**, pilih **Configure test event**.

1. Untuk **Nama peristiwa**, masukkan nama untuk peristiwa pengujian, seperti **MyTestEvent**.

1. Ganti teks yang ada dengan JSON berikut. Ganti {{AMI ID}} dengan informasi Anda sendiri untuk mengatur nilai `latestAmi` parameter Anda.

   ```
   {
      "parameterName":"latestAmi",
      "parameterValue":"{{AMI ID}}"
   }
   ```

1. Pilih **Simpan**.

1. Pilih **Uji** untuk menguji fungsi. Pada tab **Hasil eksekusi**, status harus dilaporkan sebagai **Berhasil,** bersama dengan detail lain tentang pembaruan.

## Tugas 4: Membuat runbook dan menambal AMI
<a name="create-custom-ami-update-runbook"></a>

Gunakan prosedur berikut untuk membuat dan menjalankan runbook yang mem-patch AMI yang Anda tentukan untuk parameter **latestAmi**. Setelah otomatisasi selesai, nilai **LatEstami** diperbarui dengan ID yang baru ditambal. AMI Otomatisasi berikutnya menggunakan AMI yang dibuat oleh eksekusi sebelumnya.

**Untuk membuat dan menjalankan runbook**

1. Buka AWS Systems Manager konsol di [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. Di panel navigasi, pilih **Dokumen**.

1. Untuk **Buat dokumen**, pilih **Otomatisasi**.

1. Untuk **Nama**, masukkan **UpdateMyLatestWindowsAmi**.

1. Pilih tab **Editor**, dan kemudian pilih **Edit**.

1. Pilih **OK** saat diminta.

1. Di bidang **editor Dokumen**, ganti konten default dengan konten runbook sampel YAMAL berikut.

   ```
   ---
   description: Systems Manager Automation Demo - Patch AMI and Update ASG
   schemaVersion: '0.3'
   assumeRole: '{{ AutomationAssumeRole }}'
   parameters:
     AutomationAssumeRole:
       type: String
       description: '(Required) The ARN of the role that allows Automation to perform the actions on your behalf. If no role is specified, Systems Manager Automation uses your IAM permissions to execute this document.'
       default: ''
     SourceAMI:
       type: String
       description: The ID of the AMI you want to patch.
       default: '{{ ssm:latestAmi }}'
     SubnetId:
       type: String
       description: The ID of the subnet where the instance from the SourceAMI parameter is launched.
     SecurityGroupIds:
       type: StringList
       description: The IDs of the security groups to associate with the instance that's launched from the SourceAMI parameter.
     NewAMI:
       type: String
       description: The name of of newly patched AMI.
       default: 'patchedAMI-{{global:DATE_TIME}}'
     InstanceProfile:
       type: String
       description: The name of the IAM instance profile you want the source instance to use.
     SnapshotId:
       type: String
       description: (Optional) The snapshot ID to use to retrieve a patch baseline snapshot.
       default: ''
     RebootOption:
       type: String
       description: '(Optional) Reboot behavior after a patch Install operation. If you choose NoReboot and patches are installed, the instance is marked as non-compliant until a subsequent reboot and scan.'
       allowedValues:
         - NoReboot
         - RebootIfNeeded
       default: RebootIfNeeded
     Operation:
       type: String
       description: (Optional) The update or configuration to perform on the instance. The system checks if patches specified in the patch baseline are installed on the instance. The install operation installs patches missing from the baseline.
       allowedValues:
         - Install
         - Scan
       default: Install
   mainSteps:
     - name: startInstances
       action: 'aws:runInstances'
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
         ImageId: '{{ SourceAMI }}'
         InstanceType: m5.large
         MinInstanceCount: 1
         MaxInstanceCount: 1
         IamInstanceProfileName: '{{ InstanceProfile }}'
         SubnetId: '{{ SubnetId }}'
         SecurityGroupIds: '{{ SecurityGroupIds }}'
     - name: verifyInstanceManaged
       action: 'aws:waitForAwsResourceProperty'
       timeoutSeconds: 600
       inputs:
         Service: ssm
         Api: DescribeInstanceInformation
         InstanceInformationFilterList:
           - key: InstanceIds
             valueSet:
               - '{{ startInstances.InstanceIds }}'
         PropertySelector: '$.InstanceInformationList[0].PingStatus'
         DesiredValues:
           - Online
       onFailure: 'step:terminateInstance'
     - name: installPatches
       action: 'aws:runCommand'
       timeoutSeconds: 7200
       onFailure: Abort
       inputs:
         DocumentName: AWS-RunPatchBaseline
         Parameters:
           SnapshotId: '{{SnapshotId}}'
           RebootOption: '{{RebootOption}}'
           Operation: '{{Operation}}'
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
     - name: stopInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: stopped
     - name: createImage
       action: 'aws:createImage'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceId: '{{ startInstances.InstanceIds }}'
         ImageName: '{{ NewAMI }}'
         NoReboot: false
         ImageDescription: Patched AMI created by Automation
     - name: terminateInstance
       action: 'aws:changeInstanceState'
       maxAttempts: 1
       onFailure: Continue
       inputs:
         InstanceIds:
           - '{{ startInstances.InstanceIds }}'
         DesiredState: terminated
     - name: updateSsmParam
       action: aws:invokeLambdaFunction
       timeoutSeconds: 1200
       maxAttempts: 1
       onFailure: Abort
       inputs:
           FunctionName: Automation-UpdateSsmParam
           Payload: '{"parameterName":"latestAmi", "parameterValue":"{{createImage.ImageId}}"}'
   outputs:
   - createImage.ImageId
   ```

1. Pilih **Buat otomatisasi**.

1. Di panel navigasi, pilih **Otomatisasi**, lalu pilih **Eksekusi otomatisasi**.

1. Di halaman **Pilih dokumen**, pilih tab **Dimiliki oleh saya**.

1. Cari **UpdateMyLatestWindowsAmi**runbook, dan pilih tombol di **UpdateMyLatestWindowsAmi**kartu.

1. Pilih **Berikutnya**.

1. Pilih **Eksekusi sederhana**.

1. Tentukan nilai untuk parameter input.

1. Pilih **Eksekusi**.

1. Setelah otomatisasi selesai, pilih **Parameter Store**di panel navigasi dan konfirmasikan bahwa nilai baru untuk `latestAmi` cocok dengan nilai yang dikembalikan oleh otomatisasi. Anda juga dapat memverifikasi AMI ID baru yang cocok dengan output otomatisasi di bagian **AMI** dari konsol Amazon EC2.