繁体   English   中英

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

[英]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

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

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

转到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM