Posted:
| Categories:
AWS
| Tags:
AWS,
EC2
日次で自動的に cron で再起動して、AMI イメージを取得したい。
再起動が必要だが再起動時はメンテナンス画面を出しておきたい( 深夜メンテナンス時間が取れるサービスに限る )
ALB でメンテナンス画面を出せる機能を用いてサーバ終了、起動時にメンテナンス画面に切り替える
仕組み
- EC2 上で自分自身のイメージを取得するスクリプトを用意する
- EC2 の IAM ロールで AMI 化を実行するのに必要な権限を付与する
- EC2 サーバの crontab にスクリプトを用意する
- 起動終了時に ALB のルールのプライオリティを変更する処理を組み込む
EC2 上で自分自身のイメージを取得するスクリプトを用意する
/usr/local/bin/ami_backup.bash に下記のスクリプトを設置した。
#!/bin/bash
id=$(/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id)
/usr/bin/aws ec2 create-image --region ap-northeast-1 --instance-id $id --name "wordpress-www-update-$id-$(date +%Y%m%d%H%M)" --reboot
wordpress-www-update の部分はシステムによって変えた方が良いと思う。
あるいは$id にインスタンス名が入るので、それを持ってユニークとするか( ただし検索が面倒 )
EC2 の IAM ロールで AMI 化を実行するのに必要な権限を付与する
下記のロールを持つように IAM を作成、EC2 サーバーに付与
- elasticloadbalancing はロードバランサーのルールのプライオリティの上下に使う
- ec2 は AMI の作成に使う
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:DescribeRules",
"elasticloadbalancing:SetRulePriorities",
"ec2:ExportImage",
"ec2:DescribeImages",
"ec2:DeleteTags",
"ec2:EnableImageDeprecation",
"ec2:CreateTags",
"ec2:RegisterImage",
"ec2:CreateImage",
"ec2:ModifyImageAttribute",
"ec2:CreateStoreImageTask",
"ec2:DisableImageDeprecation"
],
"Resource": "*"
}
]
}
EC2 サーバの crontab にスクリプトを用意する
AM 03:01 に実施
Read more...Posted:
| Categories:
AWS
| Tags:
AWS,
EC2
なるべくサービス側のシステムを触らずにALBだけでメンテナンス画面を出したかった
参考: FixedResponseActionConfig (ALB)
• Fixed response のメッセージボディは 1024 バイトまで
• HTML を入れる場合はサイズ制限が厳しいので、必要なら minify して縮める
• CDNキャッシュ初期化は必要なドメインすべてで行う必要がある
Read more...Posted:
| Categories:
AWS
| Tags:
AWS,
EC2
EC2のオートスケールは、EC2のWebUIの下記の要素で作成する
- AMI <- ami-idを確認する
- AUTO SCALING
- 起動設定 <- 主にEC2の起動設定、どのAMIからEC2インスタンスを作成する、spotインスタンスにするか、など。複数作成して切り替える事が可能。
- Auto Scalingグループ <- 主にネットワーク周りの設定
起動設定を作ってから、AutoScalingグループを作成する。
[ AutoScalingグループ ]には「どのAMIからEC2インスタンスを作成するか」という[ 起動設定 ]を切り替えることができる。
高負荷時のオートスケールにかかる時間は5分から6分程度、EC2インスタンス起動に通常、120秒ほどかかる事を考えると、
負荷の検知、スケールアウト準備、インスタンス起動、サービス開始、と妥当な時間のように思う。
が、ライブ開始前と21:00の負荷の際にはあらかじめサーバを足しておきたい。この設定は
[ AutoScalingグループ ]->[ スケジュールされたアクション ]で設定可能。
※ このスケジュールされたアクションを設定する際の
[ 開始時刻 ]の注意点は
- デフォルトで翌日の設定になってる
- 一度開始時刻を設定しようとすると、CRONの設定が消える
という点が注意点。スケジュールが実行されないケースがあった。
実際にスケジュールが実行されたかどうかは[ アクティビティ履歴 ]を見ると分かる
Read more...Posted:
| Categories:
AWS
| Tags:
AWS,
EC2
インスタンスタイプごとのネットワーク帯域
iperfなどで計測する。
iperf -c %LOCAL_IP_ADDRESS% -t 60
EC2 – EC2 間 は5Gbps程度
参考 水門は開いた – EC2 インスタンスのネットワーク帯域幅が増大
起動時、パッケージのセットアップがうまく行かない場合
/etc/sysconfig/cloud-init の package_setupの項目をnoにする。
参考 VPC内にEC2を立ち上げようとしてcloud-initのpackage_setupでハマる
チェックポイント
EC2
余計なセキュリティグループがついてないか、つまり余計なポートが空いてないか
opsに余計なのがついてたり( port 22 が、まだ空いていたり )
AZ分散しているか?
たまに「サブネットを作ってなかった」というミスがあり、この場合、サブネットが寄ってしまっている。
opsにはEIPが割り当てられているか
パラメータストアにSLACKの値は設定しているか
ロードバランサー
ターゲットグループ
ELBのtarget groupにおける stickness が無効になってたので30秒で有効に変更する
EC2 上に Nginx + PHP + Phalcon 構築手順
nginxの UID:GIDを揃える
下記のファイルで必要になる。 UID:GID統一の方法としては
- NIS or LDAP 導入
- 追加するアプリのUID:GID全て統一
- 必要なアプリのUID:GID統一
があるが、今回は3にした。基本的には『サーバ間でファイルをコピーする場合』にUID:GIDが揃ってないと、動作しないので。
( 上場してパスワード更新が求められるようになったらldap導入するか検討しても良いかもしれない )
パッケージインストール
git インストール
yum -y install git gcc make libtool
カーネルパラメータ追加
下記を追記
Read more...Posted:
| Categories:
AWS
| Tags:
AWS,
EC2
AMI( HDDイメージのようなもの )の選択
AMIの選択はEC2を起動する際やここから検索できる
ただ検索できた方が、なにかと自動化しやすい( わざわざブラウザで開かなくて良い )ので方法を残す
例えばAMI名に『KUSANAGI』を含むAMIを検索する場合
aws ec2 describe-images \
--region ap-northeast-1 \
--owners 'aws-marketplace' \
--filters 'Name=name,Values=*KUSANAGI*'
例えば Amazon Linux の最新AMI IDが欲しい場合
Amazon Linux は SSM パブリックパラメータから取得する方が確実。
公式: Amazon Linux 2023 の AMI を取得する
Amazon Linux 2023 (x86_64) の例:
aws ssm get-parameter \
--region ap-northeast-1 \
--name /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64 \
--query 'Parameter.Value' \
--output text
Amazon Linux 2 など他の系列は、該当するパラメータ名を公式一覧から確認する。
プロダクトコード、オーナーで検索する場合
「あるオーナーの更に、プロダクトごとに絞り込みたい」ようなケース。
オーナーは、大雑把にいうと「Amazonが所有者のもの( amazon )」と「それ以外( aws-marketplace )」な区分がある。
Read more...