20210504のAWSに関する記事は22件です。

(備忘録)ポケットスタディAWS認定 デベロッパーアソシエイトのデモ(デプロイサービスの2)

1. はじめに 2021年5月4日にヤマムギ様主催にて開催されたvol.18 ポケットスタディAWS認定 デベロッパーアソシエイトのデモ(デプロイサービスの2))でのAWS学習内容について、自分への備忘録としてまとめてみました。ご参考になれば幸いです。 2. 学んだ内容 AWS CloudFormation 3. 学習サイト YouTube:AWS CloudFormationのデモ 4. 参考サイト yamlテンプレートのサンプル yamlテンプレートの書き方 Former2で既存リソースのCloudFormationテンプレート出力を試してみた Serverless Frameworkによるシステム構成(API Gateway + AWS Lambda) 5. ハンズオンで得た豆知識 CloudFormationを用いると、テンプレート(yaml)を用いてStackの集合体を構築(テンプレート定義によるサーバ構築)ができる テンプレートは、yaml以外にJSONを用いることもできるが、yamlの方が主流らしい 「マッピングス:mappings」の定義を用いると、リージョン違いのEC2をAMIを選択させることができる 「コンディションズ:conditions」の環境変数定義を用いると、本番/ステージング/開発 のそれぞれの環境だけで動作させたい定義を記述できる Formar2サードパーティーを用いると、既存の環境をテンプレート化することができる 「インポートバリュー:importvalue」の定義を用いると、他のStackのエクスポート値を参照できる 6. おわりに AWS学習の参考になれば幸いです。 ハンズオン開催してくださいましたヤマムギ様、感謝いたします。 2021/05/04 NISHIZONO Takahiro
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EC2上のRHEL8にWordpress環境をインストールする

数年前にLAMPの勉強でAmazon Linux(2だったかな?)上でWordpressを作ったことがあるのですが、今回改めてRHEL8上で構築してみましたので、記録として残しておきます。 バージョンとか Red Hat Enterprise Linux 8.3 (Ootpa) Apache/2.4.37 (Red Hat Enterprise Linux) mysql Ver 8.0.21 for Linux on x86_64 (Source distribution) PHP 7.2.24 Wordpressのバージョン:5.7.1 ①必要なパッケージ(Apache、MySQL、PHP)のインストール EC2にSSHで初めてアクセスした状態からスタート。以降全部管理者権限で実施するため、最初にrootに昇格する。 Apache、PHPなどのパッケージをインストールするために、まずはリポジトリを追加。 (次のパッケージインストールが普通にできるなら、不要かも) sudo su - yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm yum -y install http://rpms.famillecollet.com/enterprise/remi-release-8.rpm リポジトリ追加後にもろもろパッケージをインストールする。 wgetは後でWordpressを入手するときに使う。 yum -y install httpd mysql-server wget yum -y install php php-mysqlnd php-mbstring php-pecl-zip php-json php-pear php-gd ②mysqlの設定 文字コードを設定した上で、Wordpress用のユーザとデータベースを用意する。 まずはmy.cnfに設定を追加。 vi /etc/my.cnf my.cnfに追記する内容は以下。パスワード周りを簡略化するために文字コード以外の設定も追加。 ※文字コードはClient側も今までは設定していたが、最近それがあると日本語入力をmysqlが受け付けなくなるようなので省略。 my.cnfに追記する内容 validate_password.policy=LOW validate_password.check_user_name=OFF validate_password.length=4 validate_password.mixed_case_count=0 validate_password.number_count=0 validate_password.special_char_count=0 character_set_server=utf8mb4 [client] #今まではこれを追加していたが、コメントしないと日本語入力を受け付けないっぽい #default-character-set=utf8mb4 mysqlにログインしてユーザ追加&データベース作成。 systemctl start mysqld mysql -uroot -p mysql CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wpuser'; GRANT ALL PRIVILEGES ON *.* TO 'wpuser'@'%' WITH GRANT OPTION; CREATE DATABASE wp1; SELECT user,host FROM mysql.user; SHOW DATABASES; EXIT ③Wordpressのインストール Wordpressを入手し、権限周りを設定した後にインストールを進める。 wget http://ja.wordpress.org/latest-ja.tar.gz ~/ tar zxvf ~/latest-ja.tar.gz mkdir /var/www/html/wp cp -r ~/wordpress/* /var/www/html/wp chown apache:apache -R /var/www/html/wp systemctl start httpd この後wp-config.phpを作成するが、今回はinstall.phpを使う方法を実施。 手動でwpディレクトリ直下にあるwp-config-sample.phpをwp-config.phpにリネームして設定を書き込んでいくことも可能。 http://【EC2のURL】/wp/wp-admin/install.phpにアクセス mysqlで作成したデータベース名、ユーザ名を入力 下記のような文言が出たら、wpディレクトリ直下にwp-config.phpを作成して全文コピペ vi /var/www/html/wp/wp-config.php wp-config.php(認証用ユニークキーは一応隠しました) <?php /** * WordPress の基本設定 * * このファイルは、インストール時に wp-config.php 作成ウィザードが利用します。 * ウィザードを介さずにこのファイルを "wp-config.php" という名前でコピーして * 直接編集して値を入力してもかまいません。 * * このファイルは、以下の設定を含みます。 * * * MySQL 設定 * * 秘密鍵 * * データベーステーブル接頭辞 * * ABSPATH * * @link https://ja.wordpress.org/support/article/editing-wp-config-php/ * * @package WordPress */ // 注意: // Windows の "メモ帳" でこのファイルを編集しないでください ! // 問題なく使えるテキストエディタ // (http://wpdocs.osdn.jp/%E7%94%A8%E8%AA%9E%E9%9B%86#.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.82.A8.E3.83.87.E3.82.A3.E3.82.BF 参照) // を使用し、必ず UTF-8 の BOM なし (UTF-8N) で保存してください。 // ** MySQL 設定 - この情報はホスティング先から入手してください。 ** // /** WordPress のためのデータベース名 */ define( 'DB_NAME', 'wp1' ); /** MySQL データベースのユーザー名 */ define( 'DB_USER', 'wpuser' ); /** MySQL データベースのパスワード */ define( 'DB_PASSWORD', 'wpuser' ); /** MySQL のホスト名 */ define( 'DB_HOST', 'localhost' ); /** データベースのテーブルを作成する際のデータベースの文字セット */ define( 'DB_CHARSET', 'utf8mb4' ); /** データベースの照合順序 (ほとんどの場合変更する必要はありません) */ define( 'DB_COLLATE', '' ); /**#@+ * 認証用ユニークキー * * それぞれを異なるユニーク (一意) な文字列に変更してください。 * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。 * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになります。 * * @since 2.6.0 */ define( 'AUTH_KEY', '7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa' ); define( 'SECURE_AUTH_KEY', '=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2' ); define( 'LOGGED_IN_KEY', '=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}' ); define( 'NONCE_KEY', ',xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxP' ); define( 'AUTH_SALT', 'sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ' ); define( 'SECURE_AUTH_SALT', 'Vxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7' ); define( 'LOGGED_IN_SALT', 'wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxM' ); define( 'NONCE_SALT', '2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8' ); /**#@-*/ /** * WordPress データベーステーブルの接頭辞 * * それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を * インストールすることができます。半角英数字と下線のみを使用してください。 */ $table_prefix = 'wp_'; /** * 開発者へ: WordPress デバッグモード * * この値を true にすると、開発中に注意 (notice) を表示します。 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。 * * その他のデバッグに利用できる定数についてはドキュメンテーションをご覧ください。 * * @link https://ja.wordpress.org/support/article/debugging-in-wordpress/ */ define( 'WP_DEBUG', false ); /* 編集が必要なのはここまでです ! WordPress でのパブリッシングをお楽しみください。 */ /** Absolute path to the WordPress directory. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', __DIR__ . '/' ); } /** Sets up WordPress vars and included files. */ require_once ABSPATH . 'wp-settings.php'; wp-config.phpを作成後に「インストール実行」を押すと、下記画面が表示される。 Wordpress用のユーザ情報を入れる。 ※勉強としてWordpressを入れるときとかは、一時的なメールアドレスを発行してくれるTemp Mailというサービスをよく使ってます。 設定が無事に終わったらログインボタンを押して・・・ 先ほどのユーザー名&パスワードを設定したら・・・ 無事に作成完了! 前にAmazon Linuxでやったときと恐らく同じ手順だが、Amazon Linuxと違ってリポジトリが入ってなかったりしたのでそのあたりは事前に追加が必要だった。(といいつつ、本当はRHEL8でもリポジトリ追加しないでデフォルトのまま、必要なパッケージをインストールできそうな気もしています。まあできたからヨシ!) 余談 最初、③のinstall.phpのところでエラー画面になって焦ったのだが、下記の通りログを追ったらphp-jsonをインストールできてないことに気づいた。 改めてインストールしたら無事解決。(権限の問題とか、htaacessの設定とかselinuxとか細かいところを最初ログを調べもせずに疑ってしまった・・・) エラー画面の文言でググる前にログを確認しよう、という教訓です(当たり前か)。 ちなみに、こんな画面になりました。 ログ(/var/log/php-fpm/www-error.log)を確認すると、こんな感じでした。 /var/log/php-fpm/www-error.log [05-May-2021 02:29:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function json_decode() in /var/www/html/wp/wp-includes/blocks.php:203 Stack trace: #0 /var/www/html/wp/wp-includes/blocks/archives.php(115): register_block_type_from_metadata('/var/www/html/w...', Array) #1 /var/www/html/wp/wp-includes/class-wp-hook.php(292): register_block_core_archives('') #2 /var/www/html/wp/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters(NULL, Array) #3 /var/www/html/wp/wp-includes/plugin.php(484): WP_Hook->do_action(Array) #4 /var/www/html/wp/wp-settings.php(560): do_action('init') #5 /var/www/html/wp/wp-admin/setup-config.php(33): require('/var/www/html/w...') #6 {main} thrown in /var/www/html/wp/wp-includes/blocks.php on line 203
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【初心者】Amazon DynamoDB LSI/GSI を使ってみる

