当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

作者:精品下载站 日期:2024-12-14 13:10:01 浏览:11 分类:玩电脑

如何利用 AWS PowerShell 命令实现自动化


您是否厌倦了通过 REST API 终端节点从 PowerShell 环境与 AWS 服务交互?尽管功能强大,但通过 REST API 端点与 AWS 服务交互可能很复杂。出路何在? AWS PowerShell 工具就是解决方案!

AWS Tools for PowerShell 为开发人员和系统管理员提供了一种从 PowerShell 环境管理其 AWS 资源的方法。 AWS PowerShell 工具允许您在 PowerShell 内对 AWS 资源和服务执行操作。

继续阅读并跟随。本教程将教您如何利用 AWS PowerShell 工具来管理 AWS 资源并自动执行任务。

先决条件

本教程将是一个实践演示。如果您想继续操作,请确保您具备以下条件:

  • 一个 AWS 账户。如果您没有免费会员帐户,可以先注册一个免费会员帐户。
  • AWS S3 存储桶。如果您还没有 S3 存储桶,请点击此链接创建 S3 存储桶。确保获取您的 S3 存储桶的名称。
  • 至少安装了 Windows PowerShell 5.1 或 PowerShell 6.0 的计算机。本教程中的示例将使用 PowerShell 版本 7.2.1。

安装 AWS PowerShell 工具安装程序模块

AWS 工具安装程序引入了一种模块化方法来安装、删除和更新不同 AWS 服务的 PowerShell 模块。 AWS 工具安装程序可在 Windows、Linux 和 Mac 操作系统上使用。

请按以下步骤安装 AWS 工具安装程序。

1. 打开 PowerShell 窗口并执行以下命令来安装 AWS.Tools.Installer 模块。

Install-Module -Name AWS.Tools.Installer

2. 要确认安装成功,请运行以下命令来验证模块信息。

Get-Module AWS.Tools.Installer -ListAvailable

如下所示,截至撰写本文时最新的 AWS.Tools.Installer 版本是 1.0.2.4。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

3. 最后,通过运行以下命令列出模块 cmdlet。

Get-Command -Module AWS.Tools.Installer

您将看到该模块中有三个 cmdlet:Install-AWSToolsModule、Uninstall-AWSToolsModule 和 Update-AWSToolsModule。这些 cmdlet 分别用于安装、卸载和更新 AWS PowerShell 模块。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

使用 AWS PowerShell 工具构建 PowerShell 模块

现在您已经安装了 AWS.Tools.Installer 模块,准备好投入使用。以下小节将教您如何从 PowerShell 环境与 AWS S3 服务交互。

安装 AWS 服务模块

此时,请记住您仅安装了 AWS Tools 安装程序,它允许您方便地安装其他 AWS Tools 模块。

在此示例中,您首先需要安装 AWS.Tools.S3 模块,然后才能使用 PowerShell 与 AWS S3 服务交互。使用此模块,您可以在 S3 存储桶中创建、上传和删除文件。

要安装 AWS.Tools.S3 模块,请运行以下命令。

Install-AWSToolsModule -Name AWS.Tools.S3

出现确认提示时,按 Y 和 Enter 继续安装。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

为 PowerShell 创建 IAM 用户

您通过在 PowerShell 中运行命令发出的每个 API 请求都需要 IAM 用户凭证进行身份验证。针对 AWS S3 运行命令时也是如此。要创建具有适当权限的 IAM 用户,请按以下步骤操作。

您还可以通过 AWS CLI 创建 IAM 用户,但本教程将教您如何在 Amazon 管理控制台中执行此操作。

1. 打开 Web 浏览器并登录您的 AWS 管理控制台。

2. 导航到 IAM 用户页面,在搜索框中输入“IAM 用户”。单击功能部分中的用户项。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

3. 单击 IAM 用户页面上的添加用户按钮。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

4. 为用户名字段提供唯一的名称。本示例中的 IAM 用户名是 ata-aws-powershell

接下来,单击“选择 AWS 访问类型”部分下的“访问密钥 - 编程访问”复选框。最后,在此页面上,单击“下一步:权限”按钮。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

5. 单击直接附加现有策略将现有 AWS 策略添加到 IAM 用户。在策略搜索框中键入“S3”以查找用于 AWS S3 服务的现有策略。

单击 AmazonS3FullAccess 策略的复选框。此策略将使 IAM 用户能够完全控制您的 AWS 账户的 S3 服务。

单击“下一步:标签”按钮(此时不要分配任何标签),然后单击“下一步:审阅”按钮。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

