AWS CloudFormationでECSを管理するときにハマったこと
CloudFormationでECSを構築したときにハマったメモです。
CloudFormationのテンプレートを書いて
あたりの設定をして、構築しました。
動作確認ができたので、AWS::ECS::Service
の設定を更新しました。
更新をしてみたところ、更新中のステータスから一向に進みませんでした。
テンプレートを確認すると、↓のようになっていました。
(下のテンプレートは余分な部分は書いてません)
Service: Type: AWS::ECS::Service Properties: DeploymentConfiguration: MaximumPercent: 100 MinimumHealthyPercent: 50
MaximumPercent: 100
ということで、新しいコンテナを追加できないのに追加しようとして動かない状態でした。
この状態だと、CloudFormationのタイムアウトを設定しないとずっと、更新中のステータスになってしまいます。
管理画面から手動でサービスの更新でタスク数を0にしてあげれば解決できました。
nodeのバージョン管理にnaveを使おうと思ったら上手くいかなかったのでメモ
basherからnaveをインストールしたあと、
$ nave use latest
を実行したところ、nodeのインストールに失敗した。
$ nave cache clear
したら直った
環境
AWS EC2 OS Debian Jessie AMI ami-dbc0bcbc
問題が発生した手順
- basherインストール
- naveインストール
- nodeインストール
basherのインストール
basherのInstallation手順に沿ってインストールした github.com
$ git clone https://github.com/basherpm/basher.git ~/.basher $ echo 'export PATH="$HOME/.basher/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(basher init -)"' >> ~/.bash_profile $ bash $ basher update
naveインストール
naveのInstallation手順に従ってインストールした github.com
$ basher install isaacs/nave
nodeインストール(問題が起きたところ)
最新版のnodeを使おうと思い下記コマンドを実行した
$ nave use latest
コマンド結果
What version of node? lts, lts/<name>, latest, x.y, or x.y.z >
ここで latest
と入力してもnodeのインストールは実行されませんでした。
下記の通りキャッシュをクリアしたらインストールできました。
$ nave cache clear $ nave use latest
AWS CloudFormationでインフラを構築するときに CAPABILITY_NAMED_IAM というエラーが出た
AWS CodePipeline + CloudFormation でインフラをソースコードで管理しようと思い、cfn-ci-cd-demo
というRepositoryをベースにいろいろ試してみました。
IAM Role を作るときに、
Requires capabilities : [CAPABILITY_NAMED_IAM]
というエラーが出ました。
エラーが出たときの手順
- src配下で、 IAM Role (RoleName指定有り)を作成するテンプレートを作成する
- git push してインフラ構築をする
- 1.で作成したテンプレートの構築時にエラーが出る
という流れで試していたので、1.の該当ファイルだけをCloudFormationのテンプレートに指定して動かしてみたところエラーも無く IAM Role の作成に成功しました。
cfn-ci-cd-demo
では、
- ソースコード取得
- テスト
- ビルド
- 認証許可
- デプロイ
の手順で、デプロイ時に失敗するのでココに原因があるものだと思い、追加したファイルをいろいろ変更して試してみたのですがCodePipelineからのデプロイは成功しませんでした。
解決方法
ビルド時の Capabilities: CAPABILITY_IAM
という設定が原因でした。
この部分です。
- Name: Build Actions: Configuration: Capabilities: CAPABILITY_IAM
IAM や IAM Role に名前を付けたい場合は CAPABILITY_NAMED_IAM
にしないといけないようです。
公式のドキュメントにも書いてあることでした。
esaの任意ページを素早く表示するesajump公開しました。
Chrome Extensionで esajump というものを公開しました。 chrome.google.com
esajumpはドキュメント共有ツールにesaで、任意の番号のページを素早く表示することを目的としています。 esa.io
たまに、口頭で「esaの何番です」といった形で共有されるケースがあります。 そのときに
- esaのトップページを開く
- チーム名を指定する
- 適当なドキュメントを開く
- URLの番号を口頭で伝えられたものに書き換える
という感じで表示するまでが結構めんどくさかったりします。
esajumpは あらかじめチーム名を登録しておくことで、番号を入れるだけで該当のドキュメントを表示できるようになります。
使い方
ここでチーム名を入力し、Enterもしくは右にある + ボタンを押して登録します。
チーム名(hoge)が登録されました。
チーム名をクリックしたあとに表示される画面です。
ここで、背景グレーのテキストボックスに番号を入力しEnterを押すことで、新規タブで該当のドキュメントが表示されます。
チーム名をクリックした場合は、チームのREADMEが表示されます。
上図にある レンチマークのボタンを押したときに表示される画面です。
チーム名を誤って登録した場合はここから削除することができます。
AWSのCloudFormationでs3バケット名変更
CloudFormationからs3バケット名を変更しようとした時の注意メモ
CloudFormationのテンプレートでs3を構築/管理しているときにバケット名を変更しようとします。
変更時の動作は
- 新しく名前のバケットを作成する
- 古い名前のバケットを削除する
の流れのようなので、バケットの中身が消えてしまいました。
また、名前を変えたいバケットの中身が空でない場合、CloudFormationのイベントタブでイベントを見たときに、下記の様なエラーが出ていることがありました。
状態 | タイプ | 状況の理由 |
---|---|---|
DELETE_FAILED | AWS::S3::Bucket | The bucket you tried to delete is not empty. You must delete all versions in the bucket. |