1. 目的 AWSのデータベース関連サービスの復習をしている。DynamoDBについて、LSI/GSIがなんだかよく分からなかったため、これを機に動作確認する。 2. やったこと 練習用のDynamoDBテーブルを作成する。 LSI/GSIを設定し、それらを用いてどのようなクエリができるのかを確認する。 3. 構成図 EC2インスタンス内のPythonスクリプトからクエリを実行する。 練習用のDynamoDBテーブルの内容は以下の通り。(野菜・果物分類表的なイメージ) 4. 予習 分かりやすい解説のある記事は以下。 「今更 DynamoDB 入門」 「DynamoDBのキー・インデックスについてまとめてみた」 LSI/GSIを付けておかないと、属性(列)を指定してのクエリができないということがなんとなく分かった。 5. 実機確認 5.1 DynamoDB テーブルとGSI/LSIの作成 DynamoDBテーブル「mksamba-qiita」を作成する。パーティションキーを「Name」、ソートキーを「Color」とし、その組み合わせをプライマリーキーとする。 LSIを作成する。 LSIの場合、パーティションキーはプライマリーキーで使用したものと同じ「Name」である必要がある。 ソートキーを「Kind」とする。 「ローカルセカンダリインデックスとしての作成」にチェックを付ける。チェックを付けないとGSIになってしまう。 GSIを作成する。 パーティションキーはプライマリーキーで使用したものとは別の「Country」とする。 LSI/GSIが設定されていることを確認し、テーブルを作成する。 作成したテーブルにデータを入力する。 5.2 クエリの動作確認 「Name」が「Apple」の項目(行)を取得する。 「Name」がパーティションキーのため実行OK。2つヒットする。 query1.py import boto3 from boto3.dynamodb.conditions import Key dynamodb = boto3.resource("dynamodb") table = dynamodb.Table("mksamba-qiita") response = table.query( KeyConditionExpression=Key("Name").eq("Apple") ) print(response["Items"]) [ec2-user@ip-10-0-0-232 ~]$ python3 query1.py [{'Season': 'Winter', 'Color': 'Green', 'Country': 'NZ', 'Kind': 'Fruit', 'Name': 'Apple'}, {'Season': 'Winter', 'Color': 'Red', 'Country': 'Japan', 'Kind': 'Fruit', 'Name': 'Apple'}] 「Name」が「Apple」で、「Color」が「Red」の項目(行)を取得する。(Pythonコードはクエリ部分のみ記載) 「Color」がソートキーのため実行OK。1つヒットする。 query2.py response = table.query( KeyConditionExpression=Key("Name").eq("Apple") & Key("Color").eq("Red") ) print(response["Items"]) [ec2-user@ip-10-0-0-232 ~]$ python3 query2.py [{'Season': 'Winter', 'Color': 'Red', 'Country': 'Japan', 'Kind': 'Fruit', 'Name': 'Apple'}] 「Name」が「Apple」で、「Kind」が「Fruit」の項目(行)を取得する。 「Kind」がソートキーではないため、実行エラー。 query3.py response = table.query( KeyConditionExpression=Key("Name").eq("Apple") & Key("Kind").eq("Fruit") ) print(response["Items"]) [ec2-user@ip-10-0-0-232 ~]$ python3 query3.py Traceback (most recent call last): File "query3.py", line 8, in <module> ~~ botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: Color 「Name」が「Apple」で、「Kind」が「Fruit」の項目(行)をクエリ時にLSIを指定して取得する。 「Kind」がLSIのソートキーになっているため、実行OKになる。2つヒットする。 query4.py response = table.query( IndexName='Name-Kind-index', KeyConditionExpression=Key("Name").eq("Apple") & Key("Kind").eq("Fruit") ) print(response["Items"]) [ec2-user@ip-10-0-0-232 ~]$ python3 query4.py 3 [{'Season': 'Winter', 'Color': 'Green', 'Country': 'NZ', 'Kind': 'Fruit', 'Name': 'Apple'}, {'Season': 'Winter', 'Color': 'Red', 'Country': 'Japan', 'Kind': 'Fruit', 'Name': 'Apple'}] 「Country」が「Japan」の項目(行)を取得する。 「Country」がパーティションキーでないため、実行エラーになる。 query5.py response = table.query( KeyConditionExpression=Key("Country").eq("Japan") ) print(response["Items"]) [ec2-user@ip-10-0-0-232 ~]$ python3 query5.py Traceback (most recent call last): File "query5.py", line 8, in <module> ~ botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: Name 「Country]が「Japan」の項目(行)をクエリ時にGSIを指定して取得する。 GSIにおいては「Country」がパーティションキーのため、実行OK。3つヒットする。 query6.py response = table.query( IndexName='Country-index', KeyConditionExpression=Key("Country").eq("Japan") ) print(response["Items"]) [ec2-user@ip-10-0-0-232 ~]$ python3 query6.py [{'Season': 'Winter', 'Color': 'Orange', 'Country': 'Japan', 'Kind': 'Vegetable', 'Name': 'Carrot'}, {'Season': 'Winter', 'Color': 'Red', 'Country': 'Japan', 'Kind': 'Fruit', 'Name': 'Apple'}, {'Season': 'Summer', 'Color': 'Red', 'Country': 'Japan', 'Kind': 'Vegetable', 'Name': 'Tomato'}] 6. 所感 使いこなせる感はないが、何となく設定する意味は分かるようになった。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[日記]RailsアプリをEC2を使ってAWSにデプロイするまで

はじめに 自作のRailsアプリをAWSにデプロイしその経過を備忘録としてQiitaに投稿してきました。 その投稿をチャプター形式で下記にまとめておきます。 自分用ですので画像でわかりやすく解説するなどはしていません。 環境 Ruby 2.6.6 Rails 6.0.3 nginx 1.12.2 PostgreSQL 11.5 node 12.22.1 yarn 1.22.5 rbenv 1.1.2 日記 [Chapter-1]VPCの設定 [Chapter-2]EC2の設定 [Chapter-3]EC2のサーバー環境構築 [Chapter-4]EC2にRailsアプリの配置 [Chapter-5]ロードバランサー(ELB)の作成 [Chapter-6]ACM(AWS Certificate Manager)でSSL証明書を取得 [Chapter-7]Route53の設定 [Chapter-8]https化に向けたロードバランサーの設定 [Chapter-9]https化によるRoute53の設定 [Chapter-10]https化によるNginxの設定 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSのIAMの概要について

