CodeCommitにgit pushするまで
はじめに
Codeシリーズを勉強する際に最初にCodeCommitを触ってみました。
その中で、CodeCommitの認証って意外と面倒くさくない?と思ったので、図とイラストを交えながらまとめてみました。
前提として今回はMacOSで検証しています。
CodeCommitでリポジトリ作成
まずはCodeCommitでリポジトリを作成します。
コンソール画面からCodeCommitを検索して、新しいリポジトリを作成します。
適当なリポジトリ名を入力して作成します。
リポジトリが作成されるとこのような画面になります。
この画面で必要なステップが書かれているので、これに沿って準備を進めます。
今回はSSHを使って接続してみたいと思います。
HTTPSは簡単なので、最後にちょこっと説明します。
事前準備
Gitのインストール
まずはローカル環境にGitがインストールされていることを確認して下さい。
Gitのインストールはここでは触れませんので
Gitがインストールされていない方は「Git インストール方法」等で調べてみて下さい。
IAMユーザー
次に、CodeCommitを操作するためにIAMユーザーにポリシーがアタッチされていることを確認して下さい。
AWSCodeCommitPowerUserまたはCodeCommitのアクセス別のポリシーがアタッチされている必要があります。
ssh key
次にリポジトリにsshで接続するために鍵を発行します。
まずはローカル環境でssh-keygenコマンドで鍵を作成します。
$ ssh-keygen -t rsa -f <ファイル名>
<ファイル名> の部分は鍵の名前です。
適当に好きなファイル名にして下さい。
これで秘密鍵と公開鍵が作成されたはずです。
~/.ssh/
に作成したファイルが保存されています。
鍵の登録
次に先ほど生成した公開鍵をIAMユーザーに登録します。
まずは以下のコマンドでクリップボードに公開鍵の内容をコピーします。
$ pbcopy < ~/.ssh/<ファイル名>.pub
コピーできない場合は、catコマンドで出力された内容をコピーして下さい。
cat ~/.ssh/<ファイル名>.pub
ではコピーした公開鍵をIAMユーザーの認証情報に登録します。
マネジメントコンソールからCodeCommitを操作するIAMユーザーの画面を開きます。
次にセキュリティ認証情報のタブを選択します。
その中の「AWS CodeCommit の SSH 公開キー」に公開鍵をアップロードします。
画面の上側です。
ちなみに、HTTPSの場合は下側のHTTPS Git 認証情報で認証情報の生成を行います。
(後ほど手順を書きます。)
SSH 公開キーのアップロードを選択すると、以下のようなウィンドウが出ます。
ここに先ほどコピーした内容をそのまま貼り付けてアップロードします。
アップロードか完了すると、「SSHキーID」が発行されます。
例えばAPKAEIBAERJR2EXAMPLE
のような文字列が発行されます。
SSHキーIDの登録
次に、発行されたSSHキーIDを~/.ssh/configに登録します。
これは自身のローカル環境からsshを使って通信を行うために行います。
何かしらのコードエディタを使って~/.ssh/configに次の行を追加します。
Host git-codecommit.ap-northeast-1.amazonaws.com
User <SSHキーID>
IdentityFile ~/.ssh/<ファイル名>
これでsshで接続する準備が整いました。
ではsshで接続できることを確認しておきます。
$ ssh git-codecommit.ap-northeast-1.amazonaws.com
The authenticity of host 'git-codecommit.ap-northeast-1.amazonaws.com (54.240.225.207)' can't be established.
RSA key fingerprint is SHA256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'git-codecommit.ap-northeast-1.amazonaws.com' (RSA) to the list of known hosts.
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.ap-northeast-1.amazonaws.com closed by remote host.
Connection to git-codecommit.ap-northeast-1.amazonaws.com closed.
sshでの接続が確認できました。
git操作
ここからは普通のgit操作と同じ要領です。
まずはCodeCommitのコンソール画面からリポジトリのURLを取得します。
ではこちらのコマンドをそのまま入力します。
$ git clone ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo
Cloning into 'demo'...
warning: You appear to have cloned an empty repository.
これでローカル環境にCodeCommitのリポジトリがcloneされました。
では、リポジトリが空なので適当にファイルを作ってpushしてみたいと思います。
$ touch index.html
$ git add .
$ git commit -m "first commit"
$ git push origin main
これでCodeCommitの方にpushされたはずです。
確認してみます。
ちゃんとリモートリポジトリにpushされています!
これで認証情報の登録からpushまでの一連の流れが終わりました。
HTTPSで接続
最後にHTTPSで接続する方法も書いておきます。
こちらは簡単です。
事前準備はSSHの時と同じです。
ではCodeCommitを使用するIAMユーザーのコンソール画面へ移動します。
次に、IAMユーザーの認証情報画面でHTTPS Git 認証情報から「認証情報を生成」を選択します。
画像の下側ですね。
すると、以下のように認証情報が発行されます。
このユーザー名とパスワード使って認証を行います。
パスワードはこの画面でしか確認できないので、必要であれば認証情報をダウンロードしておきましょう。
HTTPSでgit clone
CodeCommitの画面へ移り、リポジトリのURLをコピーします。
これをそのままローカル環境で実行します。
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo
ここで認証情報を聞かれます。
先ほどの「ユーザー名」と「パスワード」を使って認証します。
Cloning into 'demo'...
Username for 'https://git-codecommit.ap-northeast-1.amazonaws.com': <ユーザー名>
Password for 'https://SOU_IAMUSER-at-194641379830@git-codecommit.ap-northeast-1.amazonaws.com':<パスワード>
remote: Counting objects: 5, done.
Unpacking objects: 100% (5/5), 362 bytes | 45.00 KiB/s, done.
これでcloneができました。
このあとは先ほどと同じです。
簡単ですね!
まとめ
難しいというよりは面倒という感じでした。
今回のような認証情報の登録は最初の一回だけで、その後は触らない部分だと思います。
そのため毎回、あれ、これどうやるんだっけ?となりがちなので、そういった時に自分の記事を読み返して少しでも時短になればいいかなと思いました。
というより、これならシェルスクリプトで半自動化したほうが早いかな...とか思ったり。
Discussion