ANAの国内線Wi-Fiでフライト情報を取得する

先日ANA国内線のWi-Fiを利用しようとしたら、認証はなかなか通らなかったのですが、フライト情報が取得できるREST APIを見つけたので紹介します。

機内Wi-Fiに接続した状態(メールアドレスの登録前でも取得可能なようです)で下記URLにGETリクエストを送ると、下記のようなJSONが返ってきます。 URL: http://services.inflightpanasonic.aero/inflight/services/flightdata/v1/flightdata

続きを読む

他のAWSアカウントのEC2とCodeCommitのリポジトリを共有する

やりたいこと

  • 自分の所属するAWSアカウント(アカウントAと呼ぶ)にあるCodeCommitのリポジトリを他のAWSアカウント(アカウントBと呼ぶ)の下にあるEC2からアクセスできるようにする
  • IAMのアクセスキーやCodeCommit用のIDとパスワードの受け渡しはせずに、アクセス認可を与えたい

f:id:translucens:20200326013422p:plain
リポジトリ共有の全体像

続きを読む

Amazon S3で使われるcanonical user IDの調べ方

異なるAWSアカウントへS3のアクセス権限を付与するとき、権限を与える先のcanonical user ID(正規ユーザー ID)が必要になることがあります。12桁のアカウントID 1234-5678-9012 は容易に調べることができますが、canonical user ID(64桁の16進数)は少し面倒だったので手順をメモしておきます。

rootアカウントが利用可能な場合

Your Security Credentialsのページを開き、Account identifiers の左にある「+」をクリックして展開するとそこに表示されます。

f:id:translucens:20200326014036p:plain
Account identifiers に Canonical User IDが表示される

IAMユーザしか使えない場合

公式にはIAMユーザはマネジメントコンソールから確認することはできないことになっています。

AWSマネジメントコンソールから確認する

何か任意のS3のバケットのアクセス権限を参照可能であれば、マネジメントコンソールから確認することができます。適当なバケットを開き、そのPermissionsタブを開くとAccount列にIDが表示されます(下記画像の黒字部分)。

f:id:translucens:20200326014144p:plain
AWSコンソールのS3のパーミッションタブにもCanonical User IDは表示される

AWS CLIから調べる方法(公式の方法)

公式には、IAMユーザはAPIまたはCLIから確認するよう案内されており、CLIで確認することもできます (aws configureは済んでいてアクセス可能な状態とします)。

$ aws --version
aws-cli/1.15.41 Python/2.7.15rc1 Linux/4.4.0-17134-Microsoft botocore/1.10.41
$ aws s3api list-buckets | jq -r .Owner.ID
1234…(略:64桁の16進数)

Gopher道場 #1 受講メモ

2018年4月12日に開催されたメルペイ主催の「Gopher道場」の受講メモ。 復習も兼ねて公式ドキュメント等へのリンクを追記しました。

init関数は複数あってもおk

  • 全体で一つしか認めないとでかいinit.goになってしまう
  • 同一ファイルに複数あってもよい
  • 明示的に init() のように呼び出すことはNG
  • 実行される順序はtenntenn氏のQiita記事参照

  • initの中でgo routine呼べるか

    • 可能ではある(が状態管理に失敗すると積む)

行末にセミコロンを補う仕様がある

以前のバージョンではセミコロンを補った状態でコンパイラのエラーが表示されることがあったそう。 詳細は言語仕様 The Go Programming Language Specification - The Go Programming Language を確認。JavaScriptでもセミコロンの自動挿入は罠ですね。

配列とスライス、マップの扱い

リテラルが似てるので注意

[...]int{1, 2, 3} は配列 []int{1, 2, 3} はスライス。

  • 配列は値コピーでスライスは参照コピーされる違いがある。
  • 配列に追加する要素の数が初めから分かっていたら、あらかじめcapacityを確保しておく
    • capacity不足になったときに順次メモリが拡張されるため。

要素の操作

  • スライスに対する append : スライスがnilもおk。A Tour of Go の15ページ目に例がある。

    • 一方で nilのMapにappend: NG、空のオブジェクトを作る必要がある。
  • Mapの for range は取り出される順序は保障されないし、Go1.3から積極的に乱すようになった

  • Mapを値コピーしたい

    • 標準の関数にはないので手でやる必要がある
  • スライスは標準のcopyでおk

エイリアス

  • 用途:(GAEの)リファクタリングにおいて、contextが準標準パッケージ→標準パッケージへ移動したのでそれの移行のため。
  • 一時「直交する機能とはなんだったのか」とIssueが炎上……

戻り値

名前付戻り値

複数戻り値

  • 自作の関数だと複数戻り値の一部を捨てることはできないけど、mapの値取得でok省略できるのはどうして
    • 特別に扱われているから(for range の i, vv を無視できるのも同じですね)

定数

定数は書きやすさ優先で、型やキャストを意識させすぎないようにしている

10 * time.Second をDuration * Duration にキャストしなくていい。 変数に代入しようとした時点で int, float, string, bool, ... になる

クラス型オブジェクト指向との違い

  • 構造体でなくても、組み込み型でも新しい型を定義すればメソッドのレシーバになれる
  • スライスや配列もOK
  • ベクトルを扱うために配列にメソッドつけることもある

スコープ

  • Fileスコープってどういうこと?→import文の有効範囲がそのファイル内に閉じていること
  • Universeスコープは?組み込みの値が定義されている空間
    • true, falseキーワードではなく、代入可能なので true := falseも(言語仕様上は)おk
    • ECMAScript5より前の仕様で undefinedに代入可能だったのに似てる

defer

  • リソースの開放は defer を使うことが多い
  • deferの引数は呼んだ時点で評価された値が使われるので、defer文の後に書き換えても書き換わらない

EC2 Systems Managerを使ってEC2のパッチを自動で適用、集計する

目的

Spectre, Meltdownと脆弱性の話題が頻繁に聞かれるので、EC2のセキュリティパッチを自動的、継続的に適用していきましょう。 AWSが提供するSystems Managerを使って、パッチの適用状況を把握したり、適用したりするのを自動的に行います。

注意

下記の内容は作成から日が経っているので、このページではSystems Managerという単語だけ覚えて、具体的な設定方法についてはAWS公式サイト等を参照することをおすすめします。 aws.amazon.com

またGCPVMのGCEでも類似のサービスが利用可能です。 cloud.google.com

全体像

f:id:translucens:20200326014912p:plain
Systems Manager全体像

続きを読む