【AWS】CodeCommitとS3を同期させる

S3でファイル管理したいけど、Git的な管理したいなぁって思うことありますよね。なのでさくっと**CodeCommit**にPushしたファイルをそのままS3に同期させる方法をかきます:pencil2:

## 構成図
これだけです。**CodeCommit**でコード管理、**CodePipeline**でそのコードを**CodeBuid**で動かしてS3に送ります。
![スクリーンショット 2023-10-24 14.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/39a9d537-c7a0-c200-3625-1ac7ae1e3662.png)

## 動かしてみた

### 1.CodeCommit
#### ①リポジトリ作成
CodeCommitでリポジトリを作ります。

リポジトリを作成→リポジトリ名を入力→作成
![スクリーンショット 2023-10-24 15.05.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/90184754-ab0a-2ea7-1c53-ce0dd2a73452.png)

#### ②git clone
リポジトリができたので、認証情報を使ってgit cloneしましょう。

IAMのセキュリティ認証情報から**AWS CodeCommit の HTTPS Git 認証情報**を取得する。
生成してユーザー名とパスワードを取得します。
![スクリーンショット 2023-10-24 15.11.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/5ae981e3-8708-3e10-8ddc-88f415aa3bf1.png)

上記で取得したIDパスワードをローカルでgit cloneします。
```
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/リポジトリ名
```

#### ③buildspec.ymlの作成とgit push
リポジトリにはCodeBuildを動作を記述するbuildspec.ymlを配置する必要があるので、
下記の内容でファイルを作っておきます。

```yaml: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上に表示されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/8b2d53a8-54dc-990d-2829-0cc7676592be.png)

### 2.CodeBuild
#### ①S3バケットの作成
実際にファイルがが置かれるS3を作成します。セキュリティなどを意識しなければ基本デフォルト設定でOKです。![スクリーンショット 2023-10-24 15.30.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/2323a160-eeb0-b161-11a9-9cc45e0d99d9.png)

#### ②Buildプロジェクトの作成
下記の通りに設定値をいれていきます。必要があれば適宜変更、追加してください。

![スクリーンショット 2023-10-24 15.34.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/77cf2d10-f363-6ab7-da33-6730ce95f2f0.png)

![スクリーンショット 2023-10-24 15.32.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/243acc09-8a69-f5ce-0dd5-109d1e38e819.png)

![スクリーンショット 2023-10-24 15.33.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/4b3ebc4a-0016-f7d5-0320-df80b9cac43a.png)

![スクリーンショット 2023-10-24 15.35.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/cba3f460-7df8-a06f-33c8-1fbf1765be77.png)

#### ③Roleへの権限付与
②でサービスロールを作っていますが、S3を操作する権限が足りないので、権限をつけてあげます。必要なら適宜ポリシーは変更してください。

![スクリーンショット 2023-10-24 15.45.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/c78328e3-3b82-44d5-910d-a64ba53edde6.png)

### 3.CodePipeline
新規のパイプラインを作成します。

![スクリーンショット 2023-10-24 15.48.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/59e42504-961c-ee9a-93eb-dad8430cda57.png)

![スクリーンショット 2023-10-24 15.48.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/128fcf2d-b41b-8623-602c-01524eb34cbb.png)

![スクリーンショット 2023-10-24 15.49.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/7144739d-d7bc-85a9-a8f7-f6f5b86225cf.png)

次の**デプロイステージは不要**です。スキップして作成してください。

作成と同時にパイプラインが流れます。その後、Pushごとに自動で流れます。
![スクリーンショット 2023-10-24 15.53.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/a18635ce-d8f1-0131-3fa6-61705836b0a6.png)

S3バケットも見にいきましょう。ちゃんとファイルが来てますね。ファイル追加、変更、削除すべて反映されることも確認しました。

![スクリーンショット 2023-10-24 16.27.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984662/c8ae93e3-594f-3e29-170b-509d3ea4a544.png)

以上です。よきCodeシリーズライフを:sunny: