[Hyperledger Fabric] Amazon Managed Blockchain使ってみる

#概要
Amazon Managed Blockchainを使ってHyperledger Fabricのネットワークをデプロイしてみる

#料金
ここをみると予算が組める
https://aws.amazon.com/jp/managed-blockchain/pricing/

#ネットワークの作成
https://aws.amazon.com/jp/blogs/news/new-amazon-managed-blockchain-create-manage-scalable-blockchain-networks/

上の記事の手順にしたがってネットワークの作成, メンバーの追加, VPCエンドポイントの作成を行います.

```Create a Network```を押します
<img width="1064" alt="スクリーンショット 2019-06-12 17.28.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/7b609ec8-2a69-f48b-f8a0-10a907525845.png">

<img width="822" alt="スクリーンショット 2019-06-12 17.28.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/e6a5f08e-387f-ba39-23d6-4a3f69243fa2.png">

<img width="815" alt="スクリーンショット 2019-06-12 17.29.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/9382b7c2-9575-c216-3111-6992ebdc1e3b.png">

以上のように入力して```Next```を押します

<img width="793" alt="スクリーンショット 2019-06-12 17.32.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/9126f2a2-2866-0ba5-9bca-d22a09eee7e5.png">
<img width="778" alt="スクリーンショット 2019-06-12 17.33.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/7bedda6f-d194-2903-2c42-e1cc8050eeb7.png">

最初のメンバーとCAの管理者, パスワードを入力して```Next```
管理者の名前とパスワードはメモしておきましょう

<img width="811" alt="スクリーンショット 2019-06-12 17.33.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/d1dac6b8-46a4-6585-ed4b-1b687338790e.png">

確認して```Create network and member```を押します

<img width="1107" alt="スクリーンショット 2019-06-12 17.39.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/86db1937-c875-e119-583d-7390a7238fdf.png">

Statusが```Active```になるまで待ちます

#VPCエンドポイントの作成
###インターフェイスVPCエンドポイント（AWS PrivateLink）の作成

メンバー用にインターフェイスVPCエンドポイントを作成します。これによりHyperledger Fabricクライアントとして使用するEC2インスタンスがAmazon Managed Blockchainがメンバーおよびネットワークリソースに対して公開するHyperledger Fabricエンドポイントと対話することができます。

Detailsの```Create VPC endpoint```を押します
簡単化のためにここではAmazon Managed Blockchainのコンソールから作成します
<img width="649" alt="スクリーンショット 2019-06-13 13.41.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/2eba7e3c-6bd6-5e76-c621-7539f4a479f8.png">


ここで使うVPCとセキュリティグループはメモしておきましょう

#Amazon EC2インスタンスを作成してHyperledger Fabric Clientをセットアップする

###EC2インスタンスの作成
EC2インスタンスは次の要件を満たすようにします
・上で作成したVPCエンドポイントと同じセキュリティグループを使用する
・セキュリティグループのメンバー間の全てのインバウンドトラフィックとアウトバウンドトラフィックを許可する
・SSHを使用して接続できるようにする

1. https://console.aws.amazon.com/ec2/   をクリックします
2. ネットワーク&セキュリティのキーペアをクリックします
3. キーペアの作成をクリックします(ここで作成するキーペアはEC2インスタンスと同じリージョンにしましょう)
4. 作成された.pemファイルは~/.sshディレクトリに移動しておきましょう
5. EC2ダッシュボードに戻ってインスタンスの作成をクリックします

<img width="1415" alt="スクリーンショット 2019-06-13 14.02.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/f412d8ed-ad2c-41f6-a9a1-f75e5099f29e.png">
一番上のを選択

<img width="1440" alt="スクリーンショット 2019-06-13 14.02.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/2279f52b-aa80-990a-5c7e-9e376639de66.png">
t2.microを選択