IAMとは IAMとはAWSの権限管理のサービスのことです。 セキュリティーにも関連しているため、AWSを触る上でとても大切なサービスです。 簡単に言うとユーザーアカウントを複数作ったり、作成したアカウントにAWSの内容を編集するための権限を付与するものです。 AWS自体が実務ではルートユーザー(フル権限のアカウント)を使うことを推奨しておらず、IAMでアカウント作成して実務で編集をすることを推奨しています。 ユーザーについて AWSを触る際に、管理画面にアクセスしたり、プログラム側からアクセスするときに必ずIDやパスワードなどのユーザー情報が必要になります。 その際にユーザーにはそれぞれ「ルートユーザー」と「IAMユーザー」の2種類が存在します。 上記にも記載しましたが、ルートユーザーを使うことは基本的に推奨していません。 なぜならルートユーザーはAWSを編集する上で、全ての権限を持っているからです。 つまり、設定の変更、各ユーザーの権限の変更、料金の閲覧、パスワードの変更など、ルートユーザーでログインすると何でもできてしまいます。 特に企業などで複数人で作業を行うときは、それぞれIAMユーザーで個別にアカウントを付与して、そのアカウントで作業を行うことがセキュリティー的にも望ましいとされます。 また、ルートユーザー自体は権限の調整ができません。 ルートユーザーとIAMユーザーについて IAMユーザーはルートユーザーの下に、それぞれ個別に複数作成することができます。 そして、個々にAWSで何ができるかなどの権限を付与できます。 業務での開発や運用はIAMユーザーで行うのが基本です。 アクセスキー(認証情報)について アカウントを作成するときにアクセスの種類を選択することができます。 AWSの管理画面へのパスワードでのアクセスと、プログラムからアクセスキーを使ったアクセスです。 プログラムによるアクセスを可能にすると、アクセスキーIDとシークレットアクセスキーが発行されます。 このアクセスキーIDとシークレットアクセスキーがあれば、AWSにどこからでもアクセスできるようになります。 上記の図の説明ですが、 ルートユーザーから「Test」というアカウントでIAMユーザーを作成してもらいます。 「Test」にはEC2を作成できる権限を付与してます。 そして、「Test」に管理画面にログインするためのパスワードと、プログラムからアクセスするためのアクセスキーを発行します。 IAMグループ IAMグループとは、IAM ユーザーの集合です。 IAMグループを使用すると、複数のユーザーに対してアクセス許可を指定でき、それらのユーザーのアクセス許可を容易に管理することができます。 IAMポリシー JSON形式で記述された設定ファイルのことで、AWSで操作できる権限を設定しています。 「誰が」「どのAWSサービスの」「どのリソースに対して」「どんな操作を」「許可する(許可しない)」などを設定しています。 IAMアイデンティティ (ユーザー、ユーザーのグループ、ロール)またはAWSリソースにアタッチして使用します。 IAMアイデンティティとAWSリソースについては後ほど記載します。 IAMポリシーの例) IAMポリシー { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "*" } ] } 上記の例のIAMポリシーで説明します。 まず「Version」は使うポリシーのバージョンを記載します。 そして、重要なのは「Statement」の中身です。ここに権限の内容を記載します。 Effect 「Effect」には許可するか、許可しないかを記載します。 Allowは許可する。Denyは許可しない。 Action 「Action」には操作の内容を記載します。 「s3:Get」はS3から何かを取得するということです。後ろにある「*」は全てという意味なので、下記ではS3から全てのものを取得することができるということです。 「s3:List」はS3から何かを参照するということです。ここではS3の全てを参照することができるということです。 Resource 「Resource」にはIAM「Action」が影響するリソースの範囲を指定することができます。「*」を入れると、全てのリソースが影響範囲に含まれます。 こういったポリシーを自分で書くこともできますが、よく使いそうなポリシーに関してはAWSがもともと用意してくれているので、それを認証の対象にアタッチするだけで簡単に使えます。 IAMポリシーに関してはもっと奥が深いため、全てを説明すると長くなるため、別の記事で改めてまとめようと思います。 一旦はざっくりと、権限についてJSON形式で書かれた設定ファイルとだけ覚えておけば大丈夫です。 ちなみに自分が勉強するときに見たサイトはこちらです。かなりわかりやすかったのでこちらを見ていただいてもいいかと思います。 https://dev.classmethod.jp/articles/aws-iam-policy/ IAMロール IAMロールとは、AWSのリソース(EC2など)に付与するものであり、複数のIAMポリシーをグルーピングして一つにまとめたものです。 IAMポリシーはユーザーにアタッチするものですが、IAMロールはユーザーではなくリソースにアタッチします。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【個人開発】豆腐メンタルのエンジニアが豆腐メンタルの人に向けたWebサービスを作ってみた

はじめに 今回は前から念願だった個人でWebサービスを開発/リリースすることが出来たので、Webサービスの環境周りや開発過程について記事にしていきたいと思います。 開発の経緯に興味がある人は↓ Webサービスの環境/技術について バックエンド 言語:Java フレームワーク:Spring Boot ビルドツール:Gradle フロントエンド 開発言語:JavaScript ライブラリ、フレームワーク:jQuery、Bootstrap AWSサービス EC2 S3(ユーザアイコンの画像格納用) RDS(PostgreSQL) Route 53(DNS) Certificate Manager(HTTPS通信にするための証明書作成) 「Route 53」で月50円くらいかかりますが、他のAWSのサービスは最初の1年間は無料枠があるので、相当アクセスが無い限り、気にしなくて良いです。(気になるくらいアクセス欲しいですが、、、) 機能 主な機能としては以下の通りとなります。 日々の生活で困ったことを質問が出来ます。 質問に対してコメントが出来ます。 質問を並び替えたり、カテゴリ、フリーワードで検索できます。 質問に対してのコメントに制限(禁止ワード設定)が出来ます。 生活に役に立つ心理学が知れます。 作業時間 機能の洗い出し、画面設計、AWSのお勉強、環境構築、開発などを1日に2~3時間、ほぼ毎日やって、1ヶ月くらいで公開までこぎつけたので、トータル70時間ですかね。 公開後も改良はしていたので実際はもっと掛かっておりますが。 苦労したところ やはり画面デザインは苦労しました。 いろいろな他のサイトを参考に画面設計していたのですが、如何せん一人で作っているので、どんどん視野が狭くなって、ユーザにとって何が使いやすいデザインかよく分からなくなっていました。 ただその中でもなるべく、シンプルにパッと見て情報が分かるように心がけて作りました。 その他には、レスポンシブデザインのところでスマホの実機で確認したらレイアウトが崩れていたり、余白が無駄に目立ったりして、微調整を繰り返していました。 バックエンドやAWSで分からない(特にAWS)時はその都度調べ、開発していきました。 問題に深くハマることは特に無かったです。 良質な記事を書いて下さる方々に感謝ですm(__)m   あとはモチベーションをいかに維持するかでした。 設計当初はワクワクした気持ちでいましたが、「ニーズがあるのだろうか」や「やることいっぱいあるな」などと考えていくうちにモチベーションが下がってきました。 これではいかんと思い、これは仕事では無いから完璧で無くて良い、誰からも使ってもらえず自己満で終わっても、それはそれで何が良くなかったのかを考え、今後に生かせば無駄にはならないと自分に言い聞かせました。 サービスを作るときに一番おもしろいのはそのサービスが目に見えて、出来上がっていくところだと思います。 なので、設計は大事ですが、コードを書いたり、AWSをいじって環境を整えるなど、少しづつ出来上がっていることを感じながら作っていきました。 まとめ この記事を書こうとした当初は技術的なところを深堀していこうかと思ったのですが、ググればすぐ出てくるので、わざわざ私が書くまでも無いかなと思いました。 折角つくったので一人でも使っていただければ幸いですし、何かコメントがあれば答えていこうと思っています。 あと、アイディアを考えるのは大変ですが、Webサービスを公開すること自体は結構、手軽に出来るので、皆さんも是非やってみてください!! 皆様の貴重なお時間をありがとうございましたm(__)m
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS サブネットを作成する

