AWS CodeCommit (Code兄弟＃１)

# 目次
[1. はじめに](#はじめに)
[2. CodeCommitとは](#CodeCommitとは)
[3. CodeCommitの特徴](CodeCommitの特徴)
[4. CodeCommitのコスト](CodeCommitのコスト)
[5. 参考](#参考)

# はじめに
AWSでCI/CDを構築するために利用するCode兄弟についてまとめる。

今回は、AWS CodeCommitについて。
<br>
CI/CDについては別で詳しく解説するが、簡単なイメージ図は以下の通り。

![CICDイメージ_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554634/265e756a-99cb-a87b-d015-c36ba15d865b.jpeg)
<br><br>

# CodeCommitとは
[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/welcome.html)には以下のように書かれている。

>CodeCommit is a secure, highly scalable, managed source control service that hosts private Git repositories. CodeCommit eliminates the need for you to manage your own source control system or worry about scaling its infrastructure. You can use CodeCommit to store anything from code to binaries. It supports the standard functionality of Git, so it works seamlessly with your existing Git-based tools.

上記の文章を要約すると、以下のようになる。
- CodeCommitはGitリポジトリをホストするためのマネージドサービス
- セキュア、高スケール性
- コードからバイナリまで何でも保存可能
- 既存のGitツールとシームレスな連携が可能

つまり、CodeCommitとは  
<font color="DarkOrange">「AWSが提供するGitベースのプライベートなリポジトリサービス」</font>
といえる。
<br>
CodeCommit以外のGit管理ツールには[GitHub](https://github.co.jp/)や[GitLab](https://about.gitlab.com/ja-jp/)などがある。

※Git：ソースコードやドキュメント、説明書などその他諸々のバージョン管理システム。
※リポジトリ：様々なものを一元管理するためのもの。貯蔵庫という意味がある。


# CodeCommitの特徴
### 共同開発
AWS CodeCommitはGitベースのリポジトリサービスなので、共同でのソフトウェア開発が容易である。AWSマネジメントコンソール、AWS CLI、AWS SDKを使用してリポジトリを作成し、開発環境からgitコマンドによる操作が可能。GitHubやGitLabでの操作と同様のコマンドであるため、ローカル環境、Cloud9などのさまざまな開発環境からソースコードの情報を共有できる。

### セキュリティ
CodeCommitのリポジトリへの接続には、HTTPS or SSHを使用できる。これらを利用して安全(セキュア)にリポジトリへファイル転送などを行うことができる。また、認証情報はIAMユーザーごとに生成する。「AWSCodeCommitPowerUser」をユーザー、グループにアタッチすることで権限を付与できる。

また、保存されるリポジトリはユーザー専用のキーを使用して、AWS KMSによる暗号化も自動で行われている。

### 高可用性と高耐久性
AWS CodeCommitはリポジトリをAmazon S3とAmazon DynamoDBに保存する。S3であれば、マルチAZによってその耐久性はイレブンナイン（99.999999999%）である。DynamoDB は同一リージョン内の3施設間で同期的にレプリケートされている。

### 通知とイベント
ソースコードやドキュメントが更新されたなどのタイミングで、グループメンバーたちに通知を行ったり、Lambda関数を実行したりできる。通知はAmazon SNSやAWS Chatbotで送信。

### 承認による安全な開発
プルリクエスト（pull-request）の作成が可能。プルリクエストは開発者によって作成したコード変更の反映（merge）を管理者にお願いすることである。
<br>
（例）
![ぷるリクエストのイメージ_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554634/6f328160-9ce8-70c3-4b3d-3804dcac0125.jpeg)

上記の図では、masterから二人の開発者によってブランチが切られ、２つの開発環境が新たに作られた場面を想像してほしい。
Aさんがソースに変更を加え、管理者にpull-requestを送る。管理者はソースコードを確認し、問題がなければmergeを行う。その結果、masterに変更が反映される。
一方、Bさんもソースに変更を加え、管理者にpull-requestを送った。しかし、管理者がソースコードを確認したところ、ロジックがおかしい部分を見つけたためリクエストを拒否した。その結果、masterには変更が反映されていない。

# CodeCommitのコスト
[公式サイト](https://aws.amazon.com/jp/codecommit/pricing/)には以下のように記載されている。

- 1アカウントあたり5,000リポジトリ、リクエストに応じて最大25,000リポジトリ
- 50 GBのストレージ/月
- 10,000 回のGitリクエスト/月
- アカウントに毎月5人のアクティブユーザーを無料で持つことができる。
- 範囲内のアクティブユーザーを超えたとき、追加のアクティブユーザーごとに1.00USD/月の支払いが発生。

# 参考
[AWS CodeCommit](https://aws.amazon.com/jp/codecommit/features/)
[AWS CodeCommit ユーザーガイド](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)

# Code兄弟シリーズ

[AWS CodeCommit (Code兄弟＃２)](https://qiita.com/Aoi_Noguchi/items/6419fd575b1fa0022b0c)

-----------------
https://qiita.com/Aoi_Noguchi/items/ea33e53af83231629b19

https://qiita.com/Aoi_Noguchi/items/e22fa8d3abd8048e56eb

https://qiita.com/Aoi_Noguchi/items/daff6ce8c10b3878da6e

https://qiita.com/Aoi_Noguchi/items/b8662f593380235dae70