6. 确认您要创建的用户详细信息,然后单击创建用户按钮创建 IAM 用户。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

7. 将访问密钥 ID秘密访问密钥值复制到计算机上的安全记事本中。您将在下一步中使用这些值。

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

处理 PowerShell 工具的 AWS 凭证

现在您已拥有访问密钥 ID秘密访问密钥形式的 AWS 凭证。如何将这些密钥与 AWS PowerShell 结合使用?有两种方法 - 与 cmdlet 参数内联以及在 AWS 凭证配置文件中。

内联凭证

使用内联凭证方法要求您在从 PowerShell 执行 AWS 命令时指定 AWS 密钥 ID 和秘密访问密钥。

例如,以下命令在检索 (Get-S3Object) S3 存储桶 (-BucketName) 的内容。

Get-S3Object -BucketName testbucket -SecretKey XXXX -AccessKey XXXX -Region us-east-1

内联方法可能很方便,但您将以纯文本形式提供凭据。因此,在脚本中使用此方法时要小心,因为您必须在脚本中对凭据进行硬编码。

AWS 凭证配置文件

与内联凭据方法不同,您可以创建多个凭据配置文件。例如,您可以拥有一个单独的凭证配置文件来访问 S3 和 EC2。这些凭证经过加密,确保安全。然后,您可以在执行命令时引用每个配置文件。

执行以下命令 (Set-AWSCredential) 以创建包含 IAM 用户密钥 (SecretKey) 访问密钥 (-AccessKey) 凭证的配置文件。

-StoreAs 默认参数意味着当您在运行命令时未指定凭据配置文件时,此凭据是默认凭据。要创建备用配置文件,请指定默认名称以外的名称。例如,-StoreAs myS3profile 创建名为 myS3profile 的配置文件。

Set-AWSCredential -AccessKey ACCESS_KEY_ID -SecretKey SECRET_KEY_ID -StoreAs default

创建自定义 PowerShell 模块

此时,您已经设置了 AWS.Tools.S3 模块,包括凭证配置文件。现在,您将开始编写名为 Custom.AWS.Blob.Backup 的自定义 PowerShell 模块。

该模块将在名为 Custom.AWS.Blob.Backup.psm1 的单个 PowerShell 模块文件和一个名为 Custom.AWS.Blob.Backup.psd1 的模块清单文件中包含两个函数>。

1. 在计算机上以管理员身份打开 PowerShell。

2. 执行以下命令创建新的模块文件。

# Change the working directory PowerShell module path.
Set-Location $env:PSModulePath

# Create a new subdirectory matching the custom module name.
New-Item -Type Directory -Name Custom.AWS.Blob.Backup

# Change the working directory into the new module directory.
Set-Location Custom.AWS.Blob.Backup

# Create module and manifest files
New-Item -Type File -Path "Custom.AWS.Blob.Backup.psm1","Custom.AWS.Blob.Backup.psd1"

3. 使用代码编辑器打开模块清单文件 (Custom.AWS.Blob.Backup.psd1),并添加下面的代码块内容。

该代码块包含 Custom.AWS.Blob.Backup 模块的清单详细信息以及要从 Custom.AWS.Blob.Backup.psm1 文件导出的两个函数的名称。

#
# Module manifest for module 'Custom.AWS.Blob.Backup'
#
@{
    # Script module or binary module file associated with this manifest
    RootModule             = 'Custom.AWS.Blob.Sync.psm1'
    ModuleVersion          = '0.0.1'
    Author                 = 'Tutorial Reader'

    # Description of the functionality provided by this module
    Description            = 'The Custom.AWS.Blob.Backup.psm1 module makes it easier to backup old files to an S3 bucket and retrieves new files stored in the bucket.'

    FunctionsToExport      = @(
        'Backup-S3BlobFiles',
        'Restore-S3Files'
    )
}

4. 打开模块文件 (Custom.AWS.Blob.Backup.psm1) 并添加下面的代码块内容。下面的注释包含 Custom.AWS.Blob.Backup PowerShell 模块的基于注释的帮助。

<#
.SYNOPSIS
    Synchronizes files between a local computer and AWS S3 bucket
.DESCRIPTION
    The Custom.AWS.Blob.Backup.psm1 module makes it easier to backup old 
		files to an S3 bucket and retrieve new files stored in a bucket.
.EXAMPLE
    PS C:\> Backup-S3BlobFiles -S3Bucket test-bucket -ExtensionType .png -DayInterval 50
    Uploads files the extension parameter files, created within the DayInterval
	  parameter to the S3 bucket specified in the S3Bucket param

    PS C:\> Backup-S3BlobFiles -S3Bucket test-bucket -FileAge 50
    Downloads files within the FileAge range from the S3 bucket specified 
		in the S3Bucket parameter 