はじめに VPCを作成した際の備忘録として サブネットとは サブネットは最初にVPCによって作られているCIDRブロックを分割したネットワーク群のことです。サブネットは、VPCの上限を超えなければ、いくらでも作ることが可能。 サブネットには、主にパブリックサブネットとプライベートサブネットがあります。 パブリックネットは字のごとく、外のネットワークと直接繋がっているサブネットで、 プライベートサブネットとは、直接は外のネットワークに繋ぐことのできないサブネットになります。 外部から攻撃を受ける可能性も高いので、可能な限りプライベートサブネットにリソースを置くことが好ましいようです。 サブネットの作成 VPCの画面からサブネットを選択します。 サブネットの一覧が表示されました。デフォルトのサブネットが3つ表示されています。 サブネットの作成をクリックしてください。 VPCを選択してください。 選択すると、設定ができるようになります。 任意の名前をつけましょう。 次にアベイラビリティーゾーンを選択します。今回はap-northeast-1aを選択します。 アベイラビリティーゾーンとはリージョン内にあるデータセンターのことを言います。AZと略されます。 次にIPv4 CIDR ブロックを設定します。 今回は10.0.10./24に設定しました。 使用するVPCのCIDRの範囲内でCIDRを指定する必要があります。たとえばVPCのCIDRが10.0.0.0/16である場合、10.0.0.0/24などのCIDRを指定します。 サブネットを作成をクリックしましょう。 サブネットが作成できました。 参考サイト AWS VPC の作成と設定 Qiita 0から始めるAWS入門①:VPC編 [初心者向け]VPC作成からEC2インスタンス起動までを構成図見ながらやってみる(その1) AWSのVPCって何?メリットや使えるシーンなど徹底解説!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS VPCを作成する

はじめに AWSの基本サービスVPCの作成方法を備忘録として VPCとは Amazonが提供している仮想ネットワークサービスでVirtual Private Cloudの略です。 リージョンという国や地域単位でデータセンターをグループ化したものを選択して作成します。 今回は東京リージョンを選択して作成します。 今回は作成方法をメインに解説していきます。 VPCを作成する VPCを入力して、VPCをクリックします。 VPCのページが表示されました。 VPCをクリックします。 VPCの一覧が表示されます。デフォルトのVPCが表示されています。 それでは自分でVPCを作っていきます。 VPCを作成をクリックしてください。 作成画面に移動しました。 任意のVPC名を記入して、 「IPv4 CIDR ブロック」に今回AWSで構築するシステムに割り当てることが可能な以下の範囲内で、/16〜/28のネットマスクCIDRブロックを入力します。 CIDRブロックを今回は10.0.0.0/16に設定。 IPv6CIDRブロックはなし。 テナンシーは、ライセンスやセキュリティ要件でハードウェアを専有したい場合のみ、「専有オプション」を指定します。 テナンシーはデフォルトのままで作成します。 IPv6 CIDR ブロック Amazon 提供の IPv6 CIDR ブロックを VPC に関連付けることができます。Amazon は固定サイズ (/56) の IPv6 CIDR ブロックを提供しているため、IPv6 アドレスの範囲をお客様ご自身で選択することはできません。代わりに、お客様ご自身の IPv6 CIDR を AWS にインポートした場合、アドレスプールから IPv6 CIDR ブロックを指定できます。 テナンシー インスタンスは、シングルテナントの専用ハードウェアの VPC で実行できます。起動時に指定されたテナンシー属性にかかわらず、この VPC で起動されたインスタンスが専有テナントインスタンスであるようにするには、[専有] を選択します。この VPC で起動されたインスタンスが起動時に指定されたテナンシー属性を使用するようにするには、[デフォルト] を選択します。 VPCを作成をクリックします。 VPCが作成されました。 お疲れ様でした。 次はサブネットを作成します。 参考サイト AWS VPC の作成と設定 Qiita 0から始めるAWS入門①:VPC編 [初心者向け]VPC作成からEC2インスタンス起動までを構成図見ながらやってみる(その1)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS IAMユーザーを作成する

はじめに AWSのアカウントを作成するとルートユーザーが作成されるが、ルートユーザは全権限を持つユーザーになるため アカウントの変更や解約などもできてしまうため、権限を制限したIAMユーザーを作成する。 Identity and Access Management (IAM) では、AWS のサービスやリソースへのアクセスを安全に管理できます。IAM を使用すると、AWS のユーザーとグループを作成および管理し、アクセス権を使用して AWS リソースへのアクセスを許可および拒否できます。 IAM は追加料金なしで AWS アカウントに提供されている機能です。料金は、お客様のユーザーが使用した他の AWS サービスに対してのみ発生します。(AWSより引用) それでは作成していきましょう。 IAMユーザーの作成① まずはルートユーザーでAWSマネジメントコンソールにログインします。 サービスをクリックするとAWSのサービスの一覧が表示されます。多いですね。 IAMをクリックします。 IAMのページに移動できました。 ユーザーをクリックします。 次にユーザーを追加をクリックします。 IAMユーザーの作成② ユーザー名を入力します。次にアクセスの種類を選択しましょう。 今回はAWSマネジメントコンソールへのアクセスを選択してみます。 そうするとコンソールのパスワードの設定が表示されます。 今回はカスタムパスワードで入力。パスワードのリセットが必要のチェックを外します。 自分でないユーザーがアクセスするIAMユーザーを作成する場合は自動生成パスワード、パスワードのリセットが必要にして その人が自分でパスワードを設定できるようにします。 この画面でアスセス許可の設定をしていきます。 今回は既存のポリシーを直接アタッチを選択します。 これはAWSが用意したアクセス設定です。 その中でも今回は アクセス権限の強いAdministratorAccessを選択します。 、AdministratorAccess ジョブ関数は、AWS の各サービスおよびリソースへのフルアクセスを許可し、アクセス許可の委任が可能です。このポリシーは、アカウント管理者のみに使用することをお勧めします。(AWSより引用) AWS管理ポリシー 管理ポリシー名     職務機能        ユースケース          AdministratorAccess 管理者 このユーザーはフルアクセスが許可され、AWS のあらゆるサービスおよびリソースにアクセス許可を委任できます。 Billing 請求職務       このユーザーは請求情報の確認、支払いの設定、支払いの承認を行う必要があります。ユーザーは、AWS のサービス全体の累計されたコストをモニタリングできます。 DatabaseAdministrator データベース管理者 このユーザーは AWS クラウドのデータベースのセットアップ、設定、メンテナンスを行います。 DataScientist データサイエンティスト  このユーザーは Hadoop ジョブおよびクエリを実行します。このユーザーは、データ分析やビジネスインテリジェンス用の情報にアクセスして分析も行います。 PowerUserAccess デベロッパーパワーユーザー このユーザーはアプリケーション開発タスクを実行し、AWS 対応アプリケーションの開発をサポートするリソースとサービスを作成および設定できます。 NetworkAdministrator ネットワーク管理者 このユーザーは AWS; ネットワークリソースの設定とメンテナンスを担当します。 ReadOnlyAccess 読み取り専用 このユーザーは、AWS アカウント内のすべてのリソースへの読み取り専用アクセス権が必要です。 SecurityAudit セキュリティ監査      このユーザーはセキュリティ要件の遵守についてアカウントをモニタリングします。このユーザーは、潜在的なセキュリティ侵害や悪意のある行為を調査するためのログおよびイベントにアクセスできます。 SupportUser ユーザーのサポート     このユーザーは AWS サポートに連絡し、サポートケースを作成して、既存のケースの状態を確認します。 SystemAdministrator システム管理者  このユーザーは開発運用リソースのセットアップおよびメンテナンスを行います。 ViewOnlyAccess 表示専用 このユーザーは、すべてのサービスにわたるアカウントの AWS リソースや基本のメタデータのリストを表示できます。このユーザーは、クォータを超えるリソースコンテンツやメタデータを読み取ることや、リソース情報をリスト表示することはできません。 次に進むとタグの追加とありますが今回はスキップします。 最後に確認画面が表示されます。 問題なければユーザーの作成をクリックします。 IAMユーザーが作成されました。 ログイン画面でユーザー名とパスワード名を入力してログインします。 ログインできました。 参考サイト AWS Udemy AWSゼロから実践するAmazon Web Service
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EC2にSplunkを立ててみた。

