継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

「Effective DevOps」オンライン輪読会 第2回開催レポート

タダです。

challenge-every-month の Slack メンバーで 「Effective DevOps」のオンライン輪読会をはじめました。

Effective DevOps ―4本柱による持続可能な組織文化の育て方

Effective DevOps ―4本柱による持続可能な組織文化の育て方

方針や輪読会の概要は @kojirock さんがまとめてくださっているので参照ください.5/19 が2回目の開催で僕が担当したのでブログに輪読会開催レポートをまとめます.

kojirooooocks.hatenablog.com

担当章について

今回の範囲は1章~4章分になります.DevOps とはどんな概念か,DevOps の歴史, DevOps に関するツールや手法が紹介されました.DevOps はツールや手法に目が行きがちですが,「人と人の協調や相互理解」,「組織の持続的成長に関わる文化的フレームワーク」であることが本書で重要なテーマになっています.

  • 1章 大局を見る
  • 2章 devopsとは何か
  • 3章 devopsの歴史
  • 4章 基本的な用語と概念

資料

資料はこちらです.

関連資料

DevOps の考え方の資料で本に書かれたことともリンクしているため見たことない方は一読することをお勧めします.

www.slideshare.net

昨年参加したはてなさんとペパボさんの勉強会で各社の事例も参考になると思います.

sadayoshi-tada.hatenablog.com

補足資料

Microsoft の牛尾さんの DevOps に関する学習コンテンツ紹介記事です.

simplearchitect.hatenablog.com

DevOps について技術的側面と文化的側面で簡潔に動画で解説してくれていてわかりやすいです.

www.youtube.com

まとめ

第2回目の輪読会で扱った資料と関連情報のまとめを行いました.オンラインの輪読会は初の試みのため探り探りですが,本の中身だけでなく現場の話を @kojirock さんと @kdnakt さんとわいわい話しながら1時間が終わりました. 開発手法の話から僕がモブプロに興味があって一緒にやらせてもらえないかと相談したら快く承諾してくれたので輪読以外も研鑽していきたい!

次回

次回は @kojirock さんの担当です.担当章が5,6章分になります.

「AWS Cloud Development Kit」に対応した Python コードを実践!

タダです.

以前,「AWS Cloud Development Kit」(以下、CDK)の記事を書きました.当時は対応言語に Python がサポートされてませんでしたが, AWS Developer Blog で CDK の Python コードやドキュメントが公開されていました.早速, Python で CDK を使ってみます。

AWS Developer Blog の記事

aws.amazon.com

関連記事

sadayoshi-tada.hatenablog.com

チュートリアルプロジェクトの実行

初期設定

下記のチュートリアルに沿って CDK を実行します. プロジェクトを初期化し、pip install -r requirements.txtでライブラリをインストールします.

docs.aws.amazon.com

$ mkdir hello-cdk && cd hello-cdk
$ cdk init --language python sample-app
Applying project template sample-app for python
Initializing a new git repository...
Executing Creating virtualenv...

# Welcome to your CDK Python project!

You should explore the contents of this template. It demonstrates a CDK app with two instances of
a stack (`HelloStack`) which also uses a user-defined construct (`HelloConstruct`).

The `cdk.json` file tells the CDK Toolkit how to execute your app.

This project is set up like a standard Python project.  The initialization process also creates
a virtualenv within this project, stored under the .env directory.  To create the virtualenv 
it assumes that there is a `python3` executable in your path with access to the `venv` package.
If for any reason the automatic creation of the virtualenv fails, you can create the virtualenv
manually once the init process completes.

To manually create a virtualenv on MacOS and Linux:

$ python3 -m venv .env


After the init process completes and the virtualenv is created, you can use the following
step to activate your virtualenv.

$ source .env/bin/activate

If you are a Windows platform, you would activate the virtualenv like this:

% .env\Scripts\activate.bat

Once the virtualenv is activated, you can install the required dependencies.

$ pip install -r requirements.txt

At this point you can now synthesize the CloudFormation template for this code.

$ cdk synth

You can now begin exploring the source code, contained in the hello directory.
There is also a very trivial test included that can be run like this:

