追記

雑記帳


2016-12-21 (Wed) [長年日記]

[git] stageしてcommitする前に消してしまったファイルを復活させる

作業中に、誤って必要なファイルを消してしまった。不要なファイルをgit rmしようとして、ついうっかり別の必要なファイルをgit rmしてしまった。しかも、そのファイルは新規の未コミットで、git addを使ってstageした状態のファイルだった。実際に削除する前に警告が出たものの、気がつかずに消してしまった後に気がついて、慌ててしまった。

しかし、幸いgit addしていたため、objectとしては残っているはずと思って、探そうと思った。そして見つけたのがこれ。

利用したのは、resolvedされている長い方の回答ではなく、もう一つの方。下記のようなスクリプトが書いてある。

for b in $(git fsck --lost-found | grep blob | awk '{print $3}'); do git cat-file -p $b | grep -q ${UNIQUE_CODE} && echo $b; done

これは、git fcsk --lost-foundを使って、commitからは辿れないオブジェクトを探す。それらをgit cat-fileして、UNIQUE_CODE に指定した、探しているコードに含まれているはずのテキストをgrepするというもの。

このコードを使って、消してしまったobjectのhash値が得られるので、git cat-file -p <hash> を実行して、中身を取り出すことができる。これで取り戻すことができた。

こういうことができるのが、gitのいいところである。


2016-12-15 (Thu) [長年日記]

[AWS] CloudTrail用のS3 Bucket Policyの設定(全リージョン対応版)

以前に、CloudTrailのログを受け取るのに、S3 Bucket Policyでリージョンごとに設定を追加する方法を書いた。

Central regionやLondon regionが追加されたということで、また更新しないといけないかと思ったら、いつの間にか、今後登場するものも含めて、全てのリージョンに対応する方法が案内されていた。

つまり、下記のようなPolicyを適用すれば良いようだ。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSCloudTrailAclCheck20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::myBucketName"
        },
        {
            "Sid": "AWSCloudTrailWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::myBucketName/[optional prefix]/AWSLogs/myAccountID/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
               }
            }
        }
    ]
}

myBucketName, optional prefix, myAccountID を書き換える。複数のアカウントから受ける場合は、myAccountIDはワイルドカード '*' にできる。


2016-12-06 (Tue) [長年日記]

[AWS] Lambdaで自身の実行されているリージョンを取得する

nodejsのAWS Lambdaで、Functionが実行されているリージョンが知りたいと思ったので調べてみた。

どうやら、直接的にリージョンを取得する方法はなさそうだったが、contextにinvokedFunctionArnがあったので、そこから取得できた。ARNが取れればなんとかなるパターン。

var region = context.invokedFunctionArn.match(/arn:aws:lambda:([^:]*):/)[1];

【追記】あとで教えてもらったところによると、環境変数として取得できるようだ。

process.env.AWS_REGION

しかし、AWSのドキュメントを探しても記載がなかったので、自分は見つけられなかったな。