<img width="1428" alt="スクリーンショット 2019-06-13 14.08.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/c4125b51-fa49-92b0-3aa0-c71faf93e629.png">
セキュリティグループの編集をクリック

<img width="1421" alt="スクリーンショット 2019-06-13 14.11.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/72be20e9-e343-e7a0-3ee9-1b81169fa2bb.png">

VPCエンドポイントと同じセキュリティグループを選んで確認と作成をクリック
そして起動します

<img width="698" alt="スクリーンショット 2019-06-13 14.13.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/7fa79571-9ae0-3f86-5e20-fc50fd1541de.png">

先程作成したキーペアを選択し、インスタンスを作成しましょう

インスタンが作成できたらSSH接続します、が、セキュリティグループを編集します

セキュリティグループをクリックし、インバウンドタブを選択、編集をクリックし以下のように編集します

<img width="1162" alt="スクリーンショット 2019-06-13 16.50.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/07ecb3af-351d-5095-4411-26e8127c910e.png">



これでSSH接続できるようになったので接続しましょう

```
$ ssh -i ~/.ssh/<pem file> ec2-user@<パブリックDNS>
```

###パッケージのインストール

```
[ec2-user@ip-hoge ~]$ sudo yum update -y
[ec2-user@ip-hoge ~]$ sudo yum install -y telnet
[ec2-user@ip-hoge ~]$ sudo yum -y install emacs
[ec2-user@ip-hoge ~]$ sudo yum install -y docker
[ec2-user@ip-hoge ~]$ sudo service docker start
[ec2-user@ip-hoge ~]$ sudo usermod -a -G docker ec2-user
```

usermodコマンドを有効にするためにログアウトして再度ログインします

Docker Composeをインストールします

```
[ec2-user@ip-hoge ~]$ sudo curl -L \
https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname \
-s`-`uname -m` -o /usr/local/bin/docker-compose 
[ec2-user@ip-hoge ~]$ sudo chmod a+x /usr/local/bin/docker-compose
[ec2-user@ip-hoge ~]$ sudo yum install libtool -y
```
golangをインストールします

```
[ec2-user@ip-hoge ~]$ wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
[ec2-user@ip-hoge ~]$ tar -xzf go1.10.3.linux-amd64.tar.gz
[ec2-user@ip-hoge ~]$ sudo mv go /usr/local
[ec2-user@ip-hoge ~]$ sudo yum install libtool-ltdl-devel -y
[ec2-user@ip-hoge ~]$ sudo yum install git -y
```

```
[ec2-user@ip-hoge ~]$ vim ~/.bash_profile
```

bash_profileは以下のように編集します

```
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin

# GOROOT is the location where Go package is installed on your system
export GOROOT=/usr/local/go

# GOPATH is the location of your work directory
export GOPATH=$HOME/go

