ec2でperlを動かそう

/var/www/cgi-bin

[ec2-user@ cgi-bin]$ ls
hello.cgi
[ec2-user@ cgi-bin]$ sudo chmod +x hello.cgi

#!/usr/bin/perl --
print "Content-type: text/html \n\n";
print "Hello";

きた

mysql
mysql> create database perldb;
Query OK, 1 row affected (0.02 sec)

mysql> use perldb;
Database changed
mysql> create table t1(
-> a int,
-> b varchar(10)
-> );
Query OK, 0 rows affected (0.04 sec)

mysql> insert into t1 values(1, ‘asakura’),(2, ‘adachi’),(3, ‘kobayakawa’);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from t1;
+——+————+
| a | b |
+——+————+
| 1 | asakura |
| 2 | adachi |
| 3 | kobayakawa |
+——+————+
3 rows in set (0.01 sec)

$ perl hoge.pl
Can’t locate DBI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at hoge.pl line 4.
BEGIN failed–compilation aborted at hoge.pl line 4.

sudo yum -y install perl-DBI perl-DBD-MySQL

きた!OKKKKKKKKKKKKKKKK

次はservlet mysqlだ。ここわなー

mysqlのpasswordを忘れた時

passwordが違うと表示
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)

さっぱり覚えていない
ec2の初期パスワードか?
[ec2-user@ ~]$ cat /var/log/mysqld.log

[ec2-user@ ~]$ mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
違うらしい。。

mysqlを止めて、/etc/my.cnfを編集
[ec2-user@ ~]$ sudo service mysqld stop
Stopping mysqld: [ OK ]
[ec2-user@]$ sudo vi /etc/my.cnf

skip-grant-tables を追加

再起動して、-pなしでログイン
[ec2-user@~]$ sudo service mysqld start
Starting mysqld: [ OK ]
[ec2-user@ ~]$ mysql -u root

> UPDATE mysql.user SET authentication_string = PASSWORD(‘new password’) WHERE User = ‘root’ AND Host = ‘localhost’;
> FLUSH PRIVILEGES;

[ec2-user@]$ sudo vi /etc/my.cnf
# skip-grant-tables //コメントアウト

