![](/img/trans.png)
[英]How to deploy to aws elastic beanstalk with github actions?
[英]How to deploy private python pip dependency with Amazon AWS Elastic Beanstalk?
当我尝试将其中一项服务设置为AWS Elastic Beanstalk时,问题出现了。 我们在私有存储库上设置的 python pip 依赖项之一在部署过程中导致错误,因为 pip 进程无法访问它。 下面我介绍一下我们是如何解决这个问题的。
值得一提的是,还有其他解决方案将部署期间使用的 SSH 密钥绑定到应用程序项目 git 存储库。 我发现它们有点脏,所以我想分享这个允许将 SSH 密钥分开保存在 S3 存储桶中,与应用程序 git 存储库分开。
适用于:“64位Amazon Linux 2015.09 v2.0.6运行Python 3.4”,用于从私有bitbucket存储库获取依赖。 它可能会被修改为github等。
将私有依赖项添加到pip requirements.txt :
-e git+git@bitbucket.org:account_name/dependency-name.git#egg=dependency-name
生成公共和私有SSH密钥 (HOWTO可以在其他地方找到),因此您有id_rsa(私有)和id_rsa.pub(公共)密钥文件。
在bitbucket.org项目选项卡上 ,找到设置并转到“部署密钥”下。 使用表单在那里设置您的公共SSH密钥 。
使用amazon AWS控制台在S3存储桶 上传两个生成的密钥 (仅限私有应该足够):
bucket-with-keys/bitbucket/:
- id_rsa
- id_rsa.pub
其中bucket-with-keys / bitbucket是[BUCKET_NAME] / [PATH]。
将包文件添加到项目中:project_name / .ebextensions / packages.config
packages:
yum:
git: []
将配置文件添加到项目中:project_name / .ebextensions / 03-pip-install-from-bitbucket.config:
files:
"/root/.ssh/config":
owner: root
group: root
mode: "000600"
content: |
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
"/root/.ssh/known_hosts":
owner: root
group: root
mode: "000644"
content: |
#
# paste output of `ssh-keyscan -H github.com` here
#
commands:
01-command:
command: aws s3 cp --recursive s3://bucket-with-keys/bitbucket/ /root/.ssh
02-command:
command: chmod 600 /root/.ssh/id_rsa
如果您修改此文件,请记住:
转到AWS控制台IAM (身份和访问管理)“策略”选项卡,在列表中找到AmazonS3FullAccess ,并将其附加到aws-elasticbeanstalk-ec2-role 。 如果您找不到政策,可以创建如下政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
如果需要,请查找“ 创建并附加您的第一个客户托管策略 ”教程。 这个策略非常开放,建议创建一个更窄的策略... aws-elasticbeanstalk-ec2-role是Elastic Beanstalk默认创建的角色,但只要使用CLI工具设置就可以使用自己的角色eb config下:“IamInstanceProfile:aws-elasticbeanstalk-ec2-role”
现在您可以使用eb CLI工具创建您的environmant :
eb create project_name-prod-env \
--instance_type t2.micro \
--tier webserver \
--region eu-west-1 \
--cname project_name-prod-env \
--keyname identifier-of-ssh-key-accessed-from-console-here \
--platform "64bit Amazon Linux 2015.09 v2.0.6 running Python 3.4"
应该现在就行!
如果出错,您可以调试SSH文件是否到位:
eb ssh
sudo su
ls -la /root/.ssh/
并在AWS控制台上或直接在实例上检查日志:
eb ssh
sudo su
less /var/log/eb-activity.log
尝试从project_name / .ebextensions / 03-pip-install-from-bitbucket.config中手动执行命令作为root用户bu,就像它们出现在日志文件中一样,使用开关来获得更详细的输出。
我不能发表评论所以我正在回答这个问题。 smentek的回答非常详细并解决了这个问题。 唯一缺少的部分是你需要将git包添加到配置中:
packages:
yum:
git-all: ""
files:
"/root/.ssh/config":
# ...
默认情况下,Amazon Linux上未安装Git。
我无法发表评论,这就是为什么要回答这个问题。
通过 smentek 的解释,我清楚地知道需要做什么! 但是在我的project_name/.ebextensions/03-pip-install-from-bitbucket.config
中,当我粘贴命令ssh-keyscan -H github.com
时,出现以下错误:
“ JSON 异常:无效 JSON:position 处的意外字符 (f) 0.. 更新配置文件。”
关于如何解决这个问题的任何建议都很棒!!!
谢谢。 新手程序员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.