如何使用 Terraform 在 AWS App Runner 上部署容器化应用程序
AWS App Runner 是一项完全托管的服务,使开发人员能够快速大规模地部署容器化 Web 应用程序和 API,而无需具备基础设施经验。您可以从源代码或容器映像开始。
这篇文章将向您展示如何使用 AWS App Runner 部署容器化应用程序。为此,我们将使用 Terraform 将一个简单的容器化 Python 应用程序部署到 AWS Runner。首先,我们将学习如何创建 Terraform AWS Provider,然后使用 Terraform 将一个简单的应用程序部署到我们的 AWS App Runner Service,最后,我们将拥有一个与公共端点一起工作的简单应用程序。
先决条件
在开始本教程之前,您需要以下内容:
-
一个 AWS 账户(您可以在这里免费创建一个)
-
在本地安装 Terraform 或者使用 AWS Cloud Shell,然后安装 Terraform;我在这里写了一篇关于如何做到这一点的文章
-
您选择的文本编辑器(我的建议是VS Code)
第一步:安装 Terraform
要安装 Terraform,请导航到Terraform 学习页面并根据您首选的操作系统按照说明进行操作。
要验证它是否已正确安装,您可以进行版本检查:
terraform version
进入全屏模式 退出全屏模式
如果安装成功,您将看到如下输出:
Terraform v1.2.5
on darwin_arm64
进入全屏模式 退出全屏模式
安装好 terraform 并准备好使用后,您需要通过在此处生成 API 访问密钥并配置 Terraform 来为您的用户账户配置 AWS 凭证。有很多方法可以做到这一点,但最简单的方法之一是将AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
设置为环境变量:
export AWS_ACCESS_KEY_ID=(your access key id)
export AWS_SECRET_ACCESS_KEY=(your secret access key)
进入全屏模式 退出全屏模式
第 2 步:配置 Terraform 块和 AWS Terraform Provider
接下来要做的是将 Terraform 配置为使用 AWS 提供程序进行配置。您需要在为项目创建的目录中创建一个名为main.tf
的文件。对于这个项目,我创建了一个名为terraform-apprunner
的目录,它将作为您的工作目录。
在 main.tf 文件中,您首先需要定义将用于配置的提供程序。
一旦我们定义了我们的提供者,我们将需要在我们的初始配置中定义三个资源。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.22.0"
}
}
}
# Configure the AWS Provider
provider "aws" {
region = "eu-west-1"
}
进入全屏模式 退出全屏模式
添加到我们刚才所做的:在 terraform 块中,我们需要一个 AWS 提供商。 Terraform 依赖称为“提供者”的插件与云提供商(如 AWS)进行交互,因为这正是我们正在使用的。
Provider Block:这会通知 Terraform 您将使用 AWS 提供商并希望在 eu-west-1 区域部署您的基础设施。
第二步:添加App runner资源块
有趣的部分来了!让我们将我们的 App runner 服务添加到main.tf
resource "aws_apprunner_service" "hello" {
auto_scaling_configuration_arn = aws_apprunner_auto_scaling_configuration_version.hello.arn
service_name = "hello-app-runner"
source_configuration {
image_repository {
image_configuration {
port = "8000" #The port that your application listens to in the container
}
image_identifier = "public.ecr.aws/aws-containers/hello-app-runner:latest"
image_repository_type = "ECR_PUBLIC"
}
}
}
output "apprunner_service_hello" {
value = aws_apprunner_service.hello
}
进入全屏模式 退出全屏模式
现在让我解释一下上面的代码块是做什么的。
resource
:资源块描述一个或多个基础设施对象,例如虚拟网络。接下来是资源的类型,名称。
service_name
:服务名称。
source_configuration
:要部署到 App Runner 服务的源。它可以是代码存储库或图像存储库。我们在 AWS ECR(弹性容器注册表)上使用了一个公共镜像。截至撰写本文时,Apprunner 仅支持来自 Private 和 Public ECR 的容器镜像。
output
:输出变量在构建配置时非常有用。输出值类似于函数返回值。
第 3 步:应用我们的配置
首先,我们初始化我们的工作目录以下载项目插件。命令是:
terraform init
进入全屏模式 退出全屏模式
默认情况下,提供程序代码下载到根目录下的 .terraform 文件夹中(您可能希望将其添加到 .gitignore)
现在您已经下载了提供程序代码,运行 terraform plan 命令:
terraform plan
进入全屏模式 退出全屏模式
terraform plan
命令可让您在执行之前预览 Terraform 将提供的内容。
现在是时候应用更改并在 App runner 上启动您的容器化应用程序了。
terraform apply
进入全屏模式 退出全屏模式
这将向您显示相同的计划输出,并要求您与Yes
确认是否要继续执行此计划。确认后,应用配置需要几分钟,您将看到 Terraform 打印出以下内容:
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
apprunner_service_hello = {
"arn" = "arn:aws:apprunner:eu-west-1:790783553687:service/terra-app-runner/8fbcddbda2e34cbcb48befbd9ef30632"
"auto_scaling_configuration_arn" = "arn:aws:apprunner:eu-west-1:790783553687:autoscalingconfiguration/DefaultConfiguration/1/00000000000000000000000000000001"
"encryption_configuration" = tolist([])
"health_check_configuration" = tolist([
{
"healthy_threshold" = 1
"interval" = 5
"path" = "/"
"protocol" = "TCP"
"timeout" = 2
"unhealthy_threshold" = 5
},
])
"id" = "arn:aws:apprunner:eu-west-1:790783553687:service/terra-app-runner/8fbcddbda2e34cbcb48befbd9ef30632"
"instance_configuration" = tolist([
{
"cpu" = "1024"
"instance_role_arn" = ""
"memory" = "2048"
},
])
"service_id" = "8fbcddbda2e34cbcb48befbd9ef30632"
"service_name" = "terra-app-runner"
"service_url" = "ajxqmh7ehq.eu-west-1.awsapprunner.com"
"source_configuration" = tolist([
{
"authentication_configuration" = tolist([])
"auto_deployments_enabled" = false
"code_repository" = tolist([])
"image_repository" = tolist([
{
"image_configuration" = tolist([
{
"port" = "8000"
"runtime_environment_variables" = tomap(null) /* of string */
"start_command" = ""
},
])
"image_identifier" = "public.ecr.aws/aws-containers/hello-app-runner:latest"
"image_repository_type" = "ECR_PUBLIC"
},
])
},
])
"status" = "RUNNING"
"tags" = tomap(null) /* of string */
"tags_all" = tomap({})
进入全屏模式 退出全屏模式
第 4 步:测试我们的应用程序
现在我们已经完成了这些步骤,是时候在 App runner 上测试配置的 App了。查找输出的 service_url 部分。你会看到这样的东西:
service_url = bg2hcjuckx.us-east-1.awsapprunner.com
进入全屏模式 退出全屏模式
复制 service\url 的值并在浏览器中尝试;您应该会看到类似于下面的屏幕截图的内容。
恭喜!我们已经在 App runner 上成功部署了一个容器化的应用程序。请注意,当您阅读本文时,上面的service _url
可能不可用。
参考
您可能会发现这些资源很有帮助。
-
AWS 应用程序运行器
-
AWS 应用程序运行器常见问题解答
感谢您阅读,并记得注册我的时事通讯,以便在我发布新文章时成为第一个学习的人。
更多推荐
所有评论(0)