$ pytest

To add additional dependencies, for example other CDK libraries, just add to
your requirements.txt file and rerun the `pip install -r requirements.txt`
command.

# Useful commands

 * `cdk ls`          list all stacks in the app
 * `cdk synth`       emits the synthesized CloudFormation template
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk docs`        open CDK documentation

Enjoy!
$ python3 -m venv .env
$ source .env/bin/activate
(.env) $ pip install -r requirements.txt 
Obtaining file:///Users/tada/work/cdk_python_sample (from -r requirements.txt (line 1))
Collecting pytest (from -r requirements.txt (line 2))
〜中略〜
uccessfully installed atomicwrites-1.3.0 attrs-19.1.0 aws-cdk.assets-0.31.0 aws-cdk.aws-autoscaling-api-0.31.0 aws-cdk.aws-cloudwatch-0.31.0 aws-cdk.aws-ec2-0.31.0 aws-cdk.aws-events-0.31.0 aws-cdk.aws-iam-0.31.0 aws-cdk.aws-kms-0.31.0 aws-cdk.aws-lambda-0.31.0 aws-cdk.aws-logs-0.31.0 aws-cdk.aws-s3-0.31.0 aws-cdk.aws-s3-notifications-0.31.0 aws-cdk.aws-sns-0.31.0 aws-cdk.aws-sqs-0.31.0 aws-cdk.aws-stepfunctions-0.31.0 aws-cdk.cdk-0.31.0 aws-cdk.cx-api-0.31.0 aws-cdk.region-info-0.31.0 cattrs-0.9.0 hello jsii-0.10.5 more-itertools-7.0.0 mypy-extensions-0.4.1 pluggy-0.11.0 publication-0.0.3 py-1.8.0 pytest-4.4.2 python-dateutil-2.8.0 six-1.12.0 typing-extensions-3.7.2
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

因みにプロジェクトを作ると以下のようなディレクトリ構造が作成されます.Python のコードで構成されているのがわかります.

$ tree
├── README.md
├── app.py
├── cdk.json
├── hello_cdk
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   └── hello_cdk_stack.cpython-37.pyc
│   ├── hello_cdk.egg-info
│   │   ├── PKG-INFO
│   │   ├── SOURCES.txt
│   │   ├── dependency_links.txt
│   │   ├── requires.txt
│   │   └── top_level.txt
│   └── hello_cdk_stack.py
├── requirements.txt
└── setup.py

デプロイ

次にデプロイをしていきます。まずcdk synthで CloudFormation テンプレートを合成し,次にcdk deployでデプロイをします.

$ cdk synth
Resources:
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=0.30.0,@aws-cdk/cdk=0.31.0,@aws-cdk/cx-api=0.31.0,jsii-runtime=Python/3.7.3


$ cdk deploy
HelloCdkStack: deploying...
HelloCdkStack: creating CloudFormation changeset...
 0/2 | 09:18:25 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata | CDKMetadata 
 0/2 | 09:18:28 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata | CDKMetadata Resource creation Initiated
 1/2 | 09:18:29 | CREATE_COMPLETE      | AWS::CDK::Metadata | CDKMetadata 
 2/2 | 09:18:31 | CREATE_COMPLETE      | AWS::CloudFormation::Stack | HelloCdkStack 

 ✅  HelloCdkStack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxx:stack/HelloCdkStack/6ef54dd0-744b-11e9-aada-0e842c318628

CloudFormationのスタックが完成していました.バージョニングと暗号化したS3バケットを作るのみですがサクッと作れました. f:id:sadayoshi_tada:20190512095953p:plain

後片付け

作成したリソースの削除はcdk destroyで完結します.

cdk destroy
Are you sure you want to delete: HelloCdkStack (y/n)? y
HelloCdkStack: destroying...
   0 | 01:27:57 | DELETE_IN_PROGRESS   | AWS::CloudFormation::Stack | HelloCdkStack User Initiated
   0 | 01:27:59 | DELETE_IN_PROGRESS   | AWS::CDK::Metadata | CDKMetadata 
   0 | 01:27:59 | DELETE_SKIPPED       | AWS::S3::Bucket    | HelloCdkBucket (HelloCdkBucketA63BB9B1) 

 ✅  HelloCdkStack: destroyed

Pulumi との利用比較

CDK」と似たようなツールとして「Pulumi」があります.「Pulumi」も JavaScript,Golang,TypeScriptの他に Python に対応したプログラミング言語でのプロビジョニングツールです.最後に2つのツールを使い分けていくにあたって利用比較を自分なりに調べてみたものをまとめます。

www.pulumi.com

Pulumi と CDK の比較

  • Pulumi」のプロビジョニングはマルチクラウド対応しているが, 「CDK」のプロビジョニングは AWS対応のみ
  • Pulumi」は利用形態に応じて利用料がかかるが, 「CDK」は利用料不要で利用可能
  • Pulumi」には独自 GUI 管理の画面があるが, 「CDK」は管理画面はなくターミナルでの操作中心 f:id:sadayoshi_tada:20190516011949p:plain

AWS を普段使うため僕は引き続き「CDK」でのプロビジョニングの勉強をしていきます💪

まとめ

CDK」の Python 対応したコードを試してみました.Python のコードの情報が出てきているのでこれは PythonAWS を利用している人にとっては朗報かと思います.僕もしっかり使いこなして Python でアプリケーションの開発,デプロイまで完結できるようにドキュメントを読み込んだり,実践していきたいです!

CDK の関連情報

公式ドキュメント(Get Started)

docs.aws.amazon.com

リファレンスドキュメント

docs.aws.amazon.com

Python のサンプルコード

github.com

「Python の基礎力を測る Python3 エンジニア検定」と題してLTしてきた

タダです。

Python 入門者の集い #8 で LT させていただいた資料を公開します。 python-nyumon.connpass.com

Python を始めたての方が多い勉強会ということで,入門者向けの内容として自分が受験した Python3 エンジニア検定試験の概要の紹介と受験後の所感をお話ししてきました.少しでも検定のことを知らなかった人が勉強のきっかけになれば嬉しいです.プログラミング言語の勉強会での発表は初だったので緊張しましたw

緊張して発表している模様です.

発表資料

発表資料はこちらです.

資料関連記事

sadayoshi-tada.hatenablog.com

note.mu

まとめ

LT 発表は緊張しましたがこういうところから Python の世界に馴染んでいきたいと思ったので機会をいただけてありがたかったです!PyCon JP の関わり方も教わったのでもっと Python の世界に勉強しながら飛び込んでいきたいと思います.

www.pycon.jp

Python の基礎力を証明する「Python3 エンジニア検定」を受験した

タダです。

5/11 に「Python3 エンジニア検定」を受験し,合格しました.受験前の勉強ログは,note に書きましたが今回は受験の振り返りをします.受験を考えている方や興味ある方が何か参考になれば嬉しいです.

note.mu

試験結果の振り返り

700 点の合格ラインに対し 750 点でした.ギリギリ合格ですw 分野別の得点率も出るのですが次の通りです. 5,6,9,11がイマイチですね...勉強し直します.

該当章 獲得率
1章 食欲をそそってみようか 100%
2章 Pythonインタープリタの使い方 100%
3章 気楽な入門編 100%
4章 制御構造ツール 67%
5章 データ構造 57%
6章 モジュール 50%
7章 入出力 100%
8章 エラーと例外 100%
9章 クラス 50%
10章 標準ライブラリめぐり 75%
11章 標準ライブラリめぐり─PartII 0%
12章 仮想環境とパッケージ 100%
14章 対話環境での入力行編集とヒストリ置換 100%

勉強法の振り返り

勉強法は,公式テキストのオライリー本を出題率の高い章を重点的に繰り返し読みました.GW中に受験日を決めて勉強し始めたので網羅的に本を理解するより得点率の高いところを狙う戦略でした.出題の割合が高いのは3,4,5,8,10章なので結果的には取りこぼしたものもあったものの,割合高い分野を中心に勉強して合格できたので戦略としてよかったのかなと思います.

Pythonチュートリアル 第3版

Pythonチュートリアル 第3版

また,プログラム言語の試験なので如何に本に書いている Python コードを実践した かが鍵ですね.僕は試験に近づくにつれてコードを書く時間が少なくなっていったので受験を考えている方は受験日に向けて手を動かして臨むことオススメします.

模擬試験

模擬試験は受験せずに終わりました.合格しましたが受験してみたかったので後日受験してみます.

diver.diveintocode.jp

次に受験したい試験

今年の夏にデータ分析試験がリリースされるとのことなので受験してみたいと思っています.リリース情報は 公式サイト,Twitter,Facebookなどで公開されるそうなので要チェックです.

www.pythonic-exam.com

公式サイト

www.pythonic-exam.com

Twitter

twitter.com

Facebook

www.facebook.com

まとめ

Python3 エンジニア検定」を受験した結果と勉強したことの振り返りました.普段業務で Python を扱わない僕で 約20時間 ほど勉強時間に充てました.今年の夏にリリースされるデータ分析試験にも臨みたいので引き続き Python の勉強を続けていきます!

参考情報

受験に関して以下にまとめます.

AWS と Terraform の実践力を磨ける「Pragmatic Terraform on AWS」

タダです。

以前、サンプル版で読んだ「Pragmatic Terraform on AWS」の製品版を読了しました.読了後の感想を今回まとめます.なお、本書の概要や章立ては下記の記事に書いているので気になる方は覗いてみてください.

sadayoshi-tada.hatenablog.com

本書で構成できる AWS 環境

本書は 以下の Docker コンテナの Web サービス環境を構成しながら AWS と Terraform の実装方法を学べます.

f:id:sadayoshi_tada:20190505194201p:plain

また、登場するサービスを列挙すると以下の通りで、構成図からもわかるように AWS のマネージドサービスが幅広く利用されています.

  • VPC,Subnet,RouteTable,Security Groups,NATGateway
  • ALB
  • ACM
  • ECS(Fargate),ECS Scheduled Tasks
  • RDS(MySQL),ElastiCache(Redis)
  • S3
  • Route53
  • IAM,KMS
  • CodePipeline,CodeBuild,CodeDeply
  • SSM Parameter Store,Session Manager
  • Kinesis Firehose
  • CloudWatch Logs

読了後の所感

製品版を読んでみての所感をまとめます.

  • 本書の特徴が、AWS,Terrform のパラメーターを詳細に把握できていなくても読み易く、140ページほどを僕は3時間ほどで読めました.僕は Terraform を少し触ったことがある程度だったので、丁寧な解説のおかげで手を動かしつつスルスル読めました.

    • 5章から16章でAWS のサービスの設定パラメーターを解説後、Terraform での定義方法を細かく解説してくれているため、AWS サービスの理解と、サンプルコードをもとに Terraform での実装を実戦形式で学べます.
  • Terraform の設計、運用管理の情報が17章からまとまっていて、普段 CloudFormation を使っているため Terraform での設計思想や実例を知れて勉強になりました.

    • モジュールの構造化,Terraform のベストプラクティス,Terraform Module Repository への登録が解説されています.
    • 特にモジュールの構造化で大規模サービスになった際のコードの分割の考え方,チーム開発でのtfstateファイルの管理等実戦で生かせる情報が揃っています.
  • Terraform は国内事例も多く便利なため今すぐ導入したくなるかと思いますが、導入することが目的にならないよう本書のコードの設計・管理の章を踏まえて検討するのにも役立つと感じました.

関連資料

  • 手持ちの環境の Terraform のバージョンがv0.11でしたが、次期バージョンのv0.12も入れて試してみたいと思います.著者の@tmknom さんがv0.12での対応も解説してくださっており、本当に丁寧な対応に感謝感謝です.

nekopunch.hatenablog.com

まとめ

Pragmatic Terraform on AWS」読了後の所感をまとめました.2019年5月時点でAWS と Terraform の組合せを学ぶなら本書が最適です.今後v0.12も出てきますので本書を足掛かりに CloudFormation だけでなく Terraform も使えるよう力をつけていければと思います.