【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から対応しています。
- それより古いバージョンを利用している場合はCodeDeployエージェントを1.1.2以降に更新する必要があります。
- 参考:[ CodeDeploy エージェント - AWS CodeDeploy
エージェントのファイルを編集した後はサービス再起動をお忘れなく。。
でもやっぱりProxyを使いたい場合
VPCエンドポイント対応となった今ではあまりケースとしてはないかもしれませんが、codedeployagent.ymlにて":proxy_uri:"を指定すれば、使えるようになります。
例えば、以下のように記述します。
:proxy_uri: https://【Proxyサーバのホスト名】:【ポート番号】
以上。