継続は力なり

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

【12日目】毎日勉強や

タダです。

日課

Python文法

  • 標準入力はinput()でやる
  • 条件分岐は、if、elif、else
  • 繰り返しでcontinueを使うと、continue以降の処理はスキップされる

100本ノック

  1. 「パトカー」+「タクシー」=「パタトクカシーー」 「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.
x = "パトカー"
y = "タクシー"
x = list(x)
y = list(y)
print(x[0] + y[0] + x[1] + y[1] + x[2] + y[2] + x[3] + y[3])
→ パタトクカシーー

Jenkins

Jenkinsのパイプラインは、一連の処理をまとめられるがパイプラインには2種類ある

  • declarative pipeline:シンプルな設定ができ、Scripted Pipelineの構文を使うこともできる。以下のようなpipelineで囲われた定義。
pipeline {
  agent  label:'has-docker', dockerfile: true
  environment {
    GIT_COMMITTER_NAME = "jenkins"
    GIT_COMMITTER_EMAIL = "jenkins@jenkins.io"
  }
  stages {
    stage("Build") {
      steps {
        sh 'mvn clean install -Dmaven.test.failure.ignore=true'
      }
    }
    stage("Archive"){
      steps {
        archive "*/target/**/*"
        junit '*/target/surefire-reports/*.xml'
      }
    }
  }
  post {
    always {
      deleteDir()
    }
    success {
      mail to:"me@example.com", subject:"SUCCESS: ${currentBuild.fullDisplayName}", body: "Yay, we passed."
    }
    failure {
      mail to:"me@example.com", subject:"FAILURE: ${currentBuild.fullDisplayName}", body: "Boo, we failed."
    }
  }
}
  • scripted pipeline : DSL形式で定義する。以下のようなnodeで囲われた定義。
withEnv(["GIT_COMMITTER_NAME = jenkins","GIT_COMMITTER_EMAIL = jenkins@jenkins.io"]) {
  node('has-docker') {
    try {
      checkout scm // checks out Dockerfile and source code
      def myImage = docker.build 'my-environment:snapshot'
      myImage.inside {
        stage('Build') {
          sh 'mvn clean install -Dmaven.test.failure.ignore=true'
        }
        stage('Archive') {
          archive "*/target/**/*"
          junit '*/target/surefire-reports/*.xml'
        }
      }
      if (currentBuild.result == null || currentBuild.result == 'SUCCESS') {
        mail to:"me@example.com", subject:"SUCCESS: ${currentBuild.fullDisplayName}", body: "Yay, we passed."
      }
    }
    catch (exc) {
      mail to:"me@example.com", subject:"FAILURE: ${currentBuild.fullDisplayName}", body: "Boo, we failed."
    }
    finally {
      deleteDir()
    }
  }
}

Jenkinsfileあれこれ

パラメータ付きビルドの設定を使うことで、似たようなジョブを複数作る必要がなくなる パラメータ化したもので処理を分けるなどを行うことができる

また明日

【11日目】毎日勉強や

タダです。

今日から 日課 という取り組みをやっていこうと思います。 日々学んだこととは別に自分に課した課題です。

日課

当面の日課はプログラミングの習慣化です。

  • Python文法
  • Python100本ノックを1日1問解く

この2つをやっていきます。

Python文法

今日は、リスト、辞書型、for、if、while・breakを学んだ。

  • リストは、他の言語で言うところの配列
  • 辞書型は、キーと値を設定する
  • forは、 for A in B: と記述する
  • whileは、 while 条件 :と記述する
  • breakは処理を抜けたい場合に記述する

100本ノック

0問目は過去に取り組んでいたので、ついでにやっちゃいます

  1. 文字列の逆順 文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.
x = "stressed"
print(x[::-1])
-> desserts
  1. 「パタトクカシーー」 「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.
x = "パタトクカシーー"
y = list(x)
print(y[0] + y[2] + y[4] + y[6])
-> パトカー

Jenkinsfileのあれこれ

Jenkinsfileを触ることが増えてきたので、そこで出てきた言葉などをまとめていきます。

トリガー

