TBD

仕事の事・日常の事

CloudFormationでRDS自動起動・停止

よく忘れるので備忘録。

AWSTemplateFormatVersion: 2010-09-09

Resources:
  #########################
  # IAM
  #########################
  CloudWatchEventsRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - 
            Effect: Allow
            Principal:
              Service:
                - events.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: /
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMFullAccess

  #########################
  # Stop
  #########################
  EventRuleStopRds:
    Type: AWS::Events::Rule
    Properties:
      Name: !Sub ${EnvTag}-${SysTag}-Stop-Rds
      ScheduleExpression: cron(0 18 ? * 1-5 *)
      State: ENABLED
      Targets:
        - 
          Arn: !Sub arn:aws:ssm:${AWS::Region}::automation-definition/AWS-StopRdsInstance:$LATEST
          Id: RdsStop
          RoleArn: !GetAtt CloudWatchEventsRole.Arn
          Input: !Sub '{"InstanceId":["${RdsInstance}"]}'

  #########################
  # Start
  #########################
  EventRuleStartRds:
    Type: AWS::Events::Rule
    Properties:
      Name: !Sub ${EnvTag}-${SysTag}-Start-Rds
      ScheduleExpression: cron(0 18 ? * 1-5 *)
      State: ENABLED
      Targets:
        - 
          Arn: !Sub arn:aws:ssm:${AWS::Region}::automation-definition/AWS-StartRdsInstance:$LATEST
          Id: RdsStop
          RoleArn: !GetAtt CloudWatchEventsRole.Arn
          Input: !Sub '{"InstanceId":["${RdsInstance}"]}'

CloudFormationでEC2自動起動・停止

よく忘れるので備忘録。

AWSTemplateFormatVersion: 2010-09-09

Resources:
  #########################
  # IAM
  #########################
  CloudWatchEventsRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - 
            Effect: Allow
            Principal:
              Service:
                - events.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: /
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMFullAccess

  #########################
  # Stop
  #########################
  EventRuleEc2Stop:
    Type: AWS::Events::Rule
    Properties:
      ScheduleExpression: cron(0 18 ? * 1-5 *)
      State: ENABLED
      Targets:
        - Arn: arn:aws:ssm:ap-northeast-1::automation-definition/AWS-StopEC2Instance:$LATEST
          Id: SshStop
          RoleArn: !GetAttCloudWatchEventsRoleArn
          Input: !Sub '{"InstanceId":["${Ec2Instance}"]}'

  #########################
  # Start
  #########################
  EventRuleEc2Start:
    Type: AWS::Events::Rule
    Properties:
      ScheduleExpression: cron(0 23 ? * 1-5 *)
      State: ENABLED
      Targets:
        - Arn: "arn:aws:ssm:ap-northeast-1::automation-definition/AWS-StartEC2Instance:$LATEST
          Id: SshStart
          RoleArn: !GetAttCloudWatchEventsRoleArn
          Input: !Sub '{"InstanceId":["${Ec2Instance}"]}'

MacOSでローカルのindex.htmlファイルをWebサーバ(Apache)でさくっと見る方法

Dockerコンテナでさくっと見れば良いじゃない。

ローカルでコンテナ起動

docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4

ブラウザでコンテナ接続

http://localhost:8080

ブラウザで開きたいファイルパスに移動して接続。

用途

  • ローカル環境だと検証出来ないソースの確認

以上!

ストレングスファインダーの結果メモ

久しぶりにストレングスファインダーを受検。 自分の強みを知りたい人はオススメです。 以下のように変化があった。


  1. 個別化
  2. 学習欲
  3. 達成欲
  4. 調和性
  5. 目標志向

  1. 学習欲
  2. 達成欲
  3. 慎重さ
  4. 最上志向
  5. 着想

  • 個別化が無くなって、最上志向が登場したのは、チームで仕事しなくなった影響かな。
  • 慎重さは子供が産まれた事とこのご時世から来てるかな。
  • 着想は何だろう。。。新しいアイデアを形にしたい願望でもあるのだろうか。

AWSクラウドプラクティショナーに合格した話

本日、試験を受けて無事合格!試験までにやったことを備忘録として残しておきます。

私のAWS経験値

業務利用は3年程度です。なので、全く触ったことのない人にとっては役立たない記事かもしれません。 参考までに見てもらえればと思います。 ちなみに、この3年でWebサービス本番稼働に必要なサービスはほぼ利用したかなと思うので、 幅広く業務で取り扱っている経験はある前提です。

学習に利用したこと

AWSデジタルトレーニングの受講

AWSが提供している無料のe-learningサービスです。 日本語対応、網羅的に学べる点、コンソールの操作を見ながら学習することが出来ます。 www.aws.training

参考書の査読

元々、AWSソリューションアーキテクトアソシエイトの資格を取る予定でしたので、 以下の2冊を読んで問題に慣れることにしました。

