web-dev-qa-db-ja.com

AWSCodeBuildで `sambuild`を使用することは可能/推奨されていますか?

この質問は これ からスピンアウトしました。ここで何がうまくいかなかったのかをよりよく理解し、 不完全な場合でも実行可能な解決策 、より焦点を絞ったフォローアップを提出しています(私はまだ初心者のようなものですStackOverflow-これがエチケットに違反するかどうかをお知らせください。オリジナルをフォローアップする必要があります)。

このページ は、「AWS CodeBuildを使用して、サーバーレスアプリケーションをビルド、ローカルテスト、およびパッケージ化する」ことを示しています。ただし、sam buildbuildspec.ymlコマンドを含めると、次のログ出力が表示され、samがCodeBuildイメージにインストールされていないことがわかります。

[Container] 2018/12/31 11:41:49 Running command sam build --use-container 
sh: 1: sam: not found 

[Container] 2018/12/31 11:41:49 Command did not exit successfully sam build --use-container exit status 127 
[Container] 2018/12/31 11:41:49 Phase complete: BUILD Success: false 
[Container] 2018/12/31 11:41:49 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: sam build --use-container. Reason: exit status 127 

さらに、pip install aws-sam-cliを指定してSAMをインストールすると、CodeBuildでsam build --use-containerを実行すると エラー になります。 sam build自体は成功しますが、テストの依存関係がインストールされないため、CodeBuildでテストを実行できるようにするにはpip install -r tests/requirements-test.txt -t .を使用する必要があります。さらに、 this は、「プログラムをネイティブにコンパイルしたパッケージ」には--use-containerが必要であることを示しています。

これは私が何か間違ったことをしようとしているのかどうか疑問に思います。 AWSのCI/CDワークフローでSAMサービスを構築するための推奨される方法は何ですか

5
scubbo

CodeBuildでsam buildコマンドを実行する場合は、最初にaws-sam-cliをインストールする必要があります(おそらくinstallフェーズbuildspec.ymlファイル)つまり、pip install aws-sam-cliコマンドなどを実行します。

--use-containerコマンドのsam buildオプションにより、コマンドはAWS Lambda実行環境に似たDockerイメージをプルし、このDockerイメージからpip installにコンテナーを実行します(ラムダがPythonで記述)ラムダデプロイメントパッケージを作成するための関数依存性。これにより、ラムダ関数がAWSLambdaの実際のランタイム環境と互換性のあるネイティブのコンパイル済みライブラリを使用するようになります。

したがって、CodeBuildで実行される--use-containerコマンドにsam buildオプションを指定する場合は、CodeBuildビルドプロジェクトで使用されるDockerイメージがDockerランタイムをサポートしていることも確認する必要があります。

最も簡単な方法は、aws/codebuild/standard:2.0Dockerイメージという名前のCodeBuildビルド環境を使用することです。 Dockerランタイムの有効化buildspecのinstallフェーズのruntime-versionsプロパティで。 yml。また、ビルド環境からDockerデーモンに接続するには、CodeBuildプロジェクトの PrevilegedMode を有効にする必要がある場合があります。

2
onelaview

2019年10月の時点で、sam buildを使用してcodebuildでサーバーレスアプリケーションをデプロイすることに問題はありませんでした。

まず、--userにはpip install aws-sam-cliは必要ありません。実際、--userを含めることが、samがパスにない唯一の理由のようです。

さらに、psycopgのようにネイティブライブラリが構築されていない限り、--use-containerも必要ありません。

0
Spiff