真正的最终编辑
一年后,我终于开始制作教程:https://github.com/Andrew-Chen-Wang/cookiecutter-django-ec2-github。
我发现了一个 Medium tutorial,如果有人想使用 Code Pipeline,它也值得一提(有一些区别;我将文件存储在 GitHub 上,而 Medium 教程在 S3 上。我创建了一个自定义 VPC,另一个作者没有)。
早期的最终编辑
AWS 终于为带有 GitHub 存储库的 CodeDeploy 制作了一个简洁的教程:https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-github-prerequisites.html 看看那里并享受:)
与 ECS 教程一样,我们使用 Parameter Store 来存储我们的秘密。 AWS 之前希望我们获取机密的方式是通过 bash 脚本中的脚本:https://aws.amazon.com/blogs/mt/use-parameter-store-to-securely-access-secrets-and-config-data-in-aws-codedeploy/
例如:
password=$(aws ssm get-parameters --region us-east-1 --names MySecureSQLPassword --with-decryption --query Parameters[0].Value)
password=`echo $password | sed -e 's/^"//' -e 's/"$//'`
mysqladmin -u root password $password
新编辑(2020 年 12 月 24 日):我想我已经搞定了。下面我指出了 AWS ECS 的 Donate Anything。我已经转移到自我部署设置。如果您查看 bin/scripts,我正在利用 supervisord 和 gunicorn(用于 Python Web 开发)。但是在 EC2 的上下文中,您可以简单地将 AppSpec.yml 指向这些脚本!希望对大家有帮助!
开始之前:
这不是一个完整的答案。不是完整的演练,而是很多提示和一些代码,它们将帮助您设置某些 AWS 内容,例如 ALB 和您的存储库中的文件,以使其正常工作。这个答案更像是我昨晚试图让 ECS 工作的 sprint 运行中混杂在一起的几条线索。
我也没有足够的积分来评论和聊天......这是我能提供的最好的东西。
快速链接(不过,您可能应该跳过这两点):
- 看看这个:https://docs.aws.amazon.com/codedeploy/latest/userguide/instances-ec2-configure.html
- 我没有足够的积分来评论或聊天...不过,这也不是一个完整的答案,因为我试图先从 GH 完成 ECS 部署,然后再从生长激素。无论如何...
- 最后一次编辑:这听起来像是一种营销策略,但使用 GitHub 操作和 workflow_dispatch 的正确实施位于 Donate Anything's GitHub repository。您会在下面找到相同的 ECS 工作。请注意,我将 GitHub 操作更改为使用 Docker Hub,因为它是免费的(如果您打算使用 ECS,对我来说更便宜,因为 AWS ECR 很昂贵)。
编辑:ECS 部署现在工作。即将开始部署 EC2。
编辑 2:我添加了 Donate Anything 存储库。此外,我不确定直接 EC2 部署是否可行,至少对我而言是否可行,因为安装脚本会有点奇怪。但是,我仍然没有时间去 EC2。同样,如果有人愿意分享他们的时间,请这样做并做出贡献!
我确实想警告大家,安全组非常重要。这让我困扰了很长时间,所以确保你把它们弄对了。 In the ECS tutorial,我教你怎么做。
完整的非完整答案:
我现在正在 this repo 和另一个 ECS here 使用 GitHub 操作解决此问题。我在 EC2 上还没有开始太多,但测试的基本纲要是这样的:
至关重要
- 您需要先尝试从 AWS CLI 进行部署。这是因为 AWS Actions 还没有用于部署到 EC2 的专用操作。
- 写下这些陈述。稍后我们将需要它们来执行 GitHub 操作。
测试此 AWS 设置时的一些提示:
您的测试计划将是什么样子:
- 对于我来说,对于我的 ECS 存储库,我花了整整 10 个小时尝试逐步正确配置所有内容,就像 GitHub 操作一样。对你来说,你也应该这样做。想象你是代码:找出你需要从哪里开始。
- 啊哈!我可能应该先弄清楚 CodeDeploy。让我们先纠正一个 appspec.yaml 文件! appspec 文件是 CodeDeploy 将如何处理所有内容的挂钩。不幸的是,我目前正在解决这个问题here,但那是因为 AppSpec 文件的 EC2 和 ECS 语法不同。幸运的是,EC2 没有任何特殊区域。只要让你的文件和钩子正确。我的测试中的一个例子:
version: 0.0
os: linux
files:
- source: /
destination: /code
hooks:
BeforeInstall:
- location: aws_scripts/install_dependencies
timeout: 300
runas: root
ApplicationStop:
- location: aws_scripts/start_server
runas: root
GitHub 操作:
你至少需要什么:
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# TODO Change your AWS region here!
aws-region: us-east-2
签出代码对于...嗯...获取代码是必要的。
对于 AWS 凭证的配置,您需要使用适当的 IAM 凭证将 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 添加到您的 GitHub 机密中。为此,我认为唯一需要的 IAM 角色是完整的 CodeDeploy 内容。
部署代码:
这是您在到达此步骤之前应该尝试过的测试代码。现在您的工作流程已设置完毕,让我们将 CLI 中的代码粘贴到您的操作中。
- name: Deploying with CodeDeploy
id: a-task
env:
an-environment-variable: anything you want
run: |
echo "Your CLI code should be placed here"
对不起,如果这令人困惑,不是您要查找的内容,或者想要完整的教程。我也没有真正让这个工作,但自从我上次尝试以来也有一段时间了,上次我尝试时,我什至不知道 EC2 实例是什么......我只是做了一个独立的 EC2实例并使用 rsync 传输我的文件。希望我所写的是一些线索,可以很容易地引导您找到解决方案。
如果您成功了,请在此处分享:https://github.com/Andrew-Chen-Wang/cookiecutter-django-ec2-gh-action,这样其他人就不必遭受 AWS 部署的痛苦...