月別アーカイブ: 2018年6月

S3署名付きURLをCloudFront経由で使う (java.security.PrivateKeyを指定して)

タイトルの通りなんですけど、S3の署名付きURLをCloudFront経由で使う例です。
ちょっと困った事があったのでここにメモしておきます。

単純にpemファイルなどがパス指定で取得できるのであれば

String privateKey = "プライベートキーへのパス";
String keyPairId  = "hogehoge";
Date expiration = /* 有効期限 */;
String distributionDomain = "xxxxxxx.com"; // CloudFrontに指定してるドメイン
String objectKey = "sample.jpg";

String url
 = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(
    https, distributionDomain, privateKey, objectKey, keyPairId, expiration);

こんな感じで取得できる。

でもkeyをアプリ独自に暗号化してた場合などではファイルを直接指定することができない場合がありますね。
で、java.security.PrivateKeyを使って署名付きURLを欲しかったのですが、丁度良いオーバーロードがありませんでした。

どうすべ?と思ってCloudFrontUrlSignerのソースを見るとSignerUtilsを使えば良さそうな事がわかった。

java.security.PrivateKey privateKey = /* キーを作成 */;

String resourcePath 
  = SignerUtils.generateResourcePath(https,distributionDomain,objectKey);

String url
  = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(resourcePath,keyPairId,privateKey,expiration)

こんな感じ。

Laravel の migrationからSeederを直接実行する

Migrationを作って新規テーブルを追加した時に、初期データを投入したい事があると思う。
通常はSeederを個別に実行するのだと思うけど面倒ですよね。

そこで migrationから直接Seederを呼び出す方法です。
Artisanコマンドってこうやって使えるんですな。

Migrationファイル

use Illuminate\Support\Facades\Artisan;

(省略)

public function up()
{
    (省略)

    Artisan::call('db:seed', [
        '--class' => UserTypeTableSeeder::class,
        '--force' => true,
    ]);
}

この例ではUserTypeTableSeederを実行してます。

ちなみにドライランで実行されるSQLを確認できるオプション「–pretend」でもちゃんとSeederの実行内容が出力されますよ。

php artisan migrate --pretend