Amazon Linux 2 AMI起動手順書
概要
Amazon Linux 2 EOL対応として、取得したAMIから新しいインスタンスを起動する手順です。
対象インスタンス: 全15台
- Terraform管理: 12台 →
terraform applyで自動起動 - Terraform管理外: 3台 → 手動起動
⚠️ 重要: 本手順の位置付け
本手順は緊急対応用です
この手順は、インスタンスが壊れたり起動しなくなった際に、AMIから緊急復旧するための手順です。
想定される緊急対応シナリオ:
- Amazon Linux 2サポート切れ: EOL(2025年6月30日)後、公式AMIが利用できなくなり新規起動が不可能になるリスク
- インスタンスのOS障害: OSの障害により起動不可
- ハードウェア障害: AWSのハードウェア障害によるインスタンス停止
- 誤操作: システムファイル破損、設定ミス等による起動不可
- その他の緊急復旧: 上記以外で緊急復旧が必要な場合
📋 接続情報への影響(別途対応予定)
注意: AMIからインスタンスを起動した場合、以下の接続情報に影響が出る可能性があります:
- SaaS連携: 外部SaaSサービス(Retool、Auth0等)の接続設定
- デプロイ設定: CI/CDパイプラインの接続先設定
- IPアドレス変更: プライベートIPが変わることによる影響
- DNSレコード: Route53等のDNS設定
- ロードバランサー: ALB/NLBのターゲットグループ設定
これらの影響の詳細な洗い出しと対応手順は、別途作成予定です。
緊急復旧時は、まずインスタンスを起動し、その後に接続情報の確認・修正を行ってください。
作成日: 2026-03-27 作成者: takahiro-oga
事前確認
1. Terraform管理状況
| 環境 | Terraform管理 | Terraform管理外 | 合計 |
|---|---|---|---|
| fd-dev | 4台 | 2台 | 6台 |
| fd-prod | 4台 | 0台 | 4台 |
| fd-sys | 4台 | 1台 | 5台 |
| 合計 | 12台 | 3台 | 15台 |
Terraform管理外の2台:
- i-0021f33ada7e21742: fd-system-dev-proxy-squid (fd-dev)
- i-022a683b669777872: maintenance (fd-sys)
注釈: mental-retool-bation-stg (i-0d2816a7cd665c875) は削除予定のため対象外。
2. AMIに含まれるもの・含まれないもの
✅ AMIに含まれる
- OS、ファイルシステム、インストール済みソフトウェア
- EBSスナップショット
❌ AMIに含まれない(起動時に設定が必要)
- タグ(Name, Environment等)
- IAMロール(インスタンスプロファイル)
- セキュリティグループ
- サブネット/VPC
- キーペア
- インスタンスタイプ
- Elastic IP
- User Data
3. User Data調査結果
全15台でUser Dataなし(2026-03-27調査完了)
Terraformのbastion moduleには以下のUser Data定義がありますが、実際のインスタンスには設定されていません:
#!/bin/bash
sed -i "s/retool-bastion-0/${ec2_name}/g" "/opt/aws/amazon-cloudwatch-agent/bin/config.json"
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -sTerraform管理インスタンスの場合: terraform applyで自動的にUser Dataが適用されます。
Terraform管理インスタンス(12台)の起動手順
重要な注意事項
⚠️ インスタンスは削除→作成されます
- ダウンタイムが発生する
- インスタンスIDが変わる
- プライベートIPが変わる可能性がある
- タグ、IAMロール、SG、User Dataは自動設定される
AMI変数名
| リージョン | 変数名 |
|---|---|
| us-east-1 (Virginia) | image_id |
| ap-northeast-1 (Tokyo) | image_id_tokyo |
手順
1. terraform.tfvarsをダウンロード
# 環境ディレクトリに移動
cd fastdoctor-template/common/<環境名>
# terraform.tfvarsをダウンロード
./download-tfvar.sh2. AMI IDを変更
変更例:
# バージニアリージョンのインスタンス用
image_id = "ami-NEW_VIRGINIA_AMI_ID"
# 東京リージョンのインスタンス用
image_id_tokyo = "ami-NEW_TOKYO_AMI_ID"3. terraform.tfvarsをS3にアップロード
./upload-tfvar.sh4. terraform planで確認
terraform plan確認ポイント:
Plan: 1 to add, 0 to change, 1 to destroyと表示される(正常)- AMI IDが
ami-OLD_ID -> ami-NEW_IDに変更される - 意図しない他のリソースが変更されていないか確認
5. terraform applyで適用
terraform apply6. 動作確認
# インスタンス状態確認
aws ec2 describe-instances \
--region <REGION> \
--profile <PROFILE> \
--filters "Name=tag:Name,Values=<INSTANCE_NAME>" "Name=instance-state-name,Values=running" \
--query 'Reservations[0].Instances[0].[InstanceId,State.Name,ImageId,PrivateIpAddress]' \
--output table
# SSM接続確認
aws ssm start-session \
--target <NEW_INSTANCE_ID> \
--region <REGION> \
--profile <PROFILE>Terraform管理外インスタンス(3台)の起動手順
設定情報サマリー
i-0021f33ada7e21742: fd-system-dev-proxy-squid
| 項目 | 値 |
|---|---|
| AWS Account | 900176301532 |
| Region | ap-northeast-1 (Tokyo) |
| Instance Type | t3.small |
| Key Pair | tamazaki-fd |
| VPC | vpc-01522c0d0c0a8ddc8 |
| Subnet | subnet-0cc6d929f60137959 |
| IAM Role | fd-system-dev-proxy-squid |
| Security Group | fd-system-dev-squid (sg-01aaf87e5ebcaadb3) |
| EBS | 50GB, gp2, 暗号化なし |
| Elastic IP | 54.178.227.204 (eipalloc-06effa9614b1321ff) ⚠️ 要再アタッチ |
i-022a683b669777872: maintenance
| 項目 | 値 |
|---|---|
| AWS Account | 913831226605 |
| Region | us-east-1 (Virginia) |
| Instance Type | t2.medium |
| Key Pair | ec2-for-rds-maintenance |
| VPC | vpc-fe806583 |
| Subnet | subnet-ba75ecf7 |
| IAM Role | なし |
| Security Group | default (sg-fa3c31df) |
| EBS | 8GB, gp2, 暗号化なし |
| Elastic IP | なし |
手動起動手順
1. fd-system-dev-proxy-squid(EIP付き)
重要: このインスタンスはElastic IP(54.178.227.204)が付与されています。以下の手順でIPアドレスを変えずにインスタンスを置き換えます。
Step 1: EIP Association IDの取得(事前確認)
# 旧インスタンスのEIP関連付け情報を取得
aws ec2 describe-addresses \
--allocation-ids eipalloc-06effa9614b1321ff \
--region ap-northeast-1 \
--profile <PROFILE> \
--query 'Addresses[0].[AllocationId,PublicIp,InstanceId,AssociationId]' \
--output table確認: 出力されたAssociationId(例:assoc-XXXXX)を記録してください。次のステップで使用します。
Step 2: 新インスタンスの起動
# インスタンス起動
NEW_INSTANCE=$(aws ec2 run-instances \
--image-id <NEW_AMI_ID> \
--instance-type t3.small \
--key-name tamazaki-fd \
--subnet-id subnet-0cc6d929f60137959 \
--security-group-ids sg-01aaf87e5ebcaadb3 \
--iam-instance-profile Name=fd-system-dev-proxy-squid \
--block-device-mappings '[{"DeviceName":"/dev/xvda","Ebs":{"VolumeSize":50,"VolumeType":"gp2","Encrypted":false}}]' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=fd-system-dev-proxy-squid}]' \
--region ap-northeast-1 \
--profile <PROFILE> \
--query 'Instances[0].InstanceId' \
--output text)
echo "新しいインスタンスID: $NEW_INSTANCE"Step 3: 新インスタンス起動完了を待機
aws ec2 wait instance-running \
--instance-ids $NEW_INSTANCE \
--region ap-northeast-1 \
--profile <PROFILE>
echo "新インスタンス起動完了"Step 4: 旧インスタンスからElastic IPを解除
# Step 1で取得したAssociation IDを使用
aws ec2 disassociate-address \
--association-id <ASSOCIATION_ID> \
--region ap-northeast-1 \
--profile <PROFILE>
echo "EIP解除完了"Step 5: 新インスタンスにElastic IPを付与
aws ec2 associate-address \
--instance-id $NEW_INSTANCE \
--allocation-id eipalloc-06effa9614b1321ff \
--region ap-northeast-1 \
--profile <PROFILE>
echo "EIP付与完了"重要: 同じAllocation ID(eipalloc-06effa9614b1321ff)を使用するため、IPアドレス(54.178.227.204)は変わりません。外部からのアクセス設定(DNSレコード等)の変更は不要です。
Step 6: EIP付与の確認
# Elastic IPアタッチ状態確認
aws ec2 describe-addresses \
--allocation-ids eipalloc-06effa9614b1321ff \
--region ap-northeast-1 \
--profile <PROFILE> \
--query 'Addresses[0].[AllocationId,PublicIp,InstanceId,AssociationId]' \
--output table確認ポイント:
PublicIp:54.178.227.204(変更なし)InstanceId: 新しいインスタンスID($NEW_INSTANCE)
Step 7: 新インスタンスの検証
SSM接続確認、アプリケーション疎通確認を実施(詳細は「起動後の確認手順」セクション参照)
Step 8: 旧インスタンスの停止
# 新インスタンスの動作確認がOKなら、旧インスタンスを停止
OLD_INSTANCE=<OLD_INSTANCE_ID> # 旧インスタンスIDを設定
aws ec2 stop-instances \
--instance-ids $OLD_INSTANCE \
--region ap-northeast-1 \
--profile <PROFILE>
echo "旧インスタンス停止完了: $OLD_INSTANCE"Step 9: 旧インスタンスの削除(数日後)
# 新インスタンスで数日〜1週間程度様子を見て、問題なければ旧インスタンスを削除
aws ec2 terminate-instances \
--instance-ids $OLD_INSTANCE \
--region ap-northeast-1 \
--profile <PROFILE>
echo "旧インスタンス削除完了: $OLD_INSTANCE"2. maintenance
重要: maintenanceインスタンスはSSM接続に必要なため、IAM Role付きで起動します。詳細な設定手順は「SSM接続設定」セクションを参照してください。
Step 1: インスタンス起動(IAM Role付き)
# fd-sys環境の既存SSMインスタンスプロファイルを使用
INSTANCE_PROFILE_NAME="AmazonSSMRoleForInstancesQuickSetup"
# インスタンス起動(IAM Role付き)
NEW_INSTANCE=$(aws ec2 run-instances \
--image-id <NEW_AMI_ID> \
--instance-type t2.medium \
--key-name ec2-for-rds-maintenance \
--subnet-id subnet-ba75ecf7 \
--security-group-ids sg-fa3c31df \
--iam-instance-profile Name=${INSTANCE_PROFILE_NAME} \
--block-device-mappings '[{"DeviceName":"/dev/xvda","Ebs":{"VolumeSize":8,"VolumeType":"gp2","Encrypted":false}}]' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=maintenance}]' \
--region us-east-1 \
--profile <PROFILE> \
--query 'Instances[0].InstanceId' \
--output text)
echo "新しいインスタンスID: $NEW_INSTANCE"
# インスタンス起動完了を待機
aws ec2 wait instance-running \
--instance-ids $NEW_INSTANCE \
--region us-east-1 \
--profile <PROFILE>
echo "インスタンス起動完了"Step 2: SSMエージェント登録確認
# SSMエージェントがオンラインになるまで5分程度待つ
echo "SSMエージェントの登録を待っています(5分程度)..."
sleep 300
# SSM Agent登録確認
aws ssm describe-instance-information \
--filters "Key=InstanceIds,Values=$NEW_INSTANCE" \
--region us-east-1 \
--profile <PROFILE> \
--query 'InstanceInformationList[0].[InstanceId,PingStatus,PlatformName]' \
--output table期待される結果: PingStatus が Online になっていること
注釈: SSM接続の詳細な確認方法やトラブルシューティングは「SSM接続設定」セクションを参照してください。
Step 3: 旧インスタンスの削除
# 旧インスタンスID
OLD_INSTANCE="i-022a683b669777872"
# 旧インスタンス削除
aws ec2 terminate-instances \
--instance-ids $OLD_INSTANCE \
--region us-east-1 \
--profile <PROFILE>
echo "旧インスタンス削除完了: $OLD_INSTANCE"起動後の確認手順
1. インスタンス状態確認
# インスタンスがrunning状態になるまで待機
aws ec2 wait instance-running \
--instance-ids $NEW_INSTANCE \
--region <REGION> \
--profile <PROFILE>
# インスタンス詳細確認
aws ec2 describe-instances \
--instance-ids $NEW_INSTANCE \
--region <REGION> \
--profile <PROFILE> \
--query 'Reservations[0].Instances[0].[InstanceId,State.Name,ImageId,PrivateIpAddress,PublicIpAddress]' \
--output table2. Elastic IP確認(fd-system-dev-proxy-squidのみ)
# Elastic IPアタッチ状態確認
aws ec2 describe-addresses \
--allocation-ids eipalloc-06effa9614b1321ff \
--region ap-northeast-1 \
--profile fd-dev \
--query 'Addresses[0].[AllocationId,InstanceId,PublicIp,AssociationId]' \
--output table3. アプリケーション疎通確認
各インスタンスの用途に応じて以下を確認:
- fd-system-dev-proxy-squid: Squidプロキシサービス起動確認、プロキシ経由の疎通確認
- maintenance: RDSメンテナンス用接続確認(SSM接続確認は起動手順のStep 2で完了済み)
SSM接続設定
maintenanceインスタンスなど、SSM接続が必要なインスタンスに対して、IAM RoleとInstance Profileを設定する手順です。
前提条件
- AWS CLI設定済み
- 適切なIAMポリシー権限(IAM Role/Instance Profile作成/確認権限)
既存のInstance Profileの確認
fd-sys環境では既にAmazonSSMRoleForInstancesQuickSetupが存在します。まずこちらを確認してください。
# 既存のSSM用インスタンスプロファイルを確認
aws iam get-instance-profile \
--instance-profile-name AmazonSSMRoleForInstancesQuickSetup \
--profile <PROFILE>
# アタッチされているポリシーを確認
aws iam list-attached-role-policies \
--role-name AmazonSSMRoleForInstancesQuickSetup \
--profile <PROFILE>期待される結果:
- Instance Profile:
AmazonSSMRoleForInstancesQuickSetup - アタッチされているポリシー:
AmazonSSMManagedInstanceCore(必須)
既存のプロファイルが存在し、適切なポリシーがアタッチされている場合は、以下の新規作成手順は不要です。
IAM Role と Instance Profile の新規作成(既存がない場合のみ)
注意: fd-sys環境では既に
AmazonSSMRoleForInstancesQuickSetupが存在するため、通常この手順は不要です。他の環境で必要な場合のみ実行してください。
Step 1: Trust Policy JSONファイル作成
cat > /tmp/ec2-trust-policy.json << 'EOF'
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOFStep 2: IAM Role作成
# IAM Roleを作成
aws iam create-role \
--role-name SSMInstanceRole \
--assume-role-policy-document file:///tmp/ec2-trust-policy.json \
--description "IAM Role for EC2 instances to use SSM Session Manager" \
--profile <PROFILE>Step 3: SSM用ポリシーをアタッチ
# AmazonSSMManagedInstanceCore ポリシーをアタッチ
aws iam attach-role-policy \
--role-name SSMInstanceRole \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore \
--profile <PROFILE>Step 4: Instance Profile作成
# Instance Profileを作成
aws iam create-instance-profile \
--instance-profile-name SSMInstanceProfile \
--profile <PROFILE>
# RoleをInstance Profileに追加
aws iam add-role-to-instance-profile \
--instance-profile-name SSMInstanceProfile \
--role-name SSMInstanceRole \
--profile <PROFILE>Step 5: 作成確認
# Instance Profile確認
aws iam get-instance-profile \
--instance-profile-name SSMInstanceProfile \
--profile <PROFILE>既存インスタンスへのIAM Role割り当て
起動済みインスタンスにIAM Roleを割り当てる場合:
# fd-sys環境の既存プロファイルを使用
INSTANCE_PROFILE_NAME="AmazonSSMRoleForInstancesQuickSetup"
# Instance ProfileをEC2インスタンスに関連付け
aws ec2 associate-iam-instance-profile \
--instance-id <INSTANCE_ID> \
--iam-instance-profile Name=${INSTANCE_PROFILE_NAME} \
--region <REGION> \
--profile <PROFILE>
# 割り当て確認
aws ec2 describe-iam-instance-profile-associations \
--filters "Name=instance-id,Values=<INSTANCE_ID>" \
--region <REGION> \
--profile <PROFILE>SSM Agent登録確認
IAM Role割り当て後、SSM Agentがオンラインになるまで5分程度待ちます。
# SSM Agent登録確認(数分かかる場合があります)
aws ssm describe-instance-information \
--filters "Key=InstanceIds,Values=<INSTANCE_ID>" \
--region <REGION> \
--profile <PROFILE> \
--query 'InstanceInformationList[0].[InstanceId,PingStatus,PlatformName,PlatformVersion]' \
--output table期待される結果:
PingStatus:Onlineになっていること
トラブルシューティング
問題1: terraform planで意図しない変更が表示される
# Terraform stateをリフレッシュ
terraform refresh -var-file=terraform.tfvars
# 再度terraform planを実行
terraform plan -var-file=terraform.tfvars問題2: SSM Agent が "Online" にならない
確認項目:
- ネットワーク設定(インターネットゲートウェイ、VPCエンドポイント)
- IAMロールに
AmazonSSMManagedInstanceCoreポリシーがアタッチされているか
# SSM Agent登録確認
aws ssm describe-instance-information \
--filters "Key=InstanceIds,Values=<INSTANCE_ID>" \
--region <REGION> \
--profile <PROFILE>問題3: Elastic IPが再アタッチできない
# 元のインスタンスから解除されているか確認
aws ec2 describe-addresses \
--allocation-ids <ALLOCATION_ID> \
--region <REGION> \
--profile <PROFILE>
# 必要に応じて先に解除
aws ec2 disassociate-address \
--association-id <ASSOCIATION_ID> \
--region <REGION> \
--profile <PROFILE>チェックリスト
Terraform管理インスタンス(12台)
fd-dev環境
- [ ] バージニアリージョン(2台): bastion, bastion-retool
- [ ]
image_idを新AMI IDに更新 - [ ] terraform plan/apply
- [ ] 動作確認
- [ ]
- [ ] 東京リージョン(2台): bastion-fd-sys, bastion-fd-sys-retool
- [ ]
image_id_tokyoを新AMI IDに更新 - [ ] terraform plan/apply
- [ ] 動作確認
- [ ]
fd-prod環境
- [ ] バージニアリージョン(2台): bastion, bastion-retool
- [ ]
image_idを新AMI IDに更新 - [ ] terraform plan/apply
- [ ] 動作確認
- [ ]
- [ ] 東京リージョン(2台): bastion-tokyo, bastion-fd-office
- [ ]
image_id_tokyoを新AMI IDに更新 - [ ] terraform plan/apply
- [ ] 動作確認
- [ ]
fd-sys環境
- [ ] バージニアリージョン(2台): bastion, bastion-retool
- [ ]
image_idを新AMI IDに更新 - [ ] terraform plan/apply
- [ ] 動作確認
- [ ]
- [ ] 東京リージョン(2台): bastion-fd-sys, bastion-fd-sys-retool
- [ ]
image_id_tokyoを新AMI IDに更新 - [ ] terraform plan/apply
- [ ] 動作確認
- [ ]
Terraform管理外インスタンス(2台)
- [ ] i-0021f33ada7e21742: fd-system-dev-proxy-squid
- [ ] 設定情報確認(
/tmp/instance-config-backup/) - [ ] AMIから手動起動
- [ ] タグ設定
- [ ] Elastic IP再アタッチ
- [ ] 動作確認
- [ ] 設定情報確認(
- [ ] i-022a683b669777872: maintenance
- [ ] 設定情報確認
- [ ] AMIから手動起動
- [ ] タグ設定
- [ ] 動作確認
関連ドキュメント
作成日: 2026-03-27 作成者: takahiro-oga 改訂履歴:
- v2.0 (2026-03-27): Terraform管理状況、AMI内容、User Data調査結果を統合。シンプル・簡潔に再構成
- v1.5 (2026-03-27): 背景セクションをAMI取得手順書への参照に変更
- v1.0 (2026-03-26): 初版作成