web-dev-qa-db-ja.com

githubプッシュで静的サイトをs3に展開するための最良の戦略は?

私たちのサイトをAWS S3にデプロイすることを自動化したいです。サイトの構築とアップロードを自動化するノードスクリプトを作成しましたが、githubでリポジトリのmasterブランチが更新されるたびにスクリプトを自動的に実行したいと思います。

AWS CodeDeployを調べましたが、EC2に具体的にデプロイするためのようです。 AWS Lambdaも見てきましたが、gitを使用してレポジトリのコピーをプルする明確な方法がないため、スクリプトを実行できます。

使用できるサービス(できればAWSに関連付けられているもの)はありますか?

29
Mike Douglas

AWSサービスを直接使用するよりも(ほぼ全員がはるかに複雑なセットアップ、EC2へのデプロイなどを期待していると言うように)、 ShippableCodeship または Wercker

これらはすべてgit更新から起動し、ビルドコマンドを実行し、CIイメージ/コンテナーにユーティリティをインストールし、S3にファイルをコピーする機能を備えています。

おそらく、あなたの目的にぴったりのツールを作成したスタートアップがいくつかありますが、まだ私のレーダーには載っていません:-)

10
ocean

私はしばらく前に同じ目標を達成しましたが、少なくとも私にとっては問題を解決する小さなツールをリリースしました。それは使用しています AWS Lambdaそして、リポジトリの特定のブランチをS3Pushの後。 GitHubデプロイキーを最大限に活用できます。このキーは、個人アクセストークンとしての権限が少なく、リポジトリごとに構成できます。

github-bucket をご覧ください。これも役に立つかもしれません。

github-s3-deploy-architecture

12

Git deployではないことを知っています...しかし、CIボックスを設定する代わりに、s3cmdを使用しました。

http://s3tools.org/s3cmd

このコマンドを実行すると、ビルドディレクトリがs3と同期されます。

s3cmd sync -r ~/code/mysite/build s3://www.mysite.com --delete-removed

Linuxで使用しています。 OSXとWindowsのストーリーが何なのかわかりません。

本当にgit Pushソリューションを使用している場合は、gitレポをフォルダーにプルし、それに対してこれを実行する時間指定ジョブをセットアップできます。安価なLinux VMの別の場所でこれを行います。ただし、完全なCIに移行する場合を除き、おそらくあまり意味はありません。

9
Damien Sawyer

これは、非常にシンプルな2ステップCodePipelineで設定できます。基本的に、AWSコンソールのさまざまなセクションに記入するだけです。個別のCIツールとその追加された複雑さは必要ありません。

ピップラインの最初のステップで、GithubからプルしてS3に保存します。これはAWSコンソールから簡単に設定できます。

次のCodeDeployステップでは、AWS CLI(CodeDeployにプリインストールされている)を使用して、

cd /path/to/public/directory && aws s3 sync --acl public-read --delete . s3://your.bucket.name

AWS CLIをデプロイステップで実行できるように、AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYの環境変数を設定する必要があります。これは、CodeDeployのAWSコンソールの「環境変数」の下の「詳細」セクションでも実行できます。環境変数が設定され、そのAWSユーザーが正しいアクセス許可を持っている場合、CodeDeploy内で必要なaws-cliコマンドを実行できます。

これが完了したら、Githubにチェックインすると、CodePipelineが開始され、数分後にファイルがS3に配置されます。

7
Patrick Chu

TravisCIを使用している場合、 deployment は非常に簡単です。 .travis.ymlに追加する必要があるのは次の部分のみです。

deploy:                         
  provider: s3                         
  access_key_id: "YOUR AWS ACCESS KEY"
  secret_access_key:
    secure: "w/DlbHt1+IAMENCRYPTED"
  bucket: "YOUR BUCKET"

私のブログ投稿 は、AWS側(ユーザーセットアップ、IAMおよびS3バケット構成)のすべての詳細と、githubおよびtravisCI側について説明しています。

6

単純なユースケースではおそらく圧倒されますが、非常に単純な CodePipeline を作成して、githubリポジトリをS3にプッシュすることができます。

1
Dave Maple

また、シンプルで簡単なコードシップを使用することをお勧めしますが、S3バケットに対する適切なアクセス許可(ポリシー)を持つIAMユーザーを作成する必要があります。

コードシップの基本計画は無料です。

さて、これまでのところ問題があるかもしれませんが、gitshipでファイルを削除してもコードシップではファイルが削除されないことがわかります。

0
Gabriel Wu

Deploy Botを使用したことがありますが、非常に満足しています。

Gitを介してS3またはFTPにプッシュでき、ビルドスクリプトを実行したり、通知をSlackにプッシュしたりすることもできます。

https://deploybot.com/

0
Anthony Delgado