$ sudo service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
[ec2-user@ ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

OK!ふう、焦った~

githubからec2へデプロイ

デプロイとは、ソフトウェアの分野で、開発したソフトウェアを利用できるように実際の運用環境に展開すること。

IAMからロールへ行く
CodeDeployを選択する

ec2 インスタンス
# CodeDeployエージェント
wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

# 実行
sudo service codedeploy-agent start

appspec.ymlを編集して、githubにpush

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/dev/

code deployからアプリケーションの作成
deployする

deploy長いな。。

EC2 インスタンスタイプ比較

インスタンスタイプはさまざまな CPU、メモリ、ストレージ、ネットワークキャパシティーの組み合わせによって構成されているため、アプリケーションのリソースとして適切な組み合わせを柔軟に選択できる。

要件に応じてリソースをスケールできる。

T3…T3 インスタンスは、ベースラインレベルの CPU パフォーマンスを実現する次世代の汎用バーストインスタンスタイプで、いつでも必要に応じて CPU 使用率をバーストさせる機能を備えている。
T3 インスタンスは、コンピューティング、メモリ、ネットワークの各リソースのバランスが良く、幅広い汎用ワークロードに適している。
ベースラインのしきい値下でワークロードが動作しているときに CPU クレジットを蓄積
– CPU クレジットと、一貫したベースラインパフォーマンスによって制御されるバースト可能な CPU
– ピーク時のパフォーマンスを確保するUnlimited モード (デフォルト) と、毎月のコストを予測できる標準モードオプション
– AWS Nitro System と高周波のインテル Xeon スケーラブルプロセッサにより、T2 インスタンスに対して最大 30% の価格パフォーマンスの向上を実現

T2 インスタンスは、ベースラインレベルの CPU パフォーマンスを提供し、ベースラインを超えてバーストする機能を備えているバーストパフォーマンスインスタンス
ワークロードに必要とされる限り、高い CPU パフォーマンスを維持できます。ほとんどの汎用ワークロードについて、T2 Unlimited インスタンスは追加料金を一切生じることなく十分なパフォーマンスを提供
– 高クロックのインテル Xeon プロセッサ
– CPU クレジットと、一貫したベースラインパフォーマンスによって制御されるバースト可能な CPU
– 最も低コストな汎用インスタンスタイプであり、無料利用枠の対象*

M5 インスタンスは、最新世代の汎用インスタンス
このファミリーでは、コンピューティング、メモリ、ネットワークの各リソースがバランスよく提供されるため、多くのアプリケーションに適している。
– インテル Advanced Vector Extension (AVX-512) の新しい命令セットを搭載した、インテル Xeon® Platinum 8175 プロセッサ (2.5 GHz)
– さらに大きなインスタンスサイズ m5.24xlarge で、96 コアの vCPU と 384 GiB のメモリを提供
– 拡張ネットワーキングを採用した最大 25 Gbps のネットワーク帯域幅

M4 インスタンスでは、コンピューティング、メモリ、ネットワークの各リソースがバランスよく提供されるため、多くのアプリケーションに適している
– インテル Xeon® E5-2686 v4 (Broadwell) プロセッサ (2.3 GHz) またはインテル Xeon® E5-2676 v3 (Haswell) プロセッサ (2.4 GHz)
– デフォルトで EBS 最適化、追加料金なし

各 vCPU はインテル Xeon コアのハイパースレッド
インスタンスタイプによって使用しているプロセッサーが違いますね。

AWS auto scaling

EC2からauto scaling groupを押下します。

get started を押下後、Amazon Linux 2 AMIを選択します。

public ip addressを各インスタンスに割り当てる。

セキュリティグループの設定

auto scaling groupの詳細設計

auto scaling group

ec2でpythonにpost

[ec2-user@ip-xxx-xx-xx-xx app]$ python -V
Python 2.7.14

[ec2-user@ip-xxx-xx-xx-xx app]$ python35
Python 3.5.5 (default, Apr 25 2018, 23:51:32)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>>

python2系だからか?
usr/binを見ます。

うまくいきませんね。
他の方法を試してみましょうか。。

AWS https通信で位置情報を取得する

AWSに入ります。

__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
21 package(s) needed for security, out of 31 available
Run “sudo yum update” to apply all updates.

cyberduckでも入ります。

index.phpをつくります。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>位置情報取得サンプル</title>

  <script>
    // Geolocation APIに対応している
    if (navigator.geolocation) {
      alert("この端末では位置情報が取得できます");
    // Geolocation APIに対応していない
    } else {
      alert("この端末では位置情報が取得できません");
    }

    // 現在地取得処理
    function getPosition() {
      // 現在地を取得
      navigator.geolocation.getCurrentPosition(
        // 取得成功した場合
        function(position) {
            alert("緯度:"+position.coords.latitude+",経度"+position.coords.longitude);
        },
        // 取得失敗した場合
        function(error) {
          switch(error.code) {
            case 1: //PERMISSION_DENIED
              alert("位置情報の利用が許可されていません");
              break;
            case 2: //POSITION_UNAVAILABLE
              alert("現在位置が取得できませんでした");
              break;
            case 3: //TIMEOUT
              alert("タイムアウトになりました");
              break;
            default:
              alert("その他のエラー(エラーコード:"+error.code+")");
              break;
          }
        }
      );
    }
  </script>
</head>
<body>
  <h1>位置情報取得サンプル</h1>
  <button onclick="getPosition();">位置情報を取得する</button>
</body>
</html>


wow, 緯度経度が取れました。※渋谷にいます。
httpsならいけるんですね。
リダイレクトで取得するとすると、地域はやはりipアドレス + geo liteでしょうね。
問題は年齢、性別をどのように取得するか。
まずは、アドセンスの仕組み解析からでしょうか。
アドセンス、ASPのタグの中身を見ていきましょう。

AWSのELBとクライアント間でhttps通信

概念図はこちら

※AWSのアイコンにも少し慣れてきました。

以下のパターンで実装できるとのこと
1.AWSの証明書管理サービスであるACM(AWS Certificate Manager)発行のもの
2.シマンテックなどの外部CAで発行したもの

AWSコンソールにログインします。
セキュリティ、アイデンティティ、コンプライアンスに、Certificate Managerがありますね。
こいつか!?

流れとしては、
1. Route 53にサブドメイン作成
2. ACM証明書設定
2.1. ACMから証明書発行
3. EC2インスタンス作成
4. ELB作成
5. 動作確認

サブドメインですか?
一応、Elastic IPを設定して、EC2とRoute 53は既に作成済みです。

ELBとは?
Elastic Load Balancingですね。