【AWSの呼吸 弐ノ型】CodeDeployでVPCエンドポイントを設定する

ついにCodeDeployがVPCエンドポイントに対応しました。

参考:「AWS CodeDeploy が VPC エンドポイントへのデプロイのサポートを開始

CodeDeployは標準でblue/greenデプロイに対応している便利なサービスなのですが、これまでVPCエンドポイントには対応していなかったのです。

なので、例えばProxyを運用してインターネットへのアクセス制限をしているような環境では、CodeDeployエージェント側の設定ファイルを編集してProxyを指定し、Proxy側でCodeDeployのエンドポイントのURLをホワイトリストに登録するといったひと手間が必要でした。

今回のサポートを受けて、その手間から解放されます!

ということでやってみました。

目次

やったこと

基本的には公式ページ「Use CodeDeploy with Amazon Virtual Private Cloud - AWS CodeDeploy」に沿って、設定します。

  • CodeDeploy用のVPCエンドポイント作成

  • CodeDeployエージェント設定変更

  • IAMロール設定変更

CodeDeploy用のVPCエンドポイント作成

[VPC]->[エンドポイント]から[エンドポイントの作成]を選択し、以下の2つのVPCエンドポイントを追加します。

用途に応じてどちらか片方でもOKです。

VPC、サブネット、SGなどは利用したい環境に合わせてよしなに設定してください。

  • com.amazonaws.region.codedeploy
    • CodeDeployのAPIを実行する用 (create-deploymentなど)
  • com.amazonaws.region.codedeploy-commands-secure
    • CodeDeployエージェントがマネージャ側と通信する用

CodeDeployエージェント設定変更

上で解放されると言っておきながら、実はエージェント側で1ヵ所変更が必要です。。

「/etc/codedeploy-agent/conf/codedeployagent.yml」にて、":enable_auth_policy: "を"true"にする必要があります。(デフォはfalse)

Use CodeDeploy with Amazon Virtual Private Cloud - AWS CodeDeploy」にさらっと書いてあるので、見落としやすいですが、これがないとVPCエンドポイントを介して動きません。

以下のように編集します。

codedeployagent.yml

:log_aws_wire: false
:log_dir: '/var/log/aws/codedeploy-agent/'
:pid_dir: '/opt/codedeploy-agent/state/.pid/'
:program_name: codedeploy-agent
:root_dir: '/opt/codedeploy-agent/deployment-root'
:verbose: false
:wait_between_runs: 1
:proxy_uri:
:max_revisions: 5
:enable_auth_policy: true

IAMロール設定変更

CodeDeployエージェントを稼働させているEC2などの実行環境にアタッチしているIAMロールに以下のActionを追加します。 (参考リンクのテキストをコピペでもOKです。)

"Action": [
  "codedeploy-commands-secure:GetDeploymentSpecification",
  "codedeploy-commands-secure:PollHostCommand",
  "codedeploy-commands-secure:PutHostCommandAcknowledgement",
  "codedeploy-commands-secure:PutHostCommandComplete"
  ],

注意点

  • 上記はCodeDeployエージェントのバージョン1.1.2から対応しています。

  • エージェントのファイルを編集した後はサービス再起動をお忘れなく。。

でもやっぱりProxyを使いたい場合

VPCエンドポイント対応となった今ではあまりケースとしてはないかもしれませんが、codedeployagent.ymlにて":proxy_uri:"を指定すれば、使えるようになります。

例えば、以下のように記述します。

:proxy_uri: https://【Proxyサーバのホスト名】:【ポート番号】

以上。