継続は力なり

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

【4日目】毎日勉強や

タダです。

Linuxコマンド

コマンドを連続実行するためのオプション幾つかあったけど調べたのでメモ

; (セミコロン) : CMDA;CMDB.CMDAが終了したら、CMDBが実行される。
&(アンパサント): CMDA&CMDB.バックグラウンドでCMDAを実行しつつCMDBを実行する。
&&(アンパサントアンパサント) : CMDA&&CMDB.CMDAが成功したらCMDBが実行される。
|(パイプ) :CMDA|CMDB.CMDAの結果を、CMDBに渡す。
||(パイプパイプ): CMDA||CMDB.CMDAが異常終了したら、CMDBが実行される。

参考

qiita.com

Amazon Linux2のパッケージ管理

Amazon Linux2のパッケージ管理として、「Amazon Linux Extras」というものが提供されてます

Extras は、安定したオペレーティングシステムで新しいバージョンのアプリケーションソフトウェアを利用可能にする Amazon Linux 2 のメカニズムで、2023 年 6 月 30 日までサポートされます。Extras は、OS の安定性を確保しつつ、最新のソフトウェアを利用できるようにするうえで役立ちます。例えば、5 年間サポートされる安定したオペレーティングシステムMariaDB の新しいバージョンをインストールすることができます。Extras の例には、Ansible 2.4.2、memcached 1.5、nginx 1.12、Postgresql 9.6、MariaDB 10.2、Go 1.9、Redis 4.0、R 3.4、Rust 1.22.1 などがあります。

Amazon Linux 2 に関するよくある質問

Amazon Linux の時はDockerなどはyumでいれられてたけど、Amazon Linux 2になってこのExtrasをパッケージ指定しないと入らないものもあるようです

$ sudo amazon-linux-extras install php7.2

参考

dev.classmethod.jp qiita.com

また明日

【3日目】毎日勉強や

タダです。

AWSCLIのBundle版インストール

CodeBuildにAWSCLIがないようなので、buildspec.ymlでインストールを実行する場合

- yum install -y unzip
- curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
- unzip awscli-bundle.zip
- ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

CodeBuildの環境変数

環境変数がデフォルトで以下の定義されている

よく使うのは、CODEBUILD_SRC_DIRですかね

  • AWS_DEFAULT_REGION: ビルドが実行されている AWS リージョン (例:us-east-1)。この環境変数は、AWS CLI で主に使用されます。
  • AWS_REGION: ビルドが実行されている AWS リージョン (例:us-east-1)。この環境変数は、AWS SDK で主に使用されます。
  • CODEBUILD_BUILD_ARN: ビルドの Amazon リソースネーム (ARN) (例:arn:aws:codebuild:region-id:account-ID:build/codebuild-demo-project:b1e6661e-e4f2-4156-9ab9-82a19EXAMPLE)。
  • CODEBUILD_BUILD_IMAGE: AWS CodeBuild ビルドイメージ識別子 (例:aws/codebuild/java:openjdk-8)。
  • CODEBUILD_BUILD_SUCCEEDING: 現在のビルドが成功かどうか。ビルドが失敗の場合は 0 に設定され、成功の場合は 1 に設定されます。
  • CODEBUILD_INITIATOR: ビルドを開始したエンティティ。AWS CodePipeline がビルドを開始した場合、これはパイプラインの名前です (例:codepipeline/my-demo-pipeline)。IAM ユーザーがビルドを開始した場合は、これはユーザーの名前です (例:MyUserName)。AWS CodeBuild の Jenkins プラグインがビルドを開始した場合、これは文字列 CodeBuild-Jenkins-Plugin です。
  • CODEBUILD_KMS_KEY_ID: AWS CodeBuild がビルド出力アーティファクトを暗号化するために使用している AWS KMS キーの識別子 (例:arn:aws:kms:region-id:account-ID:key/key-ID または alias/key-alias)。
  • CODEBUILD_RESOLVED_SOURCE_VERSION: AWS CodePipeline によって実行されるビルドの場合、ビルドするソースコードのコミット ID または Amazon S3 バージョン ID。この値は、パイプラインの関連するソースアクションが Amazon S3AWS CodeCommit、または GitHub リポジトリに基づいている場合にのみ使用できます。
  • CODEBUILD_SOURCE_REPO_URL: 入力アーティファクトまたはソースコードリポジトリの URL。Amazon S3 では、これは s3:// の後にバケット名と入力アーティファクトへのパスが続きます。AWS CodeCommit および GitHub の場合、これはリポジトリのクローン URL です。
  • CODEBUILD_SOURCE_VERSION: Amazon S3 の場合、入力アーティファクトに関連付けられたバージョン ID。AWS CodeCommit の場合、ビルドするソースコードのバージョンに関連付けられたコミット ID またはブランチ名。GitHub の場合、ビルドするソースコードのバージョンに関連付けられたコミット ID、ブランチ名、またはタグ名。
  • CODEBUILD_SRC_DIR: AWS CodeBuild がビルドに使用するディレクトリパス (例:/tmp/src123456789/src)。
  • HOME: この環境変数は常に /root に設定されます。

