[小ネタ]ECS パブリックIP自動割り当ての変更はCLI経由で実施しよう

マネジメントコンソール経由だと変更できないんだね。
2022.11.30

困っていた

こんにちは!AWS事業本部のおつまみです。

皆さん、ECSのパブリックIPの自動割り当てを変更したいと思ったことはありますか?私はあります。

プライベートサブネットで実行しているECSの設定を誤ってしまい、パブリックIPの自動割り当てをENABLEDにしてしまいました。
プライペートサブネットにあるため、実影響はないもののパブリックIPの付与はセキュリティ上良くありません。

そこで設定を変更しようとした際に少し詰まってしまったので、変更方法を紹介します。

変更方法

マネジメントコンソール経由でECSサービスを更新しようとした場合、このように変更ができませんでした。

そのため、CLI経由での変更が必要となります。今回はCloudShellで変更を行います。
CloudShell起動後、下記のコマンドを実行します。

aws ecs update-service \
--cluster "test-cluster" \
--service "test-service" \
--network-configuration "awsvpcConfiguration={subnets=["subnet-id","subnet-id"],securityGroups="securityGroup-id",assignPublicIp="DISABLED"}"

コマンドは下記のリファレンスを参考にしました。

update-service — AWS CLI 2.9.2 Command Reference

実行後に、下記のようにECSサービスの設定値がJSON形式で表示されます。
そのままEnterを押下し、"assignPublicIp": "DISABLED"となっていることを確認します。

念の為、マネジメントコンソールでも確認します。

実行前

実行後

瞬時に、パブリックIPの自動割り当てを変更することができました! 変更後にタスクが再起動されるため、更新タイミングは気をつけましょう。

注意点

今回使用したaws ecs update-serviceコマンドによるネットワーク構成変更はECSサービスのデプロイメントタイプが『ローリングデプロイメント』の場合のみ使用できます。

ECSサービスのデプロイメントタイプが『Blue/Greenデプロイメント』で上記のコマンドでサービスを更新しようとした場合には、下記のエラーが発生します。

An error occurred (InvalidParameterException) when calling the UpdateService operation: Unable to update network parameters on services with a CODE_DEPLOY deployment controller. Use AWS CodeDeploy to trigger a new deployment.

(日本語訳) UpdateService オペレーションの呼び出し時にエラー (InvalidParameterException) が発生しました: CODE_DEPLOY デプロイメント コントローラーを使用してサービスのネットワーク パラメーターを更新できません。 AWS CodeDeploy を使用して、新しいデプロイをトリガーします。

『Blue/Greenデプロイメント』の場合は、AWS CodeDeployのAPIを使用しないといけないようです。 公式ドキュメントにもこのように記載されていました。

UpdateService - Amazon Elastic Container Service

ブルー/グリーン ( CODE_DEPLOY) デプロイ コントローラーを使用するサービスの場合、この API を使用して更新できるのは、必要な数、デプロイ構成、ヘルス チェックの猶予期間、タスク配置の制約と戦略、ECS マネージド タグ オプションの有効化、およびタグの伝達のみです。ネットワーク設定、プラットフォーム バージョン、タスク定義、またはロード バランサーを更新する必要がある場合は、新しい AWS CodeDeploy デプロイを作成します。詳細については、 AWS CodeDeploy API リファレンスの「 CreateDeployment 」を参照してください。

最後に

今回はECSのパブリックIPの自動割り当てを変更する方法をご紹介しました。

いつかマネジメントコンソール経由でも変更できるようになればいいなと思いました。

最後までお読みいただきありがとうございました! どなたかのお役に立てれば幸いです。

以上、おつまみ(@AWS11077)でした!