

• La AWS Systems Manager CloudWatch dashboard non sarà più disponibile dopo il 30 aprile 2026. I clienti possono continuare a utilizzare la CloudWatch console Amazon per visualizzare, creare e gestire le proprie CloudWatch dashboard Amazon, proprio come fanno oggi. Per ulteriori informazioni, consulta la [documentazione di Amazon CloudWatch Dashboard](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Aggiorna un golden AMI usando Automation AWS Lambda, e Parameter Store
<a name="automation-tutorial-update-patch-golden-ami"></a>

L'esempio seguente utilizza il modello in cui un'organizzazione gestisce e periodicamente applica patch ad AMIs di proprietà anziché crearle da AMIs di Amazon Elastic Compute Cloud (Amazon EC2).

*La procedura seguente mostra come applicare automaticamente le patch del sistema operativo (OS) a un sistema AMI che è già considerato la più recente up-to-date o la più recente.* AMI Nell'esempio, il valore predefinito del parametro `SourceAmiId` è definito da un AWS Systems Manager Parameter Store parametro chiamato`latestAmi`. Il valore di `latestAmi` viene aggiornato da una AWS Lambda funzione richiamata alla fine dell'automazione. Come risultato di questo processo di automazione, il tempo e l'impegno dedicati all'applicazione delle patch AMIs sono ridotti al minimo perché l'applicazione delle patch viene sempre applicata nella maggior parte dei casi. up-to-date AMI Parameter Storee l'automazione sono strumenti di. AWS Systems Manager

**Prima di iniziare**  
Configura i ruoli di automazione e, facoltativamente, Amazon EventBridge for Automation. Per ulteriori informazioni, consulta [Configurazione del servizio di automazione](automation-setup.md).

**Topics**
+ [Processo 1: creazione di un parametro nel Parameter Store di Systems Manager](#create-parameter-ami)
+ [Attività 2: creare un ruolo IAM per AWS Lambda](#create-lambda-role)
+ [Attività 3: Creare una AWS Lambda funzione](#create-lambda-function)
+ [Processo 4: creazione di un runbook e applicazione di patch all'AMI](#create-custom-ami-update-runbook)

## Processo 1: creazione di un parametro nel Parameter Store di Systems Manager
<a name="create-parameter-ami"></a>

In Parameter Store creare un parametro di stringa che utilizza le seguente informazioni:
+ **Nome (Nome)**: `latestAmi`.
+ **Valore**: Un ID AMI. Ad esempio: ` ami-188d6e0e`.

Per informazioni su come creare un parametro di stringa di Parameter Store, consulta [Creazione di parametri Parameter Store in Systems Manager](sysman-paramstore-su-create.md).

## Attività 2: creare un ruolo IAM per AWS Lambda
<a name="create-lambda-role"></a>

Utilizzare la procedura seguente per creare un ruolo di servizio IAM per AWS Lambda. Queste policy forniscono l'autorizzazione a Lambda per aggiornare il valore del parametro `latestAmi` utilizzando una funzione Lambda e Systems Manager.

**Per creare un ruolo di servizio IAM per Lambda**

1. Accedi Console di gestione AWS e apri la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Nel pannello di navigazione, scegliere **Policies (Policy)** e **Create Policy (Crea policy)**.

1. Scegli la scheda **JSON**.

1. Sostituisci il contenuto predefinito con la seguente policy. Sostituisci ogni *example resource placeholder* con le tue informazioni.

------
#### [ 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. Scegli **Successivo: Tag**.

1. (Facoltativo) Aggiungere una o più coppie tag chiave-valore per organizzare, monitorare o controllare l'accesso per questa policy. 

1. Scegli **Prossimo: Rivedi**.

1. Nella pagina **Rivedi policy**, per l'opzione **Nome** specifica un nome per la policy inline, ad esempio **amiLambda**.

1. Scegli **Crea policy**.

1. Ripetere le fasi 2 e 3.

1. Quindi incollare la policy seguente. Sostituisci ogni *example resource placeholder* con le tue informazioni.

------
#### [ 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. Scegli **Successivo: Tag**.

1. (Facoltativo) Aggiungere una o più coppie tag chiave-valore per organizzare, monitorare o controllare l'accesso per questa policy. 

1. Scegli **Prossimo: Rivedi**.

1. Nella pagina **Rivedi policy**, per l'opzione **Nome** specifica un nome per la policy inline, ad esempio **amiParameter**.

1. Scegli **Crea policy**.

1. Nel pannello di navigazione, scegli **Ruoli** e quindi **Crea ruolo**.

1. In **Caso d'uso**, scegli **Lambda**, quindi scegli **Successivo**.

1. Nella pagina **Collega autorizzazioni**, utilizza il campo **Cerca** per individuare le due policy create in precedenza.

1. Seleziona la casella di controllo accanto alle policy, quindi scegli **Successivo: Tag**.

1. Per **Role name (Nome ruolo)**, inserire un nome per il nuovo ruolo, ad esempio **lambda-ssm-role** o un altro nome che preferisci. 
**Nota**  
Poiché varie entità possono fare riferimento al ruolo, non è possibile modificare il nome del ruolo dopo averlo creato.

1. (Facoltativo) Aggiungi una o più coppie di tag chiave-valore per organizzare, monitorare o controllare l'accesso per questo ruolo, quindi scegli **Crea ruolo**.

## Attività 3: Creare una AWS Lambda funzione
<a name="create-lambda-function"></a>

Utilizzare la procedura seguente per creare una funzione Lambda che aggiorna automaticamente il valore del parametro `latestAmi`.

**Come creare una funzione Lambda**

1. Accedi a Console di gestione AWS e apri la AWS Lambda console all'indirizzo [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Scegli **Crea funzione**.

1. Nella pagina **Create function (Crea funzione)**, scegliere **Author from scratch (Crea da zero)**.

1. Nel campo **Function name (Nome funzione)**, immettere **Automation-UpdateSsmParam**.

1. Per **Runtime**, scegli **Python 3.11**.

1. Per **Architettura**, seleziona il tipo di processore del computer che Lambda deve utilizzare per eseguire la funzione, **x86\$164** o **arm64**. 

1. Nella sezione **Autorizzazioni**, espandi **Modifica ruolo di esecuzione predefinito**.

1. Scegli **Utilizza un ruolo esistente**, quindi scegli il ruolo di servizio creato per Lambda nell'attività 2.

1. Scegli **Crea funzione**.

1. Nella sezione **Origine codice**, nella scheda **lambda\$1function**, elimina il codice precompilato nel campo, quindi incolla il seguente codice di esempio.

   ```
   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. Scegli **File, Salva**.

1. Per testare la funzione Lambda, dal menu **Test** scegli **Configura evento di test**.

1. Nel campo **Event name (Nome evento)**, inserire un nome per l'evento di test, ad esempio **MyTestEvent**.

1. Sostituire il testo esistente con il seguente esempio JSON. *AMI ID*Sostituiscilo con le tue informazioni per impostare il `latestAmi` valore del parametro.

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

1. Scegli **Save** (Salva).

1. Scegliere **Test** per testare la funzione. Nella scheda **Risultato dell'esecuzione**, lo stato deve essere riportato come **Completato**, insieme ad altri dettagli sull'aggiornamento.

## Processo 4: creazione di un runbook e applicazione di patch all'AMI
<a name="create-custom-ami-update-runbook"></a>

Utilizzare la procedura seguente per creare ed eseguire un runbook che applica patch all'AMI specificata per il parametro **latestAmi**. Al termine dell'automazione, il valore del parametro **latestAmi** viene aggiornato con l'ID dell'AMI con patch applicate. Le automazioni successive utilizzano l'AMI creata dall'esecuzione precedente.

**Per creare ed eseguire il runbook**

1. Apri la AWS Systems Manager console all'indirizzo [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/).

1. Nel pannello di navigazione, scegli **Documenti**.

1. Per **Crea documento**, scegli **Automazione**.

1. In **Nome**, inserisci **UpdateMyLatestWindowsAmi**.

1. Scegliere la scheda **Editor**, quindi **Edit (Modifica)**.

1. Scegli **OK** quando richiesto.

1. Nel campo **Editor di documenti**, sostituisci il contenuto predefinito con il seguente runbook di esempio YAML.

   ```
   ---
   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. Scegli **Crea automazione**.

1. Nel pannello di navigazione, scegli **Automazione**, quindi **Esegui automazione**.

1. Nella pagina **Choose document (Scegli il documento)**, scegli la scheda **Owned by me (Di mia proprietà)**.

1. Cerca il **UpdateMyLatestWindowsAmi**runbook e seleziona il pulsante nella **UpdateMyLatestWindowsAmi**scheda.

1. Scegli **Next (Successivo)**.

1. Scegliere **Simple execution (Esecuzione semplice)**.

1. Specifica i valori per il parametro di input.

1. Scegliere **Execute (Esegui)**.

1. Una volta completata l'esecuzione, scegliere **Parameter Store** nel pannello di navigazione e confermare che il nuovo valore del parametro `latestAmi` corrisponde al valore restituito dall'automazione. Puoi anche verificare che il nuovo AMI ID corrisponda all'output di Automation nella **AMIs**sezione della console Amazon EC2.