search
LoginSignup
0

posted at

updated at

CodeBuildで利用するproxy設定をパラメータストア化する

CodeBuild(CodePipeline)をVPCで実行するシーンでは、以下のようにプロキシ指定を駆使する必要があるケースがあると思います。

  • 外部通信にプロキシ(HTTP_PROXY,HTTPS_PROXY)を利用する
  • AWSサービスへの通信のうち、VPCエンドポイントが提供されている場合は、VPCエンドポイント経由(NO_PROXY)とする
  • プロキシ設定は、パラメータストアに入れて集約したい

codebuild_proxy.jpg

パラメータストアに、http_proxy,https_proxy,no_proxyを登録して、CodeBuildの環境変数でパラメータストア参照にすれば良いかなと試しましたがうまく行きません。
これを実現する方法を記載します。

前提

  • CodePipelineから、Github -> CodeBuildの形で、CodePipelineからCodeBuildは実行する流れ
  • CodeBuildはbuildspec内で、proxyやvpcエンドポイントへの通信が必要となる
  • パラメータストアに、http_proxyhttps_proxyno_proxyを定義している

parameterstore.png

結論

  • CodeBuildの環境変数 no_proxyは、.s3.ap-northeast-1.amazonaws.com,ssm.ap-northeast-1.amazonaws.comPLAINTEXTで登録
  • CodeBuildの環境変数 http_proxyhttps_proxyは、パラメータストア参照で登録
  • buildspecの中で、no_proxyをパラメータストアから読み出し、環境変数に設定する

codebuild-parameter-ok2.png

buildspec.yml
version: 0.2
env:
  parameter-store:
    ps_no_proxy: no_proxy # パラメータストアからno_proxyの値を読み出す
phases:
  install:
    commands:
      - unset no_proxy # この時点のno_proxyは、s3とssmがセットされているのでno_proxyをリセット
      - export no_proxy="$ps_no_proxy" # パラメータストアから読み出したno_proxyの値で設定
      - echo $http_proxy # CodeBuildの環境変数にパラメータストア参照で設定しているためパラメータストアのhttp_proxyの値がセットされている
      - echo $https_proxy # 同上

試したこと

冒頭の記載の通り、以下のように全てのプロキシ設定をCodeBuildの環境変数でパラメータストアを参照するとうまく行きません

codebuild_parameterstore_ng.png

以下のように、DOWNLOAD_SOURCEの箇所でエラーとなってしまいます。
CLIENT_ERROR: RequestError: send request failed caused by: Get "https://codepipeline-ap-northeast-1-xxxxxxxxx.s3.ap-northeast-1.amazonaws.com/xxxxxx/SourceArti/xxxxxx": proxyconnect tcp: dial tcp :80: connect: connection refused for primary source and source version arn:aws:s3:::codepipeline-ap-northeast-1-xxxxxxx/xxxxxx/SourceArti/xxxxx

codebuild-failed.png

  • パラメータストアを利用せずに、PLAINTEXTで設定してもうまく行きます。
  • .s3.ap-northeast-1.amazonaws.com,ssm.ap-northeast-1.amazonaws.comをPLAINTEXTで指定している理由は、ソースステージのアーティファクトがS3にあるため、とパラメータストア(SSM)から値を読み出すためにVPCエンドポイントを経由するためです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0