AWSGitIaC

AWS EC2からCodeCommitのリポジトリをCloneする

AWS

EC2インスタンスからCodeCommitのリポジトリをCloneする方法のメモです。

通常のCodeCommitのアクセスにはIAMユーザで認証情報を入力する必要があります。

ただし、CloudFormationなどでCodeCommitを利用する際にユーザ名やパスワードを利用するのは大変です。

そこで、IAMユーザの情報を使わずにCodeCommit上のリポジトリからcloneやpushなどの操作を行う方法についてメモします。

1. IAMユーザの情報を使わずにCodeCommitを操作する

対応としては、「AWS CLIの認証情報ヘルパー」というものを使用することでEC2インスタンスに割り当てられているRoleを使ってアクセスすることができます。

ERROR: The request could not be satisfied

2. 今回の構成

図にするとこんな感じになります。

3. Roleへ割り当てるPolicyの作成

EC2に割り当てているRoleへCodeCommitへのアクセス許可するポリシーを割り当てます。

例としては以下のようなCloudFormation Templateになります。

Ec2InstanceBaseRoleはEC2に割り当てられているRoleにしてください。

  CodeCommitPolicy:
    Type: 'AWS::IAM::Policy'
    Properties:
      PolicyName: "aws-infra-codecommit-policy"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - 'codecommit:GitPull'
              - 'codecommit:GitPush'
            Resource: !Sub "arn:aws:codecommit:ap-northeast-1:${AWS::AccountId}:<リポジトリ名>"
      Roles:
        - !Ref Ec2InstanceBaseRole

4. AWS CLIの認証情報ヘルパーを設定

以下のコマンドを実行して指定したCodeCommit上のリポジトリが認証を聞かれることなくCLoneができることを確認します。

CloudFormationのUserDataを使う場合には、HOMEの環境変数を指定する必要がありますので注意してください。

export HOME=/root
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/<リポジトリ名>

5. まとめ

想定した通りにEC2インスタンスからCodeCommitのリポジトリをCloneすることができました。 これをCloudFormtionと組み合わせることで効率的なセットアップが行えますね。

AWSを効率的に学習する方法

私がAWSを学習するために使った学習材料は「Udemy」だけです。

まずは座学を行ってAWSプラクティショナー もしくは ソリューションアーキテクト試験を取得することを目標にしました。

具体的にはUdemyで以下の2つの商材を購入して学習しました。AWS公式が提供している模擬試験も受けていません。

Udemyは世界最大級のオンライン学習プラットフォームで、世界中の学びたい人と教えたい人をオンラインでつなぐサービスです。 Udemyは米国Udemy,Inc.が運営するプラットフォームで日本ではベネッセが事業パートナーとして協業をしています。 C2C(consumer to consumer)により生まれる豊富で多彩な講座により個人の学習ニーズに応じた学びをみつけることができます。

これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(SAA-C02試験対応版)
【SAA-C02版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集(6回分390問)

今回は以上となります。

コメント

タイトルとURLをコピーしました