ちょっとやりたくなったのですが、意外と出てこなかったので記載。
拡張で remove comment で検索して出てくる拡張機能を入れる。
コマンドパレットでremove all comment
これでまるっと消せる。
プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。
ちょっとやりたくなったのですが、意外と出てこなかったので記載。
拡張で remove comment で検索して出てくる拡張機能を入れる。
コマンドパレットでremove all comment
これでまるっと消せる。
最近JMeter使う必要があったのですが、ログイン系のことやる時って、
だいたい、hiddenのinputのトークンみたいなIDを取っておいて、
次のリクエストでそのトークンを一緒に送る。みたいな作りになってるやつ多いと思うんです。
これを取るのに、Jmeterの正規表現を使ってinputのvalue取ると思うのですが、
ネットのサンプルって大体↓になってる。
<input type='hidden' id='hoge' name='hoge' value='(.*)' />
でもこれって、最長マッチしてるから、例えば、
<input type='hidden' id='hoge' name='hoge' value='12345' /><input type='hidden' id='fuga' name='fuga' value='67890' />
みたいなHTMLになってると、この正規表現で最初に取れる値って下記になるんですよね。
12345' /><input type='hidden' id='fuga' name='fuga' value='67890
なので、本来は最短マッチの下記にしておかないと汎用性ないんじゃないかと思ったり思わなかったり。
<input type='hidden' id='hoge' name='hoge' value='(.*?)' />
SSHキーとかHTTPSの認証情報とか先にやっておかないとダメだと思ってたのですが、
EC2からならこういうの必要ないっぽい。
EC2のロールにポリシーでCodeCommitPowerUser辺りを付けておけば、Gitのみでいける。
AWSCLIのインストールは必要ですが、Configはしておく必要ない。
Gitのconfigで下記を実施。credential helperをAWSCLI通してやるっぽい。
git config --global credential.helper "!aws codecommit credential-helper $@" git config --global credential.UseHttpPath true
これだけでいける。SSHキーもAWSのアクセスキーとかシークレットキーの発行なんかも不要なので基本的はこれでやってくれというのがAWSの推奨らしい。
ただし、一つ罠がある。
Gitのインストール時に↓のCredentialHelperをNoneにしておかないとダメ。
ダメじゃないんだけど、Noneにしておかないと、awscliをcredential-helperにしても、
HTTPSでアクセスした際に必ずuser-name/passを聞かれる。
AWSのClientVPN利用しても良いのですが、接続台数増えると結構高いので、自前でやりたい場合。何個か参考になるサイトはあるのですが、最新のOpenVPNだと設定ファイルのディレクトリ構成微妙に変わっていて、結構ハマるので特記。あとついでに、AWSClientVPN利用の時にイケてないところに対応する方法もついでに記載。
AWS側の設定や細かい内容はこちらのブログを見た方が良いと思います。
EC2はAmazonLinuxで作成する場合、RedHat系なら大体同じじゃないかと。
# EPELを有効にする(AmazonLinuxのデフォのリポジトリにOpenVPNがいないため) sudo amazon-linux-extras install epel -y # OpenVpnのインストール sudo yum -y install openvpn # EasyRSAのインストール(証明書作成用のツール) wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz tar -xvzf EasyRSA-3.0.8.tgz sudo mv EasyRSA-3.0.8 /usr/local/EasyRSA cd /usr/local/EasyRSA/ # 初期化 ./easyrsa init-pki # CA作成 ./easyrsa build-ca ## パスフレーズ聞かれるので入力 ex. hogefuga ## CommonNmae聞かれるので入力 ex. samplename # 暗号アルゴリズムの設定ファイル作成 ./easyrsa gen-dh # サーバキーの作成 ./easyrsa build-server-full server nopass ## パスフレーズ聞かれるのでCA作成と同じフレーズを入力: ex. hogefuga # クライアントキーの作成 ./easyrsa build-client-full client1 nopass ## パスフレーズ聞かれるのでCA作成と同じフレーズを入力: ex. hogefuga # 作成した各証明書系ファイルをopenvpnの設定ディレクトリにコピー sudo cp pki/ca.crt /etc/openvpn/server/ sudo cp pki/issued/server.crt /etc/openvpn/server/ sudo cp pki/private/server.key /etc/openvpn/server/ sudo cp pki/dh.pem /etc/openvpn/server/dh2048.pem # openvpnのサンプル設定ファイルを所定の場所にコピーしておく(設定ファイルの中身は後述) sudo cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/server/server.conf # 2.4以降デフォで必要になったキーの作成 sudo openvpn --genkey --secret /etc/openvpn/server/ta.key # IPフォワーディングの許可 sudo vi /etc/sysctl.d/99-sysctl.conf ## 下記を追記 net.ipv4.ip_forward = 1 # サービスの再読み込み sudo sysctl -p # 設定ファイルを更新後 # openvpnの起動と自動起動 sudo systemctl start openvpn-server@server.service sudo systemctl enable openvpn-server@server.service
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem tls-auth ta.key 0 cipher AES-256-CBC # Clientに振られるIPの範囲 server 10.8.0.0 255.255.255.0 # ここはEC2インスタンスが存在してるサブネットのCidrBlock push "route 172.123.456.789 255.255.0.0" keepalive 10 120 persist-key persist-tun status openvpn-status.log verb 3
client dev tun proto udp remote [EC2のグローバルIP] 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC verb 3
クライアントはWindowsの前提。まず、クライアントをここからDLしてインストール。
そしたら、設定のインポートでやってもいいのですが、結局証明書ファイルの格納とかもいるので下記の感じでやる。デフォだと下記フォルダ内に任意のフォルダを作成
「C:\Users\[user-name]\OpenVPN\config\」
例えば、myvpnでやる場合。まず下記フォルダを作成。
「C:\Users\[user-name]\OpenVPN\config\myvpn」
そしたら、myvpn.ovpnを新しいファイルで作成。中身は上記の内容。
サーバで作ってる各種証明書のファイルをクライアントに持って来て、このファイルと同じ場所に格納。
格納するのは下記4つ。
sudo cat /etc/openvpn/server/openvpn-status.log`
以下もろもろのやりたいコト別の特記。
会社内の場合はプロキシ通さないとアクセス出来なかったりする。その場合は、
port 443 proto tcp
TCPの443で待ち受け。
proto tcp remote [EC2のグローバルIP] 443 http-proxy [proxy server] [proxy port] stdin basic http-proxy-retry
stdinの場合は、接続時に入力プロンプト上げる場合。
予め設定しておきたい場合は、下記でファイル名にしていたいファイルを設定ファイルと同じフォルダに格納する。
http-proxy [proxy server] [proxy port] [file-name]basic
ファイルは1行目がIDで2行目がパスワード。
デフォだと、クライアント毎に証明書用意しないとダメ。これだと大量のクライアントで接続しないといけない場合にかなりつらい。一つの証明書バラまいて終わりにしたい場合は下記。
duplicate-cn
上記で、同じ証明書使って複数端末から接続しても、それぞれにIPふってくれるようになる。
/etc/openvpn/ ↓ /etc/openvpn/server/
sudo systemctl start openvpn ↓ sudo systemctl start openvpn-server@server.service
ちなみに、↑でserverっていう名前の設定ファイルを見に行くっていう事らしい。
「openvpn-server@[name].service」という事らしい。
オマケでAWSClientVPN使う場合にイケてないところの対応。
まず、イケてない点は下記。
追記
↓はインターネット向けはVPN通したくない場合はスプリットトンネル有効にするだけですね。というか↑の設定が要するにスプリットトンネルした時にサーバから送られてくる設定っぽかった。
サーバから「0.0.0.0」のルートが送り込まれてるらしく、特定CidrのみVPNにしたい場合はコレだと無理。
さらに、AWSClientVPNのAWS提供クライアントだとここの設定サポートされてなくて、対応不可能。
なので、AWSClientVPN利用でも端末側はOpenVPNのクライアントを利用する。
そのうえで設定ファイルで下記を追加。
route 10.123.456.789 255.255.0.0 vpn_gateway 300 route-nopull
route-nopull入れないとサーバからルートが強制されるので、それを回避するために、nopull入れる。
AWS提供のクライアントだとこのnopullを許可してくれない。。。
接続方法は公式に記載の通りで問題なし。
で、AWSのVPNクライアントだと色々設定が出来ないようなので、OpenVPNで接続するようにする。
やりたい事は下記。
http-proxy 123.456.789.123 8080 stdin basic
通常は認証があると思いますが、この設定でプロキシ接続時にID/PASS入力のダイアログが出る。
route-nopull route-metric 300 route 172.999.999.0 255.255.240.0 vpn_gateway 300
route-nopull がAWS提供のVPNClientだと対応してなくて、これが出来ない。
route-metricはとりあえずつけてますが、多分要らないと思う。
route *** で指定してるところが、このCIDRBlock宛ての時だけVPN使うようにする設定。
追記
インターネット向けはVPN通したくない場合はスプリットトンネル有効にするだけですね。というか↑の設定が要するにスプリットトンネルした時にサーバから送られてくる設定っぽかった。
あと、プロキシを利用する場合は ClientVPNGatewayを作る時に TCP にしておかないとダメ。デフォだとUDPが選ばれているので留意。
ここから、設定上で困ってた事。
AWS提供のVPNClientだと、接続すると 0.0.0.0をVPNGateway宛てにするルートテーブルが追加される。このせいで全ての宛先がVPNGateway宛てになっちゃう。
なので、まず試したこと。metric指定してこの追加されるルートの優先度を下げる。
↓
指定したmetricにならない。
サーバから設定を強制されてるっぽいので、nopull入れる。
↓
AWS VPNClientはno-pullディレクティブに対応してないエラーが出て設定できない。
という事で、OpenVPNでno-pullつけて、routeを自分で定義する必要ある。
タスクスケジューラに登録してあるタスクをコマンドで実行したくなった。
↓結論。
Schtasks.exe /Run /TN [TaskName]
検索すると、コマンドをタスクスケジューラで実行するっていうのしか出てこないんですよね。
タスクスケジューラ"を"コマンドで動かしたいわけで。。。
AutoScalingをLBのターゲットにするとき、Stack通して1ターゲットでしか使えなくなってる。
下記エラー。
Cannot add AutoScalingGroup to 2nd Target Group
で、これのISSUE。
困ってる人はそこそこいるような気がしますが、まだ入らないっぽいですね。
コレ出来ないと、一つのサーバ内でポート分けて複数のアプリを動かすのが無理なんだよなー。
ISSUEに記載の回避策を試してみるか。。。
タイトル通り。久しぶりにさわったら無茶苦茶ハマった。
Windowsで、とあるバッチファイル(.bat/.cmd)作って実行したら何故かコマンドが無限ループする。
全然分かんなくて調べてみたら原因は下記。
標準で使えるコマンドと同じ名前のバッチファイルだとこの事象が起きるらしい。
copy.batとかcmdkey.cmdとかとか。
まんまと罠にはまりましたとさ。。。
調べるのやたら時間かかった。。。
いやだって、「バッチコマンド 無限ループ」とかで調べても、ループの書き方しか出てこないんだもの。。。
RDSのSQLServerでDB作ってたら下記のエラー。
Database creation would exceed quota of 30
サービスクォータでDB数の制限があるっぽいのですが、これクォータの中に無いと思うんだけども。。。
上だと、DBの「インスタンス数」には制限あるけど、DB数は無いよね?
と思ったら、こっちの制限っぽいか。
Microsoft SQL Server DB インスタンスの制限
各インスタンスクラスタイプと可用性モードでサポートされるデータベースの最大数を示しています。
らしいので、可用性モードの場合は30までが限界っぽいですね。
うーん。増やせないんだろうか。。。