AWSでCodeCommitとCodeBuildを使ってみる

## 概要
表題の通り

https://qiita.com/tmoritoki0227/items/0d8d8a693a38049e03cb

でGitLabからCodeCommitにミラーリング設定を行った。
次にGitLabに大量のリポジトリが必要となることを想定し、自動で作れるようにしたい。やり直すことも考えて削除も行えるようにしたい。
しかし、AWSのサービスではないGitLabとCodeBuildを連携するのは認証部分でハードルが高いので、まずはCodeCommitとCodeBuildを連携させることにする

## CodeCommitで作業用リポジトリを作成する
このリポジトリにリポジトリの作成、削除に必要なファイルを格納する。

### リポジトリ（プロジェクト）作成　
1. http://35.75.155.254/gitlab を開く。ログインする
1. NewGroupを作成　※すでにあるグループを使う場合はskipします
    - Create group（画面名）
        - Group name
            - `hello` （任意です）
        - Visibility level
            - `public` （業務ではprivateかもしれない）
1. NewGProjectを作成
    - Create blank project（画面名）
        - Project name
            - `project_create` ※ここにdelete用のコードも置きます
        - Visibility level
            - `public` （業務ではprivateかもしれない）

ここでプロジェクトのProject IDを控えておく
Setting->Generalで確認可能

## CodeCommitで使うコード
project_createプロジェクト（リポジトリ）に以下のコードを登録する
https://github.com/tmoritoki0227/gitlab_project_create

- 変更が必要な個所
    - `create_project.sh`
        - NAMESPACE_ID # グループのID
    - `delete_project_all.sh`
        - $project_id ※削除したくないGitLabのプロジェクト（リポジトリ）をif文で指定する必要あり

## SSMを作成
gitlabとgitlabのtokenをパラメータ化する

1. AWS Systems Managerの画面を開く→左メニューのパラメータストアをクリック→パラメータの作成をクリック
    - パラメータを作成 （画面名）
        - 名前
            - gitlab_access_token
        - 利用枠
            - 標準
        - タイプ
            - 文字列  ※業務では安全な文字列を選択だと思う
        - データ型
            - text
        - 値
            - （gitlabで取得したtokenを張り付ける）

    - パラメータを作成 （画面名）
        - 名前
            - gitlab_url
        - 利用枠
            - 標準
        - タイプ
            - 文字列
        - データ型
            - text
        - 値
            - （ElasticIPを張り付ける）

※これらはbuildspec.yamlに設定することで環境変数になる

## IAMロールを作成
CodeBUildで利用するロールを作成する。

1. IAMの画面を開く→左メニューのロールをクリック→ロールの作成をクリック
    - 信頼されたエンティティを選択 （画面名）
        - 信頼されたエンティティタイプ
            - AWS のサービス
        - ユースケース
            - サービスまたはユースケース
                - CodeBuild
            - ユースケース
                - CodeBuild
    - 許可を追加（画面名）
        - 許可ポリシー
            - AWSCodeBuildDeveloperAccess
            - AmazonSSMReadOnlyAccess
            - AmazonS3FullAccess ※ログ出力用
            - CloudWatchEventsFullAccess　※ログ出力用
            - CloudWatchLogsFullAccess　※ログ出力用
    - 名前、確認、および作成（画面名）
        - ロール名
            - gitlab_project_create 　※deleteのときも使うロールです

## CodeBuildの作成
 `project_create`と `project_delete`の２つのプロジェクトを作成する
 
1. CodeBuildの画面を開く→`プロジェクトを作成`をクリック
    - プロジェクトを編集する（画面名）
        - プロジェクトの設定
            - `project_create`
        - ソース
            - ソースプロバイダ
                - `AWS CodeCommit`
            - リポジトリ
                - `project_create`
            - リファレンスタイプ
                - `ブランチ`
            - ブランチ
                - `master` ※mainではない
        - 環境
            - プロビジョニングモデル
                - `オンデマンド`
            - 環境イメージ
                - `マネージド型イメージ`
            - コンピューティング
                - `EC2`　※今回シェルスクリプトを使うので、lambdaでは実行できないはず
            - オペレーティングシステム
                - `Ubuntu` ※前回Ubuntuで動作したから
            - ランタイム
                - `Standard`
            - イメージ
                - `aws/codebuild/standard:7.0` ※最新を選ぶ
            - イメージのバージョン
                - `aws/codebuild/standard:7.0-2.4.05.15` ※最新を選ぶ
            - サービスロール
                - 既存のサービスロール
            - ロール名
                - gitlab_project_create
        - Buildspec
            - ビルド仕様
                - `buildspec ファイルを使用する`
            - Buildspec 名
                - `buildspec_create.yml`
        - バッチ設定
            - （設定なし）
        - アーティファクト  ※設定不要。ビルドによって作成するもの成果物はない
            - タイプ
                - アーティファクトなし
        - ログ　※デフォルトのままでOK。監視に使わないので違和感はあるがこれでログは見れる
            - CloudWatch
                - CloudWatch Logs - オプショナル
                    - チェックを入れる
            - S3 ※この設定を入れると画面にビルドログが表示されずS3に保存される形式になるので、軽量なジョブでは使いずらい
                - S3 ログ - オプショナル　
                    - チェックを入れない
        - サービスロールのアクセス許可
    - プロジェクトを編集する（画面名）※書いてないところは`project_create`と同じなので省略
        - プロジェクトの設定
            - `project_delete`
        - Buildspec
            - ビルド仕様
                - `buildspec ファイルを使用する`
            - Buildspec 名
                - `buildspec_delete.yml`

※参考
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131136/5b892904-86ad-c274-c217-a50cbd737780.png)


# gitメモ

```bash
git config --global credential.helper 'cache --timeout=3600' # １時間
```