Jenkinsのジョブを自動で発火させるための方法として、WebhookとSCMポーリングがある

  • Webhookは、Webサービス(Githubなど)にJenkinsのURLを設定してPOSTリクエストを投げる仕組み。GithubへのプルリクやプッシュされたタイミングでJenkinsにPostされるなど。Push型通知
  • SCMは、Software Configuration Management(ソフトウェア構成管理)の略称で、GitやSVNなど。そんなSCMに対してJenkinsから定期的に問い合わせを行う。Pull型通知。

ステージ

Jenkinsが処理の塊として、ステージを定義する

stage('hoge') {
 // hogeステージの処理
}

また明日

【10日目】毎日勉強や

タダです。

だいぶ体調が復調してきました。あともう少し気を抜かずに直してきます。

Gitコマンドチートシート

Gitコマンドを使う機会が増えてきたんですが、都度ネットで調べているのでまとめていきます

コマンド 説明 利用例
config 初期設定のコマンド git config 設定する項目(sysytemはシステム全体、globalが該当ユーザーの全リポジトリ、localが該当リポジトリ)
gc リポジトリが使用するストレージ容量を減らす git gc
init ローカルでリポジトリを作る git initで.gitディレクトリが作られる
clone リモートリポジトリをローカルへクローンする git clone クローンするリポジトリURL
commit 変更点を保存する(git addしたあとに実行する) git commit -m "コミットメッセージ"
add リポジトリに新たにファイルを追加したり、変更を加えたファイルを指定する git add 追加変更したファイル/ git add -Aで一発追加
push 公開リポジトリに自分のリポジトリの内容を発信する git push origin プッシュ先のブランチ
branch ブランチ情報の表示と作成 git branchでブランチの情報を表示/git branch ブランチ名で作成
checkout ブランチの切り替えを行う git checkout ブランチ名/git checkout -bで作成と切り替えを一気にやる
pull 他のリポジトリの変更点をローカルリポジトリにマージする git pull 変更点の取り込み元リポジトリURL
fetch リモートリポジトリから最新情報をローカルリポジトリに反映する git fetch
reset 直前のコミット取り消し git reset
tag コミットにタグをつける git tag タグ名
status 変更されたファイルを表示する git status
diff ファイルに加えたれた変更点を表示 git diff 変更を確認したいファイル
mv ファイル名を変更する git mv 変更前のファイル名 変更後のファイル名
log コミットリレクを表示する git log
revert 作業ツリーを戻す git revert コミット名
stash 作業ツリーの状態を一時的に保管する git stash 保存名もしくはコメントなど
merge 作業ツリーに別のブランチの変更点を取り込む git merge 変更点の取り込み元ブランチ
rebase ブランチの派生元(上流)を変更する git rebase 派生元ブランチ

Git - Reference

Dockerコマンドチートシート

Dockerコマンドもちょいちょい使うようになってきたのでまとめていきます

コマンド 説明
pull Dockerイメージを取得する
run Dockerイメージからコンテナを作成する
exec Dockerコンテナ上のコマンドを実行する
push DockerイメージをDockerレジストリに送る
images Dockerホスト上のDockerイメージの一覧を表示する
build DockerイメージをDockerfileに基づいて作成する
start 停止中のDockerコンテナを起動する
stop 起動中のDockerコンテナを停止する
rm 停止中のDockerコンテナを削除する
rmi Dockerホスト上のDockerイメージを削除する
kill 起動中のDockerコンテナを強制停止する
ps Dockerホスト上のDockerコンテナ一覧を表示する
login Dockerレジストリにログインする
logout Dockerレジストリからログアウトする
commit Dockerコンテナの変更状態から新しいDockerイメージを作成する
cp Dockerコンテナとローカルファイルシステム間のファイル/ディレクトリコピーを行う
logs Dokcerコンテナのログを取得する
save Dockerイメージの内容をtarアーカイブとして出力する
デフォルトでは標準出力される
load tarアーカイブからDockerイメージを読み込む
tag 既存のDockerイメージから新しいDockerイメージ名を作成する
history Dockerイメージの生成履歴を表示する

また明日

サーバーレスシングルページアプリケーション 8章

タダです。

今回はサーバーレスシングルページアプリケーション8章で勉強したことをまとめていきます。 www.oreilly.co.jp

章立ては以下のようになっています。

  • 1章 シンプルにはじめる
  • 2章 ハッシュイベントによるビューのルーティング
  • 3章 シングルページアプリケーションに必要なもの
  • 4章 Amazon CognitoによるIdentity as a Service
  • 5章 DynamoDBにデータを格納する
  • 6章 Lambdaを使って(マイクロ)サービスを作る
  • 7章 サーバーレスのセキュリティ
  • 8章 スケールアップする

8章のまとめ

  • Webサービスの監視は別のサービスを使えるが、AWSの監視はCloudWatchを使う
    • CloudWatchのアラート送信先には2つの選択肢があり、SNSとAutoScalingポリシーがある
    • CloudWatchのアラームは請求情報のアラートも通知可能
  • S3のログについて
    • S3のログ機能は、バッチで配信されるため、リクエストのログが数時間かかることもあるし、AWSはログが完全であることを保証していない(ベストエフォート)
    • S3のログを解析する方法の一つにローカルにダウンロードする方法がある
  • キャッシュによってコストとロード時間を削減し、ユーザーの直帰率を低減させる
  • クラウドのコスト
    • 今回のSPAの場合
      • S3のロードにかかるコスト
      • DynamoDBのスループット、データ転送コスト、ストレージコス
      • Lambdaのコスト
      • Coginitoは50,000ユーザーまで無料

振り返り

  • AWSのサーバーレスサービスを使ってSPAを構成して、普段触らない領域を経験できた
    • 合わせて普段考えない、テスト駆動の片鱗は味わえた
  • 趣味の一つとして自分のサービスを作ってみて、そこでサーバーレスのサービスを組み合わせたアーキテクチャにして、サービスの使い込みをしていきたい
  • 次回からはPythonのプログラミングを学ぶような習慣をつけていきます
    • 特に書籍は使わず次のサービスを使っていく予定です(まずは一ヶ月で文法を学習しきっていきたいです。Python検定を受けてみようかなと思っています。)
    • ドットインストール
    • Progate
    • 100本ノック
    • Aidemy
      • ML系に興味があって勉強したいので副教材でPythonの本やML系の本を入れて勉強していきます

サーバーレスシングルページアプリケーション 7章

タダです。

今回はサーバーレスシングルページアプリケーション7章で勉強したことをまとめていきます。 www.oreilly.co.jp

章立ては以下のようになっています。

  • 1章 シンプルにはじめる
  • 2章 ハッシュイベントによるビューのルーティング
  • 3章 シングルページアプリケーションに必要なもの
  • 4章 Amazon CognitoによるIdentity as a Service
  • 5章 DynamoDBにデータを格納する
  • 6章 Lambdaを使って(マイクロ)サービスを作る
  • 7章 サーバーレスのセキュリティ
  • 8章 スケールアップする

7章のまとめ

  • AWSアカウントのセキュリティの基本
    • すべてのルートアクセスキーを無効にする
    • プロファイルを使ってユーザーを管理する
    • AWS認証情報をセキュアにする
    • 多要素認証をセットアップする
  • サーバーレスSPAが受ける攻撃タイプ
  • TLSSSL標準とともに、セキュアで暗号化されたチャンネルをネゴシエートする方法を提供する
  • DoS攻撃に対しての方法として、CloudFrontとS3での静的コンテンツを提供すること
    • Cognito、DynamoDB、Lambdaはどんなタイプの攻撃が行われそうかを述べるのは困難
      • GoogleなどのIDPで使い捨てユーザーをつかってDynamoDBに書き込む攻撃はありそう
    • 攻撃を検出するためにCloudWatchサービスを利用して異常な使用パターンを知らせるアラームを設定が可能
    • 攻撃検出後は、AWSサービスへアクセスか許可を与えるIAMポリシーのCondition条項を変更すること
  • サーバーレスの一般的な攻撃について見たので、他のトピックとして署名付きURLを使うことやDDoSの防御についても合わせて確認する

次は8章でスケールアップについて学びます。