AWSにはちゃんとあるんだけど、Free枠でできるかどうかよくわからなかったので、立ててみた。 EC2の準備 aws起動.sh aws ec2 run-instances --block-device-mappings '{"DeviceName": "/dev/xvda", "Ebs": {"VolumeSize": 30}}' --image-id ami-0be2609ba883822ec --count 1 --instance-type t2.micro \ --key-name XXX --subnet-id subnet-XXXXX --security-group-ids sg-XXXXXXXXXX \ --user-data file://open.txt --output text 立ち上げ用スクリプト。ポイントはディスク容量をfree枠いっぱいの30GBにしているところ。 セキュリティグループでは22と8000番のポートを開けている。 open.txt yum update -y yum install man-pages-ja -y localectl set-locale LANG=ja_JP.UTF-8 timedatectl set-timezone Asia/Tokyo source /etc/locale.conf echo 'LANG=ja_JP.UTF-8' >> /etc/profile 以前作るのに苦労した記憶のあるec2-userのローカル時刻と日本語環境に直す起動ファイル。 Splunkのインストール wget --content-disposition 'https://www.splunk.com/bin/splunk/DownloadActivityServlet?architecture=x86_64&platform=linux&version=latest&product=splunk&filename=.tgz&wget=true' これで、いつでも最新版がダウンロードできる。 を見つつインストール。でも、ec2だとこのやり方そのままだとうまくいかないので、 install.sh sudo su groupadd -g 503 splunker useradd -u 501 -g 503 splunker passwd splunker su - splunker # ここでsplunker export SPLUNK_HOME=/usr/local/splunk wget --content-disposition 'https://www.splunk.com/bin/splunk/DownloadActivityServlet?architecture=x86_64&platform=linux&version=latest&product=splunk&filename=.tgz&wget=true' tar xvfs splunk* exit # ここでrootに戻る。 mv /home/splunker/splunk /usr/local/ exit # ここでec2-userに戻る。 su - splunker cd $SPLUNK_HOME/etc cp splunk-launch.conf.default splunk-launch.conf vi splunk-launch.conf # SPLUNK_HOMEを定義 # 今回はSPLUNK_HOME=/usr/local/splunk cd $SPLUNK_HOME/bin ./splunk start --accept-license で起動する(はず。) administratorのユーザ名とパスワードを聞かれるので、適当に打ち込む アクセス セキュリティグループがしっかり設定できていると、ログインが可能となる。 なんか恥ずかしいのが右上にでている。 まとめ とりあえず、EC2を起動して、splunkをインストール及び起動ができた。 $SPLUNK_HOME/bin/splunk startの前にappsとか入れたりすると、データも含めて起動できそう。 あとは、ちょこちょこと自動化していきます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS CloudWatchで料金アラートを設定する

はじめに AWSを利用する上でいつの間にか料金が発生していて苦い思い出があるので 忘れないように料金アラートの設定を備忘録として なぜ料金アラートを設定する必要があるのか AWSは従量課金制である AWSの利用料金がいくらかを超えたら通知をするように設定しておくことで使い過ぎを防ぐことができる 設定方法 1.請求ダッシュボードで請求アラートを受け取れるように設定する 2.CloudWatchで料金アラートを設定する まずはサインインしましょう。 アカウントを作っていない方はアカウントを作成してください。 次に自身のアカウント名が表示されているところをクリックしてマイ請求ダッシュボードをクリックしてください。 このページはログインしているアカウントがどれだけ料金を発生させているかを表示してくれます。 次に設定の請求設定をクリックします。 請求設定の EメールでPDF版請求書を受け取る 無料利用枠の使用アラートを受信する 請求アラートを受け取る にチェックを入れてください。 無料利用枠のアラートの受け取りアドレスがアカウントに関連づけられたアドレスと異なる場合はメールアドレスを記入します。 設定の保存をクリックします。 保存できたら、次に請求アラートを管理するをクリックします。 CloudWatchの画面が開きます。 次にアラームの請求をクリックします。 アラームの作成をクリックして作成していきます。 下にスクロールします。 条件を設定します。この場合は1ドルより大きくなったらアラームが発生します。 設定したら次へをクリックします。 新しいトピックの作成の作成をクリック トピック名、通知を受け取るメールアドレスを入力したらトピックの作成をクリックしてください。 次へ進みます。 アラーム名とアラームの説明を入力します。 次へ進むと作ったアラームのプレビューが表示されます。 問題なければアラームの作成をします。 作成できました。状態が最初はデータ不足となっていますが、時間が経つとOKに変わります。 最後に認証メールが届いているのでリンクをクリックして完了です。 画面を更新するとアクションのところが変わっています。 次に作ったアラームをクリックしてください。 詳細が表示されます。 今月の利用料を確認したい場合はマイ請求ダッシュボードで確認しましょう。 以上です。 参考 Udemy AWS:ゼロから実践するAmazon Web Service
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TypeScript でlambdaを書いてAPI GWとつなぐ(CDK・aws-lambda-nodejs)

TypeScript でlambdaを書いてAPI GWとつなぐ(CDK・aws-lambda-nodejs) github このサンプルコードをベースにします 概要 郵便番号を https://example.com/nayn?postcode=136-0074 のように投げたら。その住所の情報を返してくれるAPIをlambdaでつくる。 コピペして似た構成のシステムのベースとして、また、参考にできるようにシンプルにしたい。 郵便番号APIはこれを使用 https://github.com/madefor/postal-code-api cloneからデプロイまでの手順 cloneする git clone git@github.com:meiyu-inc/apigw-lambda-cdk-ts.git セッティング cd apigw-lambda-cdk-ts/lambda npm install npm test bootstrapする ~/.aws の設定を行う。 npx cdk bootstrap --profile [profile名] デプロイする npx cdk deploy --profile [profile名]。 初回は確認のy/nがでるので、yと入力しましょう。(参考 : https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html) githun actionsでのデプロイ 注意 : 初回デプロイでは同意の確認がでるため、手動でデプロイしましょう 下準備 secretsに AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY を登録しましょう Pull Req 自動テスト cdk diff をおこないます。 master commit デプロイ をおこないます。 コードの構成 TBD 構築方法 githubのものを作るまでの手順 cdkのセッティング TBD 記述 TBD
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

独学・未経験者がポートフォリオを作った【Rails / Vue.js / Docker / AWS】

はじめに はじめまして! 未経験者が独学でポートフォリオを作成しましたので、紹介させてください。 About Me 私は33歳で現在、看護師として病院に勤務しています。 看護師として働く前は、テレコミュニケーターとして某プロバイダーの派遣社員として働いていました。 そういった経歴でパソコンを触るのが好きだったこともあり、独自で作成した動画を使って、部署内で勉強会を開催するなどしていました。 昨今の新型コロナウイルスの影響で、従来の「集まって教育・学習・研修をする」ということができなくなり、IT機器やオンラインの重要性を個人的にも感じていました。 「もっと看護業界、医療業界が加速するようなことがしたい」と考えるようになり、以前から興味のあった「Webエンジニア」への転職を目指しました。 2020年5月からプログラミング学習を開始しました。 紹介させていただく、ポートフォリオの作成期間は約3ヶ月半(2021年1月〜4月はじめ) ポートフォリオ紹介 アプリ名「With Nurse」 URL:https://www.withnurse.net/ Githubリポジトリ TOPページ レスポンシブ対応 ログイン後TOPページ 概要 看護師専用の記事投稿+学習サービスです。 記事投稿機能やVue.jsを使った一部SPAのゲーム機能を実装しています。 なぜ開発したか About Meでもお話したように、私は看護師として働きながら、プログラミング学習をしています。 その中で感じた、以下の理由で開発しようと考えました。 1.同業者との情報共有でスッと理解できる 現場では先輩から看護について教育を受けます。その中でテキストや文献を読むだけではなかなか理解できなかったことを、その先輩の説明でスッと理解できる場面がたくさんあります。 それは先輩だけでなく、同期や後輩の言葉が理解を深めるということも多々あります。 もちろん二次情報になるので、勘違いや見当違いなこともあるわけなので、盲信できるわけではありませんが、現場で起きている「スッと理解できる」という場面をネット上でもできないかと考え、このアプリを開発しました。 2.Qiitaに感動した プログラミング学習を初めて、一番驚いたのがたくさんの人が情報発信をしていたということです。 ポートフォリオを作成しながら、わからない・できないところはググって実装していきました。 ほとんどのことをネット上で調べることができました。 たくさんの情報発信をエンジニアの方たちがされていること、そして同じエンジニアの人たちと知識を共有しているエンジニア業界の仕組みに感動したからです。 公式ドキュメントなどで一次情報を調べることは必須ですが、理解しづらいことが、ある人の情報発信で「スッと理解できる」Qiitaのようなサービスがあればいいなと考えたからです。 3.学習サイト、スキルトレーニングサイトの重要性 私は物事を学習する上でアウトプットに勝るものはないと考えています。 私自身も勉強会に参加するときよりも、開催するほうが自分の知識やスキルが向上することを実感していたからです。 自分の得意な分野や学習を始めた分野のアウトプットをする場所がインターネット上にあればとても有用だと思い、記事投稿サービスを作りました。 また看護師として10年勤務して、「このスキルを鍛えておくと、非常に有用である」と思った内容をゲームとして提供しています。 タイピングゲームを実装しているのですが、それもその一つです。 使用技術 HTML/CSS Bootstrap SASS javascript jQuery Vue.js Ruby 2.6.3 Ruby on Rails 6.0.3 Rubocop (コード解析ツール) RSpec (テスト) Docker/Docker-compose(ローカル開発環境からデプロイまで) AWS(VPC, EC2, Route53, ELB, S3, RDS, ACM) 実装機能 基本機能 新規会員登録・ログイン機能 Googleアカウントログイン機能 パスワードリセット機能 記事一覧機能(ページネーション) 記事ソート機能(タグで絞り込み) 記事検索機能(テキスト検索) タグ機能 記事詳細画面閲覧機能 タイピングゲーム機能(データー登録はしない) いいね数表示機能 お問い合わせ機能 ログイン後機能 ユーザーマイページ表示機能( フォロー・フォロワー表示・My記事一覧表示・My記事投稿数表示機能 ) ユーザー情報変更機能(アイコン画像・ユーザーネーム・メールアドレス・パスワード) MYユーザー削除機能 タイピングゲーム機能(スコア、プレイ回数表示、保存) 記事いいね機能(非同期通信) ユーザーフォロー機能 記事投稿機能(ActionText) 記事編集機能 画像投稿機能(ActiveStorage経由でS3バケットに保存) 管理者機能 ユーザー一覧表示 ユーザー削除機能 インフラ構成図 ER図 ポートフォリオの工夫したところ ユーザー対象は看護師で、業務上よく使う、officeのWordのUIに比較的近い「Action Text」を採用 課題 技術選定、DB設計など、初期の段階で構想がめちゃくちゃ甘かった 未経験からのWEB系エンジニアへの転職が当面の目標であったため 多く採用されている 学習がしやすい(公式ドキュメント、実装事例が多い、ユーザーが多いため、質問しやすい) 上記の理由からRuby on Rails、Vueを使うとは決めていました。 しかしAWSやDockerの採用などはなぜこの技術なのかという技術的判断よりも、デファクトスタンダードであろう技術であり、ポートフォリオ作成時点でキャッチできた情報で手探りで作りました。 なぜその技術が必要なのかという判断をするための知識もまだまだ不足しているため、ポートフォリオの要件に合わせて、ブラッシュアップしていく必要があります。 体系的に技術の学習が今後も必要 これはポートフォリオ作成ではなく、プログラミングを行う上での課題です。 よく言われている「プログラミングは暗記しなくていい」「まず手を動かしながら覚えていく」精神でポートフォリオ作成をしてきました。 わからないところはすぐにググって、都度実装してきたが、「実装したコードをちゃんと理解しているか」と自分に問うと、非常に怪しい・・・ コードを見直せば、何をしているのかはなんとなくわかるが、しっかり言語化するまでに時間がかかる。 体系的に理解できていないことがその原因だと考えています。 独学にこだわりすぎたのも問題で、メンターサービスなどの活用もするべきでした。 まとめ 当初考えていた機能は実装できたので、完成としました。 リファクタリングや機能の追加は今後も継続していきたいと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

RDSとRedshiftをDatabase Migration Serviseでレプリケーションする際に気を付けることと読むべきドキュメント

RDSでは db_parameter binlog_format=ROWにする。 バックアップ保存 バックアップ保存日を1日以上にする。 atutomated backup をenableにする。 Redshift VPC拡張はしない(超重要) https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html RedshiftのクライアントツールはDbeaverを使うのが良かった。 DMSでRedshiftをターゲットとして利用する。 DMS IAM AWS CLI と AWS DMS API で使用する IAM ロールの作成 移行前評価について https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Tasks.AssessmentReport.html ベストプラクティス to Redshift おまけ:QuickSight Redshiftへの接続の確立 エンドポイント (HTTPS) アジアパシフィック (東京) (ap-northeast-1) ユーザーアクセスのためのウェブサイト – https://ap-northeast-1.quicksight.amazonaws.com IP アドレス範囲 – 13.113.244.32/27 エンドポイント (HTTPS) – quicksight.ap-northeast-1.amazonaws.com クエリについて Migrate and Sync RDS MySQL/MariaDB to Redshift using AWS Data Migration Service. AWS resource 権限関係 npm SDK https://www.npmjs.com/package/amazon-quicksight-embedding-sdk アプリにダッシュボードを埋め込む手順。 https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/embedded-analytics-dashboards-with-anonymous-users-step-3.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CloudFront Functions を使ってみた

CloudFront Functions が公開されました。同じ用途としては既に Lambda@Edge がありますが、Lambda を使わずに CloudFront 組み込みで超軽量な実行環境になっているようです。 参考) Introducing CloudFront Functions – Run Your Code at the Edge with Low Latency at Any Scale 特徴 既存の Lambda@Edge に比べ主に以下の特徴があります。なかなか制限がキツイので、用途としてはパスやヘッダの変換、リダイレクトといったちょっとした用途になるかと思います。 JavaScript (ECMAScript 5.1 互換) ... Node.js の記述は使えない。 Viewer Request/Response のみ ... Origin Request/Response は不可 実行時間は 1ms まで 使用可能メモリは 2 MB パッケージサイズは 10 KB まで ネットワークアクセス、ファイルシステムは使用不可 リクエストボディの参照は不可 料金は 100 万リクエストあたり 0.1 USD と、Lambda@Edge の約 1/6 以下。 参考) Amazon CloudFront Pricing 手順 Lambda ではないので、CloudFront の管理コンソール内で作成します。 管理コンソール > CloudFront > Functions 「Create function」で関数名を入力して作成。 「Build」タブで、コードを入力して「Save」。ECMAScript 5.1 互換のため新しい記述は使えないので注意。 例) Vue.js でアセット以外を /index.html にルーティングする場合。 function handler(event) { var request = event.request; if (!request.uri.match(/\.(css|gif|html|ico|img|jpg|js|json|png|svg|txt)$/)) { request.uri = '/index.html'; } return request; } 「Test」タブで、テスト。 Stage に「Development」を選択すれば編集中のコードを、「Live」を選択すればデプロイ済みのコードを実行することができる。 「Publish」タブで、「Publish」をおこない、編集中のコードをデプロイする。(コードを更新した場合も同様) 「Associate」タブで、割り当て先の CloudFront ディストリビューション、Event type および Behavior を選択して「Add association」。(指定した Event type に既存の Lambda@Edge/CloudFront Function が割り当てられている場合は上書きされるので注意。同じ Event type に割り当てられる関数は Lambda@Edge/CloudFront Function のいずれかひとつだけ。) これで、選択したディストリビューションの「Edge Function Associations」設定に、作成した関数が割り当てられました。 更新時も Functions で「Publish」をおこなうだけで、Lambda@Edge のように時間がかかることもなく、すぐに反映されるようです。Lambda@Edge はデバッグやデプロイに辛みがありましたが、制限内で実行できるちょっとした処理であればこちらを使っていくのが良さそうです。 逆に計算量の多い処理には不向きなので、Lambda@Edge も引き続き併用する形になるでしょう。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CloudFormationでVPCを作成する

概要 CloudFormationを使ってみたかったので、試しにVPCを作成してみます。 作成するもの VPC サブネット テンプレート AWSTemplateFormatVersion: 2010-09-09 Description: >- CloudFormationでVPC, subnetを作成します Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 172.16.1.0/24 EnableDnsSupport: true Tags: - Key: Name Value: VPC-name subnet1a: Type: AWS::EC2::Subnet Properties: AvailabilityZone: "ap-northeast-1a" VpcId: Ref: VPC CidrBlock: 172.16.1.0/26 Tags: - Key: Name Value: subnet-1a subnet1c: Type: AWS::EC2::Subnet Properties: AvailabilityZone: "ap-northeast-1c" VpcId: Ref: VPC CidrBlock: 172.16.1.64/26 Tags: - Key: Name Value: subnet-1c 雑感 NATゲートウェイやルートテーブルも設定したいですね。 セキュリティグループは用途次第なので、作るリソースに合わせて作成ですかね。 たとえば、RDSならDBのポートを開けるとか。 資料 テンプレートを作る際のリファレンスはこちらです。 日本語だと情報がうまく出ないので英語を指定します。 https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/template-reference.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】プレイスメントグループとは

プログラミング勉強日記 2021年5月4日 プレイスメントグループとは  プレイスメントグループは、AZ内のインスタンスを論理的にグループしたもの。プレイスメントグループを使用することで、ネットワークパフォーマンスの向上につながる。  プレイスメントグループのAWS公式ドキュメントでは以下のように説明されている。 新しい EC2 インスタンスを起動する場合、EC2 サービスは、相関性のエラーを最小限に抑えるために、すべてのインスタンスが基盤となるハードウェアに分散されるようにインスタンスを配置します。プレイスメントグループを使用することで、ワークロードのニーズに対応するために独立したインスタンスのグループのプレイスメントに影響を与えることができます。ワークロードのタイプに応じて、以下のいずれかのプレイスメント戦略によりプレイスメントグループを作成できます。 引用:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/placement-groups.html プレイスメントグループ戦略 クラスター  単一AZでインスタンスを論理的にグループ化する。複数のAZにまたがることはできない。EC2間のインスタンス間における通信の遅延時間を短くする、処理できるデータ量を増やすために利用される。 パーティション  論理的なパーティションに分離されているインスタンスのグループ。複数のAZに分散させることができる。グループのAZごとに、最大7つの実行中のインスタンスを持つことができ、重要なアプリケーションといった同時障害のリスクが軽減される。 スプレッド  それぞれコトンるハードウェアに設置されるインスタンスのグループ。複数のAZにまたがることができる。少数のEC2が互いに分離して保持される必要があるアプリケーションに最適。 参考文献 プレイスメントグループ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

EC2でDockerを使っているとき、no space left on deviceとでたとき。

自作アプリに新たなgemをインストールして、ec2で docker-compose buildをしたとき、 no space left on deviceでた。 解決方法 まず、どのファイルが容量をくっているのかみました。 [myuser@ip-172-31-2-37 goal_tree]$ find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n 1 .browserslistrc 1 .dockerignore 1 .env 1 .gitattributes 1 .gitignore 1 .ruby-version 1 .vscode 1 Dockerfile 1 Gemfile 1 Gemfile.lock 1 README.md 1 Rakefile 1 babel.config.js 1 config.ru 1 docker-compose.yml 1 dump.sql 1 entrypoint.sh 1 package-lock.json 1 package.json 1 postcss.config.js 1 storage 1 vendor 1 yarn.lock 1 クラス図.md 1 ポートフォリオ コンセプトの整理.md 1 機能設計.md 2 containers 2 lib 3 log 8 bin 18 db 27 test 37 config 59 public 87 app 303 .git 10375 tmp 16182 node_modules node_modulesがダントツで多い。 現段階では、.dockerignoreにnode_modulesを入れていなかったので、 buildするときに、node_modulesもbuildするようになっていたから、容量くっているのでは?という仮説を立てました。 .dockerignoreとは Before the docker CLI sends the context to the docker daemon, it looks for a file named .dockerignore in the root directory of the context. If this file exists, the CLI modifies the context to exclude files and directories that match patterns in it. This helps to avoid unnecessarily sending large or sensitive files and directories to the daemon and potentially adding them to images using ADD or COPY. イメージをbuildするときに、.dockerignoreに書いてあるものは除外してくれる。 メリットとしては、大きなファイルや機密性の高いファイルをデーモンに送信したり、イメージを追加することがなくなる。 今回の場合、node_modulesのように大きいファイルとかをデーモンに送信しなくてよくなるので、イメージの容量が減るかなと。 ですが、書きすぎると逆にbuildに時間がかかることもあるみたいです。 参考: .dockerignoreにnode_modulesをかいてみる .dockerignore tmp/* log/* .git containers ## ここを追記 node_modules 無事エラーが出ず、buildできるようになりました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】CloudWatchとAutoScalingについてまとめてみた

CloudWatchとは? AWSを管理してくれるサービスです。 例えば、EC2のCPUやMemoryが90%以上になってしまった場合ユーザーに通知を送ることができます。 また、その際にどのようなアクションをするかも設定ができます。 AutoScaringとは? EC2を増減してくれるサービスです。 もしアクセスが急増したときに、 現在のEC2ではたりなくなった分を追加してくれます。 AutoScaringの起動テンプレートを作成 構成は以下の通りです。 構成 AMI インスタンスタイプ Key Pair セキュリティグループ Auto Scaring groupの作成 最小、希望、最大を指定していく。 EC2 個数 最小 2 希望 2 最大 4 これをCloudWatchと結びつけて考えます。 Cloud Watch Auto Scaling group CloudWatch で CPU が 70%以上になった スケーリングポリシーによって、EC2 を 1 台追加 CloudWatch で CPU が 30%以下になった スケーリングポリシーによって、EC2 を 1 台削除 それでは実際に起動テンプレートを作成してみましょう。 ■ルート ①コンソール内で「EC2」と検索 ②左ペイン内の「テンプレートの起動」を選択 ③「起動テンプレートを作成」を選択 Auto ScaringとCloudWatchを導入してみよう! 導入図 1. AWSへログイン 2. 東京リージョンになっていることを確認 3. VPCを作成(IP:10.0.0.0/21) ■ルート コンソールで「VPC」と検索→左ペイン内の「VPC」を選択→「VPCを作成」を選択 4. サブネットを作成(IP:10.0.0.0/24, 10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24) ■ルート コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「サブネットを作成」を選択 Public Subnetを作成 WordPressに使うサブネットを作成します。 Private Subnetを作成 RDB(MySQL)に使うサブネットを作成します。 5. Publicサブネット内にEC2を構築 ■ルート コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスを起動」を選択 ■ステップの流れ STEP1 Amazon Linux 2 AMI STEP2 t2.micro STEP3 「ネットワーク」、「サブネット」、「パブリックIP」を変更 STEP4 そのままでOK STEP5 Name=WEBSERVER1で設定 STEP6 セキュリティグループを変更 STEP7 キーペアの作成 AMIの作成 作成したWEBSERVER1を停止してAMIを作成します。 ■ルート コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスの状態」から停止を選択 コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「アクション」から「イメージを作成」を選択 では作成したAMIを使ってインスタンスを作成しましょう。 ステップ5のタグは、Name=WEBSERVER2とします。 6. Publicサブネットをインターネットに接続するためにInternet Gatewayを作成 ■ルート コンソールで「VPC」と検索→左ペイン内の「インターネットゲートウェイ」を選択→「インターネットゲートウェイの作成」を選択 これではVPCとアタッチできていないので、インターネットへ接続できません。 なのでアタッチさせましょう! これでアタッチしました。 7. EC2がインターネット接続するためにルートテーブルを作成 ■ルート コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「Public-Subnet1」を選択→「ルートテーブル」を選択→「ルート」へ移動→「ルートを編集」を選択 8. ロードバランサーを導入 ■ルート コンソールで「EC2」と検索→左ペイン内の「ロードバランサー」を選択→「ロードバランサーの作成」を選択 9. PrivateサブネットにRDSを構築 RDSには、エンドポイント通信という機能がありました。 もし通信障害などが発生して、親のRDSが使えなくなった時子のRDSに接続してくれる機能です。 つまり、このことから異なるAZにサブネットがないとRDSは使えません。 ということで複数のサブネットにまたがる形でRDSは構築されるので、 サブネットグループというものが必要になります。 ■ルート コンソールで「RDS」と検索→左ペイン内の「サブネットグループ」を選択→「DB サブネットグループを作成」を選択 それでは次に、DBを作成していきましょう。 ■ルート コンソールで「RDS」と検索→左ペイン内の「データベース」を選択→「データベースの作成」を選択 次にRDSで作ったセキュリティグループを修正します。 ■ルート コンソールで「VPC」と検索→左ペイン内の「セキュリティグループ」を選択→「RDS-SG-1」を選択 DBは重要な情報が入っているため誰でも彼でもアクセスできると困ります。 なので、PublicサブネットのEC2(セキュリティグループ→WEB-SG-1)からしか触れないように修正します。 10. SSH接続でログイン ターミナル // ①キーペアがあるところへ移動 $ cd desktop // ②キーペア発見 $ ls -l keypair.pem -rw-r--r--@ 1 ryo staff 1704 5 1 14:38 keypair.pem // ③権限を400に変更 $ chmod 400 keypair.pem // ④SSH接続 $ ssh -i keypair.pem ec2-user@(パブリックIPアドレス) __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| 11. EC2にWordPressを導入 ターミナル // 権限が足りないので権限をrootに移動 $ sudo su - // EC2のパッケージを最新の状態にアップデート $ yum -y update // WordPressが動くために必要なツールをダウンロード(PHP, Apache, MySQL) $ amazon-linux-extras install php7.2 -y $ yum -y install mysql httpd php-mbstring php-xml gd php-gd // Apacheが再起動後も自動的に動くようにする $ systemctl enable httpd.service // Apacheをスタート状態に $ systemctl start httpd.service // カレントディレクトリにWordPressの最新パッケージを入れる $ wget http://ja.wordpress.org/latest-ja.tar.gz ~/ // あるか確認する $ ls -l total 16076 -rw-r--r-- 1 root root 16458939 Apr 21 00:00 latest-ja.tar.gz(あった) // 拡張子がgzなので展開しましょう $ tar zxvf ~/latest-ja.tar.gz // ディレクトリごと/var/www/htmlへコピーする $ cp -r ~/wordpress/* /var/www/html/ // /var/www/htmlをapacheのユーザーに権限変更 $ chown apache:apache -R /var/www/html 12. RDSのサイトアドレスをロードバランサーのDNSに書き換え ターミナル // ①RDSへログイン $ mysql -h database-1.xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u wordpress -p // ②WordPressのテーブルを使用 MySQL [(none)]> USE wordpress // ③指定のカラム MySQL [(none)]> SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home'); +-----------+-------------+-----------------------+----------+ | option_id | option_name | option_value | autoload | +-----------+-------------+-----------------------+----------+ | 2 | home | http://13.231.153.132 | yes | | 1 | siteurl | http://13.231.153.132 | yes | +-----------+-------------+-----------------------+----------+ // ④ロードバランサーのDNS名に置き換える MySQL [(none)]> UPDATE wp_options SET option_value = 'http://xx.xx.xx.xx' WHERE option_name IN ('siteurl', 'home'); 13. EC2のセキュリティグループのアクセス許可をロードバランサーからに変更する ■ルート コンソールで「EC2」と検索→左ペイン内の「セキュリティグループ」を選択→「WEB-SG-1」を選択 14. RDSも冗長化構成へ変更 ■ルート コンソールで「RDS」と検索→左ペイン内の「データベース」を選択→「database-1」を選択 15. 起動テンプレートの作成 ■ルート コンソールで「EC2」と検索→左ペイン内の「テンプレートの起動」を選択→「起動テンプレートを作成」を選択 16. Auto Scaring Groupの作成 ■ルート コンソールで「EC2」と検索→左ペイン内の「Auto Scaling グループ」を選択→「Auto Scaling グループの作成」を選択 17. CloudWatchの作成 ■ルート コンソールで「CloudWatch」と検索→左ペイン内の「アラーム」を選択→「アラームの作成」を選択 18. Auto Scaringの自動スケーリングの設定 ここでCloudWatchの条件に当てはまった時のアクションを設定します。 ■ルート コンソールで「EC2」と検索→左ペイン内の「Auto Scaling グループ」を選択→「Auto Scaling」を選択 これで完了です。 削除手順 ・Auto Scaring ・CloudWatch ・RDS ・EC2 ・ELB ・VPC
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

(備忘録)AWS認定試験テキストAWS認定クラウドプラクティショナーのデモ(コンピューティング)

1. はじめに 2021年5月3日にヤマムギ様主催にて開催されたvol.17 AWS認定試験テキストAWS認定クラウドプラクティショナーのデモ(コンピューティング)でのAWS学習内容について、自分への備忘録としてまとめてみました。ご参考になれば幸いです。 2. 学んだ内容 コンピューティングサービス ALBを作る 複数AZを含んだ構成にする セキュリティグループを割当する  SGは主にINBOUNDを設定する ルーティングでリクエスト先を指定 起動イメージを指定してやる 詳細モニタリングを有効化(有料) 3. 学習サイト YouTube:AWS ALB + Auto Scalingのデモ UserData.txt 4. 参考サイト 5. ハンズオンで得た豆知識 負荷をかけます $ yes > /dev/null AMIから起動イメージを起動するようにすれば簡単にマシンが動作する。 アプリの更新頻度が激しい場合はEC2起動時にGitPullで引いてくるという手法もある EC2の料金  使った時間:リージョン、OS、インスタンスタイプ スポットインスタンス  EC2インスタンスはAZ依存に起動AZ単位で起動可能  インスタンスの数が決まっている。余っているインス  タンスを安い価格で利用できる。  *最近は変動は小さいらしい。 スポットインスタンスはいきなり終了されるケースがある。大量並列で短時間使用には適しているみたい。 6. おわりに AWS学習の参考になれば幸いです。 ハンズオン開催してくださいましたヤマムギ様、感謝いたします。 2021/05/03 NISHIZONO Takahiro
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

オンプレでVMwareを触ってきた人のためのAWS速習

普段オンプレミスのインフラエンジニアをやっていますが、やればすぐわかるだろうと思い続けて数年経ちましたが一向に触る機会がやってこないので、個人でAWSに入門してみることにしました。 やはりインフラになじみのない人よりはすんなり理解出来ましたが、いくつか普段のオンプレミスでの仮想環境(VMwareなど)と考え方が異なる点がありましたので、備忘録として残しておきます。 まずざっくりEC2の作成方法 一般的な手順はネット上にたくさん転がっているので、そちらに説明を譲るとして、EC2インスタンスを作成する中で普段仮想環境ばかり触っている私が気になった点について記載しておきます。 イメージの選択 そこまで戸惑うほどでもないが、VMの側だけ作ってOSをインストールするのではなく、あらかじめ用意されたAMIというイメージをもとにインスタンスを作成する。 自分でカスタマイズしてマイAMIとして登録しておけば、いわゆる仮想マシンテンプレートのような使い方が出来る。 dockerイメージとかvagrantとかでも元々のイメージを引っ張ってきてカスタマイズしていくやり方をするけど、今後はこちらが主流になるんだろうな。OSインストールすることもなくなるのかと思うと少し寂しい・・・ インスタンスタイプの選択 VMwareではvCPUのソケット、コア数、予約する周波数などやメモリの割り当て、予約値、予約値のロックなどを最初から細かく指定するが、AWSのEC2ではインスタンスファミリーと呼ばれるテンプレみたいなものから選ぶ形となっている。 組み合わせがたくさんあり、ここから選ぶだけでも十分使えそうだが、CPUのコア数を変更したり、マルチスレッドを無効化したりすることもできる(インスタンス毎にできる)。 参考:CPUオプションを最適化する インスタンスの詳細設定 詳細設定と書いているが、VMwareの詳細設定とは全然違う。リソース以外のネットワークの指定やIAMロールの指定などを行う画面。AWSではVPCというSDN(Software Defined Network)上で動くので、その辺の知識が最低限必要となる。標準スイッチ作ってNWチームに教えてもらったVLAN IDを設定するだけではつながらない。 NSXの経験がある人だったら、ほとんど同じ感覚で使えると思う。 その後追加ディスク(EBS)やタグ(名前とか付けれる)、セキュリティグループ(≒オブジェクトベースFW)などの設定があるが、VMware ESXi にNSX組み合わせて構築したことがある人なら悩まずに進めると思う。 その他オンプレエンジニア疑問に思ったこと 一番気になったのは、仮想化のオーバーヘッドやCPU、メモリのオーバーコミットの扱いである。 これについては、いろいろと資料を漁ると次のようなことが分かった。 基本的にはオーバーコミットされず、インスタンス毎にリソースが占有される。ただし"T"インスタンスファミリーはオーバーコミッドされる クロック周波数はどうなるの?→インスタンスファミリー毎に使われているCPUが異なる。オーバーコミットされないという言葉をそのまま受け取れば、インスタンスファミリーで使われているCPUのクロック数をそのまま予約している状態ということ?(間違っていたら教えてください!)Amamzon EC2 インスタンスタイプの選び方 その他参考 Amazon EC2 Performance Deep Dive Amazon EC2 インスタンスタイプ この記事はAWS初学者を導く体系的な動画学習サービス 「AWS CloudTech」の課題カリキュラムで作成しました。 https://aws-cloud-tech.com
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS無料枠を意図せず超えてしまった話(backup storage exceeding free allocation)

AWSで20円ほどの課金が発生してしまいました。請求書を確認するとRDSで料金が発生しているとのことです。 スナップショットを確認します。 DBインスタンス削除済みのものが残ってました。これが原因で請求されてるそうなのでアクションから削除します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む