はじめに
4/15に、AWS東京リージョンで障害があったそうですね。
https://news.yahoo.co.jp/articles/7dc0aa344ae5bf2f52ccb5c6140e07ca3367c396
幸い自分がいる案件では、今回の障害による影響はありませんでした。
一応Health Dashboardを確認してみると、以下のような通知が届いていました。
なんか英語でやいのやいの書いてありますが…要約すると↓
「Fargate使ってるヤツらー!障害起きたから、4/17の11時(JST)にタスクのメンテナンス実行するぞー。
11時にメンテされるの嫌なヤツらはあらかじめ以下に書いてあるコマンドをAWS CLIから叩いて、タスクを新しく起動しとけよなー。」
的な感じのことが書いてありました。
一応原文には午前2時って書いてありますが、JSTの場合はプラス9時間なので昼間の11時なわけです。思いっきし仕事してる時間ですね。そんな時間にタスクのアップデートが入るのはまあさすがに困ります。
なので、あらかじめCLIからコマンド叩いて、予告された時間より前にアップデートを終わらせておくことにしました。と言っても、AWS CLIは使ったことがなかったので、実際にCLIの導入からパッチ適用までの一連の流れを、備忘録も兼ねて記事にすることにしました。
AWS CLIの導入
AWS初学者の自分のイメージでは、てっきりマネジメントコンソール上にターミナルみたいなのがあって、そこから直接コマンドを打てるものだと思ってましたが、どうやら違うみたいです。
流れとしては、
①AWS CLIをインストールする
↓
②マネジメントコンソールから、CLIを叩く用のIAMユーザーを作成する
↓
③コマンドプロンプトからCLIの設定を行う
↓
④Health dashoboardに書いてあったパッチ適用コマンドを叩く
といった感じです。
AWS CLIのインストール
まずはここからAWS CLIをインストールします。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
これをインストールすることで、コマンドプロンプトからAWS環境に向けてコマンドを叩けるようになります。
CLI叩く用のIAMユーザーを作成
マネジメントコンソールに、ルートユーザーもしくはIAMユーザーを作成できる権限を持つユーザーでログインします。
[IAM]にアクセスし、画面左側のメニューから[ユーザー]を選択します。
[許可のオプション]は[ポリシーを直接アタッチする]を選択し、許可ポリシーにECS関連のポリシーを選択します。
今回はAmazonECS_FullAccessを選びました。最小権限の原則的にはよくないかもしれませんが…。
上記設定を終えて[ユーザーの作成]を実施することで、IAMユーザーが作成されます。
次に、IAMのユーザー一覧から作成したユーザーの詳細を開き、アクセスキーIDとシークレットアクセスキーを取得します。
[アクセスキーを作成]から、ユースケースは[コマンドラインインターフェース(CLI)]を選択します。
ここで取得したアクセスキーは、CLIからコマンドを叩くのに必要になるのでどっかにメモしといてください。できればSecret Managerとか使えるとよいです。
コマンドプロンプトでのAWS CLI設定
コマンドプロンプトを開き、以下のコマンドを入力します。
aws configure
コマンド実行後、以下のようなプロンプトが表示されます。
ここで、先ほど取得したアクセスキーIDとシークレットアクセスキーを入力します。
Default region name
にはap-northeast-1(東京リージョン)を、Default output format
にはjsonを入力します。
AWS Access Key ID [None]: <your-access-key-id>
AWS Secret Access Key [None]: <your-secret-access-key>
Default region name [None]: ap-northeast-1
Default output format [None]: json
設定が完了したら、以下コマンドを入力します。
設定されたIAMユーザー情報が表示されたら準備完了です。
aws sts get-caller-identity
ECSパッチ適用コマンドを叩く
Health Dashboardにあったパッチ適用コマンドを叩きましょう。
aws ecs update-service --cluster <cluster-name> --service <service-name> --force-new-deployment
一応補足すると、上記コマンドはECSサービスのデプロイメントタイプが「Rolling Update」の場合に使えるコマンドです。
そうじゃない場合は別のコマンドを叩く必要があります、詳しくは調べてください。
コマンドを叩いて、以下のような実行結果になったら成功です。
{
"service": {
"serviceArn": "arn:aws:ecs:ap-northeast-1:○○",
"serviceName": "○○",
"clusterArn": "arn:aws:ecs:ap-northeast-1:○○",
"loadBalancers": [
{
"targetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:○○",
"containerName": "○○",
"containerPort": <ポート番号>
}
],
"serviceRegistries": [],
"status": "ACTIVE",
"desiredCount": 2,
"runningCount": 2,
"pendingCount": 0,
"capacityProviderStrategy": [
{
"capacityProvider": "FARGATE",
"weight": 1,
"base": 0
}
],
"platformVersion": "LATEST",
"platformFamily": "Linux",
"taskDefinition": "arn:aws:ecs:ap-northeast-1:○○",
-- More --
一応、マネジメントコンソール上からもECSサービスを確認し、ちゃんとタスクが実行されているかも確認するとよいでしょう。
おわりに
正直CLIはなんか苦手意識があって毛嫌いしていましたが、冷静に考えればこんな文字列を叩くだけでアップデートできるのは便利かもしれないですね。
上司からも「CLIが使えればAWSの世界が広がる」と言われたので、少しづつ使えるようになっていきたいなと思います。