Github에서 AWS CodeCommit으로 이전하기

in aws •  7 years ago  (edited)

images.png

개요

AWS에도 Github이나 Bitbucket과 같이​ GIT Repository가 존재한다.
AWS에 Code가 존재한다면 CI 구성할때에 속도나 보안문제에 매우 유리할 수가 있다.

Github에서 CodeCommit으로 마이그레이션을 하기 위해서는 다음의 절차로 진행한​다.

  1. CodeCommit에 Repository 생성
  2. Github에 있는 Repository를 CodeCommit으로 복사
  3. IAM을 통해서 권한의 설정
  4. 테스트​

AWS CodeCommit 소개

  • 저렴한 Private 리포지토리 ​가격
  • AWS 클라우드 내에 구축하여 스테이징 또는 프로덕션 환경에 가까이에 리포지토리가 유지
  • IAM을 이용하여 리포지토리에 사용자별 권한을 할당
  • CodePipeline을 이용한 빠르고 편리한 CI구성
  • Git 명령을​ 동일하게 사용​

Github Repository

이 문서에서 CodeCommit으로 옮길 샘플 Repository

https://github.com/harryoh/lambda_weather

CodeCommit에 Repository 생성

Repository 생성​

  1. CodeCommit Service로 이동

  2. [Create Repository] 선택​

  3. 옮길 Repository와 동일하게 ​Repository namelambda_weather 입력
    aws_codecommit_create_repository.png

  4. 생성된 Repository의 URL을 복사
    aws_codecommit_repository_url.png

    https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather

  5. 생성된 Repository의 [Settings]에서 ARN을 복사
    aws_codecommit_repository_arn.png

    arn:aws:codecommit:ap-northeast-2:000000000000:lambda_weather

HTTPS Git Credential 생성​

  1. IAM Service - Users - 본인계정에서 [Security credentials] 탭으로 이동
  2. HTTPS Git credentials for AWS CodeCommit 항목에서 [Generate] 선택
  3. Credentials를 다운로드 받아서 보관

Repository 이동

Clone CodeCommit Repository

CodeCommit에 생성한 Repository를 생성한다. 다운받은 Credentials의 ID와 Password를 입력한다.

$ git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather
username:
password:
warning: You appear to have cloned an empty repository.

CodeCommit으로 Push

Repository에 github를 remote branch로 등록하여 fetch하고 소스를 CodeCommit로 push한다.​

$ cd lambda_weather
$ git remote add github https://github.com/harryoh/lambda_weather
$ git remote -v
github  https://github.com/harryoh/lambda_weather (fetch)
github  https://github.com/harryoh/lambda_weather (push)
origin  https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather (fetch)
origin  https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather (push)

$ git fetch github
$ git merge github/master --ff-only
$ git push origin master
Counting objects: 10, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 5.63 KiB | 2.82 MiB/s, done.
Total 10 (delta 0), reused 0 (delta 0)
To https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather
 * [new branch]      master -> master

CodeCommit에서 확인​

aws_codecommit_show_repository.png

Repository 사용자 추가 및 ​권한 설정​

Policy 추가

  1. IAM - Policies으로 이동후 [Create Policy] 선택

  2. [Create Your Own Policy] 선택
    aws_iam_create_policy.png

  3. Policy Name에 CUSTOM_Developer 입력

  4. Policy Document에 다음을 입력후 [Create Policy] 선택​

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "codecommit:List*"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "codecommit:BatchGetRepositories",
                    "codecommit:CreateBranch",
                    "codecommit:DeleteBranch",
                    "codecommit:Get*",
                    "codecommit:GitPull",
                    "codecommit:GitPush",
                    "codecommit:Put*",
                    "codecommit:Test*",
                    "codecommit:Update*"
                ],
                "Resource": [
                    "arn:aws:codecommit:ap-northeast-2:880169174736:lambda_weather"
                ]
            }
        ]
    }
    
  5. CUSTOM_Viewer Policy를 하나 더 추가

  6. 다음을 입력후 [Create Policy] 선택​

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "codecommit:List*"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "codecommit:BatchGetRepositories",
                    "codecommit:Get*",
                    "codecommit:GitPull"
                ],
                "Resource": [
                    "arn:aws:codecommit:ap-northeast-2:880169174736:lambda_weather"
                ]
            }
        ]
    }
    
  7. 확인
    aws_iam_custom_policy_list.png

Group 추가

  1. IAM - Groups 에서 [Create New Groups] 선택

  2. Group Name에 MyTeam 입력 후 [Next Step] 선택

  3. Attach Policy에서 다음의 Policy를 추가후 [Next Step] 선택​

    • CUSTOM_Developer
    • IAMReadOnlyAccess
    • IAMSelfManageServiceSpecificCredentials
  4. Review에서 확인 후에 [Create Group] 선택
    aws_iam_git_credentials_generated.png

  5. MyTeam Group과 다음의 Policy를 선택하여 YourTeam Group을 생성

    • CUSTOM_Viewer
    • IAMReadOnlyAccess
    • IAMSelfManageServiceSpecificCredentials

사용자 추가

  1. IAM - Users 에서 [Add user] 선택

  2. User name을 입력하고 AWS Management Console access에 체크하여 `[Next: Permissions]' 선택 (다른 항목은 적절하게 선택)

  3. Set permissions 에서 Add user to group 탭에서 MyTeam 체크후 [Next: Review] 선택​

  4. Review에서 확인 후에 [Create user] 선택
    aws_iam_adduser_review.png

  5. 위와 동일한 방법으로 YourTeam을 Group에 추가하여 새로운 사용자를 추가로 만든다.​

Create HTTPS Git credentials

  1. 새롭게 생성한 계정(harry, sally)로 로그인
  2. IAM - Users 에서 본인 계정 선택
  3. Security credentials 탭에서 ​HTTPS Git credentials for AWS CodeCommit 항목의 [Generate] 선택​
  4. ID / Password 저장

테스트

Git Credential 초기화

  • MacOS 사용자의 경우에는 Keychain Access 에서 Git 관련 정보를 삭제​
    key_chain_access.png

  • Git 인증 캐쉬 삭제

    git config --global --unset credential.helper

YourTeam Group 테스트

YourTeam Group은 Repository를 Clone 할 수는 있어도 Push는 불가

$ git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather lambda_weather_sally
Cloning into 'lambda_weather_sally'...
Username:
Password:
remote: Counting objects: 10, done.
Unpacking objects: 100% (10/10), done.

$ cd lambda_weather_sally
$ echo "test" | cat > test
$ git add test
$ git commit -m "test commit"

$ git push origin master
fatal: unable to access 'https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather/': The requested URL returned error: 403

MyTeam Group 테스트

MyTeam Group은 Push가 가능. (테스트시 Git Credential 초기화 필요​)

$ git clone https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather lambda_weather_harry
Cloning into 'lambda_weather_harry'...
Username:
Password:
remote: Counting objects: 10, done.
Unpacking objects: 100% (10/10), done.

$ cd lambda_weather_harry
$ echo "test" | cat > test
$ git add test
$ git commit -m "test commit"

$ git push origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 258 bytes | 258.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather
   6c7bfc1..00f986f  master -> master

Pull Request

CodeCommit에서는 Pull Request를 지원하지 않아서 EC2에 Review 시스템을 설치해서 사용하거나 외부 서비스를 사용해야함.

참고

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!