豊洲で寿司からのもつ鍋フィニッシュ

同僚が豊洲市場で寿司を確認したいと言っていたので、その企画に乗って昨日(2018/12/06)は出社前に寿司を食べてきた。夜はもつ鍋を食べた。東京に住む時間が残り短くなってきたのでいい感じに贅沢してやろうという思いだ。

こんな感じだった。心の栄養は大事だ。築地に市場があるとき、何度か同様に出社前に築地に寄って寿司や煮魚、親子丼、カレーなどを食べて出社するということをやっていた。朝からスタートダッシュをしている感じがしてとても良い。豊洲市場になってからは行けてなかったので、同僚が「明日行くぞ!」と言っていてタイミングがよかった。豊洲市場はすべてがとても綺麗で、見学者と市場関係者が完全に分離されており工場のようだった。あの雑然とした築地市場の体験はもうできないのだった。何度も行っておいてよかったなと感じた。豊洲市場はニュースでしか知らないという人も行ってみるといい。駅前にデータセンターしかなかった市場前駅が機能しはじめていて驚いた。

そんな素晴らしい朝を過ごし、仕事時間をなんとか終えて夜は同僚たちとともにもつ鍋に行った。もつ鍋写真はコンデジで撮ったのでいつか上げたい。早朝から起きていたおかげで、テンションがいつもより2割り増しくらいになっていた感じがあったし、ゲラゲラ笑えたいい熱狂の渦だったとおもう。

入社時のActiveDirectoryアカウント作成をSpreadSheetで半自動化していた話

この記事は、 Spreadsheets/Excel Advent Calendar 2018 - Adventar の9日目の記事です。

ActiveDirectoryについて

ActiveDirectoryをみなさんはご存知であろうか。

Active Directory (アクティブディレクトリ) とはマイクロソフトによって開発されたオンプレミスにおけるディレクトリ・サービス・システムであり、Windows 2000 Serverから導入された、ユーザとコンピュータリソースを管理するコンポーネント群の総称である。なお、クラウドコンピューティングにおけるディレクトリ・サービス・システムであるAzure Active Directoryと区別する場合、オンプレミス Active Directoryと表記することもある。

以後、ActiveDirectoryをADと表記する。社員のアカウント管理の中心にADがある組織では、入社時にADアカウント作成を行うこととなる。ADアカウントの作成は非常にめんどくさい。項目名も慣れにくい。samAccountNameとか、User Principal Nameとかである。

概要

社員番号、メールアドレスがほぼ一意に決まる環境があり、入社する人が発生したタイミングでActive Directoryのアカウントを作成する必要があった。これまではエンジニアが入社のたびに呼ばれぽちぽちと作成をしていた。ここを自分が見ることになったタイミングでアカウント管理に使っているスプレッドシートから、ボタンをポチッとしたらCSVをダウンロードでき、このCSVPowerShellに食わせるとさくっとADアカウントたちを作成できるようにした。というのが話のあらましである。

なお、エンジニアじゃない管理者に操作方法を教え、それ以後はその人の操作のみでアカウント作成が完結するようになった。

詳細

図

 

まあ詳細と言いつつ、過去の環境なので実際のコード(スプレッドシートのGoogleAppScriptや、PowerShellワンライナーも)は自分すらもう見ることができない。とはいえ、いくつか工夫していた点があったので紹介したいと思う。

 

カスタムメニューと、選択した行のみcsv出力していた件

Custom Menus in G Suite  |  Apps Script  |  Google Developers

上記のように、スプレッドシートの画面上にCustom Menusを追加することが出来る。

アカウント一覧のスプレッドシートであったため、新しいアカウントは下に下にと追加されていくことになる。ADアカウント作成は、新しい人の分だけをやりたい。なので新しい人たちの行を複数行選択したうえでCustom Menusから、CSV出力を行うようにプログラミングしていた。CSVの出力先はGoogle Driveのマイドライブである。

CSVのファイル名も決め打ち

Google Driveのマイドライブに出力されたCSVは、たしか毎回同じ名前だったと思う。そのファイルを、リモートデスクトップ先の所定の場所にコピーしたうえでPowerShell実行をしてもらっていた。そのファイルは、入社のたびにあたらしいものが出来上がるが、古いファイルを残しておく必要もないので毎回上書きしてもらっていた。こうしたことで、PowerShell側に書いたファイル名は変更する必要がない状態になった。

効果

入社に関する情報を扱う管理者がスプレッドシート入力をして、その流れでADアカウント作成まで自力でできるようになった。何か困ったことがあるときに呼ばれるくらいだったので、管理者もこちらもかなり負荷が下がった。

とはいえ、本当はOktaなどアカウントをつくり、そこからプロビジョニング機能で各種アカウント整備を行うのが現代の流行りであろうことはわかっていました。今回に関しては、そこまでの時間もお金も権限もなかったため、このような解決の仕方をしたのであった。

 

まあ、いかにも詳細に手が届かないブログではあるのだが、こういったこともできますね。ということでご理解いただけるとありがたい。

2018ラスベガス2日目

今日はワークショップ、セッション等に出た。

カンファレンス飯、1mmも期待してなかったのだが正直おいしかった。普通にホテルビュッフェだった。AWSありがたい。

今日のよかったこと

晩ごはんは、同僚の知り合いとごはんに行ったんだけど軽くつまむつもりが大変なことになり、これがアメリカか…となった。

明日も早いので寝よう

2018ラスベガス1日目

re:Invent 2018参加のためにラスベガスに来ている。アメリカ本土はRubyConfのマイアミ以来だと思う。

