Open6
AWS EC2関係のメモ
<?php
// セッション保存先ディレクトリ
$sessionDir = ini_get('session.save_path');
if (!$sessionDir) {
$sessionDir = sys_get_temp_dir();
}
// セッションファイルサイズの合計が300MBを超えるまでループ
$size = 0;
while ($size < 300 * 1024 * 1024) {
// ユニークなセッションIDを生成
session_id(md5(uniqid(rand(), true)));
// セッション開始
session_start();
// ダミーデータをセッションに追加(約1MB)
$_SESSION['data'] = str_repeat('a', 1024 * 1024);
// セッションを閉じて保存
session_write_close();
// セッションファイルサイズを取得
$sessionFiles = glob($sessionDir . '/sess_*');
$size = array_sum(array_map('filesize', $sessionFiles));
}
echo "セッションファイルを300MB生成しました。";
?>
<?php
require 'vendor/autoload.php';
use Predis\Client;
// Redis クライアントを作成
$redis = new Client([
'scheme' => 'tcp',
'host' => 'localhost',
'port' => 6379,
]);
// セッションファイルが保存されているディレクトリを取得します
$sessionSavePath = session_save_path();
// セッションファイルのディレクトリ内のすべてのファイルを取得します
$files = glob($sessionSavePath . '/sess_*');
foreach ($files as $file) {
// ファイル名からキーを取得します(sess_以降の部分)
$key = substr($file, strpos($file, '_') + 1);
// セッションデータを読み込みます
$sessionData = file_get_contents($file);
// セッションデータを Redis に保存します
$redis->set($key, $sessionData);
}
1. Systems Manager Parameter Storeにパラメータを保存する
aws ssm put-parameter --name "/myapp/config" --value "my-config-value" --type "String"
2. EC2のIAMロールに適切な権限を付与する
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter"
],
"Resource": "arn:aws:ssm:REGION:ACCOUNT_ID:parameter/myapp/config"
}
]
}
このポリシーで、ssm:GetParameter
のアクションが許可されているので、EC2インスタンスは/myapp/config
というパラメータを取得することができます。
3. EC2ユーザーデータ内からParameter Storeのパラメータを取得
#!/bin/bash
# Parameter Storeから値を取得
MY_CONFIG=$(aws ssm get-parameter --name "/myapp/config" --query "Parameter.Value" --output text)
# 環境変数として設定
echo "export MY_APP_CONFIG=$MY_CONFIG" >> /etc/profile.d/myapp.sh
EC2インスタンスが再起動するたびにユーザデータに書いた処理を実行させるためのユーザデータの書き方
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//--
EC2インスタンスのユーザデータに書いたスクリプトの実行結果ログのファイル名
/var/log/cloud-init-output.log
EC2インスタンスのユーザデータに書いたスクリプトはrootユーザとして実行される
- rootユーザ以外で実行したい場合は、
sudo -u [ユーザ名] [実行したいコマンド]
のようにする- 例:
sudo -u ec2-user whoami
- 例: