[小ネタ]ECS パブリックIP自動割り当ての変更はCLI経由で実施しよう
困っていた
こんにちは!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)でした!