gpt4 book ai didi

python - 如何使用 Amazon AWS Elastic Beanstalk 部署私有(private) python pip 依赖项?

转载 作者:行者123 更新时间:2023-12-03 23:17:40 24 4
gpt4 key购买 nike

当我尝试将其中一项服务设置到 AWS Elastic Beanstalk 时,问题出现了。我们在私有(private)存储库 上设置的一个 python pip 依赖项 在部署过程中导致了错误,因为它不可访问> 用于 pip 过程。下面我介绍一下我们是如何解决这个问题的。

值得一提的是,还有其他解决方案可以将部署期间使用的 SSH key 绑定(bind)到应用程序项目的 git 存储库。我发现它们有 pip 脏,所以我想分享这个允许将 SSH key 分开保存在 S3 存储桶中,与应用程序 git 存储库分开的。

最佳答案

工作于:“运行 Python 3.4 的 64 位 Amazon Linux 2015.09 v2.0.6”,用于依赖私有(private) bitbucket 存储库。可能会针对github等进行修改

将你的私有(private)依赖添加到 pip requirements.txt:

  -e git+git@bitbucket.org:account_name/dependency-name.git#egg=dependency-name

生成 SSH 公钥和私钥(HOWTO 可以在别处找到)这样您就有了 id_rsa(私有(private))和 id_rsa.pub(公钥) key 文件。

在 bitbucket.org 项目选项卡上,找到设置并进入“部署 key ”下。 在此处使用表单设置您的公共(public) SSH key

使用亚马逊 AWS 控制台在 S3 存储桶上上传两个生成的 key (仅私有(private)就足够了):

  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

如果您修改此文件,请记住:

  • 命令按字母顺序执行,因此“01-”在“02-”之前开始,即使您改变其顺序也是如此。
  • 文件名也遵循该规则。

转到 AWS 控制台 IAM(身份和访问管理)“策略”选项卡并在列表中找到 AmazonS3FullAccess 并将其附加到 aws-elasticbeanstalk-ec2 -角色。如果您找不到政策,您可以创建一个如下所示的政策:

  {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}

如果需要,请查找“Create and Attach Your First Customer Managed Policy”教程。该政策非常开放,建议创建一个范围更窄的政策......aws-elasticbeanstalk-ec2-role 是 Elastic Beanstalk 默认创建的角色,但您可以使用自己的角色,只要使用 CLI 工具 eb config 在以下位置进行设置:“IamInstanceProfile : aws-elasticbeanstalk-ec2-角色”

现在您可以使用 eb CLI 工具创建您的环境:

      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

尝试以 root 用户身份手动执行来自 project_name/.ebextensions/03-pip-install-from-bitbucket.config 的命令,按照它们在日志文件中的显示方式,使用开关获得更详细的输出。

关于python - 如何使用 Amazon AWS Elastic Beanstalk 部署私有(private) python pip 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727442/

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