S3でファイル管理したいけど、Git的な管理したいなぁって思うことありますよね。なのでさくっとCodeCommitにPushしたファイルをそのままS3に同期させる方法をかきます
構成図
これだけです。CodeCommitでコード管理、CodePipelineでそのコードをCodeBuidで動かしてS3に送ります。
動かしてみた
1.CodeCommit
①リポジトリ作成
CodeCommitでリポジトリを作ります。
②git clone
リポジトリができたので、認証情報を使ってgit cloneしましょう。
IAMのセキュリティ認証情報からAWS CodeCommit の HTTPS Git 認証情報を取得する。
生成してユーザー名とパスワードを取得します。
上記で取得したIDパスワードをローカルでgit cloneします。
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/リポジトリ名
③buildspec.ymlの作成とgit push
リポジトリにはCodeBuildを動作を記述するbuildspec.ymlを配置する必要があるので、
下記の内容でファイルを作っておきます。
version: 0.2
phases:
post_build:
commands:
- aws s3 sync --exact-timestamps --delete ./ s3://バケット名
s3コマンドですが、--exact-timestampsでタイムスタンプが同じでも更新、 --deleteでGit側でファイルが削除されれば、S3側でも削除されます。
あとは適当にテスト用のファイルとかをいれてgit pushしてください。成功すればこんな感じでCodeCommit上に表示されるはずです。
2.CodeBuild
①S3バケットの作成
実際にファイルがが置かれるS3を作成します。セキュリティなどを意識しなければ基本デフォルト設定でOKです。
②Buildプロジェクトの作成
下記の通りに設定値をいれていきます。必要があれば適宜変更、追加してください。
③Roleへの権限付与
②でサービスロールを作っていますが、S3を操作する権限が足りないので、権限をつけてあげます。必要なら適宜ポリシーは変更してください。
3.CodePipeline
新規のパイプラインを作成します。
次のデプロイステージは不要です。スキップして作成してください。
作成と同時にパイプラインが流れます。その後、Pushごとに自動で流れます。
S3バケットも見にいきましょう。ちゃんとファイルが来てますね。ファイル追加、変更、削除すべて反映されることも確認しました。
以上です。よきCodeシリーズライフを