Codebuild上でクレデンシャルが必要なコマンドを実行したい

記事タイトルとURLをコピーする

こんにちは、技術1課の岩本です。
Codebuild大好き。某メガネのCM風で始まりました今回ですが、
Codebuildは柔軟に色々なコマンドが実行できるので、便利なサービスです。

今回は、Codebuild上でコマンドを実行する際に、クレデンシャルを取得する方法を記載します。

まず結論から

buildspec.ymlには以下のように記載します。 (コマンドの実行に必要なRoleは事前にCodebuildProject自体に付与しておいてください)

---
version: 0.2

phases:
  install:
    commands:
      - apk --update add curl
      - apk --update add py-pip
      - apk --update add jq
      - pip install awscli
  pre_build:
    commands:
      - curl -qL -o aws_credentials.json 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI > aws_credentials.json
      - aws configure set region $AWS_REGION
      - aws configure set aws_access_key_id `jq -r '.AccessKeyId' aws_credentials.json`
      - aws configure set aws_secret_access_key `jq -r '.SecretAccessKey' aws_credentials.json`
      - aws configure set aws_session_token `jq -r '.Token' aws_credentials.json`
  build:
      commands:
      - echo "hello"
  post_build:
    commands:
      - echo "hollo"

解説

  • クレデンシャル取得には、以下のコマンドが必要となります、DockerImageに含まれていない場合は、Codebuild上でインストールします。
    • curl
    • awscli
    • jq
  • 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI にアクセスしMetaDataを取得します。
  • MetaDataはJson形式のため、Jqコマンドを使って必要な情報を取得します。

まとめ

上記を利用することで、PackerTerraformまた、CodenizeToolをパイプラインの一部として利用ができます。

ぜひご活用ください。