https://www.amazon.co.jp/dp/4295005495

https://www.amazon.co.jp/dp/4297103826

終わりに

簡単ではありますが、参考にしてみてくださいー。

AWS SDK for PHPを利用したS3操作〜オブジェクト移動も可能〜

触る機会があったため、AWS SDK for PHPを利用したS3操作について、整理しておく。 AWSで必要なリソースを構築し、FuelPHPを利用したアプリでS3を操作する例。

アプリ開発

ファイルはソース構成に合わせて作成・配置する。 実際にはクラス作成して、個別にラッパー関数とするのが良い気がする。 以下ではコードだけまとめる。

<?php
// インポート設定
require 'fuel/vendor/autoload.php';  // FuelPHPのパスに合わせて設定

use Aws\S3\S3Client;  // S3操作をするため設定
use Aws\Exception\AwsException;  // SDK全般の例外
use Aws\S3\Exception\S3Exception;  // S3固有の例外

// 認証情報取得
use Aws\Credentials\CredentialProvider;  // 認証情報を取得するため設定

try {
    $provider = CredentialProvider::instanceProfile();
    $memoizedProvider = CredentialProvider::memoize($provider);
} catch (AwsException $e) {
    echo $e->getMessage();
}

// S3クライアント認証情報設定
$client = new S3Client([
    'region'      => 'ap-northeast-1',
    'version'     => 'latest',
    'credentials' => $memoizedProvider,
    'debug'   => true  // debug指定すると検証時にエラーログが詳細に見れる。
]);

// S3ストリームラッパー登録
try {
    $client->registerStreamWrapper();
} catch (S3Exception $e) {
    echo $e->getMessage();
}

// バケット一覧表示
try {
    $iter = Aws\recursive_dir_iterator('s3://bucket/key');
    foreach ($iter as $filename) {
        echo $filename . "\n";
    }
} catch (S3Exception $e) {
    echo $e->getMessage();
}

// データのダウンロード
try {
    $data = file_get_contents('s3://bucket/key');
} catch (S3Exception $e) {
    echo $e->getMessage();
}

// データのアップロード
try {
    file_put_contents('s3://bucket/key', 'Hello!');
} catch (S3Exception $e) {
    echo $e->getMessage();
}

// データの移動
try {
    rename('s3://bucket/src', 's3://bucket/dist');
} catch (S3Exception $e) {
    echo $e->getMessage();
}

インポート設定

AWS SDK for PHP バージョン 3 の基本的な使用パターン - AWS SDK for PHP

インポート設定を追加する。


認証情報取得

認証情報プロバイダの使用 - AWS SDK for PHP

認証情報を取得する。今回はインスタンスプロファイルから取得する。


S3クライアント認証情報設定

S3クライアントを定義し、認証情報を設定する


S3ストリームラッパー登録

AWS SDK for PHP バージョン 3 での Amazon S3 ストリームラッパー - AWS SDK for PHP

S3操作に辺り、S3ストリームラッパーを使用するため、登録する。


バケット一覧表示

少ない HTTP リクエストで再帰的に取得する方法。


データのダウンロード・アップロード・移動

移動はドキュメントだと利用方法が分かりづらい。 移動元、移動先のパスを渡すことで、mvコマンドっぽく利用出来る。


以下は、動作確認に使用した環境と構築の流れ。


作業環境

macOS

・composer 1.10.13

FuelPHP 1.8.2

AWS SDK for PHP 3.152.1


環境構築

インフラ

個人ブログやQiitaでIAMユーザーのアクセスキー、シークレットアクセスキーをハードコーディングしている例をよく見かける。 アンチパターンであり、実運用ではまず使われないと考えているので、IAMロールを利用した例をまとめる。 検証用のEC2にS3アクセス権限を付与したIAMユーザーを設定し、EC2で利用する。 構築にはCloudFormationを利用する。

検証用EC2構築

※CloudFormation定義記載予定。

検証用S3構築

※CloudFormation定義記載予定。

検証用IAMロール作成

※CloudFormation定義記載予定。

検証用EC2インスタンスプロファイル構築

※CloudFormation定義記載予定。


アプリ

composerインストール

macにcomposerが入っていないので、Homebrew利用でインストール。

brew install composer

FuelPHPプロジェクト作成

フレームワークFuelPHPを利用する。composerでプロジェクト作成する。

composer create-project fuel/fuel:1.8.2 aws_php_sdk

余談だが、composer create-projectは指定したプロジェクトをgit cloneしてから、composer installしているらしい。

Command-line interface / Commands - Composer


AWS SDK for PHPインストール

AWS SDK for PHP バージョン 3 のインストール - AWS SDK for PHP

プロジェクトのディレクトリ配下で下記を実行。 fuel/vendor/aws/aws-sdk-php配下にsdkがインストールされる。

composer require aws/aws-sdk-php