Open6

AWS EC2関係のメモ

8rine238rine23
<?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生成しました。";
?>
8rine238rine23
<?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);
}
8rine238rine23

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

8rine238rine23

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
--//--

https://repost.aws/ja/knowledge-center/execute-user-data-ec2

8rine238rine23

EC2インスタンスのユーザデータに書いたスクリプトはrootユーザとして実行される

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/user-data.html#user-data-shell-scripts:~:text=ユーザーデータとして入力されたスクリプトはルートユーザーとして実行されます。

  • rootユーザ以外で実行したい場合は、sudo -u [ユーザ名] [実行したいコマンド] のようにする
    • 例: sudo -u ec2-user whoami

https://zenn.dev/nnnto/articles/df29c8d03e1c45