# Update PATH so that you can access the go binary system wide
export PATH=$GOROOT/bin:$PATH
export PATH=$PATH:/home/ec2-user/go/src/github.com/hyperledger/fabric-ca/bin
```

更新したら変更を適用します

```
[ec2-user@ip-hoge ~]$ source ~/.bash_profile 
```

正しいバージョンがインストールされているか確認しましょう
・Docker - 17.06.2-ce以降
・Docker-compose –　1.14.0以降
・Go 1.10.x

```
#Dockerバージョン確認
[ec2-user@ip-hoge ~]$ sudo docker version
#Docker Composeバージョン確認
[ec2-user@ip-hoge ~]$ sudo /usr/local/bin/docker-compose version
#goのバージョン確認
[ec2-user@ip-hoge ~]$ go version
```

###Hyperledger Fabric CAクライアントを設定する
この手順では[VPCエンドポイントの作成]で作成したVPCエンドポイントを使用してHyperledger Fabric CAに接続できることを確認します。その後、Hyperledger Fabric CAクライアントをインストールします。

まずaws cliをアップデートします

```
[ec2-user@ip-hoge ~]$ sudo pip install awscli --upgrade
```

[参考]sudo pipができなかったのでpipをインストールした後に私はこれらを実行しました

```
[ec2-user@ip-hoge ~]$ pip install -U pip
[ec2-user@ip-hoge ~]$ sudo yum install python-pip
```
Hyperledger Fabric CAへの接続を確認するにはCAエンドポイントが必要です。次のようにしてCAエンドポイントを取得します。```--network-id```と```--menber-id```を[ネットワークの作成]で作った自分のものに置き換えます。

```
[ec2-user@ip-hoge ~]$ aws managedblockchain get-member \
--network-id n-BGGOTBDZBFGGJMXLFOQXBFJYRU \
--member-id m-PF4J2E3DLZBQBNPDLFGH552ZJA
```
こんな感じで返ってきます

```
{
    "Member": {
        "NetworkId": "n-BGGOTBDZBFGGJMXLFOQXBFJYRU",
        "Status": "AVAILABLE",
        "Description": "First Member",
        "FrameworkAttributes": {
            "Fabric": {
                "AdminUsername": "root",
                "CaEndpoint": "ca.m-pf4j2e3dlzbqbnpdlfgh552zja.n-bggotbdzbfggjmxlfoqxbfjyru.managedblockchain.us-east-1.amazonaws.com:30002"
            }
        },
        "CreationDate": "2019-06-12T08:38:42.244Z",
        "Id": "m-PF4J2E3DLZBQBNPDLFGH552ZJA",
        "Name": "melon"
    }
}
```
エンドポイントが解決されたことを確認します

```
[ec2-user@ip-hoge ~]$ curl https://CAEndpoint/cainfo -k
```

こんな感じで返ってきます

```
{"result":{"CAName":"m-PF4J2E3DLZBQBNPDLFGH552ZJA","CAChain":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNwVENDQWt1Z0F3SUJBZ0lVRXpUYnIrS3.....
```
Hyperledger Fabric CAに接続できることを確認したので、次のコマンドを実行してCAクライアントを構成します

```
[ec2-user@ip-hoge ~]$ git clone https://github.com/hyperledger/fabric-ca.git
[ec2-user@ip-hoge ~]$ cd /home/ec2-user/go/src/github.com/hyperledger/fabric-ca
[ec2-user@ip-hoge ~]$ git fetch
[ec2-user@ip-hoge ~]$ git checkout release-1.2
[ec2-user@ip-hoge ~]$ make fabric-ca-client
```

###サンプルレポジトリを複製する

```
[ec2-user@ip-hoge ~]$ cd /home/ec2-user
[ec2-user@ip-hoge ~]$ git clone https://github.com/hyperledger/fabric-samples.git
```

###Hyperledger Fabric CLIを起動するためのDocker Composeの設定と実行

```
[ec2-user@ip-hoge ~]$ touch docker-compose-cli.yaml
[ec2-user@ip-hoge ~]$ vim docker-compose-cli.yaml
```
以下のように編集します

```
version: '2'
services:
  cli:
    container_name: cli
    image: hyperledger/fabric-tools:1.2.0
    tty: true
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_LOGGING_LEVEL=info # Set logging level to debug for more verbose logging
      - CORE_PEER_ID=cli
      - CORE_CHAINCODE_KEEPALIVE=10
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - /home/ec2-user/fabric-samples/chaincode:/opt/gopath/src/github.com/
        - /home/ec2-user:/opt/home
```
次のコマンドを実行してHyperledger Fabric peer CLIコンテナを起動します

```
[ec2-user@ip-hoge ~]$ docker-compose -f docker-compose-cli.yaml up -d
```

#管理ユーザーを登録する
証明書を使用して、メンバーの認証局(CA)に対する管理権限をもつユーザーを登録する。
###証明書ファイルの作成
次のコマンドで```managedblockchain-tls-chain.pem```を```/home/ec2-user```にコピーします

```
[ec2-user@ip-hoge ~]$ aws s3 cp s3://us-east-1.managedblockchain/etc/managedblockchain-tls-chain.pem  /home/ec2-user/managedblockchain-tls-chain.pem
```
正しくコピーされたことをテストします

```
[ec2-user@ip-hoge ~]$ openssl x509 -noout -text -in /home/ec2-user/managedblockchain-tls-chain.pem
```

###管理ユーザーを作成する
さっきも実行したこのコマンドを実行してCaEndpointを取得します
```--network-id```と```--member-id```は自分のものに置き換えてください

```
[ec2-user@ip-hoge ~]$ aws managedblockchain get-member \
--network-id n-BGGOTBDZBFGGJMXLFOQXBFJYRU \
--member-id m-PF4J2E3DLZBQBNPDLFGH552ZJA
```
CAEndpoint、管理者の名前とパスワード、および証明書ファイルを使用して管理者メンバーを登録します

```
[ec2-user@ip-hoge ~]$ fabric-ca-client enroll \
-u https://AdminUsername:AdminPassword@SampleCAEndpointAndPort \
--tls.certfiles /home/ec2-user/managedblockchain-tls-chain.pem -M /home/ec2-user/admin-msp
```

こんな感じで返ってきます

```
2019/06/13 09:02:06 [INFO] Created a default configuration file at /home/ec2-user/.fabric-ca-client/fabric-ca-client-config.yaml
2019/06/13 09:02:06 [INFO] TLS Enabled
2019/06/13 09:02:06 [INFO] generating key: &{A:ecdsa S:256}
2019/06/13 09:02:06 [INFO] encoded CSR
2019/06/13 09:02:07 [INFO] Stored client certificate at /home/ec2-user/admin-msp/signcerts/cert.pem
2019/06/13 09:02:07 [INFO] Stored root CA certificate at /home/ec2-user/admin-msp/cacerts/ca-m-pf4j2e3dlzbqbnpdlfgh552zja-n-bggotbdzbfggjmxlfoqxbfjyru-managedblockchain-us-east-1-amazonaws-com-30002.pem
```

###MSPの証明書をコピーします
Hyperledger Fabricでは Membership Service Provider (MSP)がどのルートCAと中間CAが信頼ドメインのメンバーを定義するために信頼されているかを識別します。

このチュートリアルでは```/home/ec2-user/admin-msp```に証明書があります。このMSPは管理者メンバー用なので次のように```admincerts```にコピーします。

```
[ec2-user@ip-hoge ~]$ cp -r admin-msp/signcerts admin-msp/admincerts
```

#メンバーシップにピアノードを作成する
1. https://console.aws.amazon.com/managedblockchain/   でManaged Blockchainコンソールを開きます。
2. ネットワークを選択した後にメンバーを選択して```Create peer node```をクリックします。

<img width="849" alt="スクリーンショット 2019-06-13 18.25.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/82fc0c66-5233-8d68-458d-757c31f9c3f6.png">

こんな感じで作ります

#チャンネルの作成
Hyperledger Fabricでは元帳はチャネルの範囲内に存在します。すべてのメンバーが共通のチャネルで動作している場合は、元帳をネットワーク全体で共有できます。特定の参加者のセットのみを含めるようにチャネルを民営化することもできます。

ここでは基本のチャネルを設定します。

###Hyperledgerファブリックチャネル作成用のconfigtxの作成
configtx.yamlファイルにはチャネル構成の詳細が含まれています。詳細については[こちら](https://hyperledger-fabric.readthedocs.io/en/release-1.2/configtx.html)をみてください。

```
[ec2-user@ip-hoge ~]$ touch configtx.yaml
[ec2-user@ip-hoge ~]$ vim configtx.yaml
```
以下のように編集します
MemberIDは自分のものに変えてください

```
################################################################################
#
#   Section: Organizations
#
#   - This section defines the different organizational identities which will
#   be referenced later in the configuration.
#
################################################################################
Organizations:
    - &Org1
            # DefaultOrg defines the organization which is used in the sampleconfig
            # of the fabric.git development environment
        Name: MemberID
            # ID to load the MSP definition as
        ID: MemberId
        MSPDir: /opt/home/admin-msp
            # AnchorPeers defines the location of peers which can be used
            # for cross org gossip communication.  Note, this value is only
            # encoded in the genesis block in the Application section context    
        AnchorPeers:    
            - Host: 
              Port:    

################################################################################
#
#   SECTION: Application
#
#   - This section defines the values to encode into a config transaction or
#   genesis block for application related parameters
#
################################################################################
Application: &ApplicationDefaults
        # Organizations is the list of orgs which are defined as participants on
        # the application side of the network
    Organizations:

################################################################################
#
#   Profile
#
#   - Different configuration profiles may be encoded here to be specified
#   as parameters to the configtxgen tool
#
################################################################################
Profiles:
    OneOrgChannel:
        Consortium: AWSSystemConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
```
次のコマンドを実行してconfigtx peer blockを作成します

```
[ec2-user@ip-hoge ~]$ docker exec cli configtxgen \
-outputCreateChannelTx /opt/home/mychannel.pb \
-profile OneOrgChannel -channelID mychannel \
--configPath /opt/home/
```

###環境変数の設定
MemberIDは自分のを入れましょう
OrdieringServiceEndpointはawsのコンソールでネットワークのDetailをみて確認します
PeerEndpointはawsのコンソールでPeer NodeのDetailsをみて確認します

```
[ec2-user@ip-hoge ~]$ export MSP_PATH=/opt/home/admin-msp
[ec2-user@ip-hoge ~]$ export MSP=MemberID
[ec2-user@ip-hoge ~]$ export ORDERER=OrderingServiceEndpoint
[ec2-user@ip-hoge ~]$ export PEER=PeerEndpoint
```

私の場合はこんな感じです

```
[ec2-user@ip-hoge ~]$ export MSP_PATH=/opt/home/admin-msp
[ec2-user@ip-hoge ~]$ export MSP=m-PF4J2E3DLZBQBNPDLFGH552ZJA
[ec2-user@ip-hoge ~]$ export ORDERER=orderer.n-bggotbdzbfggjmxlfoqxbfjyru.managedblockchain.us-east-1.amazonaws.com:30001
[ec2-user@ip-hoge ~]$ export PEER=nd-symdsmwzynbozjzsuyoqatcxla.m-pf4j2e3dlzbqbnpdlfgh552zja.n-bggotbdzbfggjmxlfoqxbfjyru.managedblockchain.us-east-1.amazonaws.com:30005
```

変更を反映します

```
[ec2-user@ip-hoge ~]$ source ~/.bash_profile
```

###チャンネルを作成する

設定した環境変数と作成したconfigtx peer blockを使用してチャンネルを作成します

```
[ec2-user@ip-hoge ~]$ docker exec -e "CORE_PEER_TLS_ENABLED=true" \
-e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" \
-e "CORE_PEER_ADDRESS=$PEER" \
-e "CORE_PEER_LOCALMSPID=$MSP" \
-e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" \
cli peer channel create -c mychannel \
-f /opt/home/mychannel.pb -o $ORDERER \
--cafile /opt/home/managedblockchain-tls-chain.pem --tls
```
###あなたのピアノードをチャンネルに参加させる

```
[ec2-user@ip-hoge ~]$ docker exec -e "CORE_PEER_TLS_ENABLED=true" \
-e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" \
-e "CORE_PEER_ADDRESS=$PEER" \
-e "CORE_PEER_LOCALMSPID=$MSP" \
-e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" \
cli peer channel join -b mychannel.block \
-o $ORDERER --cafile /opt/home/managedblockchain-tls-chain.pem --tls
```

#Chaincodeをインストールして実行する
###Chaincodeをインストールする
サンプルのチェーンコードをピアノードにインストールします

```
[ec2-user@ip-hoge ~]$ docker exec -e "CORE_PEER_TLS_ENABLED=true" \
-e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" \
-e "CORE_PEER_LOCALMSPID=$MSP" \
-e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" \
-e "CORE_PEER_ADDRESS=$PEER" \
cli peer chaincode install \
-n mycc -v v0 -p github.com/chaincode_example02/go
```

###チェーンコードのインスタンス化
チェーンコードをインスタンス化します

```
[ec2-user@ip-hoge ~]$ docker exec -e "CORE_PEER_TLS_ENABLED=true" \
-e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" \
-e "CORE_PEER_LOCALMSPID=$MSP" \
-e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" \
-e "CORE_PEER_ADDRESS=$PEER" \
cli peer chaincode instantiate \
-o $ORDERER -C mychannel -n mycc -v v0 \
-c '{"Args":["init","a","100","b","200"]}' \
--cafile /opt/home/managedblockchain-tls-chain.pem --tls
```
インスタンス化を確認するには次のコマンドを実行します

```
[ec2-user@ip-hoge ~]$ docker exec -e "CORE_PEER_TLS_ENABLED=true" \
-e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" \
-e "CORE_PEER_LOCALMSPID=$MSP" \
-e  "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" \
-e "CORE_PEER_ADDRESS=$PEER"  \
cli peer chaincode list --instantiated \
-o $ORDERER -C mychannel \
--cafile /opt/home/managedblockchain-tls-chain.pem --tls
```
インスタンス化されていると以下を返します

```
Get instantiated chaincodes on channel mychannel:
Name: mycc, Version: v0, Path: github.com/chaincode_example02/go, Escc: escc, Vscc: vscc
```

###チェーンコードに問い合わせる

```
 [ec2-user@ip-hoge ~]$ docker exec -e "CORE_PEER_TLS_ENABLED=true" \
-e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" \
-e "CORE_PEER_ADDRESS=$PEER" \
-e "CORE_PEER_LOCALMSPID=$MSP" \
-e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" \
cli peer chaincode query -C mychannel \
-n mycc -c '{"Args":["query","a"]}'
```
100と返ってくるはずです

```
[ec2-user@ip-hoge ~]$ docker exec -e "CORE_PEER_TLS_ENABLED=true" \
-e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" \
-e "CORE_PEER_ADDRESS=$PEER"  -e "CORE_PEER_LOCALMSPID=$MSP" \
-e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" \
cli peer chaincode invoke -C mychannel \
-n mycc -c  '{"Args":["invoke","a","b","10"]}' \
-o $ORDERER --cafile /opt/home/managedblockchain-tls-chain.pem --tls
```

100から10を引きます

```
[ec2-user@ip-hoge ~]$ docker exec -e "CORE_PEER_TLS_ENABLED=true" \
-e "CORE_PEER_TLS_ROOTCERT_FILE=/opt/home/managedblockchain-tls-chain.pem" \
-e "CORE_PEER_ADDRESS=$PEER" \
-e "CORE_PEER_LOCALMSPID=$MSP" \
-e "CORE_PEER_MSPCONFIGPATH=$MSP_PATH" \
cli peer chaincode query -C mychannel \
-n mycc -c '{"Args":["query","a"]}'
```

結果として90を返します

#感想
フルマネージドと聞いていたのでブラウザ上でポチポチしたらできるのかと思っていましたが、現状はdockerでコマンド打ちまくらないといけないようです。
ブロックチェーンエクスプローラーっぽい奴も今は用意されていないよう？なのでそこらへんは不便だなと思いました。

#参照
これみながらやりました
https://docs.aws.amazon.com/ja_jp/managed-blockchain/latest/managementguide/managed-blockchain-get-started-tutorial.html