参考

docs.aws.amazon.com

Pythonのモジュール化(Wheelでの配布)

WheelでPythonをモジュール化

$ python setup.py bdist_wheel
$ ls ./dist
モジュール名-1.0-py3-none-any.whl

flake8

flake8には、以下のツールが統合されている

  • PyFlakes
  • pep8
  • Ned Batchelder’s McCabe scrips

参考

pypi.org

また明日

【2日目】毎日勉強や

タダです。

CodeBuild local

最近、CodeBuildを使うことが増えたのですが、毎回AWS環境でやるのも煩雑なんでCodeBuild localっていうものを使ってみます

メリット

  • buildspecファイルのテストをローカルでできる
  • コミット前のアプリケーションのテストとビルドができる
  • ローカル開発環境から迅速にエラーを特定し修正できる

CodeBuildのDockerイメージを作る

git clone https://github.com/aws/aws-codebuild-docker-images.git
cd aws-codebuild-docker-images
docker build -t aws/codebuild/java:openjdk-8 .

CodeBuild local Agnetのセットアップ

docker pull amazon/aws-codebuild-local:latest --disable-content-trust=false

ビルド対象のアプリケーションディレクトリにbuildspec.ymlを置いたら次のコマンドでビルド

docker run -it -v /var/run/docker.sock:/var/run/docker.sock -e "IMAGE_NAME=aws/codebuild/java:openjdk-8" -e "ARTIFACTS=/Users/tada/codebuild-local-artifacts/artifacts" -e "SOURCE=/Users/tada/sample-web-app" amazon/aws-codebuild-local

参考

aws.amazon.com

また明日

【1日目】毎日勉強や

タダです。

毎日何も勉強しない日なんてございません。

そんなわけで毎日学んだことを(雑に)アウトプットしていくシリーズを毎日やっていきます。書く内容は様々です。

それじゃあ行ってみましょう!

Docker

Dockerを起動するときのコマンド

× -> docker run -d -it hogehoge -p 8080:80
○ -> docker run -d -it -p 8080:80 hogehoge

イメージの後は引数が全てコンテナで実行するコマンドになってしまうのでイメージ名の前にオプションをつけること。

Python

Python実行環境のセットアップで、バージョン管理系を整えました@local 僕の環境のデフォルトは、zshなので、zsh系です

・anyenvインストール

git clone https://github.com/riywo/anyenv ~/.anyenv
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(anyenv init -)"' >> ~/.zshrc
exec $SHELL -l

・pyenv、pyenv-virtualenvインストール

anyenv install pyenv
exec $SHELL -l
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
exec $SHELL -l

通常、1台のOSで実行可能な言語のバージョンは一つだけだが、pyenvを使うことで1台のOSで複数のバージョンの管理ができるようになる

また、バージョンごとのライブラリを分離できるため、複数の開発プロジェクトを使える

anyenvは、envのインストールや設定を容易にする

pyenv-virtualenvはpyenvのプラグインで同じpythonバージョンで違う環境を作成するためのもの

参考

qiita.com

qiita.com

Git

自分の参照しているブランチを知るためのコマンド

git rev-parse --abbrev-ref HEAD 

また明日

Go合宿2018に参加してきた!

タダです。

みなさん、Golang書いてますか?

僕は、最近Golangを趣味で始めたのですが、CompassでGo合宿というイベントを見つけまして参加してきました。 今回は時系列でそのレポートをまとめていきます。

go-beginners.connpass.com

渋谷駅ハチ公前集合

土曜日渋谷ハチ公前に参加者の皆さんと集合して、笹川駅に向かって移動開始!

笹川駅到着

土善旅館のある、笹川駅に到着して、昼食へ f:id:sadayoshi_tada:20180707123755j:plain f:id:sadayoshi_tada:20180707124518j:plain

いよいよ土善旅館

昼食後、土善旅館さんの送迎バスで移動しました! f:id:sadayoshi_tada:20180708064602j:plain

開発部屋でかいー! プロジェクターでかいー!!と感動w f:id:sadayoshi_tada:20180707142058j:plain

そんなこんなで3~4人で1つの島を作って、それぞれ自己紹介を終えて開発スタート!

なお、旅館側とスタッフのみなさんが次のものを提供してくださいました。ほんとすごいし、ありがとうございます。

  • ディスプレイ
  • 電源タップ
  • 飲み物
  • 食べ物(写真撮れませんでしたが、お酒とお菓子、カップ麺が揃ってて徹夜の開発もこれでバッチリですね💓な感じありましたw)

予め、やることを考えてきた人もノープランな人もいましたが、僕はというと、ざっくりとしか考えていかなかったため、開発スタートが出遅れました。 これは反省点。

あと、定期的に『プロの乾杯屋さん』からの「進捗どうですか? 進捗出していきましょー! かんぱーい!!」と乾杯イベントがあり、場が和んだのを今でも覚えています🍻(乾杯ってすごい)

宴会!!!

集中していたらあっという間に時は過ぎるもので、宴会の時間となりました。 料理も魚のお造りや、肉、鯛飯が出てきたりと豪勢でした。 f:id:sadayoshi_tada:20180707192731j:plain

開発したり、DDD勉強会が突発開催されたり、飲んだり

宴会後は引き続き、開発したり、飲んだり、@pospomeさんによるDDD勉強会が開催されてたりと、合宿ぽい時間が過ぎていきます。

僕はというと、開発しようとしていたものが仕上がっていなかったため結局AM3:00くらいまでPCと向き合ってました。

最後はLT大会!

翌朝の11:00まで開発自体は終わり、ここから有志によるLT大会がスタート! 短時間の中で僕からするとすごい開発を仕上げていて驚いたり、笑わせてもらったりしました。

公開されている資料は↓です(順不同)。

あと、公開されているリポジトリ(順不同)・

github.com github.com github.com

最後に参加者による投票で、賞が授与されたりしました。自分もエントリーすればよかった。。

LT大会後に、旅館さんからおにぎりとデザートの差し入れ。。本当にいたれつくせりで恐縮しちゃうレベルです🙇 f:id:sadayoshi_tada:20180708123839j:plain f:id:sadayoshi_tada:20180708125623j:plain

旅館を出なきゃいない時間になってそれぞれの家路につきました。最後に写れませんでしたが、あの歩道橋で集合写真も撮ったりしてましたw

自分なりの振り返り

この記事の最後に自分なりの振り返りをしてみます。

  • 今回、僕はLambdaのソースコードをGoで書きました
    • CloudWatchのアラームをLambdaでSlackに通知させるようなものを作りました(イメージは↓みたいな) f:id:sadayoshi_tada:20180709220839p:plain

リポジトリはこちら(まだ改修します) github.com

  • 合宿中に学んだこととしては以下のようなことです
    • LambdaをGoで書くときに必要なこと(ハンドラーの使い方、イベントの操作、環境変数の使い方)
    • 構造体、ポインタの使い方と理解(ここに一番時間を使いました。。)
    • SNSのデータからSlackに投げるデータを選択するのに必要な処理
  • 合宿を踏まえて今後やっていきたいことは次のことです

なかなか開発が進まず悔しい気持ちが強かったので、Golangの開発する力をもったつけたい!、と思った貴重なイベントでした。 企画してくださったスタッフの皆さん、参加されたみなさん、ほんとうにありがとうございました!!