

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AL2023 在上使用 AWS
<a name="aws"></a>

您可以设置 AL2023 为与其他人一起使用 AWS 服务。例如，您可以在启动[亚马逊弹性计算云 (Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/) EC2) 实例时选择 AM AL2023 I。

对于这些设置过程，您可以使用 AWS Identity and Access Management (IAM) 服务。有关 IAM 的完整信息，请参阅以下参考材料：
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/iam/)
+ [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)

**Topics**
+ [入门 AWS](#getting-started-aws)
+ [Amazon EC2 上的 AL2023](ec2.md)
+ [AL2023 在容器中使用](container.md)
+ [在 AWS Elastic Beanstalk 上的 AL2023](beanstalk.md)
+ [在 AWS CloudShell 中使用 AL2023](cloudshell.md)
+ [使用基于 AL2023 的 Amazon ECS AMI 托管容器化工作负载](ecs.md)
+ [在 AL2023 上使用 Amazon Elastic File System](efs.md)
+ [使用基于 Amazon EMR AL2023](emr.md)
+ [AL2023 在中使用 AWS Lambda](lambda.md)

## 入门 AWS
<a name="getting-started-aws"></a>

### 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**报名参加 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

### 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

### 授权以编程方式访问
<a name="install-aws-prereq.programmatic-access"></a>

如果用户想在 AWS 外部进行交互，则需要编程访问权限 AWS 管理控制台。授予编程访问权限的方式取决于正在访问的用户类型 AWS。

要向用户授予编程式访问权限，请选择以下选项之一。


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证，签署对 AWS CLI AWS SDKs、或的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/aws.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/aws.html)  | 
| IAM | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 | 按照 IAM 用户指南中的将[临时证书与 AWS 资源配合使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/aws.html)  | 

# Amazon EC2 上的 AL2023
<a name="ec2"></a>

使用以下过程之一启动带有 AL2023 AMI 的 Amazon EC2 实例。您可以选择标准 AMI，也可以选择AMI 最低版本。有关标准 AMI 与AMI 最低版本 之间区别的更多信息，请参阅[比较 AL2023 标准（默认）和最小 AMIs](AMI-minimal-and-standard-differences.md)。

**Topics**
+ [使用 Amazon EC2 控制台启动 AL2023](#launch-from-ec2-console)
+ [AL2023 使用 SSM 参数启动和 AWS CLI](#launch-via-aws-cli)
+ [使用启动最新的 AL2023 AMI CloudFormation](#launch-from-cloudformation)
+ [AL2023 使用特定的 AMI ID 启动](#launch-by-ami-id)
+ [AL2023 AMI 的弃用和生命周期](#ami-deprecation)
+ [连接到 AL2023 实例](connecting-to-instances.md)
+ [比较 AL2023 标准和最小值 AMIs](AMI-minimal-and-standard-differences.md)

## 使用 Amazon EC2 控制台启动 AL2023
<a name="launch-from-ec2-console"></a>

使用亚马逊 EC2 控制台启动 AL2023 AMI。

**注意**  
对于基于 ARM 的实例， AL2023 仅支持使用 Graviton2 或更高版本处理器的实例类型。 AL2023 不支持 A1 实例。

使用以下步骤，从 Amazon EC2 控制台启动具有 AL2023 AMI 的 Amazon EC2 实例。

**使用 AL2023 AMI 启动 EC2 实例**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，请选择 **AMIs**。

1. 从下拉菜单中选择**公有映像**。

1. 在搜索字段中输入 **al2023-ami**。
**注意**  
确保 **amazon** 显示在**拥有者别名**列中。

1. 从列表中选择一个映像。在**来源**下，您可以确定使用标准 AMI 还是AMI 最低版本。 AL2023 AMI 名称可以使用以下格式进行解释：

   `'al2023-[ami || ami-minimal]-2023.0.[release build date].[build number]-kernel-[version number]-[arm64 || x86_64]'`

1. 下图显示了部分列表 AL2023 AMIs。  
![\[“来源 AL2023 AMIs ” 列下方的列表。\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/images/launch-instance.png)

有关如何启动 Amazon EC2 实例的信息，请参阅*《Amazon EC2 用户指南》*中的 [Amazon EC2 Linux 实例入门](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

## AL2023 使用 SSM 参数启动和 AWS CLI
<a name="launch-via-aws-cli"></a>

在中 AWS CLI，您可以使用 AMI 的 SSM 参数值启动的新实例。 AL2023更具体地说，使用以下列表中的一个动态 SSM 参数值，然后在 SSM 参数 value/ 之前添加 `/aws/service/ami-amazon-linux-latest/`。您可以使用以下参数在 AWS CLI中启动实例。
+ `al2023-ami-kernel-default-arm64`，适用于 arm64 架构
+ `al2023-ami-minimal-kernel-default-arm64`，适用于 arm64 架构（AMI 最低版本）
+ `al2023-ami-kernel-default-x86_64`，适用于 x86\$164 架构
+ `al2023-ami-minimal-kernel-default-x86_64`，适用于 x86\$164 架构（AMI 最低版本）

**注意**  
每个*italic*项目都是一个示例参数。将它们替换为您自己的信息。

```
$ aws ec2 run-instances \
  --image-id \
    resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64 \
  --instance-type m5.xlarge \
  --region us-east-1 \
  --key-name aws-key-us-east-1 \
  --security-group-ids sg-004a7650
```

`--image-id` 标志指定 SSM 参数值。

`--instance-type` 标志指定实例的类型和大小。该标志必须与您选择的 AMI 类型兼容。

该`--region`标志指定您在 AWS 区域 哪里创建实例。

该`--key-name`标志指定 AWS 区域了用于连接到实例的密钥。如果您不提供创建实例的区域中存在的密钥，则无法使用 SSH 连接到该实例。

`--security-group-ids` 标志指定可确定对入站和出站网络流量的访问权限的安全组。

**重要**  
 AWS CLI 要求您指定允许通过端口从远程计算机访问实例的现有安全组TCP:22。如果没有指定的安全组，您的新实例将被置于默认安全组中。在默认安全组中，您的实例只能与您的 VPC 中的其他实例连接。

有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[启动、列出和终止 EC2 实例](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-instances.html)。

## 使用启动最新的 AL2023 AMI CloudFormation
<a name="launch-from-cloudformation"></a>

要使用启动 AL2023 AMI CloudFormation，请使用以下模板之一。

**注意**  
`x86_64`和`Arm64` AMIs 都需要不同的实例类型。有关更多信息，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。

`JSON` 模板：

```
{
  "Parameters": {
    "LatestAmiId": {
      "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>",
      "Default": "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-default-x86_64"
    }
  },
  "Resources": {
    "MyEC2Instance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "InstanceType": "t2.large",
        "ImageId": {
          "Ref": "LatestAmiId"
        }
      }
    }
  }
}
```

`YAML` 模板：

```
Parameters:
  LatestAmiId:
    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
    Default: '/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-default-x86_64'

Resources:
  Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      InstanceType: 't2.large'
      ImageId: !Ref LatestAmiId
```

如果需要，请务必替换“Default”部分末尾的 AMI 参数。可以使用以下参数值：
+ `al2023-ami-kernel-6.1-arm64`，适用于 arm64 架构
+ `al2023-ami-minimal-kernel-6.1-arm64`，适用于 arm64 架构（AMI 最低版本）
+ `al2023-ami-kernel-6.1-x86_64`，适用于 x86\$164 架构
+ `al2023-ami-minimal-kernel-6.1-x86_64`，适用于 x86\$164 架构（AMI 最低版本）

以下是动态内核规范。每次主要内核版本更新时，默认内核版本都会自动更改。
+ `al2023-ami-kernel-default-arm64`，适用于 arm64 架构
+ `al2023-ami-minimal-kernel-default-arm64`，适用于 arm64 架构（AMI 最低版本）
+ `al2023-ami-kernel-default-x86_64`，适用于 x86\$164 架构
+ `al2023-ami-minimal-kernel-default-x86_64`，适用于 x86\$164 架构（AMI 最低版本）

## AL2023 使用特定的 AMI ID 启动
<a name="launch-by-ami-id"></a>

您可以使用 AMI ID 启动特定的 AL2023 AMI。您可以通过查看 Amazon EC2 控制台中的 AMI 列表来确定需要哪个 AL2023 AMI ID。或者，你可以使用 AWS Systems Manager。如果您使用的是 Systems Manager，请务必从上一节中列出的别名中选择 AMI 别名。有关更多信息，请参阅[ IDs 使用 AWS Systems Manager 参数存储查询最新的 Amazon Linux AMI](https://aws.amazon.com/blogs/compute/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/)。

## AL2023 AMI 的弃用和生命周期
<a name="ami-deprecation"></a>

每个新 AL2023 版本都包含一个新的 AMI。AMI 注册后，会标记有弃用日期。每个 AL2023 AMI 的弃用日期为自发布之日起 90 天，[AL2023 上的内核实时修补](live-patching.md)以匹配为每个内核版本提供的时间段。

**注意**  
90 天弃用日期指的是单个 AMI，并不指 AL2023 [发布频率](release-cadence.md)或产品支持期。

有关 AMI 弃用的更多信息，请参阅《Amazon EC2 用户指南》**中的[弃用 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html)。

定期使用更新的 AMI 启动实例，可确保实例启动时有最新的安全更新，包括更新的内核。如果您启动先前版本的 AMI 并应用更新，则该实例在一段时间内会没有最新的安全更新。为确保您使用的是最新的 AMI，建议您使用 SSM 参数。

有关如何使用 SSM 参数启动实例的更多信息，请参阅：
+ [AL2023 使用 SSM 参数启动和 AWS CLI](#launch-via-aws-cli)
+ [使用启动最新的 AL2023 AMI CloudFormation](#launch-from-cloudformation)

# 连接到 AL2023 实例
<a name="connecting-to-instances"></a>

使用 SSH 或 AWS Systems Manager 连接到您的 AL2023 实例。

**使用 SSH 连接到您的实例**  
有关如何使用 SSH 连接到 Linux 实例的说明，请参阅*《Amazon EC2 用户指南》*中的[使用 SSH 连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)。

**使用 Connect 连接到您的实例 AWS Systems Manager**  
有关 AWS Systems Manager 如何使用连接 AL2023 实例的说明，请参阅 *Amazon EC2 用户指南*中的[使用会话管理器连接您的 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/session-manager.html)。

**使用 Amazon EC2 Instance Connect**  
AL2023 AMI（不包括 AMI 最低版本）默认安装了 EC2 Instance Connect 代理。要将 EC2 Instance Connect 与从最小 AMI 启动的 AL2023 实例一起使用，您必须安装该`ec2-instance-connect`软件包。有关使用 EC2 Instance Connect 的说明，请参阅*《Amazon EC2 用户指南》*中的[使用 EC2 Instance Connect 连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-eic.html)。

# 比较 AL2023 标准和最小值 AMIs
<a name="AMI-minimal-and-standard-differences"></a>

您可以使用标准（默认）或最低 AL2023 AMI 版本启动 Amazon EC2 实例。有关如何启动标准或 AMI 最低版本类型的 Amazon EC2 实例的说明，请参阅 [Amazon EC2 上的 AL2023](ec2.md)。

标准 AL2023 AMI 安装了所有最常用的应用程序和工具。如果您想快速入门并且对自定义 AMI 不感兴趣，建议您使用标准 AMI。

最小 AL2023 AMI 是简化的基本版本，仅包含运行操作系统 (OS) 所需的最基本的工具和实用程序。如果您希望操作系统占用空间尽可能小，建议您使用AMI 最低版本。AMI 最低版本 可以稍微降低磁盘空间占用，提高长期成本效益。如果您想要更小的操作系统并且不介意手动安装工具和应用程序，则AMI 最低版本 是合适的选项。

容器镜像更接近包集中的 AL2023 最小 AMI。

# 比较 Amazon Linux 2023 映像上安装的软件包
<a name="image-comparison"></a>

AMI、Minimal AL2023 AMI 和容器镜像上的 RPMs 当前镜像的比较。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/image-comparison.html)

# AL2023 在容器中使用
<a name="container"></a>

**注意**  
 有关如何使用在 Amazon ECS AL2023 上托管容器化工作负载的更多信息，请参阅。[AL2023 for Amazon ECS 容器托管](ecs.md)

 根据用例，有几种方法 AL2023 可以在容器内部使用。与[AL2023 基本容器镜像](base-container.md)亚马逊 Linux 2 容器镜像和最小的 AMI AL2023 最为相似。

 对于高级用户，我们提供了在 AL2023 .2 版本中引入的最小容器镜像，以及描述如何构建[基本容器的文档。](barebones-containers.md)

 AL2023 也可以用来托管容器化工作负载，既可以是 AL2023基于容器镜像，也可以是基于其他 Linux 发行版的容器。您可以使用 [AL2023 for Amazon ECS 容器托管](ecs.md)，也可以直接使用提供的容器运行时包。`docker``containerd`、和`nerdctl`软件包可供安装和使用 AL2023。

**Topics**
+ [使用 AL2023 基本容器镜像](base-container.md)
+ [AL2023 最小容器镜像](minimal-container.md)
+ [构建基本容器镜像 AL2023](barebones-containers.md)
+ [比较 Amazon Linux 2023 容器映像上安装的软件包](al2023-container-image-types.md)
+ [比较 Amazon Linux 2023 AMI 最低版本 和容器映像上安装的软件包](al2023-container-ami.md)

# 使用 AL2023 基本容器镜像
<a name="base-container"></a>

 AL2023 容器映像由 AL2023 AMI 中包含的相同软件组件构建。作为 Docker 工作负载的基本映像，它可用在任何环境中。如果您在 [Amazon Elastic Compute Cloud](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/) (Amazon EC2) 中针对应用程序使用 Amazon Linux AMI，就可以使用 Amazon Linux 容器映像将您的应用程序容器化。

在本地开发环境中使用 Amazon Linux 容器镜像，然后使用亚马逊弹性容器服务 (Amazon ECS) 将您的应用程序推送到 AWS 使用[亚马逊弹性容器服务](https://docs.aws.amazon.com/AmazonECS/latest/userguide/) (Amazon ECS)。有关更多信息，请参阅《Amazon Elastic Container Registry 用户指南》**中的[将 Amazon ECR 映像与 Amazon ECS 结合使用](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html)。

Amazon Linux 容器映像在 Amazon ECR Public 上可用。您可以 AL2023 通过您的指定 AWS 代表提供反馈，也可以通过在 ama [zon-linux-](https://github.com/amazonlinux/amazon-linux-2023/issues) 2023 存储库中提交问题来提供反馈。 GitHub

****从 Amazon ECR Public 中提取 Amazon Linux 容器映像****

1. 对您的 Amazon Linux Public 注册表进行 Docker 客户端身份验证。验证令牌的有效期为 12 小时。有关更多信息，请参阅《Amazon Elastic Container Registry 用户指南》**中的[私有注册表身份验证](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html)。
**注意**  
最新版本的 AWS CLI 版本 2 支持该**get-login-password**命令。有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[安装 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

   ```
   $ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
   ```

   输出如下所示。

   ```
   Login succeeded
   ```

1. 运行 **docker pull** 命令以拉取 Amazon Linux 容器映像。要在 Amazon ECR 公开映像浏览馆中查看 Amazon Linux 容器映像，请参阅 [Amazon ECR 公开映像浏览馆 - amazonlinux](https://gallery.ecr.aws/amazonlinux/amazonlinux)。
**注意**  
拉取 AL2023 Docker容器镜像时，您可以使用以下格式之一的标签：  
要获取最新版本的 AL2023 容器镜像，请使用`:2023`标签。
要获取的特定版本 AL2023，可以使用以下格式：  
`:2023.[0-7 release quarter].[release date].[build number]`
以下示例使用标签`:2023`并提取最新的可用容器映像 AL2023。

   ```
   $ docker pull public.ecr.aws/amazonlinux/amazonlinux:2023
   ```

1. （可选）在本地运行容器。

   ```
   $ docker run -it --security-opt seccomp=unconfined public.ecr.aws/amazonlinux/amazonlinux:2023 /bin/bash
   ```

**从 Docker Hub 提取 AL2023 容器镜像**

1. 使用**docker pull**命令拉取 AL2023 容器镜像。

   ```
   $ docker pull amazonlinux:2023
   ```

1. （可选）在本地运行容器。

   ```
   $ docker run -it amazonlinux:2023 /bin/bash
   ```
**注意**  
的容器映像仅 AL2023 使用软件`dnf`包管理器来安装软件包。这意味着没有 `amazon-linux-extras` 或等效的命令可以用于其他软件。

# AL2023 最小容器镜像
<a name="minimal-container"></a>

**注意**  
 标准 AL2023 容器镜像适用于大多数用例，适应最小的容器镜像可能比适应 AL2023 基本容器镜像要花更多的精力。

 AL2023.2 中引入 AL2023 的最小容器镜像与基础容器镜像不同，因为它只包含安装其他软件包所需的最低限度的软件包。最小容器映像被设计为最小程序包集合，而非便捷程序包集合。

 AL2023 最小容器镜像由中已有的软件组件构建 AL2023。最小容器映像的关键区别在于使用 `microdnf` 来提供 `dnf` 程序包管理器，而非功能齐全的基于 Python 的 `dnf`。这样可以缩小最小容器映像，但要权衡一下没有`dnf`包管理器的完整功能集（包含在基础容器镜像中 AL2023 AMIs ）。

 最 AL2023 小的容器镜像构成了 `provided.al2023` AWS Lambda 运行时环境的基础。

 有关最小容器映像中包含的程序包的详细列表，请参阅 [比较 Amazon Linux 2023 容器映像上安装的软件包](al2023-container-image-types.md)。

## 最小容器映像大小
<a name="container-minimal-size"></a>

 由于 AL2023 最小容器镜像包含的包比 AL2023基础容器镜像少，因此它也要小得多。下表比较了当前和过去版本的 Amazon Linux 的容器映像选项。

**注意**  
 映像大小如 [Amazon ECR 公开映像浏览馆上的 Amazon Linux](https://gallery.ecr.aws/amazonlinux/amazonlinux) 所示。


| Image | 版本 | 映像大小 | 备注 | 
| --- | --- | --- | --- | 
| 亚马逊 Linux (1AL1) | 2018.03.0.20230918.0 | 62.3MB | 仅限 x86-64 | 
| Amazon Linux 2 | 2.0.20230926.0 | 64.2MB | aarch64 比 x86-64 大 1.6MB | 
| Amazon Linux 2023 基本容器映像 | 2023.2.20231002.0 | 52.4MB |  | 
| Amazon Linux 2023 最小容器映像 | 2023.2.20231002.0-minimal | 35.2MB |  | 

## 使用 AL2023 最小容器镜像
<a name="using-container-minimal"></a>

 AL2023 最小容器镜像在上ECR可用，`2023-minimal`标签将始终指向 AL2023 基于最新版本的最小容器镜像，而`minimal`标签可能会更新为更新的 Amazon Linux 版本 AL2023。

 您可以使用 `docker` 拉取这些标签，示例如下：

```
$ docker pull public.ecr.aws/amazonlinux/amazonlinux:minimal
```

```
$ docker pull public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
```

以下示例展示了采用最小容器映像并在其上安装 GCC 的 `Dockerfile` 的示例：

```
FROM public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
RUN dnf install -y gcc && dnf clean all
```

# 构建基本容器镜像 AL2023
<a name="barebones-containers"></a>

构建 AL2023 容器镜像的软件组件与 AL2023 AMI 中包含的软件组件相同。它包含一种软件，使基本容器层能够表现出类似于在 Amazon EC2 实例上运行的行为，例如程序包管理器 `dnf`。这部分介绍如何从头构建一个仅包含应用程序所需最低限度依赖项的容器。

**注意**  
标准 AL2023 容器镜像适用于大多数用例。使用标准容器映像可以轻松地在映像之上进行构建。精简版容器映像会使得在您的映像基础上进行构建变得更加困难。

**针对应用程序创建具有最少依赖项的容器**

1. 确定运行时依赖项。这将因您的应用程序而异。

1. 构造一个构建 `FROM scratch` 的 `Dockerfile`/`Containerfile`。`Dockerfile` 的以下示例可用于构建仅包含 `bash` shell 及其依赖项的容器。

   ```
   FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build
   RUN mkdir /sysroot
   RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \
     --installroot /sysroot \
     -y \
     --setopt=install_weak_deps=False \
     install bash
   
   FROM scratch
   COPY --from=build /sysroot /
   WORKDIR /
   ENTRYPOINT ["/bin/bash"]
   ```

   1. `Dockerfile` 的运行方式是：

     1.  启动名为的 AL2023 容器`build`。该容器将用于引导基本容器，该容器本身不会部署，而会生成要部署的容器。

     1.  创建 `/sysroot` 目录。该目录将是 `build` 容器安装基本容器所需的依赖项的地方。在接下来的步骤中，`/sysroot` 路径将被打包为我们的基本映像的根目录。

         以这种`dnf`方式使用`--installroot`选项就是我们创建其他 AL2023 图像的方式。`dnf` 的一项功能使得安装程序和映像创建工具能够正常工作。

     1.  调用 `dnf` 以将软件包安装到 `/sysroot`。

         `rpm -q system-release --qf '%{VERSION}'` 命令会查询 (`-q`) `system-release` 软件包，设置查询格式 (`--qf`) 以打印出所查询的软件包的版本（`%{VERSION}` 变量是 `RPM` 版本的 `rpm` 变量）。

         通过将 `dnf` 的 `--releasever` 参数设置为 `build` 容器中的 `system-release` 版本，每当发布更新的 Amazon Linux 容器基本映像时，都可以使用 `Dockerfile` 来重建基本容器。

         可以将其设置为任何亚马逊 Linux 2023 版本，例如 2023.10.20260325。`--releasever`这样做意味着`build`容器将以最新 AL2023版本运行，但无论当前版本如何，都要从 2023.10.20260325 开始构建准系统容器。 AL2023 

         `--setopt=install_weak_deps=False` 配置选项可告诉 `dnf` 只安装*必需* 的依赖项，而不是推荐或建议的依赖项。

     1. 将已安装的系统复制到空白 (`FROM scratch`) 容器的根目录中。

     1. 在本例 `/bin/bash` 中，将 `ENTRYPOINT` 设置为所需的二进制文件。

1. 创建一个空目录，将步骤 2 中示例的内容添加到名为 `Dockerfile` 的文件中。

   ```
   $ mkdir al2023-barebones-bash-example
   	$ cd al2023-barebones-bash-example
   	$ cat > Dockerfile <<EOF
   FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build
   RUN mkdir /sysroot
   RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \
     --installroot /sysroot \
     -y \
     --setopt=install_weak_deps=False \
     install bash && dnf --installroot /sysroot clean all
   
   FROM scratch
   COPY --from=build /sysroot /
   WORKDIR /
   ENTRYPOINT ["/bin/bash"]
   EOF
   ```

1. 通过运行以下命令构建容器。

   ```
   $ docker build -t al2023-barebones-bash-example
   ```

1. 使用以下命令运行容器，了解仅限 `bash` 的最小容器的运行方式。

   ```
   $ docker run -it --rm al2023-barebones-bash-example
   bash-5.2# rpm
   bash: rpm: command not found
   bash-5.2# du -sh /usr/
   bash: du: command not found
   bash-5.2# ls
   bash: ls: command not found
   bash-5.2# echo /bin/*
   /bin/alias /bin/bash /bin/bashbug /bin/bashbug-64 /bin/bg /bin/catchsegv /bin/cd /bin/command /bin/fc /bin/fg /bin/gencat /bin/getconf /bin/getent /bin/getopts /bin/hash /bin/iconv /bin/jobs /bin/ld.so /bin/ldd /bin/locale /bin/localedef /bin/pldd /bin/read /bin/sh /bin/sotruss /bin/sprof /bin/type /bin/tzselect /bin/ulimit /bin/umask /bin/unalias /bin/wait /bin/zdump
   ```

举一个更实际的例子，以下过程可为显示 `Hello World!` 的一个 C 应用程序构建一个容器。

1. 创建一个空目录并添加 C 源代码和 `Dockerfile`。

   ```
   $ mkdir al2023-barebones-c-hello-world-example
   $ cd al2023-barebones-c-hello-world-example
   $ cat > hello-world.c <<EOF
   #include <stdio.h>
   int main(void)
   {
     printf("Hello World!\n");
     return 0;
   }
   EOF
   
   $ cat > Dockerfile <<EOF
   FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build
   COPY hello-world.c /
   RUN dnf -y install gcc
   RUN gcc -o hello-world hello-world.c
   RUN mkdir /sysroot
   RUN mv hello-world /sysroot/
   RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \
     --installroot /sysroot \
     -y \
     --setopt=install_weak_deps=False \
     install glibc && dnf --installroot /sysroot clean all
   
   FROM scratch
   COPY --from=build /sysroot /
   WORKDIR /
   ENTRYPOINT ["/hello-world"]
   EOF
   ```

1. 使用以下命令构建容器。

   ```
   $ docker build -t al2023-barebones-c-hello-world-example .
   ```

1. 使用以下命令运行容器。

   ```
   $ docker run -it --rm al2023-barebones-c-hello-world-example
   Hello World!
   ```

# 比较 Amazon Linux 2023 容器映像上安装的软件包
<a name="al2023-container-image-types"></a>

 AL2023 基础容器镜像上的 RPMs 当前图像与 AL2023 最小容器镜像上的 RPMs 当前图像的比较。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/al2023-container-image-types.html)

# 比较 Amazon Linux 2023 AMI 最低版本 和容器映像上安装的软件包
<a name="al2023-container-ami"></a>

将 Minimi AL2023 al AMI 上的 RPMs 当前图像与 AL2023 基础镜像和最小容器镜像上的 RPMs 当前图像进行比较。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/al2023-container-ami.html)

# 在 AWS Elastic Beanstalk 上的 AL2023
<a name="beanstalk"></a>

 AWS Elastic Beanstalk 是一项用于部署和扩展 Web 应用程序和服务的服务。您只需上传代码，Elastic Beanstalk 会自动处理部署 — 从容量配置、负载平衡、自动扩展到应用程序运行状况监控。有关更多信息，请参阅 [AWS Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/)。

 要使用 Elastic Beanstalk，您需要创建一个应用程序，将应用程序版本以应用程序源包的形式（如 Java .war 文件）上传到 Elastic Beanstalk，然后提供一些有关该应用程序的信息。Elastic Beanstalk 会自动启动环境，然后创建并配置运行代码所需的 AWS 资源。有关更多信息，请参阅 [AWS Elastic Beanstalk 开发人员指南](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html)。

 Elastic Beanstalk Linux 平台使用 Amazon EC2 实例，这些实例运行 Amazon Linux。截至 2023 年 8 月 4 日，Elastic Beanstalk 提供以下基于 Amazon Linux 2023 的平台分支：Docker、Tomcat、Java SE、Node.js、PHP 和 Python。Elastic Beanstalk 正在努力向更多的 Elastic Beanstalk 平台发布对 AL2023 的支持。

 有关 Elastic Beanstalk 平台支持和当前基于 AL2023 构建的平台的完整列表，可在 *Elastic Beanstalk* 开发人员指南中的 [Elastic Beanstalk Linux 平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux.html)部分找到。

 有关新的 Elastic Beanstalk 平台和现有平台版本的发布说明，可在 [Elastic Beanstalk 发布说明](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/relnotes.html)中找到。

# 在 AWS CloudShell 中使用 AL2023
<a name="cloudshell"></a>

 AWS CloudShell 是一个已经事先完成身份验证的浏览器式 Shell，您可以直接从 启动它。AWS 管理控制台您可以通过几种不同的方式从 AWS 管理控制台 导航到 CloudShell。有关更多信息，请参阅[如何开始使用 AWS CloudShell？](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html#how-to-get-started)。

 AWS CloudShell 目前基于 Amazon Linux 2，将迁移到 AL2023。从 2023 年 12 月 4 日开始，向 AL2023 的迁移将开始在所有 AWS 区域 推出。有关 CloudShell 迁移到 AL2023 的更多信息，请参阅 [AWS CloudShell 从 Amazon Linux 2 迁移到 Amazon Linux 2023](https://docs.aws.amazon.com/cloudshell/latest/userguide/cloudshell-AL2023-migration.html)。

# 使用基于 AL2023 的 Amazon ECS AMI 托管容器化工作负载
<a name="ecs"></a>

**注意**  
 有关如何在容器内使用 AL2023 的更多信息，请参阅 [AL2023 在容器里](container.md)。

 Amazon Elastic Container Service (Amazon ECS) 是一种完全托管式的容器编排服务，可以帮助您轻松部署、管理和扩展容器化应用程序。作为一种完全托管式服务，Amazon ECS 内置有 AWS 配置和操作最佳实践。它与 AWS 和第三方工具如 Amazon Elastic Container Registry (Amazon ECR) 和 Docker 集成。这种集成使团队更容易专注于构建应用程序而不是环境。您可以在云端跨 AWS 区域运行和扩展容器工作负载，省去了管理控制面板的繁琐。

您可以使用基于 AL2023 的 Amazon ECS 优化 AMI 在 AL2023 上托管容器化工作负载。更多信息，请参阅 [Amazon ECS-optimized AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html) 

## 与 AL2 相比，Amazon ECS 在 AL2023 中的变更
<a name="ecs-al2-changes"></a>

 与 AL2 一样，AL2023 提供了作为 Amazon ECS Linux 实例运行所需的基础程序包。在 AL2 中，`containerd`、`docker` 和 `ecs-init` 程序包通过 `amazon-linux-extras` 提供，而 AL2023 将这些程序包包含在核心存储库中。

 借助通过版本控制的存储库的确定性升级功能，默认情况下，每个 AL2023 AMI 都锁定到特定的存储库版本。AL2023 Amazon ECS 优化 AMI 也是如此。对环境的所有更新都可以在部署前进行仔细的管理和测试，并在出现问题时提供一种简单的方法来回退到先前 AMI 的内容。有关此 AL2023 功能的更多信息，请参阅[通过版本控制的存储库进行确定性升级 AL2023](deterministic-upgrades.md)。

 AL2023 切换到了 cgroup v2，取代了 AL2 支持的 cgroup v1 接口。有关更多信息，请参阅 [统一控制组层次结构 (cgroup v2)](cgroupv2.md)。

**注意**  
 [2023.2.20230920](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.2.20230920.html)（首个 AL2023.2 发布版）之前的 AL2023 版本在 `systemd` 中存在一个错误，不能正确处理 cgroup 中的内存不足（OOM）问题。cgroup 中的所有进程总是被全部终止，而非按预期行为由 OOM-Killer 逐个选择进程终止。  
 与 AL2 的行为相比，这是一个功能回归，并已在 2023.2.20230920 版本的 AL2023 中修复。

 构建 Amazon ECS 优化 AMI 的代码可在 [amazon-ecs-ami GitHub 项目](https://github.com/aws/amazon-ecs-ami)上找到。[发布说明](https://github.com/aws/amazon-ecs-ami/releases)描述了哪个 AL2023 版本对应哪个 Amazon ECS AMI 版本。

## 自定义基于 AL2023 的 Amazon ECS 优化的 AMI
<a name="custom-ecs-amis"></a>

**重要**  
 我们建议您使用 Amazon ECS 优化的 AL2023 AMI。更多信息，请参阅*《Amazon Elastic Container Service 开发人员指南》*中的 [Amazon ECS 优化 AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)。

 您可以使用 Amazon ECS 创建自定义 AMI 所用的同样的构建脚本。更多信息，请参阅 [Amazon ECS 优化 Linux AMI 构建脚本](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-build-scripts.html)。

# 在 AL2023 上使用 Amazon Elastic File System
<a name="efs"></a>

Amazon Elastic File System (Amazon EFS) 提供无服务器的完全弹性文件存储，这使您无需预置或管理存储容量和性能即可共享文件数据。Amazon EFS 可在不中断应用程序的情况下按需扩展到 PB 级，并可在您添加和移除文件时自动扩涨或收缩。Amazon EFS 具有简单的 Web 服务界面，可让您快速方便地创建和配置文件系统。该服务为您管理所有文件存储基础设施，这意味着您可以避免部署、修补和维护复杂文件系统配置的复杂性。

Amazon EFS 支持 Network File System 版本 4（NFSv4.1 和 NFSv4.0）协议，因此，您当前使用的应用程序和工具可以与 Amazon EFS 无缝协作。多个计算实例（包括 Amazon EC2、Amazon ECS 和 AWS Lambda）可以同时访问一个 Amazon EFS 文件系统。因此，一个 EFS 文件系统可以为多个计算实例或服务器上运行的工作负载和应用程序提供通用数据源。

## 在 AL2023 上安装 `amazon-efs-utils`
<a name="efs-utils"></a>

 `amazon-efs-utils` 程序包在 AL2023 存储库中可用，可安装并用于访问 Amazon EFS 文件系统。

**在 AL2023 上安装 `amazon-efs-utils` 软件包**
+ 使用以下命令安装 `amazon-efs-utils`。

  ```
  $ dnf -y install amazon-efs-utils
  ```

## 在 AL2023 上装载 Amazon EFS 文件系统
<a name="mount-efs"></a>

 安装 `amazon-efs-utils` 后，您可以在 AL2023 实例上挂载 Amazon EFS 文件系统。

**在 AL2023 上装载 Amazon EFS 文件系统**
+ 要使用文件系统 ID 进行挂载，请使用以下命令。

  ```
  sudo mount -t efs file-system-id efs-mount-point/
  ```

 您也可以装载该文件系统，以便使用 TLS 或 DNS 名称或装载目标 IP 而非文件系统 id 来加密传输中的数据。有关更多信息，请参阅[使用 EFS 装载帮助程序在 Amazon Linux 实例上装载文件系统](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-mount-helper-ec2-linux.html)。

# 使用基于 Amazon EMR AL2023
<a name="emr"></a>

 Amazon EMR 是一种 Web 服务，它使您可以轻松地利用 Apache Hadoop 和 AWS所提供的服务高效地处理海量数据。

## AL2023 基于亚马逊 EMR 的版本
<a name="emr-ami"></a>

 亚马逊 EMR 7.0.0 版本是第一个在此基础上构建的版本。 AL2023此版本 AL2023 是亚马逊 EMR 的基本操作系统，为亚马逊 EMR 带来了所有优点。 AL2023 更多信息，请参阅 [Amazon EMR 7.0.0 发布说明](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-700-release.html)。

## AL2023 基于 EKS 的 Amazon EMR
<a name="emr-on-eks"></a>

 EKS 6.13 上的 Amazon EMR 是第一个 AL2023 作为选项推出的版本。在此版本中，您可以将 Spark AL2023 作为操作系统与 Java 17 运行时一起启动。更多信息，请参阅 [Amazon EMR on EKS 6.13 发布说明](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-6.13.0.html)以及所有 [Amazon EMR on EKS 发布说明](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-releases.html)。

# AL2023 在中使用 AWS Lambda
<a name="lambda"></a>

 使用 AWS Lambda，您无需预置或管理服务器即可运行代码。您只需为消耗的计算时间付费——代码不运行时不会产生费用。您可以运行几乎任何类型的应用程序或后端服务的代码——完全无需管理。只需上传您的代码，Lambda 就会处理以高可用性运行和扩展您的代码所需的一切。

## AL2023 `provided.al2023`托管运行时和容器镜像
<a name="lambda-provided-al2023"></a>

 `provided.al2023`基本运行时基于[AL2023 最小容器映像](https://docs.aws.amazon.com/linux/al2023/ug/minimal-container.html)，并提供基 AL2023 于 Lambda 托管的运行时和[容器基础](https://gallery.ecr.aws/lambda/provided)映像。由于`provided.al2023`运行时间基于 AL2023 最小的容器映像，因此小于 40 MB 的运行时间要比大约 109 MB 的`provided.al2`运行时间小得多。

 更多信息，请参阅 [Lambda 运行时](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)和[使用 Lambda 容器映像](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)。

## AL2023 基于 Lambda 运行时
<a name="lambda-al2023-based"></a>

 未来发布的托管语言运行时（例如 Node.js 20、Python 3.12、Java 21 和 .NET 8）基于基于 AL2023 运行时的[公告](https://aws.amazon.com/blogs/compute/introducing-the-amazon-linux-2023-runtime-for-aws-lambda/)中所述，并将`provided.al2023`用作基础映像。 AL2023 

**AL2023 基于 Lambda 函数**
+ [AL2023 写入的 Lambda 函数 Go](go.md#lambda-go)
+ [AL2023 写入的 Lambda 函数 Rust](rust.md#lambda-rust)

 有关更多信息，请参阅*《AWS Lambda 开发人员指南》*中的 [Lambda 运行时系统](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html)。