

# Implantar funções do Lambda para PowerShell com arquivos .zip
<a name="powershell-package"></a>

Um pacote de implantação do runtime para PowerShell conterá seu script do PowerShell, os módulos do PowerShell exigidos por esse script e os assemblies requeridos para hospedar o PowerShell Core.

## Criar a função do Lambda
<a name="powershell-package-create"></a>

Para começar a gravar e invocar um script do PowerShell com o Lambda, você pode usar o cmdlet `New-AWSPowerShellLambda` para criar um script inicial com base em um modelo. Você pode usar o cmdlet `Publish-AWSPowerShellLambda` para implantar seu script no Lambda. Em seguida, você pode testar seu script na linha de comando ou no console do Lambda.

Para criar um novo script do PowerShell, fazer upload dele e testá-lo, siga este procedimento:

1. Execute o seguinte comando para exibir a lista de modelos disponíveis:

   ```
   PS C:\> Get-AWSPowerShellLambdaTemplate
   
   Template               Description
   --------               -----------
   Basic                  Bare bones script
   CodeCommitTrigger      Script to process AWS CodeCommit Triggers
   ...
   ```

1. Para criar um script de amostra com base no modelo `Basic`, execute o seguinte comando:

   ```
   New-AWSPowerShellLambda -ScriptName MyFirstPSScript -Template Basic
   ```

   Um novo arquivo chamado `MyFirstPSScript.ps1` é criado em um novo subdiretório do diretório atual. O nome do diretório é baseado no parâmetro `-ScriptName`. Você pode usar o parâmetro `-Directory` para escolher um diretório alternativo.

   É possível ver que o novo arquivo tem o seguinte conteúdo:

   ```
   # PowerShell script file to run as a Lambda function
   # 
   # When executing in Lambda the following variables are predefined.
   #   $LambdaInput - A PSObject that contains the Lambda function input data.
   #   $LambdaContext - An Amazon.Lambda.Core.ILambdaContext object that contains information about the currently running Lambda environment.
   #
   # The last item in the PowerShell pipeline is returned as the result of the Lambda function.
   #
   # To include PowerShell modules with your Lambda function, like the AWSPowerShell.NetCore module, add a "#Requires" statement 
   # indicating the module and version.
                   
   #Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'}
   
   # Uncomment to send the input to CloudWatch Logs
   # Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
   ```

1. Para ver como as mensagens de log do script do PowerShell são enviadas ao Amazon CloudWatch Logs, exclua as barras de comentário da linha `Write-Host` do script de amostra.

   Para demonstrar como você pode retornar dados das suas funções do Lambda, adicione uma nova linha no final do script com `$PSVersionTable`. Isso adiciona o `$PSVersionTable` ao pipeline do PowerShell. Depois que o script PowerShell estiver concluído, o último objeto no pipeline do PowerShell será os dados de retorno da função do Lambda. `$PSVersionTable` é uma variável global do PowerShell que também fornece informações sobre o ambiente de execução.

   Depois de fazer essas alterações, as duas últimas linhas do script de amostra terão esta aparência:

   ```
   Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
   $PSVersionTable
   ```

1. Depois de editar o arquivo `MyFirstPSScript.ps1`, altere o diretório para o local do script. Em seguida, execute o seguinte comando para publicar o script no Lambda:

   ```
   Publish-AWSPowerShellLambda -ScriptPath .\MyFirstPSScript.ps1 -Name  MyFirstPSScript -Region us-east-2
   ```

   Observe que o parâmetro `-Name` especifica o nome da função do Lambda, que aparece no console do Lambda. Você pode usar essa função para chamar seu script manualmente.

1. Invoque sua função usando o comando `invoke` da AWS Command Line Interface (AWS CLI).

   ```
   > aws lambda invoke --function-name MyFirstPSScript out
   ```