いくつかよかったことがあったのでメモしておく。

  • まずは無事に着いて入国できたこと。これが一番
  • 普段のシャンプーを持ってきたこと。泡立ちとか匂いとかわりと癒しですね
  • まずはおいしい肉を食べて食生活をスタートしたこと

Outback Steakhouseなら日本にもあるじゃんとか言われそうだけど、おいしかったから良し。

気圧調整付きの耳栓が機内でも平地でも使えて便利でありがたいのだが、ずっと装着していると耳の穴が痛痒いのが問題だなぁと思う。

さてもっかい寝よう

AWS CDKによるdeployの前に、cdk diffやsynthのレビューを行うのが運用上よいのではないかという話

前置き

CDKについて

AWS CDK使っていますか? 知っている人は適当に読み飛ばしてください。知らない人は全部読んでいってください。

これですこれ。 github.com

Welcome — AWS Cloud Development Kit

aws.amazon.com

CloudFormationでJSON書くのはなかなかしんどく、いい感じにJSON出力してくれるものが出ないかなぁと思ってはいましたが公式で出てきて、わっしょーいという感じです。しかも、TypeScript、JavaScript そして Javaで記述可能ですし、.NET と Python も近々公開されるとか。

AWS CDKの使い方については、公式リポジトリの /examples/cdk-examples-typescript 以下が参考になりますね。既存リソースの import もできますね。

aws-cdk/examples/cdk-examples-typescript at master · awslabs/aws-cdk · GitHub

CDKでの開発について

AWS CDKは、まだ正式リリースではないのですが、stagingの構築等で使っている方も結構いそうな気がします。 意図しない変更が本番に反映されるのは嫌なので、インフラの人とか開発チーム内でレビューするのが良さそうです。

ちょうど、CDKには cdk synthというコマンドがありCloudFormationのJSONを出力してくれます。

こうしたサンプルを食わせると

import cdk = require('@aws-cdk/cdk');
import s3 = require('@aws-cdk/aws-s3');

class MyStack extends cdk.Stack {
    constructor(parent: cdk.App, id: string, props?: cdk.StackProps) {
        super(parent, id, props);

        new s3.Bucket(this, 'MyFirstBucket', {
            versioned: true
        });
    }
}

class MyApp extends cdk.App {
    constructor() {
        super();
        new MyStack(this, 'hello-cdk');
    }
}

new MyApp().run();

こうしてJSONを出力します。

cdk synth
Resources:
  MyFirstBucketxxxxx:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration:
        Status: Enabled
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: "@aws-cdk/aws-codepipeline-api=0.15.2,@aws-cdk/aws-events=0.15.2,@aws-c\
        dk/aws-iam=0.15.2,@aws-cdk/aws-kms=0.15.2,@aws-cdk/aws-s3=0.15.2,@aws-c\
        dk/aws-s3-notifications=0.15.2,@aws-cdk/cdk=0.15.2,@aws-cdk/cx-api=0.15\
        .2,hello-cdk=0.1.0"

diffとして出すこともできます。 蛇足ですがdiffの仕組みがどうなってるのか、複数人でCDKで開発したときにどうなるのか。Terraformのようにstateファイルがないのに、はて…。となっています。調べてわかったら記事を書くかもしれません。

cdk diff
[~] 🛠 Updating MyFirstBucketxxxxx (type: AWS::S3::Bucket)
 └─ [-] .BucketEncryption:
     └─ Old value: {"ServerSideEncryptionConfiguration":[{"ServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms"}}]}
[~] 🛠 Updating CDKMetadata (type: AWS::CDK::Metadata)
 └─ [~] .Modules:
     ├─ [-] Old value: @aws-cdk/aws-codepipeline-api=0.15.2,@aws-cdk/aws-events=0.15.2,@aws-cdk/aws-iam=0.15.2,@aws-cdk/
aws-kms=0.15.2,@aws-cdk/aws-s3=0.15.2,@aws-cdk/aws-s3-notifications=0.15.2,@aws-cdk/cdk=0.15.2,@aws-cdk/cx-api=0.15.2
     └─ [+] New value: @aws-cdk/aws-codepipeline-api=0.15.2,@aws-cdk/aws-events=0.15.2,@aws-cdk/aws-iam=0.15.2,@aws-cdk/
aws-kms=0.15.2,@aws-cdk/aws-s3=0.15.2,@aws-cdk/aws-s3-notifications=0.15.2,@aws-cdk/cdk=0.15.2,@aws-cdk/cx-api=0.15.2,he
llo-cdk=0.1.0

本題

前置き長かったですね。cdk synthコマンドでのCloudFormationのJSONや、cdk diffコマンドの出力結果をプルリクエストに添えたら便利だと思いませんか。適当なラッパースクリプトを叩いたらcdk synth, cdk diffを行い、その結果をプルリクエストに簡単にくっつけられる。そんな仕組みを作ったらInfra as Codeが加速し、DevとOpsとの境目はもっとゆるふわになるのではないか。そう思って、記事を思いつきで書いてみました。

  • インフラエンジニアとしては、既存リソースへの影響範囲を変更前に知ることができる
  • アプリケーションエンジニアとしては、コードやJSON、diffでインフラエンジニアと対話する手段を得ることができる
  • しかもこれについてのコードレビューや会話をGitHub上で行うことができる。

ということで早く正式リリースされてほしいですね。現段階では、ドキュメントに書いてある内容が間違っていることもあるのでコントリビューションチャンス!という気がします。