Skip to main content

在 AWS Lightsail 上部署 Backstage

**免责声明:"deploy "命令仍处于试验阶段,请勿在生产部署中使用 "deploy "命令。

要开始使用 Backstage,通常需要在云提供商上建立一个实例,并与团队共享,以便他们进行试验。 为了使这种云部署更容易,我们建立了一个deploy命令在 AWS 上建立一个概念验证实例(使用 Lightsail)。

什么是 AWS Lightsail

提示

AWS 提供长达三个月的免费层级,每月 10 美元的容器服务(微 -1 节点)。 默认情况下,我们使用nano节点,因此如果您是新用户,使用这种方法不会造成任何损失。 如需了解更多信息,请参阅定价文件。

:::

AWS Lightsail 提供了在云中运行容器的简单方法。 要了解有关 AWS Lightsail 的更多信息,请参阅官方文件.

在 AWS 中创建用户

  • 打开 AWS 控制台并导航至 IAM 部分 * 在左侧菜单中点击 "用户",然后点击 "添加用户" * 指定一个用户名,然后点击 "下一步" * 之后你可以分配权限,选择 "直接附加策略",然后点击 "创建策略"。 这将带你进入一个新窗口,你可以在其中创建一个基于 "JSON "的新策略。 复制以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ecr:DescribeImageReplicationStatus",
"ecr:ListTagsForResource",
"ecr:UploadLayerPart",
"ecr:BatchGetRepositoryScanningConfiguration",
"ecr:DeleteRepository",
"ecr:GetRegistryScanningConfiguration",
"ecr:CompleteLayerUpload",
"ecr:TagResource",
"ecr:DescribeRepositories",
"ecr:DeleteRepositoryPolicy",
"ecr:BatchCheckLayerAvailability",
"ecr:GetLifecyclePolicy",
"ecr:GetRegistryPolicy",
"ecr:PutLifecyclePolicy",
"ecr:DescribeImageScanFindings",
"ecr:GetLifecyclePolicyPreview",
"ecr:CreateRepository",
"ecr:DescribeRegistry",
"ecr:GetDownloadUrlForLayer",
"ecr:GetAuthorizationToken",
"ecr:DeleteLifecyclePolicy",
"ecr:PutImage",
"ecr:UntagResource",
"ecr:SetRepositoryPolicy",
"ecr:BatchGetImage",
"ecr:InitiateLayerUpload",
"ecr:GetRepositoryPolicy",
"lightsail:CreateContainerService",
"lightsail:GetKeyPair",
"lightsail:GetContainerServiceDeployments",
"lightsail:CreateContainerServiceRegistryLogin",
"lightsail:GetContainerImages",
"lightsail:UntagResource",
"lightsail:RegisterContainerImage",
"lightsail:GetContainerServices",
"lightsail:GetContainerServicePowers",
"lightsail:GetKeyPairs",
"lightsail:CreateContainerServiceDeployment",
"lightsail:GetContainerServiceMetricData",
"lightsail:GetContainerAPIMetadata",
"lightsail:DeleteContainerService",
"lightsail:GetContainerLog",
"lightsail:TagResource"
],
"Resource": "*"
},
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [],
"Resource": []
}
]
}

然后点击Next然后点击Create policy.

  • 回到用户创建窗口,按下刷新按钮并搜索你刚刚创建的策略。 现在,创建用户。 * 现在你将被重定向到所有用户,点击你刚刚创建的用户并点击 "安全证书" * 滚动到下面并点击 "创建访问密钥" * 选择 "命令行界面(CLI)" * 现在导出以下值
$ export AWS_ACCESS_KEY_ID=... (first value)
$ export AWS_SECRET_ACCESS_KEY=.... (second secret value)

配置 Pulumi CLI

其次,安装普卢米 CLI-backstage-deploy使用它来简化云资源的管理(Pulumi 允许我们简单地指定所需的 "目标云状态",Pulumi 将智能地创建/修改/删除资源以达到该状态。 很好!)。

然后,我们需要执行以下命令来设置 Pulumi:

提示

确保将密码存储在安全的地方,因为它用于加密/解密 Pulumi 配置。

:::

$ pulumi login --local
$ export PULUMI_CONFIG_PASSPHRASE="<your-secret>"

通过使用pulumi login --local环境变量PULUMI_CONFIG_PASSPHRASE会被 Pulumi 用来为堆栈生成唯一的密钥

在 Lightsail 上部署实例

提示

确保docker在开始本节之前,请确保您的计算机正在运行"......"。

:::

更改本地实例后,就可以在 Lightsail 上进行部署了。

首先,我们需要配置一个新的app-config文件,并更新baseUrl.

$ touch app-config.deployment.yaml

然后用以下 yaml 更新文件:

app:
baseUrl: ${BACKSTAGE_HOST}

backend:
baseUrl: ${BACKSTAGE_HOST}

环境变量BACKSTAGE_HOST将设置为 AWS Lightsail 创建的端点。

现在我们可以部署实例了!

$ npx backstage-deploy aws --stack backstage-poc --create-dockerfile

在命令的第一部分,我们指定要在 AWS 上部署实例。 使用堆栈选项,我们将为 Pulumi 提供容器部署的参考。 此外,使用--create-dockerfile选项,将有一个Dockerfile.dockerignore在项目根目录中创建。

运行该命令后,Pulumi 将开始在 AWS 中为您创建以下资源:

  • ECR 存储库 * Lightsail 容器服务 * Lightsail 容器服务部署 * 允许 Lightsail 从 ECR 提取数据的策略

如果是第一次构建 Docker 映像,可能需要一段时间才能完全配置好一切。 命令运行完成后,您的 Backstage 实例就应该可以在 AWS Lightsail 上运行了!🎉 🎉🎉🎉🎉🎉🎉🎉。

清理资源

清理资源也是通过部署命令完成的。

$ npx backstage-deploy aws --stack backstage-poc --destroy

这将删除由deploy指挥。