Github에서 AWS CodeCommit으로 이전하기
개요
AWS에도 Github이나 Bitbucket과 같이 GIT Repository가 존재한다.
AWS에 Code가 존재한다면 CI 구성할때에 속도나 보안문제에 매우 유리할 수가 있다.
Github에서 CodeCommit으로 마이그레이션을 하기 위해서는 다음의 절차로 진행한다.
- CodeCommit에 Repository 생성
- Github에 있는 Repository를 CodeCommit으로 복사
- IAM을 통해서 권한의 설정
- 테스트
AWS CodeCommit 소개
- 저렴한 Private 리포지토리 가격
- AWS 클라우드 내에 구축하여 스테이징 또는 프로덕션 환경에 가까이에 리포지토리가 유지
- IAM을 이용하여 리포지토리에 사용자별 권한을 할당
- CodePipeline을 이용한 빠르고 편리한 CI구성
- Git 명령을 동일하게 사용
Github Repository
이 문서에서 CodeCommit으로 옮길 샘플 Repository
https://github.com/harryoh/lambda_weather
CodeCommit에 Repository 생성
Repository 생성
CodeCommit Service로 이동
[Create Repository]
선택옮길 Repository와 동일하게
Repository name
에 lambda_weather 입력
생성된 Repository의 URL을 복사
https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/lambda_weather
생성된 Repository의
[Settings]
에서 ARN을 복사
arn:aws:codecommit:ap-northeast-2:000000000000:lambda_weather
HTTPS Git Credential 생성
- IAM Service - Users - 본인계정에서
[Security credentials]
탭으로 이동 HTTPS Git credentials for AWS CodeCommit
항목에서[Generate]
선택- 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에서 확인
Repository 사용자 추가 및 권한 설정
Policy 추가
IAM - Policies으로 이동후
[Create Policy]
선택[Create Your Own Policy]
선택
Policy Name에 CUSTOM_Developer 입력
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" ] } ] }
CUSTOM_Viewer Policy를 하나 더 추가
다음을 입력후
[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" ] } ] }
확인
Group 추가
IAM - Groups 에서
[Create New Groups]
선택Group Name에 MyTeam 입력 후
[Next Step]
선택Attach Policy에서 다음의 Policy를 추가후
[Next Step]
선택- CUSTOM_Developer
- IAMReadOnlyAccess
- IAMSelfManageServiceSpecificCredentials
Review에서 확인 후에
[Create Group]
선택
MyTeam Group과 다음의 Policy를 선택하여 YourTeam Group을 생성
- CUSTOM_Viewer
- IAMReadOnlyAccess
- IAMSelfManageServiceSpecificCredentials
사용자 추가
IAM - Users 에서
[Add user]
선택User name을 입력하고
AWS Management Console access
에 체크하여 `[Next: Permissions]' 선택 (다른 항목은 적절하게 선택)Set permissions 에서 Add user to group 탭에서 MyTeam 체크후
[Next: Review]
선택Review에서 확인 후에
[Create user]
선택
위와 동일한 방법으로 YourTeam을 Group에 추가하여 새로운 사용자를 추가로 만든다.
Create HTTPS Git credentials
- 새롭게 생성한 계정(harry, sally)로 로그인
- IAM - Users 에서 본인 계정 선택
Security credentials
탭에서 HTTPS Git credentials for AWS CodeCommit 항목의[Generate]
선택- ID / Password 저장
테스트
Git Credential 초기화
MacOS 사용자의 경우에는
Keychain Access
에서 Git 관련 정보를 삭제
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 시스템을 설치해서 사용하거나 외부 서비스를 사용해야함.
참고