gpt4 book ai didi

amazon-ec2 - EC2 设置 - 执行 UserData 脚本或克隆存储库?

转载 作者:行者123 更新时间:2023-12-03 07:20:40 26 4
gpt4 key购买 nike

我们最近构建并部署了一个物联网数据摄取管道,并将我们的架构以 aws lambda 为中心。现在,我们已经达到规模,其中一些 lambda 开始超时,我想使用临时 EC2 实例来处理这些运行时间较长的任务。

我有一个 lambda 设置,可以调用启动 ec2 实例并运行 UserData 脚本。这是涉及的相关代码:

import { EC2 } from 'aws-sdk'

const region = 'eu-central-1'
const ImageId = 'ami-0a02ee601d742e89f'
const InstanceType = 't2.micro'
const ec2 = new EC2({ apiVersion: '2016-11-15', region })

const ec2Scheduler = async () => {
const initScript = `#!/bin/bash
shutdown -h +5`
const UserData = new Buffer(initScript).toString('base64')
console.log(`Running EC2 instance with script: ${UserData}`)

const instance = await ec2
.runInstances({
ImageId,
InstanceType,
UserData,
MinCount: 1,
MaxCount: 1,
InstanceInitiatedShutdownBehavior: 'terminate',
})
.promise()
const instanceId = instance?.Instances?.[0]?.InstanceId
console.log(
`Ec2 instance with id ${instanceId} created. will auto shutdown in 5 minutes`
)
}

一切都很好,花花公子。除了我不知道如何将我的 javascript 可执行文件传输到我的临时 EC2 实例。

到这里怎么走?我目前正在考虑:A。在 Secretsmanager 中存储 bitbucket 凭证。然后使用我的 userdata 脚本安装 node/git 并从那里克隆存储库。b.更新我的部署管道以将 javascript 可执行文件存储在 s3 中,然后使用我的 userdata 脚本中的 aws cli 获取可执行文件并运行它。

这两个选项似乎都有点笨拙。有更直接/直接/懒惰的方法吗?

编辑======================

我认为我需要以一种我还不太清楚的方式调整我的思维模式。我的问题不是如何从 ec2 实例中获取 s3 中的代码,而是如何使用 cloudformation 指定在 s3 中可用的可执行文件。从使用 cloudformation/lambdas 开始,我习惯于编写如下内容:

  Scheduler:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs12.x
CodeUri: ../dist/task-scheduler

执行 package 命令后,CodeUri 中引用的代码将被捆绑并上传到 s3 部署存储桶,并可供 lambda 使用。我在这里想象一个类似的解决方案。我可以通过 codeUri 提供的资源类型,然后我的 ec2 实例可以从 s3 获取该资源类型并执行。

感谢迄今为止富有洞察力的评论!

最佳答案

常见做法是从 S3 存储桶下载脚本。 UserData 限制为 16KB,因此您无论如何都需要下载并执行任何大型脚本(除非您使用其中的文件烘焙 AMI)。

将其全部保留在 AWS 中以进行 PROD 会更容易,并且您希望 PROD 变得简单!

对于开发机器,我克隆存储库(复制 ssh key 后)并以这种方式设置它们。对于生产机器,其所有 Cloud Formation 均包含 UserData 和 S3(或 Artifactory)、存储在 SSM 参数存储中的任何凭证以及通过分配给 EC2 的 IAM 角色锁定的所有权限,该角色具有对 S3 存储桶的特定访问权限。

关键点是在进入 PROD 之前有一些控制,我们不会将存储库直接克隆到 PROD 机器,有一个构建、测试和部署阶段。开发人员会去哪里 - 如果需要的话,可以从分支克隆!

抱歉,我没有 Javascript/NodeJS 版本,这里有一个 x 平台 PowerShell 示例,您可以使用或至少按照我用来配置的步骤进行操作:

开发:

$region = 'us-west-1'
Write-Host 'Install NuGet, Git, SSH Keys directory and set region'
choco install git -y
$newPath = "$($env:PATH)C:\Program Files\Git\cmd;"
[Environment]::SetEnvironmentVariable( 'PATH', $newPath, "Machine")
$env:PATH = $newPath
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
install-module posh-git -force
import-module awspowershell
New-Item -ItemType Directory -Force -Path 'C:\Users\Administrator\.ssh' | out-null
$destinDir = "C:\Users\$($env:username)\.ssh"
$prefix = "tempcreds/$user/"
set-defaultawsregion -region $region
if ($user) {
Write-Host 'Download GitHub Keys: Copy-S3Object -bucketname ' + $bucket + ' -key ' + $($prefix) + 'YOURKEYNAME -localfile ' + $destinDir + '\YOURKEYNAME'
Copy-S3Object -bucketname $bucket -key "$($prefix)YOURKEYNAME" -localfile $destinDir\YOURKEYNAME -region $region
Copy-S3Object -bucketname $bucket -key "$($prefix)YOURKEYNAME.pub" -localfile $destinDir\YOURKEYNAME.pub -region $region

Write-Host 'Remove GitHub Keys: -key ' + $($prefix) + 'YOURKEYNAME'
Remove-S3Object -bucketname $bucket -key "$($prefix)YOURKEYNAME" -force -region $region
Remove-S3Object -bucketname $bucket -key "$($prefix)YOURKEYNAME.pub" -force -region $region

Write-Host 'Save the GitHub Known_Hosts file'
add-content -path "$destinDir\known_hosts" `
-value $githubKnownHosts
git config --global user.email $email
git config --global user.name $user
}

Write-Host 'cd to dev directory'
$devDir = 'C:\DEV'
new-item -itemtype directory -force -path $devDir | out-null
cd $devDir
Write-Host 'Execute git clone <git.com/YOUREPO>'
git clone <git.com/YOUREPO>.git

产品:

#using the AWS API with S3 fetch the powershell install script and execute it
$S3BucketName = "unique-bootstrap-bucketname"
$bootstrap = "install-YOURREPO.ps1"
$script = ($path + $bootstrap)
Set-DefaultAWSRegion -Region $region
Copy-S3Object -BucketName $S3BucketName -key $bootstrap -LocalFile ($path + $bootstrap)
& $script -S3Name $S3BucketName

关于amazon-ec2 - EC2 设置 - 执行 UserData 脚本或克隆存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62643013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com