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
ブラウザでコンテナ接続
ブラウザで開きたいファイルパスに移動して接続。
用途
- ローカル環境だと検証出来ないソースの確認
以上!
ストレングスファインダーの結果メモ
久しぶりにストレングスファインダーを受検。 自分の強みを知りたい人はオススメです。 以下のように変化があった。
- 個別化
- 学習欲
- 達成欲
- 調和性
- 目標志向
↓
- 学習欲
- 達成欲
- 慎重さ
- 最上志向
- 着想
- 個別化が無くなって、最上志向が登場したのは、チームで仕事しなくなった影響かな。
- 慎重さは子供が産まれた事とこのご時世から来てるかな。
- 着想は何だろう。。。新しいアイデアを形にしたい願望でもあるのだろうか。
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ストリームラッパーを使用するため、登録する。
バケット一覧表示
データのダウンロード・アップロード・移動
移動はドキュメントだと利用方法が分かりづらい。 移動元、移動先のパスを渡すことで、mvコマンドっぽく利用出来る。
以下は、動作確認に使用した環境と構築の流れ。
作業環境
・composer 1.10.13
・FuelPHP 1.8.2
環境構築
インフラ
個人ブログや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