2016-05-17 24 views
9

私はAWSラムダでgitを実行してリポジトリのチェックアウトを試みています。私はnodejs 4.3 AWSラムダで 'git'を実行

  • 使用しています私はnodegitでサポートされていない「--depth = 1」パラメータを、使用したいので、私はnodegitを使用していない

    • は、これは私の設定です。

    • 正しいAWS AMIからgitとssh実行可能ファイルをコピーし、アップロードしたzipの「bin」フォルダに配置しました。
    • は、私はこれをPATHに追加し:

    - >

    process.env['PATH'] = process.env['LAMBDA_TASK_ROOT'] + "/bin:" + process.env['PATH']; 
    

    入力変数は、次のように設定されています。今

    "checkout_url": "[email protected]", 
    "branch":"master 
    

    私は簡潔にするため(これを行う、Iにいくつかの擬似コードを混ぜたもの):

    downloadDeploymentKeyFromS3Sync('/tmp/ssh_key'); 
    fs.chmodSync("/tmp/ssh_key",0600); 
    process.env['GIT_SSH_COMMAND'] = 'ssh -o StrictHostKeyChecking=no -i /tmp/ssh_key'; 
    execSync("git clone --depth=1 " + checkout_url + " --branch " + branch + " /tmp/checkout"); 
    

    lambda-localを使用してローカルコンピュータでこれを実行すると、すべて正常に動作します。私はラムダでそれをテストする場合でも、私が手:

    warning: templates not found /usr/share/git-core/templates 
    PRIV_END: seteuid: Operation not permitted\r 
    fatal: Could not read from remote repository. 
    
    • 私はgitのインストールが、単にバイナリをコピーしていなかったので、「警告」は、もちろんです。なぜこれがうまくいかないのでしょうか?
    • gitに "setuid"が必要なのはなぜですか?いくつかのシェルではセキュリティ上の理由から無効になっています。だからラムダではうまくいかないというのは理にかなっています。何とかこのコマンドを "必要"しないように指示できますか?
  • 答えて

    12

    これは間違いなく可能です - 独自のgit tarバンドルを作成し、ラムダ実行時に解凍することで可能です。

    これはまさに私がLambCIで行うことです。

    あなたは次のenv変数が適切な場所に設定されていることを確認する必要があります:私はいくつかの方法をより良いドキュメントへのレポを作成する(とするためにレシピを収集)するつもりだ

    GIT_TEMPLATE_DIR: '/tmp/myDir/usr/share/git-core/templates' 
        GIT_EXEC_PATH: '/tmp/myDir/usr/libexec/git-core' 
    

    をAWS Lambdaでカスタムソフトウェアを実行できますが、今のところはissue open for itです。

    +0

    それで、seteuid()コールの周りにいるLambCIで何をしましたか?オープンな問題以外のことはまだありませんか? –

    +1

    sshでLambCIのgit-2.4.3.tarを使用すると、エラーメッセージ 'ssh:共有ライブラリの読み込み中にエラーが発生しました:libfipscheck.so.1:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません。私は 'LD_LIBRARY_PATH =/tmp/myDir/usr/lib64'も設定しなければならないと思います。 –

    0

    gitバイナリだけをコピーできないという問題があります。あなたはgitの移植可能なバージョンが必要ですし、ラムダ関数が実行されているosがバイナリと互換性があることを保証できないので、あなたは悪い時間を過ごすでしょう。

    ステップバイステップでは、私はこのアプローチから完全に離れていきます。私はクローンを作成し、あなたがdownloadDeploymentKeyFromS3Syncと同じようにダウンロードするだけのパッケージをビルドします。

    +1

    OSはAmazon Linuxであることが保証されています。 –

    +0

    OSがAmazon Linuxであることがドキュメントに記載されていますか?今はAmazon Linuxで、パッチは適用されていますが、それはいつも同じOSになり、その仮定が私に問題を起こすように思えるようなものになることを保証するものではありません – Mircea

    +2

    ドキュメントには、http: //docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.htmlこれがあります:https://aws.amazon.com/blogs/compute/running-executables-in-aws- lambda/Which states "自分自身のバイナリをコンパイルする場合は、静的にリンクされているか、またはAmazon Linuxのバージョンに合わせて構築されていることを確認してください。AWS Lambdaで使用されているAmazon Linuxの現在のバージョンは、常にSupported Versions Lambdaのドキュメントの " –

    -2

    これは無回答だと思うかもしれませんが、私はラムダから任意のバイナリを実行する最も簡単な方法を見つけました。プラットフォームに依存しない、バイナリではないアプローチから作業を行うことができない場合は、Dockerをワークフローに統合し、DockerコンテナをLambda関数から管理します。

    これを行う1つの方法は、ECS(Elastic Container Service)を使用してgitを実行するタスクを起動することです。

    Rackspace CarinaやJoyent's TritonなどのDocker-SwarmインスタンスまたはDocker-API互換サービスを統合する場合は、AWS LambdaとDockerを統合するために個人的に組み合せたプロジェクトを使用できます。"Dockaless"

    幸運を祈る!

    関連する問題