.INPUTS
    -S3Bucket
    -ExtensitionType
    -DayInterval
    -FileAge
    -S3Bucket
.NOTES
    - This function supports the backup and pulling down of data from AWS S3 buckets only.
#>

5. 接下来,将下面的函数 Backup-S3BlobFile 附加到模块文件 Custom.AWS.Blob.Backup.psm1 中。

下面是一个接受三个强制参数的高级函数。该函数使用 Get-ChildItem cmdlet 检索目录中与 ExtensionType 参数匹配的文件。检索到的文件通过管道传输到Where-Object cmdlet,以通过DayInterval 参数进行过滤。

最后,在 foreach 迭代期间使用 Write-S3Object cmdlet 将每个过滤的文件上传到指定的 S3 对象 (BucketName)。

function Backup-S3BlobFiles {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string]$S3Bucket,

        [Parameter(Mandatory, HelpMessage="Enter extension type of files to backup.")]
        [ValidateSet(".png", ".jpeg", ".jpg", ".mp4", ".mkvi", ".heic")]
        [string]$ExtensionType,

        [Parameter(Mandatory, HelpMessage="Enter date interval of files to backup from 0 - 1000")]
        [Int32][ValidateRange(0, 1000)]$DayInterval
    )
    
    $LocalFiles = Get-ChildItem -Path "*$ExtensionType" -Recurse | Where-Object { $_.CreationTime -lt ($(Get-Date).AddDays(-$TimeInterval))}
    $NoOfLocalFiles = $LocalFiles.Length
    Write-Verbose -Message  "Found $NoOfLocalFiles files to backup to S3 bucket." -Verbose

    foreach ($file in $LocalFiles  ) {
        Write-S3Object -BucketName $S3Bucket -File $file -Key $file
    }
}

6. 最后,将以下函数代码 (Restore-S3Files) 附加到模块文件 (Custom.AWS.Blob.Backup.psm1) 中。

下面的高级函数接受两个强制参数(S3Bucket 和 FileAge)。 Get-S3Object cmdlet 检索 S3Bucket 参数中指定的 S3 存储桶内的所有文件。

foreach 迭代对文件运行,如果文件位于 FileAge 的日期范围内,则 Read-S3Object cmdlet 将下载该文件。

function Restore-S3Files {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string]$S3Bucket,

        [Parameter(Mandatory, HelpMessage="Enter age of file to pull down from S3 bucket")]
        [Int32][ValidateRange(0, 1000)]$FileAge
    )

    $RemoteFiles = Get-S3Object -BucketName $S3Bucket
    $NoOfRemoteFiles = $RemoteFiles.Length
    Write-Verbose -Message  "Found $NoOfRemoteFiles files in $S3Bucket bucket." -Verbose
    
    foreach ($file in $RemoteFiles ) {
        if ($file.LastModified -gt ($(Get-Date).AddDays(-$FileAge))) {
            Read-S3Object -BucketName $S3Bucket -File $file.Key -Key $file.Key
        }
    }
}

运行您的自定义 AWS PowerShell 模块

现在您已经创建了自定义模块,是时候将其付诸实践了。

以下步骤假设您之前已在 S3 服务中创建了一个存储桶。确保将 YOUR_S3_BUCKET 占位符替换为您的 S3 存储桶的名称。

将文件备份到S3

假设您有一堆 PNG 格式的屏幕截图想要备份到 S3 存储桶。为此,请执行下面的 Backup-S3Blobfiles 命令来上传不到 10 天的 PNG 文件。

模块自动加载功能会自动加载包含您正在执行的命令的相应模块。

 Backup-S3BlobFiles -S3Bucket YOUR_S3_BUCKET -ExtensionType .png -DayInterval 10

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

从 S3 恢复文件

执行下面的 Restore-S3Files 命令,从 S3 存储桶中下载上次修改日期在前五天内的文件。

Restore-S3Files -S3Bucket test-bucket -FileAge 5 

[玩转系统] 如何利用 AWS PowerShell 命令实现自动化

结论

本教程的目标是教您如何以编程方式使用 AWS PowerShell 工具与 AWS 进行交互。您了解了如何通过 AWS.Tool.S3 模块在 AWS 上安装、配置 S3 服务并与之交互。

通过新构建的自定义 PowerShell 模块,您现在拥有了自动化其他 AWS 任务的基准。也许您还可以使用 PSake 按所需的时间间隔安排 AWS PowerShell 工具的执行?

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