AWS App Runner に!VPC との接続機能がやってきました!!
📣『VPC 内の RDBMS 使いたいから App Runner じゃなく ECS/Fargate 使ってますわ〜』という皆さまお待たせしました!!
本日から既存の App Runner サービスを含め、直接 VPC 内リソースにアクセスできるようになります!🎉🎉🎉https://t.co/SGDTD1kPCb 1/4 pic.twitter.com/tbVt47ORSI
— Tori Hara (@toricls) February 9, 2022 Amazon RDSやAmazon ElastiCacheのような一部のサービスは VPCからの利用を前提としています。 VPCを利用することによりセキュリティーを担保しているのですが、 AWS App Runner のようなマネージドサービスと連携が難しいという欠点がありました。
しかし、今回の VPC connector サポートにより簡単に連携ができるようになりました。 というわけで、お試しで MySQL (on Amazon RDS) との連携を試してみました。
使う言語はもちろんPerl!
作るのはやっぱりアクセスカウンター!!
アクセスカウンターを用意する MySQL を使ったアクセスカウンターを知らないのでテキトーに作ります。 ファイルを直接操作するよりはずっと簡単ですね。 AWS App Runner に Perl をデプロイしてみた のときと同様、 ソースコードは shogo82148/perl-on-aws-app-runner に置いてあります。
こんな感じになりました。
# app.psgi use DBI; use 5.
Apple M1 が登場してはや一年。 昨年末にはその強化版の M1 Pro / M1 Max が発表され、 Mac Book Pro / Air のラインナップも全て M1 に置き換わってしまいました。 使用しているツールが未対応だったこともあり、弊社ではインテル版を使い続けていたのですが、 今ではツールの M1 対応も進んできたので、徐々にM1への移行を進めています。
僕の手元にもようやく M1 Mac Book が回ってきたので、 何周か遅れている気はしますが、インテルからM1への移行やってみたよ(2022年1月版)ということで記録を残しておきます。
Homebrew 公式ドキュメントのインストール手順 に従って以下のコマンドを実行すればOKです。 インテルもM1も特に変わりはありません。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" ただしドキュメントの冒頭に記載がある通り、インテルとM1とではインストール先が異なります。
This script installs Homebrew to its preferred prefix (/usr/local for macOS Intel, /opt/homebrew for Apple Silicon and /home/linuxbrew/.linuxbrew for Linux) so that you don’t need sudo when you brew install.
どうやら /usr/local への書き込みに root 権限が必要になったので、 /opt/homebrew へ移動したようです(要出典)。 /usr/local/bin にはデフォルトでパスが通ってますが、/opt/homebrew/bin には通っていないので、明示的に追加する必要があります。
dependabot を使って 依存ライブラリの更新に追従しているのですが、 API のようなデプロイが必要なものは当然ながらデプロイしないと意味がありません。 今までは手元でデプロイしてきましたが、いい加減面倒になったので GitHub Actions を使った自動化をしてみました。
とりあえずお試しで shogo82148/holidays-jp にワークフローを設定してみました。 AWS SAM を使った API で、 データーベースや外部サービスとの連携のないシンプルなものです。 API 自体の使い方はこちらをどうぞ。
祝日 API を公開しました 単純にデプロイした場合の問題点 GitHub Actions の環境にはすでに AWS CLI, AWS SAM CLI, Go 等々ビルドに必要なものはすでにインストールされています。 あとは 「適切な権限を設定」 すればデプロイ自体は直ぐにできます。 ただまあ、この「適切な権限を設定」が一番の難所なので今まで二の足を踏んでいたわけです。
AWS SAM で作成した API は AWS Lambda によって実行されるのですが、 Lambda 関数に適切な権限を渡すために IAM Role を作成する必要があります。 つまり SAM アプリケーションのデプロイには「IAM を操作する権限」というかなり強力な権限を GitHub Actions に渡さなければなりません。
例えば GitHub Actions からデプロイ用 IAM ユーザーのアクセスキーが漏れたとしましょう。 IAM ユーザー自体の権限を最小限に絞っていたとしても、アクセスキーを入手した人は「IAM を操作する権限」を使って「AWS アカウントのすべての操作が可能な管理者ユーザー」を作ることができてしまいます。 いわゆる 権限昇格の脆弱性 です。 「管理者ユーザー」さえ作ってしまえば、EC2 のインスタンスを大量にたてて仮想通貨のマイニングをしたり、S3 から情報を抜き取ったりと、デプロイとは無関係のことも何でもできてしまいます。
この記事は、Perl Advent Calendar 2021 の穴埋め用の予備記事です。 当日まで担当者が決まらない日が何日もあってドキドキしましたが、いやー、なんとか埋まりましたね。 記事を投稿してくださった皆様ありがとうございました。
さて、今年は万が一枠が埋まらなかった場合に備えて下準備をしておきました。
Perl 5.34.0 の try-catch を触ってみる Perl 5.35.4 の defer を先取り Perl 5.35.5 の iterating over multiple values at a time を先取り Perl の文字列用ビット操作演算子を使ってみる この辺の記事たちですね。 カレンダーが埋まる見込みが立ったので放置していたのですが、実は調査だけしていたネタがひとつ残っています。 2022年のネタにしても良いんですが、どうせその頃には忘れているので今ここで供養してしまいましょう。
というわけで、今回触ってみたのは fc 関数 です。
特に断りのない限り 2021-12-24 現在の最新安定版 Perl 5.34.0 で動作確認をしています。
Case-Folding fc 関数 は Case-Folding を行う関数です。 そもそも Case-Folding って何?って話なんですが、日本語に対応する概念が存在しないので和訳が難しい・・・。 大雑把にいうと 「大文字・小文字の正規化」 をおこなう関数です。
例えばこのブログから “Case-Folding” という文字列を検索したくなったとしましょう。 表記ゆれがあるかもしれないので、大文字と小文字の違いは無視したい、 つまり “case-folding” や “CASE-FOLDING” も対象にしたいということはよくあると思います。
こんなときこそ fc 関数の出番です。 fc 関数を使うには feature プラグマで明示的に有効化が必要です。
以前 Bash と PowerShell の Polyglot を書いたことがあったんですが、 「そういえば、どこにもメモってないな〜」と思い出したので、記録として残しておきます。
背景・目的 GitHub Actions には run というステップがあります。 任意のシェルスクリプトをかける便利なステップなんですが、 マトリックスビルドでマルチプラットフォームなワークフローを書いていると罠があります。
例えば以下のワークフローは 「Hello GitHub Actions!」とログに表示するだけの簡単なものです。
on: push: pull_request: jobs: job: strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - name: Ubuntu, macOS, Windows で実行する # shell: bash # Ubuntu, macOS でのデフォルト # shell: pwsh # Windows でのデフォルト run: | echo "Hello GitHub Actions!" コメントに書いたとおり Ubuntu, macOS では bash、Windows では PowerShell Core と デフォルトのシェルが環境によって異なります。 bash にも PowerShell にも echo コマンドが存在するので、この例はなぜか動いてしまうのですが、 もっと複雑な処理ではこうも行きません。
この記事は、Perl Advent Calendar 2021 の24日目の記事です。 23日目は @hitode909 で「リポジトリ内のソースコードを機械的にリファクタリングし続けるスクリプトを作る」でした。
今日はちょっと前から使えるようになってたけど滅多にお世話になることのない、「文字列用ビット操作演算子」を触ってみたというお話です。
特に断りのない限り 2021-12-24 現在の最新安定版 Perl 5.34.0 で動作確認をしています。
旧来のビット演算子 Perl の多くの演算子には「数値用」と「文字列用」があります。 例えば比較演算子であれば ==, != は数値用、 eq, ne は文字列用といった具合です。
しかし、ビット操作用の演算子だけには、なぜかその区別がなかったのです。 以下は perlop Bitwise String Operators から引っ張ってきた例です。 | は論理和を求める演算子ですが、両辺の型に応じて結果が変わります。
use warnings; use strict; use feature qw/say/; say 150 | 105; # = 255 (0x96 | 0x69 = 0xFF) say '150' | 105; # = 255 say 150 | '105'; # = 255 say '150' | '105'; # = 文字列の '155' (ASCII) 結果:
Perl Advent Calendar 2021 の途中ですが、ここで臨時ニュースです。
AWSジャカルタリージョン(ap-southeast-3) が利用可能になったので、 それに併せて AWS::Lambda Perl support for AWS Lambda Custom Runtime も公開しました。
SHOGO/AWS-Lambda-0.0.34/Changes 以下のランタイムが利用可能です。
arn:aws:lambda:ap-southeast-3:445285296882:layer:perl-5-34-runtime-al2-x86_64:1 arn:aws:lambda:ap-southeast-3:445285296882:layer:perl-5-32-runtime-al2-x86_64:1 Paws はこちら。
arn:aws:lambda:ap-southeast-3:445285296882:layer:perl-5-34-paws-al2-x86_64:1 arn:aws:lambda:ap-southeast-3:445285296882:layer:perl-5-32-paws-al2-x86_64:1 Arm64 アーキテクチャについては未対応のようなので、AWS側の対応が終わり次第追って追加します。
以上、臨時ニュースでした。
引き続き Perl Advent Calendar 2021 をお楽しみください。 まだカレンダーに若干の空きがあります。ブログ記事の投稿も大歓迎です!
参考 Now Open – AWS Asia Pacific (Jakarta) Region AWS::Lambda
この記事は、Perl Advent Calendar 2021 の11日目の記事です。 10日目は @shogo82148 で「Perl 5.35.4 の defer を先取り」でした。
Perl 5.35.5 から利用可能になった iterating over multiple values at a time を試してみたお話です。
この構文は安定版にはまだ取り込まれていません。 特に断りのない限り 2021-12-11 現在の最新開発版 Perl 5.35.6 で動作確認をしています。
まずは Perl 5.35.6 をビルドする Perl 5.35.6 は開発版なのでビルド済みのバイナリは配布されていません。 しかし plenv を使っていれば特に難しいことはありません。 注意点は開発版の警告を抑制するために -Dusedevel オプションをしていることくらいです。
plenv install 5.35.6 -Dusedevel plenv local 5.35.6 ハッシュのキーとバリューのペアの一覧を出力する Perl7関連で色々とゴタゴタがあった 影響で、 Perlの今後の機能拡張は RFC(Requests For Comments) PPC(Proposed Perl Changes) の形式を取っていく事になりました(2024-06-18修正、RFCからPPCへ名前が変更されました) この機能はそのRFCの記念すべき(?)第一号です!
Multiple-alias syntax for foreach さて、プログラムを書いているとハッシュ(連想配列)の全要素に対して何か操作をしたいということは頻繁にあると思います。 これまで Perl には専用の構文はなく、以下のように while 文と each を組み合わせて書く必要がありました。
この記事は、フラー株式会社 Advent Calendar 2021 の11日目の記事です。 10日目は @nobux42 で「再読:リファクタリング・ウェットウェア」でした。
もう一ヶ月前になりますが、AWS から ClockBound という時間を扱うとても 地味な 有益なソフトウェアがリリースされました。
Amazon Time Sync Service now makes it easier to generate and compare timestamps 地味過ぎてネタかぶりしなさそうなので 時間は現代の情報通信の基盤なので、しっかりと検証していきましょう! 日本ではNICTの 時空標準研究室 が標準時を定めています。 名前からしてかっこいい。
ClockBound とは 一言でいうとGoogleの TrueTime のAWS版です。 TrueTime は Google が自社のサーバーセンターに設置している非常に正確な時計です。 Google が提供しているリレーショナルデータベースである Cloud Spanner は、 リージョンをまたいだ一貫性を保証するために TrueTime から生成されたタイムスタンプを利用しています。
ようするに ClockBound を使えば、 AWSのインフラ上に Google Cloud Spanner Clone を構築できる!(?)、というわけですね。 すごい!
ClockBoundD のインストール なんかすごそうなことがわかったので、とりあえず動かしてみましょう。
ClockBound はタイムスタンプを提供するデーモン「ClockBoundD」と、ClockBoundD からタイムスタンプを取得するためのライブラリ「ClockBoundC」に分かれています。 タイムスタンプの提供元がないと始まらないので、まずは ClockBoundD をインストールしていきましょう。
現時点(2021-12-11現在)ではビルド済みのバイナリは提供されていないようなので、ソースコードからビルドします。 READMEの手順にしたがってやっていきます。
この記事は、Perl Advent Calendar 2021 の10日目の記事です。 9日目は @shogo82148 で「Perl 5.34.0 の try-catch を触ってみる」でした。
アドベントカレンダー25日もあると疲れてくるので、今日もかる~く行きましょう。 Perl 5.35.4 から利用可能になった defer 構文を触ってみたというお話です。
defer 構文は安定版にはまだ取り込まれていません。 特に断りのない限り 2021-12-10 現在の最新開発版 Perl 5.35.6 で動作確認をしています。
まずは Perl 5.35.6 をビルドする Perl 5.35.6 は開発版なのでビルド済みのバイナリは配布されていません。 しかし plenv を使っていれば特に難しいことはありません。 注意点は開発版の警告を抑制するために -Dusedevel オプションをしていることくらいです。
plenv install 5.35.6 -Dusedevel plenv local 5.35.6 defer を使ってみる 使い方はいつものように use feature プラグマで有効化し、 defer BLOCK とするだけ。
use strict; use warnings; use feature 'say'; use feature 'defer'; { say "This happens first"; defer { say "This happens last"; } say "And this happens inbetween"; } 1; 出力: