web-dev-qa-db-ja.com

CodeDeployからS3

S3バケットにWebアクセス用に構成されたサイトがあり、特定のgitリポジトリをプッシュするたびにaws s3 syncコマンドを実行します(現在Gitlabを使用しています)。

したがって、stableブランチにプッシュすると、Gitlabランナーはサイトを構築するためにnpm start buildコマンドを実行し、次にaws s3 syncを実行して特定のバケットに同期します。

CodeCommitに移行し、純粋なAWSツールを使用して同じことをしたいと思います。


これまでのところ、リポジトリを正常にセットアップし、アーティファクトをビルドするためのCodeBuildを作成することができ、アーティファクトは保存されています(デプロイされていません)S3バケットに。違いは、サブフォルダーではなくバケットのルートフォルダーにデプロイできないことです。そのためのプロセスが作成されていないようです。 Webアクセスがどのように構成されているかという理由で、ルートフォルダーに配置する必要があります。

デプロイプロセスについては、CodeDeployを調べていましたが、実際にはS3バケットにデプロイできず、バケットをEC2インスタンスへのデプロイの仲介。これまでのところ、CodeDeployはEC2を含むデプロイにのみ役立つと感じています。

このチュートリアル 私のものと同様の要件で、CodePipelineCodeBuildですが、展開ステップは実際にはaws s3 syncコマンド(Gitlabで行っていたのと同じ)であり、実際の展開ステップはCodePipelineは無効になっています。

この特定の目的のために作成されたAWS機能を使用するソリューションを検討していましたが、見つかりませんでした。

LambCI も知っていますが、私にはCodePipeline/のように見えますCodeBuildが実行しており、アーティファクトを保存しています(バケットのルートフォルダーにはデプロイされていません)。さらに、新しい構成ファイル(AWS構成ファイル以外)を学習またはデプロイする必要のないオプションを探しています。

これはAWS機能の現在の状態で可能ですか?

8
Jorjon

本日、AWSは新機能として、CodePipelineのデプロイ段階でS3をターゲットにする機能を発表しました。発表は ここ であり、ドキュメントには利用可能なチュートリアルが含まれています ここ

CodeBuild/CodePipelineアプローチを使用すると、ビルドスクリプトで同期を実行するのではなく、デプロイ段階でデプロイプロバイダーとしてS3を選択できるようになります。フェーズを設定するには、S3バケット名を指定し、アーティファクトZipのコンテンツを抽出するかどうかを指定し、抽出する場合は、抽出用のオプションのパスを指定します。これにより、パスを省略して、コンテンツをバケットのルートに直接デプロイできるようになります。

7
Joe Lafiosca

私は同様の問題に取り組んでいましたが、私が知る限り、S3にアプリをデプロイするのに適したサービスはありません。

AWS CodeDeployは、サーバーとして実行されているコードをデプロイするためのものです。

私の解決策は、CodePipelineを次の3つの段階で使用することでした。

  1. AWSCodeCommitからソースコードを取得するソース
  2. AWSCodeBuildでビルドする
  3. ビルドが成功した後、S3アーティファクトストレージからアーティファクトを取得し、解凍してファイルをS3Webサイトホストにコピーするカスタムラムダ関数。

enter image description here

SeamusJのこのAWSラムダ関数を使用しました https://github.com/SeamusJ/deploy-build-to-s

いくつかの変更を加える必要がありました。s3からアーティファクトを解凍するために、unzip-streamの代わりにnode-unzip-2を使用しました。

また、website.tsファイルのACLを変更する必要がありました

6
Matúš Bartko

CodeBuildからのアップロードは、現在利用可能な最良のソリューションです。

この回答 のCodePipelineを介してこのデプロイメントを調整する方法に関するいくつかの提案があります。

2
TimB