AWS Certified Solution Architect Associate 対策
1軍サービス
制限、実践的な構成、トラブルシーティングなど詳細に把握しておく必要あり
2軍サービス
サービス概要・基本的な使い方まで把握しておけばOK
- CloudFormation
- RDS
- ElastiCache
- DynamoDB
- DirectConnect
- Trusted Advisor
- CloudTrail
- CloudWatch
- SNS
- SQS
- OpsWorks
- KMS / STS
※1軍7割、2軍3割くらいの力配分
役立つドキュメント
- よくある質問 - Amazon VPC | AWS
- 他のサービスのFAQも読む
- 一般的な問題のトラブルシューティング - AWS Identity and Access Management
- 他のサービスのトラブルシューティングも読む
- AWS サービス制限 - アマゾン ウェブ サービス
※1軍2軍共にブラックベルトの資料を読むよりは、マニュアルを読む方が役立つ印象
http/2@Hugo & Let's Encrypt
Let's Encryptで発行した証明書を使って、GolangのHugoで動いてるWebサイトをhttp/2にする
環境
OS: Fedora22
Go: 1.6.2
準備
firewalldのhttps/443番ポートを有効にしておく
$ sudo firewall-cmd --list-all $ sudo firewall-cmd --permanent --add-service=https $ sudo firewall-cmd --permanent --add-port=443/tcp $ sudo systemctl restart firewalld $ sudo firewall-cmd --list-all
80番 ポートで動いてるサービスは止めておく
Certbotクライアントが疎通確認をする場合に既に80番ポートが使われていると、メッセージが表示されて、先に進めない
SSL/TLS証明書発行
ここ読めば簡単
Let's Encrypt の使い方 - Let's Encrypt 総合ポータル
Let's Encryptで証明書を発行するツールのcertbotをダウンロード
$ git clone https://github.com/certbot/certbot
Let's Encryptで証明証を発行する
./certbot-auto certonly --standalone -d <domain>
Certbotクライアントの問いに答えてく。連絡先のメアドとか、同意しますかとか
生成されたファイルの保存場所と期限。期限は3ヶ月と短い
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/<domain>/fullchain.pem. Your cert will expire on <有効期限>.
でも更新はこれだけで良いので簡単。毎日更新すると怒られる
$ ./certbot-auto renew
Hugo
自分のレポジトリにcloneしてコード変更
commands/server.go
- err = http.ListenAndServe(endpoint, nil) + err = http.ListenAndServeTLS(endpoint, "/etc/letsencrypt/live/<domain>/fullchain.pem", "/etc/letsencrypt/live/<domain>/privkey.pem
main.go
- "github.com/spf13/hugo/commands" + "github.com/delaemon/hugo-https/commands"
go build して $GOPATH/bin/ に hugo-httpsとして置いておく
Systemd
新しいサービスとして設定ファイルを追加
web socket使ってるところをwssにするのは面倒だったのでExecStart の hugo-https serverコマンドに
-
- disableLiveReloadを付けた
付けえない場合は以下のエラーがブラウザで吐かれていた
livereload.js:1 Mixed Content: The page at 'https://<domain>' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://<domain>:443/livereload'. This request has been blocked; this endpoint must be available over WSS.n.Connector.e.connect @ livereload.js:1 livereload.js:1 Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
curl HTTP/2@Mac
HTTP/2用サーバーを立てるなら、debug用途でcurlでもHTTP/2を使いたい。
環境: OS X EI Capitan 10.11.3
普通にやると
$ curl -I google.com HTTP/1.1 302 Found Cache-Control: private Content-Type: text/html; charset=UTF-8 Location: http://www.google.co.jp/?gfe_rd=cr&ei=mshtV9S9BvLC8geyqZ7QAg Content-Length: 261 Date: Fri, 24 Jun 2016 23:56:10 GMT
http2オプションつければ・・・
$curl -I --http2 google.com curl: (1) Unsupported protocol
バージョン確認すると対応してるプロトコルや機能が見える
$ curl -V curl 7.43.0 (x86_64-apple-darwin15.0) libcurl/7.43.0 SecureTransport zlib/1.2.5 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets
ビルドオプションにnghttp2を指定して、curlを再インストール
$ brew reinstall curl -- --with-nghttp2 $ brew link curl --force $ hash -r
FeaturesにHTTP2が追加されてる
$ curl -V curl 7.48.0 (x86_64-apple-darwin15.3.0) libcurl/7.48.0 OpenSSL/1.0.2h zlib/1.2.5 nghttp2/1.10.0 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets
HTTP/2が使われる
$ curl -I --http2 https://google.com HTTP/2.0 302 cache-control:private content-type:text/html; charset=UTF-8 location:https://www.google.co.jp/?gfe_rd=cr&ei=ncxtV9W1GbDK8geS5JegAg content-length:262 date:Sat, 25 Jun 2016 00:13:17 GMT alternate-protocol:443:quic alt-svc:quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"
https://じゃないとHTTP/2は使われない
$ curl -I --http2 google.com HTTP/1.1 302 Found Cache-Control: private Content-Type: text/html; charset=UTF-8 Location: http://www.google.co.jp/?gfe_rd=cr&ei=ksxtV6X0MKfK8geE5LWgBA Content-Length: 261 Date: Sat, 25 Jun 2016 00:13:06 GMT
Mac OSX EI Capitan Wifi Commands
Mac Bookのネットワーク接続(Wifi/Proxy)をターミナルからコマンドから操作したい。
OS version
OS X EI Capitan
Wifiの操作
# On $ networksetup -setairportpower en0 on # Off $ networksetup -setairportpower en0 off # Info $ networksetup -getairportnetwork en0 # SSIDの一覧表示 $ sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s # 任意のネットワークに接続 $ sudo networksetup -setairportnetwork en0 <ssid> <password>
Proxyの操作
# On $ sudo networksetup -setwebproxystate Wi-Fi on; sudo networksetup -setsecurewebproxystate Wi-Fi on # Off $ sudo networksetup -setwebproxystate Wi-Fi off; sudo networksetup -setsecurewebproxystate Wi-Fi off # Info $ networksetup -getwebproxy Wi-Fi; networksetup -getsecurewebproxy Wi-Fi
エイリアスに設定
alias wifi-on='networksetup -setairportpower en0 on' alias wifi-off='networksetup -setairportpower en0 off' alias wifi-info='networksetup -getairportnetwork en0' alias proxy-on='sudo networksetup -setwebproxystate Wi-Fi on; sudo networksetup -setsecurewebproxystate Wi-Fi on' alias proxy-off='sudo networksetup -setwebproxystate Wi-Fi off; sudo networksetup -setsecurewebproxystate Wi-Fi off' alias proxy-info='networksetup -getwebproxy Wi-Fi; networksetup -getsecurewebproxy Wi-Fi' alias airport='sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport'
実際に打ってるコマンド
$ proxy-on && wifi-on $ proxy-off && wifi-off $ proxy-info && wifi-info
LLVM build on Fedora23(VirtualBox)
VirtualBox上のFedora23でLLVMをビルドした。
インストール手順
1. 必要パッケージをインストール
$ sudo dnf install make gcc-c++ texinfo m4 autoconf automake libtool graphviz python-xdot
2. ソースコードをダウンロード・解凍・配置
$ mkdir llvm $ cd llvm/ $ wget http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz $ wget http://llvm.org/releases/3.8.0/cfe-3.8.0.src.tar.xz $ wget http://llvm.org/releases/3.8.0/compiler-rt-3.8.0.src.tar.xz xz -dv llvm-3.8.0.src.tar.xz tar -xvf llvm-3.8.0.src.tar xz -dv cfe-3.8.0.src.tar.xz tar xvf cfe-3.8.0.src.tar mv cfe-3.8.0.src llvm-3.8.0.src/tools/clang xz -dv compiler-rt-3.8.0.src.tar.xz tar xvf compiler-rt-3.8.0.src.tar mv compiler-rt-3.8.0.src llvm-3.8.0.src/projects/compiler-rt
3. ディレクトリを作成して、ビルド
$ mkdir llvm-build $ cd llvm-build/ $ source ~/.bashrc ../llvm-3.8.0.src/configure --prefix=/usr/local/llvm --enable-optimized $ make -j2 $ make check $ sudo make install
かなり時間かかった。度々落ちるけど、メモリ不足だったので、make を繰り返せば終わる
基本操作
$ llvm ll llvm-as llvm-diff llvm-extract llvm-nm llvm-readobj llvm-symbolizer llc llvm-bcanalyzer llvm-dis llvm-link llvm-objdump llvm-rtdyld llvm-tblgen lli llvm-config llvm-dsymutil llvm-lto llvm-pdbdump llvm-size lli-child-target llvm-cov llvm-dwarfdump llvm-mc llvm-profdata llvm-split llvm-ar llvm-cxxdump llvm-dwp llvm-mcmarkup llvm-ranlib llvm-stress $ clang -o hoge.o hoge.c $ ./hoge.o hoge $ clang -emit-llvm -c -o hoge.bc hoge.c #LLVM ビットコードを出力 $ lli -force-interpreter hoge.bc #インタプリタで実行する $ clang -emit-llvm -S -o hoge.ll hoge.c #LLVM アセンブリを出力 $ llvm-as -o hoge.bc hoge.ll #LLVM アセンブリをLLVM ビットコードへ変換 $ lli hoge.bc #実行 $ llc -o hoge.s hoge.bc #LLVM アセンブリを経由してアセンブリ出力 $ llc -filetype=obj -o hoge.o hoge.ll #オブジェクト出力 $ opt -O3 -o hoge.bc hoge.ll #最適化 $ lli hoge.bc #実行 $ llvm-objdump -d hoge.o #ディスアセンブル hoge.o: file format ELF64-x86-64 Disassembly of section .text: main: 0: 55 pushq %rbp 1: 48 89 e5 movq %rsp, %rbp 4: bf 00 00 00 00 movl $0, %edi 9: 31 c0 xorl %eax, %eax b: e8 00 00 00 00 callq 0 <main+10> 10: 31 c0 xorl %eax, %eax 12: 5d popq %rbp
Clojure Leiningen
Clojureことはじめ
"Leiningen is the easiest way to use Clojure. With a focus on project automation and declarative configuration, it gets out of your way and lets you focus on your code."
Leiningen
leiningen をインストール
$ brew install leiningen
プロジェクトを作成
$ lein new hello
ディレクトリ構成は以下
$ tree . ├── CHANGELOG.md ├── LICENSE ├── README.md ├── dev-resources ├── doc │ └── intro.md ├── project.clj ├── resources ├── src │ └── hello │ └── core.clj ├── target │ ├── classes │ │ └── META-INF │ │ └── maven │ │ └── hello │ │ └── hello │ │ └── pom.properties │ └── stale │ └── extract-native.dependencies └── test └── hello └── core_test.clj 14 directories, 9 files
project.cljを書き換え
cat project.clj (defproject hello "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.7.0"]] :main hello.core)
lein repl で 実行。lein --help すると "Start a repl session either with the current project or standalone."
$ lein repl nREPL server started on port 52522 on host 127.0.0.1 - nrepl://127.0.0.1:52522 REPL-y 0.3.7, nREPL 0.2.10 Clojure 1.7.0 Java HotSpot(TM) 64-Bit Server VM 1.8.0_65-b17 Docs: (doc function-name-here) (find-doc "part-of-name-here") Source: (source function-name-here) Javadoc: (javadoc java-object-or-class-here) Exit: Control+D or (exit) or (quit) Results: Stored in vars *1, *2, *3, an exception in *e hello.core=> fo #Tabで候補が表示される foo for force format hello.core=> (foo "delaemon") delaemon Hello, World! nil
valgrind on Fedora22
Valgrind is an instrumentation framework for building dynamic analysis tools.
Valgrind Home
インストール
$ sudo dnf install valgrind
メモリリーク検出
$ valgrind --leak-check=full ./fib ==4784== Memcheck, a memory error detector ==4784== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==4784== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info ==4784== Command: ./fib ==4784== 832040 ==4784== ==4784== HEAP SUMMARY: ==4784== in use at exit: 0 bytes in 0 blocks ==4784== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==4784== ==4784== All heap blocks were freed -- no leaks are possible ==4784== ==4784== For counts of detected and suppressed errors, rerun with: -v ==4784== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
ヒーププロファイラ
$ valgrind --tool=massif ./fib ==4805== Massif, a heap profiler ==4805== Copyright (C) 2003-2013, and GNU GPL'd, by Nicholas Nethercote ==4805== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info ==4805== Command: ./fib ==4805== 832040 ==4805== $ ls -la massif.out.4805 -rw------- 1 dela dela 144 Feb 8 08:48 massif.out.4805 $ cat massif.out.4805 desc: (none) cmd: ./fib time_unit: i #----------- snapshot=0 #----------- time=0 mem_heap_B=0 mem_heap_extra_B=0 mem_stacks_B=0 heap_tree=empty
$ valgrind --tool=callgrind ./fib ==4837== Callgrind, a call-graph generating cache profiler ==4837== Copyright (C) 2002-2013, and GNU GPL'd, by Josef Weidendorfer et al. ==4837== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info ==4837== Command: ./fib ==4837== ==4837== For interactive control, run 'callgrind_control -h'. 832040 ==4837== ==4837== Events : Ir ==4837== Collected : 45872890 ==4837== ==4837== I refs: 45,872,890 $ ls -la callgrind.out.4837 -rw------- 1 dela dela 12618 Feb 8 08:49 callgrind.out.4837