Cloud9を繋ごうとしたら「This is taking longer than expected. The delay may be coused by high CPU…」となった時の対処法

・Cloud9のステータスが「接続中」のまま繋がらない
・Cloud9のポリシーの設定
AWSコンテナ設計・構築[本格]入門を参考にCloud9を設定していたところ、下記の画面が表示され「Connecting…」の画面から切り替わらなくなりました。

今回の記事では、こちらの事象の原因と対処法を紹介します。
記事の目次
原因 SSM Session Managerの権限が付与されていない。
Cloud9はEC2にSSM Session Manager (またはSSH)を使ってアクセスしていますが、
この時、EC2側にSSMへのアクセス権を付与していないと、Cloud9で開発環境のEC2にアクセスできないようです。

IAMロールの変更を行った際に、ポリシーにSSMへの接続権限がなかったために今回の事象が起こったようですね。
対処法
AWSCloud9SSMInstanceProfileポリシーをロールにアタッチしても良いのですが、
管理のためSSM権限とECR権限を持つCloud9用のポリシーを作成して
作成したポリシーをもとにIAMロールを作成・アタッチしたいと思います。
IAMポリシーの作成
最初にSSM権限を含むポリシーを作成します。
AWSマネジメントコンソールへログインし「IAM」のダッシュボードへ移動します。
左側のメニューより「ポリシー」を選択し「ポリシーを作成」をクリック。

ダブより「JSON」を選び「ポリシーエディタには下記のポリシーを追記。({YOUR_ACCOUNT_IDには自分のIDアカウントの数字を入力してください({}は不要)})
全て完了したら「次へ」をクリック。

IAMポリシーに下記のコードを追記
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel",
"ssm:UpdateInstanceInformation"
],
"Resource": "*"
}
ポリシー名(任意)と説明を入力して「ポリシーの作成」をクリック

確認して作成の画面で再確認を行い、問題なさそうであれば「ポリシーの作成」をクリック
〇〇が作成されました。と表示されれば完了です。

ポリシーをもとにIAMロールを作成する
先ほど作成したポリシーをもとにIAMロールを作成していきます。
左側のメニューより「ロール」を選択し「ロールを作成」をクリック
下記のような画面に遷移すると思いますので、イメージ通りにチェックを入れ「次へ」をクリック

許可を追加の画面で先ほど作成したポリシーにチェックを入れ「次へ」をクリック

ロール名を任意で入力し後はデフォルトのまま「ロールを作成」をクリック

下記のような画面が表示されたら完了です。

ロールをEC2インスタンスに追加する。
次に作成したロールをEC2にアタッチします。
EC2インスタンスのダッシュボードへ移動し「インスタンス」を選択
Cloud9で作成したEC2にチェックを入れ「アクション」→「セキュリティ」→「ロールを変更」をクリック

IAMロールを変更で先ほど作成したロールに変更します。
※この時「インスタンスプロファイルをreplaceできませんでした」というエラーが出てもインスタンスを起動すれば問題ありません。インスタンスを停止したままIAMロールを変更するのは下記の記事を参考にしてください。

無事に置き換えが完了しました。

確認
IAMロールを変更したので、Cloud9に接続できるかどうか確認してみます。

無事接続できました。